summaryrefslogtreecommitdiff
path: root/fftools
Commit message (Collapse)AuthorAge
* fftools: use av_dict_get_stringMarvin Scholz2022-12-01
| | | | | | | | Instead of manually assembling the string, use av_dict_get_string which handles things like proper escaping too (even though it is not yet needed here). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* fftools: use av_dict_iterateMarvin Scholz2022-12-01
| | | | Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* fftools/ffmpeg: cosmeticsAnton Khirnov2022-11-28
| | | | | Reindent after previous commit and break/split some lines as appropriate.
* fftools/ffmpeg: remove a useless inner blockAnton Khirnov2022-11-28
| | | | | adjust_frame_pts_to_encoder_tb() is so small that this serves no useful purpose.
* fftools/ffmpeg: drop an always-false checkAnton Khirnov2022-11-28
|
* fftools/ffmpeg: only convert video frame pts if we have a frameAnton Khirnov2022-11-28
| | | | | Calling adjust_frame_pts_to_encoder_tb() with a NULL frame does not perform a meaningful action.
* fftools/ffmpeg: call check_recording_time() with actual frame ptsAnton Khirnov2022-11-28
| | | | Not its estimated value that will not necessarily be used.
* fftools/ffmpeg: stop calling adjust_frame_pts_to_encoder_tb() for audioAnton Khirnov2022-11-28
| | | | | Almost none of that function's complexity is useful for audio, it can be replaced by a simple av_rescale_q().
* fftools/ffmpeg: set AVFrame.time_base after filteringAnton Khirnov2022-11-28
| | | | | | Makes it easier to track what timebase are the frame timestamps in and allows to stop accessing filters in code that shouldn't deal with filtering.
* fftools/ffmpeg: move logging filtered frame timestampsAnton Khirnov2022-11-28
| | | | | Do it right after the frame is received from the filtergraph. This is a more logical place for this and will simplify future commits.
* fftools/ffmpeg: avoid storing full forced keyframe specAnton Khirnov2022-11-28
| | | | | It is not needed after the spec is parsed. Also avoids ugly string comparisons for each video frame.
* fftools/ffmpeg: parse forced keyframes in of_open()Anton Khirnov2022-11-28
| | | | Allows to remove the ugly of_get_chapters() wrapper.
* fftools/ffmpeg: store forced keyframe pts in AV_TIME_BASE_QAnton Khirnov2022-11-28
| | | | | | | | | | Rather than the encoder timebase. Since the times are parsed as microseconds, this will not reduce precision, except possibly when chapter times are used and the chapter timebase happens to be better aligned with the encoder timebase, which is unlikely. This will allow parsing the keyframe times earlier (before encoder timebase is known) in future commits.
* fftools/ffmpeg: move force-keyframe-related vars to a separate structAnton Khirnov2022-11-28
| | | | | | There are 8 of them and they are typically used together. Allows to pass just this struct to forced_kf_apply(), which makes it clear that the rest of the OutputStream is not accessed there.
* fftools/ffmpeg: stop explicitly closing decodersAnton Khirnov2022-11-28
| | | | | It serves no purpose, they will be closed and freed in avcodec_free_context() called from ist_free().
* fftools/ffmpeg_mux_init: postpone matching -disposition to streamsAnton Khirnov2022-11-23
| | | | | | | | | Do it in set_dispositions() rather than during stream creation. Since at this point all other stream information is known, this allows setting disposition based on metadata, which implements #10015. This also avoids an extra allocated string in OutputStream that was unused after of_open().
* fftools/ffmpeg: _-prefix variables in MATCH_PER_STREAM_OPT()Anton Khirnov2022-11-23
| | | | Avoids conflicts, e.g. when 'i' is used in the outvar expression.
* fftools/ffmpeg: declare loop variables inside loops in transcode_init()Anton Khirnov2022-11-23
|
* fftools/ffmpeg: do not assume input streams existAnton Khirnov2022-11-23
| | | | | There can be zero input streams, with input provided by lavfi complex filtergraphs.
* fftools/ffmpeg: remove the input_streams globalAnton Khirnov2022-11-23
| | | | | | | | | Replace it with an array of streams in each InputFile. This is a more accurate reflection of the actual relationship between InputStream and InputFile. Analogous to what was previously done to output streams in 7ef7a22251b852faab9404c85399ba8ac5dfbdc3.
* fftools/ffmpeg_mux_init: simplify inner loop in map_auto_{video,audio}Anton Khirnov2022-11-23
| | | | Skip unusable streams early and do not compute any scores for them.
* fftools/ffmpeg: replace OutputStream.source_index with a pointer to InputStreamAnton Khirnov2022-11-23
| | | | | This is simpler. The indirection via an index exists for historical reasons that longer apply.
* fftools/ffmpeg: stop inventing fake source informationAnton Khirnov2022-11-23
| | | | | | This code was supposed to affect copying stream dispositions, but it does not achieve that after bd55552d69, since dispositions are set earlier.
* fftools/ffmpeg: drop an arbitrary conditionAnton Khirnov2022-11-23
| | | | | | Encoding init code will currently fall back to a 25fps default when no framerate is known or specified, but only if there is a known source input stream. There is no good reason for this condition, so drop it.
* fftools/ffmpeg: move freeing an input stream into a separate functionAnton Khirnov2022-11-23
|
* fftools/ffmpeg_demux: set default hwaccel_output_format for mediacodecZhao Zhili2022-11-21
| | | | Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
* fftools/ffmpeg_mux_init: drop an always-false checkAnton Khirnov2022-11-17
| | | | It cannot be true since 1959351aecf. Effectively reverts 6a3833e1411.
* fftools/ffmpeg_mux_init: use av_dict_iterate() where appropriateAnton Khirnov2022-11-17
|
* fftools/ffmpeg_mux_init: do not call av{codec,format}_get_class() repeatedlyAnton Khirnov2022-11-17
|
* fftools/ffmpeg_mux_init: move validating codec avoptions to a separate functionAnton Khirnov2022-11-17
|
* fftools/ffmpeg: move OutputStream.max_frames to MuxStreamAnton Khirnov2022-11-17
| | | | It no longer needs to be visible outside of the muxing code.
* fftools/ffmpeg: stop handling max_frames in do_video_out()Anton Khirnov2022-11-17
| | | | | | | | Frame limiting is now handled using sync queues. This code prevents the sync queue from triggering EOF, resulting in unnecessarily many frames being decoded, filtered, and then discarded. Found-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
* fftools/ffmpeg_mux_init: move more code from of_open() to create_streams()Anton Khirnov2022-11-17
| | | | | | Specificaly, the of_add_attachments() call (which can add attachment streams to the output) and the check whether the output file contains any streams. They both logically belong in create_streams().
* fftools/ffmpeg: simplify ost_iter()Anton Khirnov2022-11-17
| | | | | | | The inner loop never goes through more than 1 iteration, and so can be replaced by an if(). Found-by: Andreas Rheinhardt
* fftools/ffmpeg: make demuxing with one file always blockingAnton Khirnov2022-11-16
|
* fftools/ffmpeg_[de]mux: constify all uses of OptionsContextAnton Khirnov2022-11-16
|
* fftools/ffmpeg_mux_init: stop using OptionsContext as storage in copy_metadata()Anton Khirnov2022-11-16
| | | | | It should be input-only to this code. Will allow making it const in future commits.
* fftools/ffmpeg_mux_init: drop a duplicated block in copy_metadata()Anton Khirnov2022-11-16
| | | | It does the same thing as the block right below it.
* fftools/ffprobe: support 2D arrays in print_list_fmt()James Almer2022-11-15
| | | | | | Should fix undefined behavior. Signed-off-by: James Almer <jamrial@gmail.com>
* fftools/ffprobe: Loop over correct number of streams when flushing decodersDerek Buitenhuis2022-11-07
| | | | | | | | | | | | | Some formats like FLV can dynamically add streams during packet reading. FFprobe does check for this and reallocates the global stream info, but does not reallocate InputFrame's streams and decoders when this happens, which, as a result, could have caused flushing to occur on an out of bounds stream index, since the flush loop iterates over fmt_ctx's nb_streams, and not ifile's, despite using ifile's streams. This fixes an out of bounds read and segfult. Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
* ffmpeg: fix implementation of updated input start timeGyan Doshi2022-11-03
| | | | | | | | | | The current adjustment of input start times just adjusts the tsoffset. And it does so, by resetting the tsoffset to nullify the new start time. This leads to breakage of -copyts, ignoring of input_ts_offset, breaking of -isync as well as breaking wrap correction. Fixed by taking cognizance of these parameters, and by correcting start times just before sync offsets are applied.
* ffmpeg: shift start time correction to ffmpeg_optGyan Doshi2022-11-03
| | | | | In preparation for applying start time correction that accounts for all factors such as copyts, input_ts_offset ..etc
* fftools/ffmpeg_demux: stop modifying OptionsContextAnton Khirnov2022-10-25
| | | | It should be input-only to this code.
* fftools/ffmpeg_mux_init: stop modifying OptionsContext.*_disableAnton Khirnov2022-10-25
| | | | | | | | | | | The current code will override the *_disable fields (set by -vn/-an options) when creating output streams for unlabeled complex filtergraph outputs, in order to disable automatic mapping for the corresponding media type. However, this will apply not only to automatic mappings, but to manual ones as well, which should not happen. Avoid this by adding local variables that are used only for automatic mappings.
* fftools/ffmpeg_mux_init: move code creating streams into a new functionAnton Khirnov2022-10-25
| | | | | Makes it easy to see where all the streams are created. Will also be useful in the following commit.
* fftools/ffmpeg_mux_init: stop modifying some OptionsContext fieldsAnton Khirnov2022-10-25
| | | | | | Specifically recording_time and stop_time - use local variables instead. OptionsContext should be input-only to this code. Will allow making it const in future commits.
* fftools/ffmpeg_mux_init: constify metadata specifier argumentsAnton Khirnov2022-10-25
|
* fftools/ffmpeg_mux_init: avoid modifying OptionsContext.chapters_input_fileAnton Khirnov2022-10-25
| | | | | Use a local variable instead. This will allow making OptionsContext const in future commits.
* fftools/ffmpeg: factor out copying metadata/chapters from of_open()Anton Khirnov2022-10-25
| | | | | This code shares variables like OptionsContext.metadata_*_manual, so it makes sense to group it together.
* fftools/ffmpeg_demux: log when the demuxer thread terminatesAnton Khirnov2022-10-25
| | | | Similar to what is done for muxing, may be useful for debugging.