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/1340cbe52e8384f4aa92b147b804f64f/gstreamer1-libav-ffmpeg44-fix.patch BuildRequires: gcc-c++ BuildRequires: meson @@ -69,6 +70,9 @@ plug-in. %endif %changelog +* Sun Feb 28 2021 Leigh Scott - 1.18.2-4 +- Add patch for ffmpeg-4.4 + * Wed Feb 03 2021 RPM Fusion Release Engineering - 1.18.2-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild