Commit Graph
100 Commits
Author SHA1 Message Date
Nicolas George a8305b0ea3 lavfi/testsrc2: fix hang with very small sizes.
Move a subtraction to the other side of the equal to avoid overflows.
2017-10-31 09:17:28 +01:00
Nicolas GeorgeandJan Ekström 158a79c31d lavf/aviobuf: return EINVAL when reading from a write-only context.
Signed-off-by: Nicolas George <george@nsup.org>
2017-10-29 19:40:52 +02:00
Nicolas GeorgeandJan Ekström a606f27f4c lavf/avio: temporarily accept 0 as EOF.
Print a warning to let applicatios fix their use.
After a deprecation period, check with a low-level assert.
Also make the constraint explicit in the doxygen comment.

Signed-off-by: Nicolas George <george@nsup.org>
2017-10-29 19:40:52 +02:00
Nicolas GeorgeandJan Ekström bfb1a94625 examples/avio_reading: return AVERROR_EOF at EOF.
Signed-off-by: Nicolas George <george@nsup.org>
2017-10-29 19:40:52 +02:00
Nicolas George 549ef6ef9a lavfi/framesync: remove dead code.
Fix CID 1416960.
2017-09-12 12:30:40 +02:00
Nicolas George 9bad5e5319 lavfi/framesync: reword repeatlast option help. 2017-09-12 11:14:25 +02:00
Nicolas George 064c9d45ff doc: update filter_design.txt. 2017-09-12 11:03:51 +02:00
Nicolas George 5f5dcf44e3 lavfi: rename framesync2 to framesync. 2017-09-12 11:03:51 +02:00
Nicolas George 1b8e061cc5 lavfi: remove framesync. 2017-09-12 11:03:51 +02:00
Nicolas George 61b0b03f3f lavfi/af_sidechaincompress: use helper macros. 2017-09-12 11:03:50 +02:00
Nicolas George 567d318b1c lavfi/af_agate: use helper macros. 2017-09-12 11:03:50 +02:00
Nicolas George 76613618d9 lavfi: add helper functions and macros for activate. 2017-09-12 11:03:50 +02:00
Nicolas George 8043d8eb3b ffmpeg: send EOF pts to filters. 2017-09-08 10:31:07 +02:00
Nicolas George 5ba2aef6ec lavfi/buffersrc: add av_buffersrc_close(). 2017-09-08 10:31:01 +02:00
Nicolas George 36c111c40f ffmpeg: use reordered duration for stream PTS. 2017-09-08 10:21:59 +02:00
Nicolas George dfed8e2cbb ffmpeg: rename a variable.
Makes the reason of the "FIXME" comment more obvious.
Avoid name conflicts for the next commit.
2017-09-08 10:21:59 +02:00
Nicolas George f5a9c63401 lavfi: guess a timestamp for compat status change.
Use the earliest input with the same status.
If that fails, print a warning and use the earliest source.
With this change, simple filter forward correctly the timestamp
of EOF.
Filters that are supposed to change it should be updated to
actually forward it.
2017-09-08 10:21:59 +02:00
Nicolas George 7302d5e325 lavfi: bump minor version after change in options. 2017-08-29 15:46:36 +02:00
Nicolas George 844bc0d89e doc/filters: document framesync options. 2017-08-29 10:19:38 +02:00
Nicolas George 607900c905 lavfi: remove dualinput. 2017-08-29 10:19:04 +02:00
Nicolas George ef2176473d vf_ssim: convert to framesync2. 2017-08-29 10:19:04 +02:00
Nicolas George 3bd11df459 lavfi/vf_psnr: convert to framesync2. 2017-08-29 10:19:04 +02:00
Nicolas George 23000c3de5 lavfi/vf_paletteuse: convert to framesync2. 2017-08-29 10:19:04 +02:00
Nicolas George eacb3ec961 lavfi/vf_lut3d: convert to framesync2. 2017-08-29 10:19:04 +02:00
Nicolas George a8ab52fae7 lavfi/vf_libvmaf: convert to framesync2.
After this commit, the code compiles, but on my setup it
segfaults before and after. It also prints the very worrying
warning:

src/libavfilter/vf_libvmaf.c:161:66: warning: passing argument 4 of ‘compute_vmaf’ from incompatible pointer type [-Wincompatible-pointer-types]
/tmp/i/include/libvmaf.h:26:8: note: expected ‘int (*)(float *, float *, float *, int,  void *)’ but argument is of type ‘int (*)(float *, float *, float *, int,  double *, void *)’

==12116== Thread 6:
==12116== Conditional jump or move depends on uninitialised value(s)
==12116==    at 0x526D432: cons_ (ocval.h:1188)
==12116==    by 0x526D432: GenericIT (ocval.h:1119)
==12116==    by 0x526D432: OC::TranslateForNumPyClassesToArray(OC::Val&) (pickleloader.h:92)
==12116==    by 0x5211F5D: loads (pickleloader.h:566)
==12116==    by 0x5211F5D: LoadValFromArray (chooseser.h:290)
==12116==    by 0x5211F5D: LoadValFromFile (chooseser.h:405)
==12116==    by 0x5211F5D: _read_and_assert_model(char const*, OC::Val&, OC::Val&, OC::Val&, OC::Val&, OC::Val&, OC::Val&) (vmaf.cpp:77)
==12116==    by 0x5212B0F: VmafRunner::run(Asset, int (*)(float*, float*, float*, int, void*), void*, bool, bool, bool, bool, bool) (vmaf.cpp:149)
==12116==    by 0x52165B6: RunVmaf(char const*, int, int, int (*)(float*, float*, float*, int, void*), void*, char const*, char const*, char const*, bool, bool, bool, bool, bool, char const*) (vmaf.cpp:645)
==12116==    by 0x518AFFF: compute_vmaf_score (vf_libvmaf.c:161)
==12116==    by 0x518AFFF: call_vmaf (vf_libvmaf.c:170)
==12116==    by 0x7967493: start_thread (pthread_create.c:333)
==12116==    by 0x7F69A8E: clone (clone.S:97)
==12116==
==12116== Conditional jump or move depends on uninitialised value(s)
==12116==    at 0x526D432: cons_ (ocval.h:1188)
==12116==    by 0x526D432: GenericIT (ocval.h:1119)
==12116==    by 0x526D432: OC::TranslateForNumPyClassesToArray(OC::Val&) (pickleloader.h:92)
==12116==    by 0x526D50D: OC::TranslateForNumPyClassesToArray(OC::Val&) (pickleloader.h:94)
==12116==    by 0x5211F5D: loads (pickleloader.h:566)
==12116==    by 0x5211F5D: LoadValFromArray (chooseser.h:290)
==12116==    by 0x5211F5D: LoadValFromFile (chooseser.h:405)
==12116==    by 0x5211F5D: _read_and_assert_model(char const*, OC::Val&, OC::Val&, OC::Val&, OC::Val&, OC::Val&, OC::Val&) (vmaf.cpp:77)
==12116==    by 0x5212B0F: VmafRunner::run(Asset, int (*)(float*, float*, float*, int, void*), void*, bool, bool, bool, bool, bool) (vmaf.cpp:149)
==12116==    by 0x52165B6: RunVmaf(char const*, int, int, int (*)(float*, float*, float*, int, void*), void*, char const*, char const*, char const*, bool, bool, bool, bool, bool, char const*) (vmaf.cpp:645)
==12116==    by 0x518AFFF: compute_vmaf_score (vf_libvmaf.c:161)
==12116==    by 0x518AFFF: call_vmaf (vf_libvmaf.c:170)
==12116==    by 0x7967493: start_thread (pthread_create.c:333)
==12116==    by 0x7F69A8E: clone (clone.S:97)
==12116==
==12116== Conditional jump or move depends on uninitialised value(s)
==12116==    at 0x526D432: cons_ (ocval.h:1188)
==12116==    by 0x526D432: GenericIT (ocval.h:1119)
==12116==    by 0x526D432: OC::TranslateForNumPyClassesToArray(OC::Val&) (pickleloader.h:92)
==12116==    by 0x526D50D: OC::TranslateForNumPyClassesToArray(OC::Val&) (pickleloader.h:94)
==12116==    by 0x526D50D: OC::TranslateForNumPyClassesToArray(OC::Val&) (pickleloader.h:94)
==12116==    by 0x5211F5D: loads (pickleloader.h:566)
==12116==    by 0x5211F5D: LoadValFromArray (chooseser.h:290)
==12116==    by 0x5211F5D: LoadValFromFile (chooseser.h:405)
==12116==    by 0x5211F5D: _read_and_assert_model(char const*, OC::Val&, OC::Val&, OC::Val&, OC::Val&, OC::Val&, OC::Val&) (vmaf.cpp:77)
==12116==    by 0x5212B0F: VmafRunner::run(Asset, int (*)(float*, float*, float*, int, void*), void*, bool, bool, bool, bool, bool) (vmaf.cpp:149)
==12116==    by 0x52165B6: RunVmaf(char const*, int, int, int (*)(float*, float*, float*, int, void*), void*, char const*, char const*, char const*, bool, bool, bool, bool, bool, char const*) (vmaf.cpp:645)
==12116==    by 0x518AFFF: compute_vmaf_score (vf_libvmaf.c:161)
==12116==    by 0x518AFFF: call_vmaf (vf_libvmaf.c:170)
==12116==    by 0x7967493: start_thread (pthread_create.c:333)
==12116==    by 0x7F69A8E: clone (clone.S:97)
==12116==
==12116== Use of uninitialised value of size 8
==12116==    at 0x518AC79: read_frame_8bit (vf_libvmaf.c:147)
==12116==    by 0x52AB5E8: combo (combo.c:149)
==12116==    by 0x5212E95: VmafRunner::run(Asset, int (*)(float*, float*, float*, int, void*), void*, bool, bool, bool, bool, bool) (vmaf.cpp:278)
==12116==    by 0x52165B6: RunVmaf(char const*, int, int, int (*)(float*, float*, float*, int, void*), void*, char const*, char const*, char const*, bool, bool, bool, bool, bool, char const*) (vmaf.cpp:645)
==12116==    by 0x518AFFF: compute_vmaf_score (vf_libvmaf.c:161)
==12116==    by 0x518AFFF: call_vmaf (vf_libvmaf.c:170)
==12116==    by 0x7967493: start_thread (pthread_create.c:333)
==12116==    by 0x7F69A8E: clone (clone.S:97)
==12116==
==12116== Invalid read of size 4
==12116==    at 0x518AC79: read_frame_8bit (vf_libvmaf.c:147)
==12116==    by 0x52AB5E8: combo (combo.c:149)
==12116==    by 0x5212E95: VmafRunner::run(Asset, int (*)(float*, float*, float*, int, void*), void*, bool, bool, bool, bool, bool) (vmaf.cpp:278)
==12116==    by 0x52165B6: RunVmaf(char const*, int, int, int (*)(float*, float*, float*, int, void*), void*, char const*, char const*, char const*, bool, bool, bool, bool, bool, char const*) (vmaf.cpp:645)
==12116==    by 0x518AFFF: compute_vmaf_score (vf_libvmaf.c:161)
==12116==    by 0x518AFFF: call_vmaf (vf_libvmaf.c:170)
==12116==    by 0x7967493: start_thread (pthread_create.c:333)
==12116==    by 0x7F69A8E: clone (clone.S:97)
==12116==  Address 0x40 is not stack'd, malloc'd or (recently) free'd
==12116==
==12116==
==12116== Process terminating with default action of signal 11 (SIGSEGV)
==12116==  Access not within mapped region at address 0x40
==12116==    at 0x518AC79: read_frame_8bit (vf_libvmaf.c:147)
==12116==    by 0x52AB5E8: combo (combo.c:149)
==12116==    by 0x5212E95: VmafRunner::run(Asset, int (*)(float*, float*, float*, int, void*), void*, bool, bool, bool, bool, bool) (vmaf.cpp:278)
==12116==    by 0x52165B6: RunVmaf(char const*, int, int, int (*)(float*, float*, float*, int, void*), void*, char const*, char const*, char const*, bool, bool, bool, bool, bool, char const*) (vmaf.cpp:645)
==12116==    by 0x518AFFF: compute_vmaf_score (vf_libvmaf.c:161)
==12116==    by 0x518AFFF: call_vmaf (vf_libvmaf.c:170)
==12116==    by 0x7967493: start_thread (pthread_create.c:333)
==12116==    by 0x7F69A8E: clone (clone.S:97)
2017-08-29 10:19:04 +02:00
Nicolas George c1d8d33a51 lavfi/vf_blend: convert to framesync2. 2017-08-29 10:19:04 +02:00
Nicolas George 878fd0545a lavfi/vf_overlay: use framesync2 options. 2017-08-29 10:19:04 +02:00
Nicolas George 05a23b2565 lavfi/framesync2: add common options.
Also add functions and macros to help filters chaining these
options to their own.
2017-08-29 10:19:04 +02:00
Nicolas George dfa3aaa22a lavfi: search options on child objects.
The child objects must be allocated and inited in the
preinit() callback.
2017-08-29 10:19:04 +02:00
Nicolas George f8d7b5febb lavfi: add a preinit callback to filters.
It is necessary for filters with child objects, to set the class
and default options values.
2017-08-29 10:19:04 +02:00
Nicolas George 19804024d5 lavfi/vf_overlay: move to framesync2. 2017-08-29 10:19:04 +02:00
Nicolas George 0ae8df4109 lavfi/framesync2: add dualinput helper functions. 2017-08-29 10:19:04 +02:00
Nicolas George 6bde475cf2 lavfi/f_streamselect: convert to framesync2. 2017-08-29 10:19:04 +02:00
Nicolas George 8b2cd8e0e4 lavfi/vf_displace: move to "activate" design. 2017-07-30 12:27:17 +02:00
Nicolas George 5dbb111900 lavfi/vf_hysteresis: move to "activate" design. 2017-07-30 12:27:13 +02:00
Nicolas George dbc4af862e lavfi/vf_lut2: move to "activate" design. 2017-07-30 12:27:10 +02:00
Nicolas George 27d8af03ae lavfi/vf_maskedclamp: move to "activate" design. 2017-07-30 12:27:06 +02:00
Nicolas George 0bc331bd57 lavfi/vf_mergeplanes: move to "activate" design. 2017-07-30 12:27:03 +02:00
Nicolas George a5e3b0c193 lavfi/vf_maskedmerge: move to "activate" design. 2017-07-30 12:27:00 +02:00
Nicolas George 620608467f lavfi/vf_midequalizer: move to "activate" design. 2017-07-30 12:26:57 +02:00
Nicolas George b894415a70 lavfi/vf_premultiply: move to "activate" design. 2017-07-30 12:26:53 +02:00
Nicolas George dbf7a67094 lavfi/vf_remap: move to "activate" design. 2017-07-30 12:26:50 +02:00
Nicolas George d07e25de76 lavfi/vf_threshold: move to "activate" design.
Also fix missing dependency.
2017-07-30 12:26:43 +02:00
Nicolas George 0dd8320e16 lavfi/vf_stack: move to "activate" design. 2017-07-30 12:26:34 +02:00
Nicolas George 4e0e9ce2dc lavfi/framesync2: implement "activate" design.
With this helper API, filters that used the first framesync
helper API can easily be changed to use the new and more
extensible design for filters with a single activate() callback.
2017-07-30 12:24:03 +02:00
Nicolas George ed1c884b9e lavfi: add outlink helper functions.
These wrappers cost nothing, they make the namespace more
consistent and they will be useful if/when locking becomes
necessary.
2017-07-30 12:24:00 +02:00
Nicolas George b77f041dff lavfi: make FFERROR_NOT_READY available to filters.
I am not entirely sure that this return code is useful,
but having and using it makes no harm.
2017-07-30 12:23:56 +02:00
Nicolas George 873306f265 lavfi/framesync2: rename all conflicting symbols. 2017-07-30 12:23:54 +02:00
Nicolas George cffea1b483 lavfi: copy framesync into framesync2.
framesync2 will be the base for the version using activate.
Most of the logic will be the same, but the code cannot be shared.
Copying the file initially without change will make the diff
easier to read.
2017-07-30 12:23:52 +02:00
Nicolas George 1daacba91f Revert "Revert "lavfi/buffersrc: push the frame deeper if requested.""
This reverts commit 04aa09c4bc
and reintroduces 0ff5567a30 that
was temporarily reverted due to minor regressions.

It also reverts e5bce8b4ce that fixed FATE refs.
The fate-ffm change is caused by field_order now being set
on the output format because the first frame arrives earlier.
The fate-mxf change is assumed to be the same.
2017-07-30 12:22:41 +02:00
Nicolas George bbc7cfbf1e lavfi/testsrc2: fix completely transparent alpha. 2017-07-25 09:27:35 +02:00
Nicolas George d790f18ac0 lavfi: print the error message when threading init fails. 2017-06-19 10:29:17 +02:00
Nicolas George 0dfb4d4b43 ffmpeg: do not report EOF on filters as an error.
Also print the error message in case of real error.
2017-04-23 14:22:22 +02:00
Nicolas George 0c20f9fcab doc/muxers: fix default value for image2 option start_number. 2017-04-04 09:15:01 +02:00
Nicolas George 383057f8e7 lavfi: make ff_framequeue_skip_samples() more useful.
Instead of just updating statistics and leaving the work to the
call site, have it actually do the work.

Also: skip the samples by updating the frame data pointers
instead of moving the samples. More efficient and avoid writing
into shared frames.
Found-By: Muhammad Faiz <mfcc64@gmail.com>
2017-01-29 18:53:11 +01:00
Nicolas George f7191ccad6 lavfi: remove stray semicolons.
Hopefully fix compilation with suncc.
2017-01-12 15:07:18 +01:00
Nicolas George aaae459a85 lavfi: reindent after previous commit. 2017-01-12 14:06:16 +01:00
Nicolas George 912969a33e lavfi/buffersink: move to the new design. 2017-01-12 14:06:16 +01:00
Nicolas George 32c59a115d lavfi: do not call ff_filter_frame() with activate.
avfilter_graph_request_oldest() does work that should be done by
either the filter or the application.

