Anton Khirnov
8ecbb1f9af
fftools/ffmpeg_mux: stop rescaling timestamps in of_streamcopy()
...
This function converts packet timestamps from the input stream timebase
to OutputStream.mux_timebase, which may or may not be equal to the
actual output AVStream timebase (and even when it is, this may not
always be the optimal choice due to bitstream filtering).
Just keep the timestamps in input stream timebase, they will be rescaled
as needed before bitstream filtering and/or sending the packet to the
muxer.
Move the av_rescale_delta() call for audio (needed to preserve accuracy
with coarse demuxer timebases) to write_packet.
Drop now-unused OutputStream.mux_timebase.
2023-08-30 11:53:46 +02:00
Anton Khirnov
83ace80bfd
fftools/ffmpeg: return an error from MATCH_PER_STREAM_OPT() instead of aborting
2023-07-20 20:47:46 +02:00
Anton Khirnov
2f155b18a1
fftools/ffmpeg: return an error from assert_avoptions() instead of aborting
...
Rename it to check_avoptions().
2023-07-20 20:47:46 +02:00
Anton Khirnov
6c6f13baf3
fftools/ffmpeg: return errors from find_codec_or_die() instead of aborting
...
Rename the function to just find_codec().
2023-07-20 20:40:26 +02:00
Anton Khirnov
26e1e80152
fftools/ffmpeg_opt: reimplement -streamid using a dictionary
...
This does not require an arbitrary limit on the number of streams.
Also, return error codes from opt_streamid() instead of aborting.
2023-07-20 20:40:26 +02:00
Anton Khirnov
5ba7aa2ce8
fftools/ffmpeg_filter: return error codes from fg_create() instead of aborting
2023-07-20 20:40:26 +02:00
Anton Khirnov
8815adfe75
fftools/ffmpeg_filter: replace remaining exit_program() with error codes
2023-07-20 20:39:42 +02:00
Anton Khirnov
ab16e324ea
fftools/ffmpeg_filter: return error codes from ofilter_bind_ost() instead of aborting
2023-07-20 20:30:13 +02:00
Anton Khirnov
e0f4259689
fftools/ffmpeg_mux: return errors from of_output_packet() instead of aborting
2023-07-20 20:30:13 +02:00
Anton Khirnov
43bcf631d0
fftools/ffmpeg_enc: return errors from enc_flush() instead of aborting
2023-07-20 20:30:13 +02:00
Anton Khirnov
80a64800ea
fftools/ffmpeg_enc: return errors from enc_frame() instead of aborting
2023-07-20 20:30:13 +02:00
Anton Khirnov
3a89e6d352
fftools/ffmpeg_filter: restrict reap_filters() to a single filtergraph
...
This is more natural, as all except one of its callers require
processing only one filtergraph.
2023-07-20 20:30:13 +02:00
Anton Khirnov
dff3a283cd
fftools/ffmpeg: rework -enc_time_base handling
...
Read the timebase from FrameData rather than the input stream. This
should fix #10393 and generally be more reliable.
Replace the use of '-1' to indicate demuxing timebase with the string
'demux'. Also allow to request filter timebase with
'-enc_time_base filter'.
2023-07-15 11:02:11 +02:00
Anton Khirnov
4d06742b93
fftools/ffmpeg: add more structure to FrameData
...
It now contains data from multiple sources, so group those items that
always come from the decoder. Also, initialize them to invalid values,
so that frames that did not originate from a decoder can be
distinguished.
2023-07-15 11:02:11 +02:00
Anton Khirnov
75d0af388f
fftools/ffmpeg_filter: make OutputFilter.filter private
...
It should not be accessed from outside of filtering code.
2023-07-15 11:02:11 +02:00
Anton Khirnov
c328bff4da
fftools/ffmpeg_enc: return errors from enc_subtitle() instead of aborting
2023-07-15 11:02:11 +02:00
Anton Khirnov
2e742a2c3c
fftools/ffmpeg_mux: return errors from of_streamcopy() instead of aborting
2023-07-15 11:02:11 +02:00
Anton Khirnov
cce294638b
fftools/ffmpeg: return errors from assert_file_overwrite() instead of aborting
2023-07-15 11:02:11 +02:00
Anton Khirnov
432399780a
fftools/ffmpeg_filter: make OutputFile.{formats,ch_layouts,sample_rates} private
...
They are not used outside of the filtering code.
2023-07-11 19:28:18 +02:00
Anton Khirnov
a3ab5bf80d
fftools/ffmpeg_filter: make OutputFile.width,height private
...
They are not used outside of the filtering code.
2023-07-11 19:28:18 +02:00
Anton Khirnov
c19aa9c28f
fftools/ffmpeg_filter: make OutputFile.ch_layout private
...
It is not used outside of the filtering code.
2023-07-11 19:28:18 +02:00
Anton Khirnov
42f3f54cf4
fftools/ffmpeg_filter: make OutputFile.format/sample_rate private
...
They are not used outside of the filtering code.
2023-07-11 19:28:18 +02:00
Anton Khirnov
88f80977eb
fftools/ffmpeg: use AVFrame to pass subtitles from decoders to filters
...
Allows to use the same buffering code for all media types. Will also be
important for the following commit.
2023-06-19 09:48:56 +02:00
Anton Khirnov
fa717baaa5
fftools/ffmpeg_enc: constify the subtitle passed to enc_subtitle()
2023-06-19 09:48:56 +02:00
Anton Khirnov
e89a6d1089
fftools/ffmpeg_dec: move InputStream.prev_sub to Decoder
...
It does not need to be visible outside of decoding code.
2023-06-19 09:48:56 +02:00
Anton Khirnov
a45b9d35b9
fftools/ffmpeg: move fix_sub_duration_heartbeat() to ffmpeg_dec
...
This way ffmpeg.c does not need to access InputStream.prev_sub and it
can be made private.
2023-06-19 09:48:55 +02:00
Anton Khirnov
01897c1788
fftools/ffmpeg_dec: move decoding to a separate thread
...
This is only a preparatory step to a fully threaded architecture and
does not yet make decoding truly parallel - the main thread will
currently submit a packet and wait until it has been fully processed by
the decoding thread before moving on. Decoder behavior as observed by
the rest of the program should remain unchanged. That will change in
future commits after encoders and filters are moved to threads and a
thread-aware scheduler is added.
2023-06-19 09:48:55 +02:00
Anton Khirnov
5293adb1a7
fftools/ffmpeg: attach bits_per_raw_sample information to frames
...
This way avoids encoders reaching into filters or decoders for this
information.
2023-06-19 09:48:55 +02:00
Anton Khirnov
1bdd53e2f9
fftools/ffmpeg_filter: make configure_filtergraph() static
...
It is no longer used outside of ffmpeg_filter.
2023-06-19 09:48:55 +02:00
Anton Khirnov
a7aa05c599
fftools/ffmpeg_filter: add an AVClass to FilterGraph
...
Use it for logging.
2023-06-19 09:48:55 +02:00
Anton Khirnov
1adad44fc7
fftools/ffmpeg_dec: move InputStream.hwaccel_pix_fmt to Decoder
...
It is purely decoder-internal state.
2023-06-19 09:48:55 +02:00
Anton Khirnov
174cb3accf
fftools/ffmpeg_dec: remove pointless InputStream.hwaccel_retrieve_data
...
It is always set to hwaccel_retrieve_data() from ffmpeg_hw.c, so that
function can just be called directly instead.
2023-06-19 09:48:55 +02:00
Anton Khirnov
25d96ab6c0
fftools/ffmpeg_hw: inline hwaccel_decode_init() into its caller
...
The function is now trivial and cannot fail, so all error handling in
its caller can be removed.
2023-06-19 09:48:55 +02:00
Anton Khirnov
df81fb46ee
fftools/ffmpeg_dec: simplify process_subtitle()
...
Its got_output argument always points to 1.
2023-06-19 09:48:55 +02:00
Anton Khirnov
e9eb44ed88
fftools/ffmpeg_dec: drop always-0 InputStream.prev_sub.ret
2023-06-19 09:48:55 +02:00
Anton Khirnov
141d11cb3c
fftools/ffmpeg_mux: make OutputStream.pkt private
...
It is no longer used outside of muxing code.
2023-06-05 16:16:13 +02:00
Anton Khirnov
f94957e8f4
fftools/ffmpeg_mux: simplify calling of_output_packet()
...
Use NULL packets to signal EOF instead of a separate variable. This is
made possible by the previous commit.
2023-06-05 16:16:12 +02:00
Anton Khirnov
568d414074
fftools/ffmpeg: attach filter framerate to frames
...
This way the encoder does not need to reach backward into the filter.
2023-06-05 16:15:04 +02:00
Anton Khirnov
9630341073
fftools/ffmpeg: factor out attaching FrameData to a frame
...
Will be useful in following commits.
2023-06-05 16:15:04 +02:00
Anton Khirnov
ad14bdbcfd
fftools/ffmpeg_filter: drop a write-only variable
2023-06-05 16:15:04 +02:00
Anton Khirnov
ba1141d8a9
fftools/ffmpeg_enc: move nb_frames{dup,drop} globals into OutputStream
2023-06-05 16:15:04 +02:00
Anton Khirnov
2674532eee
fftools/ffmpeg_filter: constify the argument of filtergraph_is_simple()
2023-05-31 16:20:19 +02:00
Anton Khirnov
3bfc2c589a
fftools/ffmpeg_filter: make InputStream.filter private
...
It is no longer accessed outside of ffmpeg_filter.
2023-05-31 16:20:19 +02:00
Anton Khirnov
5924b70075
fftools/ffmpeg_filter: make ifilter_has_all_input_formats() static
...
It is no longer used outside ffmpeg_filter.
2023-05-31 16:20:19 +02:00
Anton Khirnov
f8abab673c
fftools/ffmpeg: move sub2video handling to ffmpeg_filter
...
Make all relevant state per-filtergraph input, rather than per-input
stream. Refactor the code to make it work and avoid leaking memory when
a single subtitle stream is sent to multiple filters.
2023-05-31 16:20:19 +02:00
Anton Khirnov
a6d67b11f5
fftools/ffmpeg_filter: move sub2video subtitle queue to InputFilterPriv
...
This queue should be associated with a specific filtergraph input - if
a subtitle stream is sent to multiple filters then each should have its
own queue.
2023-05-31 16:20:19 +02:00
Anton Khirnov
5d530e3a72
fftools/ffmpeg_dec: move sub2video submission to ffmpeg_filter
...
This code is a sub2video analogue of ifilter_send_frame(), so it
properly belongs to the filtering code.
Note that using sub2video with more than one target for a given input
subtitle stream is currently broken and this commit does not change
that. It will be addressed in following commits.
2023-05-31 16:19:49 +02:00
Anton Khirnov
3d35b73b2a
fftools/ffmpeg: constify AVSubtitle parameters as appropriate
2023-05-31 16:15:47 +02:00
Anton Khirnov
87b576135e
fftools/ffmpeg_filter: factor out binding an output stream to OutputFilter
...
While the new function is trivial for now, it will become more useful in
future commits.
2023-05-31 16:15:47 +02:00
Anton Khirnov
7ea10bfef3
fftools/ffmpeg_filter: store just the link label in OutputFilter
...
Not the entire AVFilterInOut. This is simpler.
2023-05-31 16:15:47 +02:00