summaryrefslogtreecommitdiff
path: root/fftools/ffmpeg_opt.c
Commit message (Collapse)AuthorAge
* fftools/ffmpeg: refactor limiting output file size with -fsAnton Khirnov2022-07-23
| | | | | | Move the file size checking code to ffmpeg_mux. Use the recently introduced of_filesize(), making this code consistent with the size shown by print_report().
* fftools/ffmpeg: fix the type of limit_filesizeAnton Khirnov2022-07-23
| | | | | The option is parsed as INT64 (signed). It is also compared to the output of avio_tell(), which is also int64_t.
* fftools/ffmpeg_mux: add private muxer contextAnton Khirnov2022-07-23
| | | | | | | | Move header_written into it, which is not (and should not be) used by any code outside of ffmpeg_mux. In the future this context will contain more muxer-private state that should not be visible to other code.
* ffmpeg: add option -isyncGyan Doshi2022-07-14
| | | | | | | | | | | | This is a per-file input option that adjusts an input's timestamps with reference to another input, so that emitted packet timestamps account for the difference between the start times of the two inputs. Typical use case is to sync two or more live inputs such as from capture devices. Both the target and reference input source timestamps should be based on the same clock source. If either input lacks starting timestamps, then no sync adjustment is made.
* fftools: Remove MAX_PATH limit and switch to UTF-8 versions of fopen() and ↵Nil Admirari2022-06-21
| | | | | | getenv() Signed-off-by: Martin Storsjö <martin@martin.st>
* ffmpeg: add option fps_modeGyan Doshi2022-06-11
| | | | | | | fps_mode sets video sync per output stream. Overrides vsync for matching streams. vsync is deprecated.
* fftools/ffmpeg: fix 2pass log file namesAnton Khirnov2022-05-24
| | | | | | | Use the global stream index rather than an unrelated variable in the filename. Broken in 6d5d9246042.
* fftools: Stop using av_fopen_utf8Martin Storsjö2022-05-23
| | | | | | | | | | Provide a header based inline reimplementation of it. Using av_fopen_utf8 doesn't work outside of the libraries when built with MSVC as shared libraries (in the default configuration, where each DLL gets a separate statically linked CRT). Signed-off-by: Martin Storsjö <martin@martin.st>
* fftools/ffmpeg: store output format separately from the muxer contextAnton Khirnov2022-04-13
| | | | | | Allows accessing it without going through the muxer context. This will be useful in the following commits, where the muxer context will be hidden.
* fftools/ffmpeg: store the output file index in OutputFileAnton Khirnov2022-04-13
| | | | | Use it to simplify check_init_output_file(). Will allow further simplifications in the following commits.
* fftools/ffmpeg: pass the muxer context explicitly to some functionsAnton Khirnov2022-04-13
| | | | | Stop accessing OutputFile.ctx. This will be useful in the following commits, where it will become hidden.
* fftools/ffmpeg: drop mistakenly added empty lineAnton Khirnov2022-03-22
|
* fftools: move opt_timelimit from cmdutils to ffmpegAnton Khirnov2022-03-22
| | | | This option is only supported by ffmpeg.
* fftools/cmdutils: split common option handlers into their own fileAnton Khirnov2022-03-22
|
* ffmpeg: make the ac option set the demuxer's ch_layout AVOptionJames Almer2022-03-22
| | | | | | channels is deprecated on all supported raw demuxers. Signed-off-by: James Almer <jamrial@gmail.com>
* ffmpeg: add a ch_layout option as an alias to channel_layoutJames Almer2022-03-22
| | | | | | This ensures it's parsed as a CLI option instead of the AVCodecContext AVOption. Signed-off-by: James Almer <jamrial@gmail.com>
* ffmpeg: replace custom channel_layout code with an SpecifierOpt based oneJames Almer2022-03-22
| | | | | | This is cleaner and allows fine tuning which stream the option is applied to. Signed-off-by: James Almer <jamrial@gmail.com>
* ffmpeg: convert to new channel layout-APIJames Almer2022-03-15
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* fftools/ffmpeg_opt: Apply copyinkf for all stream typesAndreas Rheinhardt2022-03-04
| | | | | | | | | | The earlier code has ignored it for all stream types except video and subtitles, probably because audio was presumed to only consist of keyframes. Yet this assumption is not true for e.g. TrueHD. Reviewed-by: Jan Ekström <jeebjp@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* fftools/ffmpeg_opt: Simplify adding complex filtergraphAndreas Rheinhardt2022-03-03
| | | | Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* fftools/ffmpeg_opt: Simplify adding new input/output streamsAndreas Rheinhardt2022-03-03
| | | | Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* ffmpeg: flush delayed frames in codec copy scenariosJames Almer2022-02-28
| | | | | | | Bitstream filters inserted between the input and output were never drained, resulting in packets being lost if the bsf had any buffered. Signed-off-by: James Almer <jamrial@gmail.com>
* ffmpeg: switch to new FIFO APIAnton Khirnov2022-02-07
|
* ffmpeg: move setting video sync method to new_video_stream()Anton Khirnov2021-12-07
| | | | | | do_video_out() is the wrong place for it, since the necessary information is already known when creating the stream and its value should never change.
* ffmpeg: deprecate passing numbers to -vsyncAnton Khirnov2021-12-07
| | | | | There is never a reason to do this, using symbolic names is always preferred.
* ffmpeg: change vsync value to an enumAnton Khirnov2021-12-07
| | | | | Stop explicitly defining VSCFR and DROP values, which were never documented.
* fftools/ffmpeg_opt: Improve alloc/truncation checks when reading linesAndreas Rheinhardt2021-12-07
| | | | | | | | Do this by switching from the dynamic buffer API to the AVBPrint API; the former has no defined way to check for errors. This also avoids allocating an AVIOContext. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* fftools/ffmpeg_opt: Improve checks for truncation/alloc errorAndreas Rheinhardt2021-12-07
| | | | | | | | Do this by switching from the dynamic buffer API to the AVBPrint API; the former has no defined way to check for errors. This also avoids allocating an AVIOContext. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* fftools/ffmpeg: Avoid allocating+freeing frame, check allocationsAndreas Rheinhardt2021-12-05
| | | | | | Fixes a potential crash upon av_frame_alloc() failure. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* fftools/cmdutils: Make allocate_array_elem() return ptr to new elementAndreas Rheinhardt2021-12-05
| | | | Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* fftools/ffmpeg_(filter|opt): Use dedicated pointer for array elem accessAndreas Rheinhardt2021-12-05
| | | | Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* fftools/cmdutils: Atomically add elements to list of pointers, fix crashAndreas Rheinhardt2021-12-05
| | | | | | | | | | | | | | Currently, adding a (separately allocated) element to a list of pointers works by first reallocating the array of pointers and (on success) incrementing its size and only then allocating the new element. If the latter allocation fails, the size is inconsistent, i.e. array[nb_array_elems - 1] is NULL. Our cleanup code crashes in such scenarios. Fix this by adding an auxiliary function that atomically allocates and adds a new element to a list of pointers. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* ffmpeg: make -bits_per_raw_sample a per-output-stream optionAnton Khirnov2021-12-04
| | | | Also, document it and make it apply to audio in addition to video.
* fftools/ffmpeg_opt: Don't set source_index redundantlyAndreas Rheinhardt2021-11-30
| | | | | | It is already set in new_output_stream(). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* fftools/ffmpeg_opt: Don't duplicate array unnecessarilyAndreas Rheinhardt2021-11-30
| | | | Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* ffmpeg: remove ffmpeg_videotoolboxrcombs2021-11-28
| | | | | | This was almost completely redundant. The only functionality that's no longer available after this removal is the videotoolbox_pixfmt arg, which has been obsolete for several years.
* fftools/ffmpeg: Take type limitations of AVFifo API into accountAndreas Rheinhardt2021-11-26
| | | | | | | | | | | | The types used by the AVFifo API are inconsistent: av_fifo_(space|size)() returns an int; av_fifo_alloc() takes an unsigned, other parts use size_t. This commit therefore ensures that the size of the muxing_queue FIFO never exceeds INT_MAX. While just at it, also make sure not to call av_fifo_size() unnecessarily often. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* ffmpeg: drop -isync, which did nothing since 2012Anton Khirnov2021-11-23
|
* ffmpeg: drop -sameq/-samequant optionsAnton Khirnov2021-11-23
| | | | They did nothing but return an error since 2012.
* ffmpeg: drop the -tvstd optionAnton Khirnov2021-11-23
| | | | It is undocumented and has been deprecated since 2012.
* ffmpeg: drop the -vc optionAnton Khirnov2021-11-23
| | | | It is undocumented and has been deprecated since 2012.
* ffmpeg: drop the -deinterlace optionAnton Khirnov2021-11-23
| | | | It is undocumented and has been deprecated since 2013.
* ffmpeg: drop the -intra optionAnton Khirnov2021-11-23
| | | | It is undocumented and has been marked as deprecated since 2012.
* fftools/ffmpeg: Avoid temporary frameAndreas Rheinhardt2021-11-20
| | | | | | | | | | | | | | | send_frame_to_filters() sends a frame to all the filters that need said frame; for every filter except the last one this involves creating a reference to the frame, because av_buffersrc_add_frame_flags() by default takes ownership of the supplied references. Yet said function has a flag which changes its behaviour to create a reference itself. This commit uses this flag and stops creating the references itself; this allows to remove the spare AVFrame holding the temporary references; it also avoids unreferencing said frame. Reviewed-by: James Almer <jamrial@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* ffmpeg: Allocate InputStream.decoded_frame earlyJames Almer2021-11-19
| | | | | | Based on a commit by Andreas Rheinhardt. Signed-off-by: James Almer <jamrial@gmail.com>
* ffmpeg: Allocate (In|Out)putStream.filter_frame earlyJames Almer2021-11-19
| | | | | | Based on a commit by Andreas Rheinhardt. Signed-off-by: James Almer <jamrial@gmail.com>
* fftools: Constify values from av_dict_get()Chad Fraleigh2021-11-18
| | | | | | | | Treat values returned from av_dict_get() as const, since they are internal to AVDictionary. Signed-off-by: Chad Fraleigh <chadf@triularity.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* ffmpeg: fix loosing gaps between audio frame timestamps when filteringPaul B Mahol2021-11-18
|
* ffmpeg: rewrite setting the stream dispositionAnton Khirnov2021-11-16
| | | | | | | | | | | | | | | | | | | | | Currently, the code doing this is spread over several places and may behave in unexpected ways. E.g. automatic 'default' marking is only done for streams fed by complex filtergraphs. It is also applied in the order in which the output streams are initialized, which is effectively random. Move processing the dispositions at the end of open_output_file(), when we already have all the necessary information. Apply the automatic default marking only if no explicit -disposition options were supplied by the user, and apply it to the first stream of each type (excluding attached pics) when there is more than one stream of that type and no default markings were copied from the input streams. Explicitly document the new behavior. Changes the results of some tests, where the output file gets a default disposition, while it previously did not.
* fftools/ffmpeg_opt: Fix copyinkf option name in warning messageAndreas Rheinhardt2021-11-10
| | | | | Reviewed-by: Jan Ekström <jeebjp@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>