summaryrefslogtreecommitdiff
path: root/fftools
Commit message (Collapse)AuthorAge
* fftools/ffmpeg: add special syntax for loading filter options from fileslavfi_opt_filesAnton Khirnov2023-01-19
| | | | TODO: elaborate
* ffprobe: expose AVAmbientViewingEnvironment side data in AVFramesJan Ekström2023-01-13
|
* fftools/ffmpeg_demux: prefer fd over pipe for seek supportZhao Zhili2023-01-11
| | | | Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
* fftools/ffprobe: prefer fd over pipe for seek supportZhao Zhili2023-01-11
| | | | Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
* fftools/ffplay: prefer fd over pipe for seek supportZhao Zhili2023-01-11
| | | | Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
* fftools/ffmpeg_demux: disable stdin interaction for fd protocolZhao Zhili2023-01-11
| | | | Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
* fftools/ffmpeg: always generate CFR output when -r is usedAnton Khirnov2023-01-10
| | | | | | | | | | | | | | | | Current code may, depending on the muxer, decide to use VSYNC_VFR tagged with the specified framerate, without actually performing framerate conversion. This is clearly wrong and against the documentation, which states unambiguously that -r should produce CFR output for video encoding. FATE test changes: * nuv-rtjpeg: replace -r with '-enc_time_base -1', which keeps the original timebase. Output frames are now produced with proper durations. * filter-mpdecimate: just drop the -r option, it is unnecessary * filter-fps-r: remove, this test makes no sense and actually produces broken VFR output (with incorrect frame durations).
* fftools/ffmpeg: reindent after previous commitAnton Khirnov2023-01-10
|
* fftools/ffmpeg: move video frame dup/drop logic into its own functionAnton Khirnov2023-01-10
|
* fftools/ffmpeg: rename a variable to be more descriptiveAnton Khirnov2023-01-10
|
* fftools/ffmpeg: fix stream id in an error message.Anton Khirnov2023-01-10
| | | | Broken in 7ef7a22251b8
* fftools/ffmpeg: stop using AVCodecContext.sample_rate in decode_audio()Anton Khirnov2023-01-10
| | | | | | | Use the decoded frame's sample_rate instead, which is the authoritative value. Drop a now-obsolete check validating AVCodecContext.sample_rate.
* 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.