The principle of this function, calling ff_request_frame() from
outside the filter was always shaky. This version is less elegant
since it requires making special cases for each filter, but it
is more robust since it no longer calls ff_request_frame()
directly without notifying the filter.

Eventually, avfilter_graph_request_oldest() will be deprecated
for a function to just run the graph.
2017-01-12 14:06:16 +01:00
Nicolas George c619a4e525 lavfi: make two functions static.
ff_request_frame_to_filter() and ff_filter_frame_to_filter()
are only used in avfilter.c.
2017-01-12 14:06:16 +01:00
Nicolas George ae4650f0b9 lavfi: disallow ff_request_frame for filters using activate.
Having two different functions allows to have stricter tests
and detect errors earlier.
2017-01-12 14:06:16 +01:00
Nicolas George 9eb4c79afd lavfi: add ff_inlink_request_frame(). 2017-01-12 14:06:16 +01:00
Nicolas George d3cb140433 lavfi: move ff_update_link_current_pts() into the utility functions.
It does not change anything for the existing filters and makes
better code fatrorization when future code will use the utility
functions.
2017-01-12 14:06:16 +01:00
Nicolas George 7910127a8e lavfi: cosmetic: remove forward declaration. 2017-01-12 14:06:16 +01:00
Nicolas George 3ff01feda3 lavfi: add AVFilter.activate. 2017-01-12 14:06:16 +01:00
Nicolas George db4a71c0ff lavfi: use the consume helpers in ff_filter_frame_to_filter(). 2017-01-12 14:06:16 +01:00
Nicolas George d360ddf03b lavfi: add helpers to consume frames from link FIFOs. 2017-01-12 14:06:16 +01:00
Nicolas George 2e5af443c3 lavfi: pass min explicitly to samples_ready(). 2017-01-12 14:06:16 +01:00
Nicolas George e7e4c8dfbe lavfi: add ff_inlink_evaluate_timeline_at_frame(). 2017-01-12 14:06:16 +01:00
Nicolas George 0e3d2496e2 lavfi: add ff_inlink_process_commands(). 2017-01-12 14:06:16 +01:00
Nicolas George 846f142134 lavfi: merge two variables after a recent commit. 2017-01-12 14:06:16 +01:00
Nicolas George 28c62df672 lavfi: implement ff_inlink_make_frame_writable().
Unlike av_frame_is_writable(), it uses the link's alloc callback,
making direct rendering possible.

