Commit graph

33 commits

Author SHA1 Message Date
Seungha Yang bc8a3ca526 avviddec: Fix AVPacket leak
av_packet_unref() does not release allocated memory.
av_packet_free() is the correct free function.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6544>
2024-04-04 19:39:09 +00:00
U. Artie Eoff b699341ac9 libav: guard dropped AV_CODEC_ID_AYUV api
The FF_API_AYUV_CODECID api was dropped in upstream:

https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/9ee59b63f5ea

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6341>
2024-04-02 07:12:37 +00:00
Edward Hervey 086ecb008f avviddec: Fix how we get back the codec frame
With the new copy_opaque system, the corresponding frame is stored in the
picture opaque ref.

This also handles the case where the "regular" opaque might be empty in the
case of "DECODE_ONLY" frames, since it that field is set in `get_buffer2()`
which might not be called for those frames

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6301>
2024-03-11 10:17:41 +00:00
Edward Hervey eacd5c1cb1 avviddec: Improve debug statements
Add SFN to better track what is going on

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6301>
2024-03-11 10:17:41 +00:00
Seungha Yang 37578454b9 avviddec: Fix interlaced mode detection
Fixing regression introduced by the commit b46559102b

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6285>
2024-03-07 11:53:07 +00:00
Seungha Yang 781fc4a1b6 avviddec: Fix crash with FFmpeg n6.0
FFmpeg version 6.0 has an AV_CODEC_FLAG_COPY_OPAQUE related bug.

See a3bf63c26e

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6184>
2024-02-22 18:54:45 +00:00
L. E. Segovia b46559102b libav: Port deprecated AVFrame fields to flags
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5186>
2024-01-17 08:39:13 +00:00
L. E. Segovia 09de59477a libav: Port AVCodecContext.ticks_per_frame to AV_CODEC_PROP_FIELDS
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5186>
2024-01-17 08:39:13 +00:00
L. E. Segovia 4dc955e94a libav: Port reordered_opaque usage to ref-counted opaque_ref
Instead of passing along the system frame number, we pass along a reference to
the GstVideoCodecFrame.

In order for all internal cleanup to happen properly, this also requires
switching to the proper AVPacket creation/destruction methods (av_packet_alloc()
and av_packet_unref())

Fixes #2568

Co-authored-by: Edward Hervey <edward@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5186>
2024-01-17 08:39:13 +00:00
Philippe Normand 84d9e5b6e7 avviddec: Calculate latency only for fixed framerate
The framerate was checked correctly in _negotiate, but not in _set_format.

Also fix loss of precision in _negotiate when calculating the framerate.

Fixes #3093

Co-authored-by: Sebastian Dröge <sebastian@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5600>
2023-12-17 12:48:44 +00:00
Seungha Yang d2c9200828 avviddec: Unlock stream lock while waiting for decoded frame
FFmpeg might request buffer from other threads, it will result
in deadlock

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2558
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5681>
2023-11-16 18:02:30 +00:00
Edward Hervey ebf7966a26 avvidec: Fix more deprecated symbol
We only used these fields for debugging anyway

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4635>
2023-06-13 20:12:11 +00:00
Edward Hervey 447ee0b566 avvidec: Fix usage of deprecated field
Since ffmpeg 6.0 frame_num is used instead of frame_number

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4635>
2023-06-13 20:12:11 +00:00
Sebastian Dröge 186d8a99cc avviddec: Temporarily unlock stream lock while flushing buffers
This can call into the decoder again from other threads and try to take
the stream lock from there, which would cause a deadlock.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2558

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4610>
2023-05-13 10:20:32 +00:00
Tim-Philipp Müller 3ad4128084 gst-libav: re-indent with GNU indent 2.2.12
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4182>
2023-03-17 03:18:54 +00:00
Nicolas Dufresne 83985ae1fa avviddec: Drop decoder stream lock when calling send_packet
This is already done for every other calls to send_packet. The deadlock occures
since FFMPeg 6.0. The decoder tries to get a buffer from a thread during
the draining process, and blocks trying to get the video decoder stream lock
already heald by the drain function.

Fixes #2383

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4171>
2023-03-15 16:52:57 +00:00
Sebastian Dröge 236465e5d4 ffmpeg: avauddec/avviddec: Free packet side data after usage
As we don't use proper refcounting with AVPacket we have to manage this
ourselves.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2006

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4076>
2023-02-28 12:01:57 +00:00
U. Artie Eoff 233de05a98 avviddec: change AV_CODEC_CAP_AUTO_THREADS->AV_CODEC_CAP_OTHER_THREADS
This fixes a compile error with recent upstream FFmpeg.

The AV_CODEC_CAP_AUTO_THREADS was deprecated and renamed to
AV_CODEC_CAP_OTHER_THREADS in FFmpeg upstream commit
7d09579190de (lavc 58.132.100).

