Anton Khirnov
5d58a35f98
fftools/ffmpeg: deprecate the -top option
...
It is badly named (should have been -top_field_first, or at least -tff),
underdocumented and underspecified, and (most importantly) entirely
redundant with the setfield filter.
1 year ago
Anton Khirnov
3c397a1d46
fftools/ffmpeg: move sending filtergraph commands to a separate function
...
Stop accessing filtergraph internals from keyboard reading code.
1 year ago
Anton Khirnov
bff48e8d69
fftools/ffmpeg_mux: rename of_close() to of_free()
...
This function is primarily a destructor for OutputFile, the underlying
AVIOContext is normally closed earlier (right after writing the
trailer).
1 year ago
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.
1 year ago
Anton Khirnov
83ace80bfd
fftools/ffmpeg: return an error from MATCH_PER_STREAM_OPT() instead of aborting
1 year ago
Anton Khirnov
2f155b18a1
fftools/ffmpeg: return an error from assert_avoptions() instead of aborting
...
Rename it to check_avoptions().
1 year ago
Anton Khirnov
6c6f13baf3
fftools/ffmpeg: return errors from find_codec_or_die() instead of aborting
...
Rename the function to just find_codec().
1 year ago
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.
1 year ago
Anton Khirnov
5ba7aa2ce8
fftools/ffmpeg_filter: return error codes from fg_create() instead of aborting
1 year ago
Anton Khirnov
8815adfe75
fftools/ffmpeg_filter: replace remaining exit_program() with error codes
1 year ago
Anton Khirnov
ab16e324ea
fftools/ffmpeg_filter: return error codes from ofilter_bind_ost() instead of aborting
1 year ago
Anton Khirnov
e0f4259689
fftools/ffmpeg_mux: return errors from of_output_packet() instead of aborting
1 year ago
Anton Khirnov
43bcf631d0
fftools/ffmpeg_enc: return errors from enc_flush() instead of aborting
1 year ago
Anton Khirnov
80a64800ea
fftools/ffmpeg_enc: return errors from enc_frame() instead of aborting
1 year ago
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.
1 year ago
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'.
1 year ago
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.
1 year ago
Anton Khirnov
75d0af388f
fftools/ffmpeg_filter: make OutputFilter.filter private
...
It should not be accessed from outside of filtering code.
1 year ago
Anton Khirnov
c328bff4da
fftools/ffmpeg_enc: return errors from enc_subtitle() instead of aborting
1 year ago
Anton Khirnov
2e742a2c3c
fftools/ffmpeg_mux: return errors from of_streamcopy() instead of aborting
1 year ago
Anton Khirnov
cce294638b
fftools/ffmpeg: return errors from assert_file_overwrite() instead of aborting
1 year ago
Anton Khirnov
432399780a
fftools/ffmpeg_filter: make OutputFile.{formats,ch_layouts,sample_rates} private
...
They are not used outside of the filtering code.
1 year ago
Anton Khirnov
a3ab5bf80d
fftools/ffmpeg_filter: make OutputFile.width,height private
...
They are not used outside of the filtering code.
1 year ago
Anton Khirnov
c19aa9c28f
fftools/ffmpeg_filter: make OutputFile.ch_layout private
...
It is not used outside of the filtering code.
1 year ago
Anton Khirnov
42f3f54cf4
fftools/ffmpeg_filter: make OutputFile.format/sample_rate private
...
They are not used outside of the filtering code.
1 year ago
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.
1 year ago
Anton Khirnov
fa717baaa5
fftools/ffmpeg_enc: constify the subtitle passed to enc_subtitle()
1 year ago
Anton Khirnov
e89a6d1089
fftools/ffmpeg_dec: move InputStream.prev_sub to Decoder
...
It does not need to be visible outside of decoding code.
1 year ago
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.
1 year ago
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.
1 year ago
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.
1 year ago
Anton Khirnov
1bdd53e2f9
fftools/ffmpeg_filter: make configure_filtergraph() static
...
It is no longer used outside of ffmpeg_filter.
1 year ago
Anton Khirnov
a7aa05c599
fftools/ffmpeg_filter: add an AVClass to FilterGraph
...
Use it for logging.
1 year ago
Anton Khirnov
1adad44fc7
fftools/ffmpeg_dec: move InputStream.hwaccel_pix_fmt to Decoder
...
It is purely decoder-internal state.
1 year ago
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.
1 year ago
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.
1 year ago
Anton Khirnov
df81fb46ee
fftools/ffmpeg_dec: simplify process_subtitle()
...
Its got_output argument always points to 1.
1 year ago
Anton Khirnov
e9eb44ed88
fftools/ffmpeg_dec: drop always-0 InputStream.prev_sub.ret
1 year ago
Anton Khirnov
141d11cb3c
fftools/ffmpeg_mux: make OutputStream.pkt private
...
It is no longer used outside of muxing code.
1 year ago
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.
1 year ago
Anton Khirnov
568d414074
fftools/ffmpeg: attach filter framerate to frames
...
This way the encoder does not need to reach backward into the filter.
1 year ago
Anton Khirnov
9630341073
fftools/ffmpeg: factor out attaching FrameData to a frame
...
Will be useful in following commits.
1 year ago
Anton Khirnov
ad14bdbcfd
fftools/ffmpeg_filter: drop a write-only variable
1 year ago
Anton Khirnov
ba1141d8a9
fftools/ffmpeg_enc: move nb_frames{dup,drop} globals into OutputStream
1 year ago
Anton Khirnov
2674532eee
fftools/ffmpeg_filter: constify the argument of filtergraph_is_simple()
1 year ago
Anton Khirnov
3bfc2c589a
fftools/ffmpeg_filter: make InputStream.filter private
...
It is no longer accessed outside of ffmpeg_filter.
1 year ago
Anton Khirnov
5924b70075
fftools/ffmpeg_filter: make ifilter_has_all_input_formats() static
...
It is no longer used outside ffmpeg_filter.
1 year ago
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.
1 year ago
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.
1 year ago
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.
1 year ago