The code comes from ff_filter_frame_framed(), moved with mostly
trivial changes.
2017-01-12 14:06:16 +01:00
Nicolas George 918891e146 lavfi: export ff_filter_set_ready() to the library. 2017-01-12 14:06:16 +01:00
Nicolas George 4c24f3ac16 lavfi: add ff_inlink_acknowledge_status().
Also introduce libavfilter/filters.h for all functions needed
to implement filters.
2017-01-12 14:06:16 +01:00
Nicolas George 485617ea0f lavfi: document that AVFilterLink is not for applications. 2017-01-12 14:06:16 +01:00
Nicolas George e9ecada1d4 lavfi/tests/filtfmts: include internal.h. 2017-01-12 14:06:16 +01:00
Nicolas George 063b1a42c6 lavd/lavfi: use buffersink accessors. 2017-01-12 14:06:16 +01:00
Nicolas George 448f2972f9 ffplay: use buffersink accessors. 2017-01-12 14:06:16 +01:00
Nicolas George d9b311d44c ffmpeg: use buffersink accessors. 2017-01-12 14:06:16 +01:00
Nicolas George dbe9dbed31 lavfi/buffersink: add accessors for the stream properties.
av_buffersink_get_frame_rate() did already exist; its argument becomes const.
2017-01-12 14:06:16 +01:00
Nicolas George 0b66c456f9 lavfi, ffmpeg: simplify filter names.
The names are only used for technical output and debugging.
Make them similar to C identifiers for easier quick reading
of debug dumps.
2017-01-12 14:06:16 +01:00
Nicolas George 57789cfb9d lavf/hlsenc: fix typo in last commit. 2017-01-12 14:01:22 +01:00
Nicolas George 0ff5567a30 lavfi/buffersrc: push the frame deeper if requested.
Reduce peak memory consumption with ffmpeg in certain cases.
2016-12-24 13:18:03 +01:00
Nicolas George 3b64e3ea45 lavf/framesync: detect EOF immediately.
Fix an infinite loop in forward_status_change().
2016-12-24 13:18:02 +01:00
Nicolas George 373f21a911 lavfi: avfilter_graph_request_oldest: request a frame again before returning.
With min_samples, if a frame arrives but is too small, it clears
frame_wanted_out. In most cases, the destination filter would be
activated again later because of frame_wanted_out on its own
outputs, but not sinks.
avfilter_graph_request_oldest() is doing the work of the sink
itself, and is therefore allowed to use frame_blocked_in.
2016-12-23 15:21:43 +01:00
Nicolas GeorgeandMarton Balint 8156b5ac94 avfilter/af_amerge: detect EOF immediately
Fix an infinite loop in forward_status_change().

Signed-off-by: Nicolas George <george@nsup.org>
Signed-off-by: Marton Balint <cus@passwd.hu>
2016-12-23 03:47:43 +01:00
Nicolas George ff8b17c998 lavfi: take_samples: free frames after taking all samples. 2016-12-22 10:35:48 +01:00
Nicolas George bec8ea20c8 lavfi/framequeue: avoid empty structs.
Fix compilation on MSVC.
2016-12-20 09:37:25 +01:00
Nicolas George 02aa0701ae lavfi: make filter_frame non-recursive.
A lot of changes happen at the same time:

- Add a framequeue fifo to AVFilterLink.

- split AVFilterLink.status into status_in and status_out: requires
  changes to the few filters and programs that use it directly
  (f_interleave, split, filtfmts).

- Add a field ready to AVFilterContext, marking when the filter is ready
  and its activation priority.

- Add flags to mark blocked links.

- Change ff_filter_frame() to enqueue the frame.

- Change all filtering functions to update the ready field and the
  blocked flags.

- Update ff_filter_graph_run_once() to use the ready field.

- buffersrc: always push the frame immediately.
2016-12-18 10:38:52 +01:00
Nicolas George 62b11db0a0 lavfi: add FFFrameQueue API. 2016-12-18 10:38:52 +01:00
Nicolas George 183ce55b0d lavfi: split frame_count between input and output.
AVFilterLink.frame_count is supposed to count the number of frames
that were passed on the link, but with min_samples, that number is
not always the same for the source and destination filters.
With the addition of a FIFO on the link, the difference will become
more significant.

Split the variable in two: frame_count_in counts the number of
frames that entered the link, frame_count_out counts the number
of frames that were sent to the destination filter.
2016-11-13 10:41:16 +01:00
Nicolas George 22aa649c13 fate/colorkey: disable audio stream.
The test is not supposed to cover audio.
Also, using -vframes along with an audio stream depends on
the exact order the frames are processed by filters, it is
too much constraint to guarantee.
2016-11-13 10:41:16 +01:00
Nicolas George 0bd1be65e8 lavd/xcbgrab: do not try to create refcounted packets.
The framework will allocate a buffer and copy the data to it,
that takes time. But it avoids constently creating and
destroyng the shared memory segment, and that saves more time.

On my setup,
from ~200 to ~300 FPS at full screen (1920×1200),
from ~1400 to ~3300 at smaller size (640×480),
similar to legacy x11grab and confirmed by others.

Plus, shared memory segments are a scarce resource,
allocating potentially many is a bad idea.

Note: if the application were to drop all references to the
buffer before the next call to av_read_frame(), then passing
the shared memory segment as a refcounted buffer would be
even more efficient, but it is hard to guarantee, and it does
not happen with the ffmpeg command-line tool. Using a small
number of preallocated buffers and resorting to a copy when
the pool is exhausted would be a solution to get the better
of both worlds.
2016-11-03 21:23:55 +01:00
Nicolas George 8b05a7ffe4 lavf/udp: fix dead code.
Since d607861, service can not be NULL, only "0".
An UDP address with neither local port nor address leaves both
service and node to their default value, and POSIX specifies
that they are not allowed to be both NULL; "0" is equivalent
to an unspecified port for all currently known protocols.

Fix CID 1341570.
2016-06-03 12:46:02 +02:00
Nicolas George 0cb19c30c6 lavf/concatdec: clear extradata when inserting h264_mp4toannexb bsf.
Fix remuxing H.264-in-MP4 to Matroska, possibly others.
2016-04-26 16:58:59 +02:00
Nicolas George b8fa374fb6 lavf/concatdec: remove unrelated change during codecpar merge.
Clearing the extradata is not related to the codecpar change,
and it breaks if auto_convert is disabled.

Fix trac ticket #5461.
2016-04-26 16:58:59 +02:00
Nicolas George 962727acb4 lavfi/vf_decimate: do not compare the first frame to itself.
This is a waste of computing power and will result to 0,
making it always dropped.
Use maximum difference values instead.
2016-01-03 15:50:51 +01:00
Nicolas George 1655788712 lavfi: make request_frame() non-recursive.
Instead of calling the input filter request_frame() method,
ff_request_frame() now marks the link and returns immediately.
buffersink is changed to activate the marked filters until
a frame is obtained.
2015-12-22 16:04:30 +01:00
Nicolas George 108b4de552 lavfi: replace link.closed by link.status.
The status field can carry any error code instead of just EOF.
Also only update it through a wrapper function and provide a timestamp.
Update the few filters that used it directly.
2015-12-22 16:04:30 +01:00
Nicolas George 39a09e995d lavfi: deprecate avfilter_link_set_closed().
Applications are not supposed to mess with links,
they should close the sinks.
Furthermore, this function does not distinguish what end
of the link caused the close and does not have a timestamp.
2015-12-22 16:04:22 +01:00