commit 787f45edf6bf31de4e04b24cd148af9ac26f0f66
Author: Leigh Scott <leigh123linux(a)gmail.com>
Date: Sun Feb 28 13:55:38 2021 +0000
Add patch for ffmpeg-4.4
gstreamer1-libav-ffmpeg44-fix.patch | 223 ++++++++++++++++++++++++++++++++++++
gstreamer1-libav.spec | 6 +-
2 files changed, 228 insertions(+), 1 deletion(-)
---
diff --git a/gstreamer1-libav-ffmpeg44-fix.patch b/gstreamer1-libav-ffmpeg44-fix.patch
new file mode 100644
index 0000000..310a4d4
--- /dev/null
+++ b/gstreamer1-libav-ffmpeg44-fix.patch
@@ -0,0 +1,223 @@
+--- gst-libav-1.18.2.old/ext/libav/gstavdemux.c 2021-02-26 16:47:35.842537392 -0800
++++ gst-libav-1.18.2.new/ext/libav/gstavdemux.c 2021-02-26 16:47:55.137537967 -0800
+@@ -41,6 +41,211 @@
+ typedef struct _GstFFMpegDemux GstFFMpegDemux;
+ typedef struct _GstFFStream GstFFStream;
+
++typedef struct FFFrac {
++ int64_t val, num, den;
++} FFFrac;
++
++struct AVStreamInternal {
++ /**
++ * Set to 1 if the codec allows reordering, so pts can be different
++ * from dts.
++ */
++ int reorder;
++
++ /**
++ * bitstream filter to run on stream
++ * - encoding: Set by muxer using ff_stream_add_bitstream_filter
++ * - decoding: unused
++ */
++ AVBSFContext *bsfc;
++
++ /**
++ * Whether or not check_bitstream should still be run on each packet
++ */
++ int bitstream_checked;
++
++ /**
++ * The codec context used by avformat_find_stream_info, the parser, etc.
++ */
++ AVCodecContext *avctx;
++ /**
++ * 1 if avctx has been initialized with the values from the codec parameters
++ */
++ int avctx_inited;
++
++ enum AVCodecID orig_codec_id;
++
++ /* the context for extracting extradata in find_stream_info()
++ * inited=1/bsf=NULL signals that extracting is not possible (codec not
++ * supported) */
++ struct {
++ AVBSFContext *bsf;
++ AVPacket *pkt;
++ int inited;
++ } extract_extradata;
++
++ /**
++ * Whether the internal avctx needs to be updated from codecpar (after a late change
to codecpar)
++ */
++ int need_context_update;
++
++ int is_intra_only;
++
++ FFFrac *priv_pts;
++
++#define MAX_STD_TIMEBASES (30*12+30+3+6)
++ /**
++ * Stream information used internally by avformat_find_stream_info()
++ */
++ struct {
++ int64_t last_dts;
++ int64_t duration_gcd;
++ int duration_count;
++ int64_t rfps_duration_sum;
++ double (*duration_error)[2][MAX_STD_TIMEBASES];
++ int64_t codec_info_duration;
++ int64_t codec_info_duration_fields;
++ int frame_delay_evidence;
++
++ /**
++ * 0 -> decoder has not been searched for yet.
++ * >0 -> decoder found
++ * <0 -> decoder with codec_id == -found_decoder has not been found
++ */
++ int found_decoder;
++
++ int64_t last_duration;
++
++ /**
++ * Those are used for average framerate estimation.
++ */
++ int64_t fps_first_dts;
++ int fps_first_dts_idx;
++ int64_t fps_last_dts;
++ int fps_last_dts_idx;
++
++ } *info;
++
++ AVIndexEntry *index_entries; /**< Only used if the format does not
++ support seeking natively. */
++ int nb_index_entries;
++ unsigned int index_entries_allocated_size;
++
++ int64_t interleaver_chunk_size;
++ int64_t interleaver_chunk_duration;
++
++ /**
++ * stream probing state
++ * -1 -> probing finished
++ * 0 -> no probing requested
++ * rest -> perform probing with request_probe being the minimum score to accept.
++ */
++ int request_probe;
++ /**
++ * Indicates that everything up to the next keyframe
++ * should be discarded.
++ */
++ int skip_to_keyframe;
++
++ /**
++ * Number of samples to skip at the start of the frame decoded from the next
packet.
++ */
++ int skip_samples;
++
++ /**
++ * If not 0, the number of samples that should be skipped from the start of
++ * the stream (the samples are removed from packets with pts==0, which also
++ * assumes negative timestamps do not happen).
++ * Intended for use with formats such as mp3 with ad-hoc gapless audio
++ * support.
++ */
++ int64_t start_skip_samples;
++
++ /**
++ * If not 0, the first audio sample that should be discarded from the stream.
++ * This is broken by design (needs global sample count), but can't be
++ * avoided for broken by design formats such as mp3 with ad-hoc gapless
++ * audio support.
++ */
++ int64_t first_discard_sample;
++
++ /**
++ * The sample after last sample that is intended to be discarded after
++ * first_discard_sample. Works on frame boundaries only. Used to prevent
++ * early EOF if the gapless info is broken (considered concatenated mp3s).
++ */
++ int64_t last_discard_sample;
++
++ /**
++ * Number of internally decoded frames, used internally in libavformat, do not
access
++ * its lifetime differs from info which is why it is not in that structure.
++ */
++ int nb_decoded_frames;
++
++ /**
++ * Timestamp offset added to timestamps before muxing
++ */
++ int64_t mux_ts_offset;
++
++ /**
++ * Internal data to check for wrapping of the time stamp
++ */
++ int64_t pts_wrap_reference;
++
++ /**
++ * Options for behavior, when a wrap is detected.
++ *
++ * Defined by AV_PTS_WRAP_ values.
++ *
++ * If correction is enabled, there are two possibilities:
++ * If the first time stamp is near the wrap point, the wrap offset
++ * will be subtracted, which will create negative time stamps.
++ * Otherwise the offset will be added.
++ */
++ int pts_wrap_behavior;
++
++ /**
++ * Internal data to prevent doing update_initial_durations() twice
++ */
++ int update_initial_durations_done;
++
++#define MAX_REORDER_DELAY 16
++
++ /**
++ * Internal data to generate dts from pts
++ */
++ int64_t pts_reorder_error[MAX_REORDER_DELAY+1];
++ uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1];
++
++ int64_t pts_buffer[MAX_REORDER_DELAY+1];
++
++ /**
++ * Internal data to analyze DTS and detect faulty mpeg streams
++ */
++ int64_t last_dts_for_order_check;
++ uint8_t dts_ordered;
++ uint8_t dts_misordered;
++
++ /**
++ * Internal data to inject global side data
++ */
++ int inject_global_side_data;
++
++ /**
++ * display aspect ratio (0 if unknown)
++ * - encoding: unused
++ * - decoding: Set by libavformat to calculate sample_aspect_ratio internally
++ */
++ AVRational display_aspect_ratio;
++
++ AVProbeData probe_data;
++
++ /**
++ * last packet in packet_buffer for this stream when muxing.
++ */
++ struct AVPacketList *last_in_packet_buffer;
++};
++
+ struct _GstFFStream
+ {
+ GstPad *pad;
+@@ -483,7 +688,7 @@ gst_ffmpegdemux_do_seek (GstFFMpegDemux
+ GST_LOG_OBJECT (demux, "keyframeidx: %d", keyframeidx);
+
+ if (keyframeidx >= 0) {
+- fftarget = stream->index_entries[keyframeidx].timestamp;
++ fftarget = stream->internal->index_entries[keyframeidx].timestamp;
+ target = gst_ffmpeg_time_ff_to_gst (fftarget, stream->time_base);
+
+ GST_LOG_OBJECT (demux,
diff --git a/gstreamer1-libav.spec b/gstreamer1-libav.spec
index b371396..7fec0ce 100644
--- a/gstreamer1-libav.spec
+++ b/gstreamer1-libav.spec
@@ -1,10 +1,11 @@
Name: gstreamer1-libav
Version: 1.18.2
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: GStreamer 1.0 libav-based plug-ins
License: LGPLv2+
URL:
https://gstreamer.freedesktop.org/
Source0: %{url}/src/gst-libav/gst-libav-%{version}.tar.xz
+Patch0:
https://gitlab.freedesktop.org/gstreamer/gst-libav/uploads/1340cbe52e8384...
BuildRequires: gcc-c++
BuildRequires: meson
@@ -69,6 +70,9 @@ plug-in.
%endif
%changelog
+* Sun Feb 28 2021 Leigh Scott <leigh123linux(a)gmail.com> - 1.18.2-4
+- Add patch for ffmpeg-4.4
+
* Wed Feb 03 2021 RPM Fusion Release Engineering <leigh123linux(a)gmail.com> -
1.18.2-3
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild