Commit graph

446 commits

Author SHA1 Message Date
Sebastian Dröge
34b1eb117f avdemux: Only set stream-format for H264/H265/AAC when we have a context
Otherwise we don't know yet whether we'll have extradata/codec_data, so
can't decide on the stream-format yet.
2020-01-24 11:05:53 +00:00
Haihao Xiang
4f51000920 avivf_mux: support VP9 and AV1
Besides vp8, ff_ivf_muxer supports VP9 and AV1
2020-01-24 10:15:44 +00:00
Sebastian Dröge
c057fef347 avcodecmap: Set AAC/H264/H265 stream-format for demuxer/encoder situations if no codec_data is provided
This fixes output of the above formats from demuxers.
2020-01-24 08:50:53 +00:00
Sebastian Dröge
6c3fc7a16d avdemux: Pass the URI from the URI query to avformat_open_input()
Some demuxers make use of it in various ways, for example the HLS
demuxer.
2020-01-23 11:58:29 +02:00
Alicia Boya García
b7d450b118 gstavviddec: Limit default number of decoder threads
When the `max-threads` property is not specified, GStreamer defaults to
the amount of CPU threads in the system.

The number of threads used in avdec has a direct impact on the latency
of the decoder, which is of as many frames as threads. Therefore, big
numbers of threads can make latency levels that can be problematic in
some applications.

For this reason, ffmpeg emits a warning when more than 16 threads are
requested.

This patch limits the default number of threads to 16. This affects only
computers with more than 16 CPU threads when using avviddec without
setting `max-threads`.
2019-12-19 21:59:44 +00:00
Edward Hervey
5a9f3d4bf1 avvidenc: Fix error propagation
Instead of returning the default return value (GST_FLOW_OK), actually
return an error one (res vs ret).
2019-11-29 11:33:41 +01:00
Kevin JOLY
9e56619b10 avdemux: Fix segmentation fault if long_name is NULL
Some plugins (like libcdio) registers empty long_name field. Calling strncmp on this field leads to a segmentation fault.

Signed-off-by: Kevin Joly <joly.kevin25@gmail.com>
2019-11-04 16:14:05 +01:00
Seungha Yang
07f33470b3 avviddec: Fix huge leak caused by circular reference
AVBufferRef -> GstFFMpegVideoDecVideoFrame -> GstVideoCodecFrame -> AVBufferRef

Instead of holding additional ref there, set read-only which would not be
reused by ff_reget_buffer()

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-libav/issues/63
2019-10-29 16:29:46 +09:00
Seungha Yang
30d0674e7d avvideenc,avvidedec: Filtering hardware en/decoder by flag
... instead of filtering them by hardcoded string compare.
2019-10-25 19:48:15 +09:00
Seungha Yang
80c8c05457 avviddec: Enforce allocate new AVFrame per input frame
... if ffmpeg would reuse the allocated AVBuffer. Reused AVFrame by
the ffmpeg seems to break our decoding flow since the reused AVFrame
holds the initial opaque data (GstVideoCodecFrame in this case), so
we couldn't trace the our in/out frames.
To enforce get_buffer() call per output frame, hold another reference
to the AVBuffer in order to mark the AVBuffer as not writable.

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-libav/issues/62
2019-10-24 00:25:28 +09:00
Tim-Philipp Müller
ca478e7546 Remove autotools build system 2019-10-13 14:36:06 +01:00
Seungha Yang
40f5953828 avviddec,avcodemap: Use new helper function for map color space information
... between GStreamer and FFmpeg. Note that FFmpeg follows ISO/IEC 23001-8
defined color{matrix,transfer,primaries} values.
2019-09-24 23:52:11 +09:00
Mathieu Duponchelle
06c249cabb avvidenc: timestamp output buffers
Same approach as x264enc, with the one hour offset
2019-08-13 20:32:47 +00:00
Doug Nazar
6382be0996 avauddec: Don't warn if drain is successful 2019-08-01 16:27:35 -04:00
Mathieu Duponchelle
1e8e040fbc avviddec: improve latency calculation
When thread_type is set to FF_THREAD_FRAME, per the documentation
a latency of one frame per thread is introduced:

<https://ffmpeg.org/ffmpeg-codecs.html>, search for thread_type.

Additionally, we need in that case to calculate the automatic
number of threads ourselves, so as to accurately calculate the
latency.
2019-07-18 00:26:50 +02:00
Seungha Yang
e8f21b510a avviddec: Add thread-type property
The thread-type property allows specifying preferred
multithreading methods by user. Note that FF_THREAD_FRAME
may introduce additional latency especially on non-filesrc usecase,
since it introduces a decoding delay of (number of threads) frames.

https://bugzilla.gnome.org/show_bug.cgi?id=797254
2019-07-18 00:05:21 +02:00
Sebastian Dröge
4d3cd3983a avvidenc: Close reference context before freeing it
Otherwise we'll leak some memory.

See https://gitlab.freedesktop.org/gstreamer/gst-libav/merge_requests/32
2019-07-15 10:42:42 +03:00
Knut Andre Tidemann
456e812c28 avaudenc: fix memory leak of refcontext after finalize. 2019-07-12 14:44:12 +02:00
Sebastian Dröge
2596e5bd6f avvidenc: Also set the repeat_pict flag correctly and take the TFF flag from caps if available 2019-06-19 15:44:49 +03:00
Sebastian Dröge
6359385df5 avvidenc: Correctly signal interlaced input to ffmpeg when the input caps are interlaced
Regression from 1e4529ced2
2019-06-19 15:43:42 +03:00
Guillaume Desmottes
2e59973cca avviddec: remove cdgraphics element
It was never usable as we don't have a parser and we now have 'cdgdec'
in gst-plugins-rs.
2019-05-29 11:49:38 +05:30
Seungha Yang
2b50a0ce93 avcodecmap,avviddec: Map bt2020-10, PQ and HLG transfer functions
Map more transfer functions between Gstreamer and ffmpeg
2019-05-24 20:44:12 +09:00
Arun Raghavan
597578ca41 codecmap: Add caps for aptX and aptX-HD 2019-05-24 09:51:44 +00:00
Thibault Saunier
357a9b4a19 docs: Port to hotdoc 2019-05-13 17:00:00 -04:00
Seungha Yang
8d9b30695b avviddec: Extract HDR information if any
Convert mastering display information (a.k.a HDR static metadata) and
content light level information provided by FFMPEG to Gstreamer.
2019-05-01 23:24:56 +09:00
Yeongjin Jeong
603c78b1a1 gstav: Use libavcodec util function for version check
The version of libavutil is printed in the log instead of libavcodec
because avutil_version() returns LIBAVUTIL_VERSION_INT. This can be confusing,
so we should be replace it with avcodec_version().
2019-04-29 16:02:05 +00:00
Yeongjin Jeong
472f2ef104 avauddec: Ensure drain even if codec has not delay capabilities
There are decoders that need to be drained if they work on multi-threads,
even if AV_CODEC_CAP_DELAY is not set.
2019-04-29 15:40:08 +09:00
Yeongjin Jeong
93e2466115 avviddec: Ensure drain even if codec has not delay capabilities
There are decoders that need to be drained if they work on multi-threads,
even if AV_CODEC_CAP_DELAY is not set.
2019-04-29 15:38:42 +09:00
Sebastian Dröge
935c21a9a9 avcfg: Override type of bitrate property from int64 to int
See https://gitlab.freedesktop.org/gstreamer/gst-libav/issues/41#note_142808

The switch to the new ffmpeg property system changed the type of the
bitrate property from int to int64, which potentially breaks many
existing applications at runtime as properties are usually set via
g_object_set().

As such, override the type to int until GStreamer 2.0.
2019-04-09 16:56:20 +03:00
Aaron Boxer
b2cc8a57d4 avviddec: do not add 708 caption meta if already exists
(this is only used for CEA 708 raw data). another element
such as mpegvideoparse may have already added the meta.
2019-04-01 17:11:36 -04:00
Mathieu Duponchelle
be579c426d avvidenc: pass Closed Caption metadata to libav 2019-03-23 00:27:55 +01:00
Tim-Philipp Müller
ef8a1bdd90 avauddec: fix decoding of APE and Cook audio
.. and other formats where ffmpeg gives us multiple
subframes per input frame.

Since we now support non-interleaved audio, we can't
just concat buffers any more. Also, audio metas won't
be combined when buffers are merged, so when we push
out the combined buffer we'll look at the meta describing
only the first subframe and think it covers the whole
frame leading to stutter/gaps in the output.

We could fix this by copying the output data into a new
buffer when we merge buffers, but that's suboptimal, so
let's add some API to GstAudioDecoder to push out subframes
and use that instead.

https://gitlab.freedesktop.org/gstreamer/gst-libav/issues/49
2019-03-04 11:54:15 +00:00
Guillaume Desmottes
1d293764e5 avdemux: fix negative pts if start_time is bigger than the ts
The start time is supposed to be the ts of the first frame.
FFmpeg uses fractions to represent timestamps and the start time may use a
different base than the frame pts. So we may end up having the start
time bigger than the pts because of rounding when converting to gst ts.

See https://gitlab.freedesktop.org/gstreamer/gst-libav/issues/51
for details.
2019-02-21 08:56:34 +01:00
Seungha Yang
a2c88ec9da avcfg: Fix AVOptionRanges leak
It must be freed with av_opt_freep_ranges as documented.
2019-01-13 00:47:07 +09:00
Edward Hervey
9d41d2747b codecmap: Add mapping for Voxware metasound
Allows actually decoding such streams :)
2018-11-08 16:33:57 +01:00
Nirbheek Chauhan
21a18e22e1 avcfg: Ensure that ternary operator always evaluates to int64
When building with MSVC, if the 3rd operator is a double, the entire
expression always promoted double, and is then cast to int64.

When TRUE, this evaluates to (gint64) (gdouble) (INT64_MAX)
which overflows to INT64_MIN on MSVC, but not on C99 compilers.

This causes us to fail the g_return_if_fail inside g_param_spec_int64
when built with MSVC.
2018-10-16 04:29:37 +05:30
Arun Raghavan
ef106350d4 avdemux: Expose IFF container support
This exposes support for the "iff" demuxer. This is a general purpose
format, and the reason to expose this now is to allow reading DSD data
(which is supported via a variant called DSDIFF).

More information at:
  https://wiki.multimedia.cx/index.php?title=IFF
  https://www.loc.gov/preservation/digital/formats/fdd/fdd000245.shtml
2018-10-12 19:23:21 +05:30
Nirbheek Chauhan
26585686b0 meson: Generate a pkgconfig file for gstlibav
This matches all other plugins in the other gstreamer repos. This is
also necessary for generating the correct libtool archive (.la) files
in Cerbero which are needed for static linking on Android and iOS.
2018-10-09 18:14:23 +05:30
Edward Hervey
46cc79c43a avviddec: Remove unneeded check
frame is always valid in this function (but wasn't before the
refactoring from a few months ago).

CID #1439540
2018-09-21 16:01:53 +02:00
Edward Hervey
143aa80cdf avcfg: Simplify code
The existence of 'opt' is checked, the remainder of the code can therefore
rely on it being valid.

CID #1439537
2018-09-21 11:30:58 +02:00
Mathieu Duponchelle
ff3a8f6627 decoders: fix draining
https://bugzilla.gnome.org/show_bug.cgi?id=796900
2018-07-31 19:13:25 +02:00
Georg Ottinger
962d2a78fe avmux: Place pva case after generic case
In the function gst_ffmpeg_formatid_get_codecids() in the if / else if
construct the special case !strcmp (format_name, "pva") should be
handled before the generic case (plugin->audio_codec !=
AV_CODEC_ID_NONE) || (plugin->video_codec != AV_CODEC_ID_NONE)
This patch fixes the ordering.

I stumbled accorss this issue while adding a new format to
gst_ffmpeg_formatid_get_codecids()

https://bugzilla.gnome.org/show_bug.cgi?id=796738
2018-07-26 16:22:30 -04:00
George Kiagiadakis
4596249496 avauddec: add support for decoding in non-interleaved layout
This removes the internal interleave loop and always negotiates
the native output layout of the libav decoder. Users can use
audioconvert to interleave if necessary.

Special care has been taken to leave the encoder unaffected by
the changes in avcodecmap, since GstAudioEncoder doesn't support
the non-interleaved layout yet.

https://bugzilla.gnome.org/show_bug.cgi?id=705977
2018-07-23 16:16:10 +03:00
Seungha Yang
db82350245 libav: Fix symbol redefine build error
https://bugzilla.gnome.org/show_bug.cgi?id=796827
2018-07-19 12:21:01 +01:00
Tim-Philipp Müller
c881f831c3 Remove obsolete #if 0-ed code 2018-07-18 15:44:23 +01:00
Edward Hervey
a3c72b2148 avcfg: Properly initalize GValue
.. to the expected property value type.
2018-07-16 08:44:45 +02:00
Mathieu Duponchelle
ad1f3a914b avcfg: actually remove call to g_object_getv
(Sorry about that)
2018-07-13 18:03:27 +02:00
Mathieu Duponchelle
dd37a553ac av*dec: Ignore decoding errors
We were ignoring these before the port to 4.0, interpreting them
as GST_FLOW_ERROR / GST_ELEMENT_ERROR causes check failures.

We should start using GST_*_DECODER_ERROR in latter commits,
for now simply restore the previous behaviour.
2018-07-13 17:24:07 +02:00
Mathieu Duponchelle
70d9f923dc avcfg: use g_object_get_property, not g_object_getv
I simply confused those two, we didn't need g_object_getv
here anyway.
2018-07-13 17:21:25 +02:00
Mathieu Duponchelle
c34dd9bb1a avcfg: ignore some generic properties
We expose profile, level and colorimetry / colorspaces through
caps.

https://bugzilla.gnome.org/show_bug.cgi?id=792900
2018-07-13 00:53:28 +02:00