The AV_CODEC_CAP_AUTO_THREADS was finally removed in FFmpeg upstream
commit 10c9a0874cb3 (lavc 59.63.100).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3951>
2023-02-14 09:01:04 -05:00
Tim-Philipp Müller 8a047a619e gst-libav: drop use of GSlice allocator
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3784>
2023-02-03 17:48:09 +00:00
Sebastian Dröge 1cbb145c50 avviddec: Disable AV1 decoder
We have various elements for AV1 decoding, the ffmpeg one only works if
hardware support is available and seems to require special signalling.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3610>
2022-12-20 14:10:01 +02:00
Sebastian Dröge 925715c734 av{aud,vid}dec: Report decoding errors to the base class
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1889>
2022-12-01 13:40:53 +00:00
Philippe Normand 090cf943ed avviddec: Report flow error when decoder refused packet
In cases where an invalid input packet is submitted to the decoder we emit a
warning but reporting the flow error upstream would also be useful. This came up
with a case were the application interacts directly with the decoder, using a
mechanism similar to GstHarness.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3463>
2022-11-30 11:51:12 +00:00
Edward Hervey c39400b52c avviddec: Report a latency even without upstream framerate
There are cases where upstream will not provide a framerate, or it won't be
fixed. But if there is latency introduced by the decoder we do want to report
it.

Therefore use the framerate stored in the actual decoder, which will have a
default.

Fixes hangs when playing back such streams with decodebin3 (where the multiqueue
will not have been informed of that downstream latency and not grow accordingly)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3391>
2022-11-16 10:42:18 +00:00
Nicolas Dufresne 7b70de580c avviddec: Initialize std_compliance to default
This was missed in the initial patch.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3330>
2022-11-05 15:12:08 +00:00
Nicolas Dufresne 99ec53073a avviddec: Introduce a class for shared properties
Without a parent class,the documentation would need to be duplicated for
every CODECs. This patch adds an abstract class in between GstVideoDecoder
and the element.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3311>
2022-11-02 19:23:14 +00:00
Seungha Yang af05abdb79 avviddec: Expose std-compliance option
Default compliance mode (i.e., FF_COMPLIANCE_NORMAL) might not
strictly follow specification. This property will allow user
to specifiy expected compliance mode.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3311>
2022-11-02 19:23:14 +00:00
Nicolas Dufresne 5c2eba666b avdec_h265: Fix endless renegoation with alternate interlacing
The picture parameter picture->top_field_first is reused in this mode
to signal the TOP fields. As a side effect, it will change every frame
and current code assumed that if this changes then a renegotiation is
needed. Fixed this by ignoring that change whenever we are decoding one field
only.

Fixes #1523

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3276>
2022-10-27 13:34:48 +00:00
Nicolas Dufresne 9ebe338d80 avviddec: Avoid flushing on framerate changes
A framerate change does not require flushing the decoder and causes
issues with some specific fragmented files if the two fragments have
different framerate.

Fixes #1522

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3270>
2022-10-26 17:23:02 +00:00
Vivia Nikolaidou b90d02741e avviddec, video.c, h265parse: Workaround for broken field-based interlaced encoders
Some encoders (e.g. Makito) have H265 field-based interlacing, but then
also specify an 1:2 pixel aspect ratio. That makes it kind-of work with
decoders that don't properly support field-based decoding, but makes us
end up with the wrong aspect ratio if we implement everything properly.
As a workaround, detect 1:2 pixel aspect ratio for field-based
interlacing, and check if making that 1:1 would make the new display
aspect ratio common. In that case, we override it with 1:1.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2577>
2022-06-16 10:03:02 +00:00
Guillaume Desmottes 7933fff83c libav: fix frame leak on negotiation error
The function owns a reference on the frame. Drop it if negotiation
failed as we are already doing for the other error cases.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2196>
2022-04-18 07:13:09 +00:00
Edward Hervey be1b31b5f8 avviddec: Remove vc1/wmv3 override
FFMPEG 5+ doesn't allow overriding the codec anymore (causes a segfault if you
attempt to do that). But the best part is ... that with the current caps
implementation in pad template and gst_ffmpeg_caps_to_codecid() we would never
replace it by anything different than the existing codec id.

Fixes #1054

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2052>
2022-03-29 11:46:45 +00:00
Xi Ruoyao 6ea56e7fd3 gst-libav: fix build with ffmpeg-5.0.0
Latest ffmpeg has removed avcodec_get_context_defaults(), and its
documentation says a new AVCodecContext should be allocated for this
purpose.  The pointer returned by avcodec_find_decoder() is now
const-qualified so we also need to adjust for it.  And, AVCOL_RANGE_MPEG
is now rejected with strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1531>
2022-01-17 18:11:32 +08:00
Thibault Saunier 7a371e75b7 Move files from gst-libav into the "subprojects/gst-libav/" subdir 2021-09-24 16:15:08 -03:00
Renamed from ext/libav/gstavviddec.c (Browse further)