X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fthirdparty%2Fsrc%2Fffmpeg.git.patch3;fp=cinelerra-5.1%2Fthirdparty%2Fsrc%2Fffmpeg.git.patch3;h=c774d19a40d88325300cf4f338bb0f57572ca23f;hb=4fedf98530b3a6ff1ada6d2b9fbbc470e3df300c;hp=0000000000000000000000000000000000000000;hpb=3966bf849d26244bc8b9a39fa485a808272225d0;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch3 b/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch3 new file mode 100644 index 00000000..c774d19a --- /dev/null +++ b/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch3 @@ -0,0 +1,72 @@ +diff -ur a/libavformat/avformat.h b/libavformat/avformat.h +--- a/libavformat/avformat.h 2017-10-13 16:31:25.000000000 -0600 ++++ b/libavformat/avformat.h 2017-10-13 20:07:24.178440418 -0600 +@@ -504,6 +504,9 @@ + The user or muxer can override this through + AVFormatContext.avoid_negative_ts + */ ++#define AVFMT_SEEK_NOSTREAMS 0x80000 /**< Stream index ignored by seek, ++ or some streams fail to seek ++ */ + + #define AVFMT_SEEK_TO_PTS 0x4000000 /**< Seeking is based on PTS */ + +@@ -664,7 +667,8 @@ + /** + * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, + * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, +- * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. ++ * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS, ++ * AVFMT_SEEK_NOSTREAMS + */ + int flags; + +diff -ur a/libavformat/dv.c b/libavformat/dv.c +--- a/libavformat/dv.c 2017-10-13 16:31:25.000000000 -0600 ++++ b/libavformat/dv.c 2017-10-13 20:07:24.178440418 -0600 +@@ -632,6 +632,7 @@ + AVInputFormat ff_dv_demuxer = { + .name = "dv", + .long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"), ++ .flags = AVFMT_SEEK_NOSTREAMS, + .priv_data_size = sizeof(RawDVContext), + .read_probe = dv_probe, + .read_header = dv_read_header, +diff -ur a/libavformat/matroskadec.c b/libavformat/matroskadec.c +--- a/libavformat/matroskadec.c 2017-10-13 16:31:25.000000000 -0600 ++++ b/libavformat/matroskadec.c 2017-10-13 20:07:24.180440304 -0600 +@@ -3984,6 +3984,7 @@ + AVInputFormat ff_matroska_demuxer = { + .name = "matroska,webm", + .long_name = NULL_IF_CONFIG_SMALL("Matroska / WebM"), ++ .flags = AVFMT_SEEK_NOSTREAMS, + .extensions = "mkv,mk3d,mka,mks", + .priv_data_size = sizeof(MatroskaDemuxContext), + .read_probe = matroska_probe, +@@ -3997,6 +3998,7 @@ + AVInputFormat ff_webm_dash_manifest_demuxer = { + .name = "webm_dash_manifest", + .long_name = NULL_IF_CONFIG_SMALL("WebM DASH Manifest"), ++ .flags = AVFMT_SEEK_NOSTREAMS, + .priv_data_size = sizeof(MatroskaDemuxContext), + .read_header = webm_dash_manifest_read_header, + .read_packet = webm_dash_manifest_read_packet, +Only in b/libavformat: matroskadec.c.orig +diff -ur a/libavformat/utils.c b/libavformat/utils.c +--- a/libavformat/utils.c 2017-10-13 16:31:25.000000000 -0600 ++++ b/libavformat/utils.c 2017-10-13 20:07:24.182440190 -0600 +@@ -2415,6 +2415,13 @@ + return seek_frame_byte(s, stream_index, timestamp, flags); + } + ++ if (stream_index != -1 && (s->iformat->flags & AVFMT_SEEK_NOSTREAMS)) { ++ timestamp = av_rescale_q(timestamp, ++ s->streams[stream_index]->time_base, ++ AV_TIME_BASE_Q); ++ stream_index = -1; ++ } ++ + if (stream_index < 0) { + stream_index = av_find_default_stream_index(s); + if (stream_index < 0) +Only in b/libavformat: utils.c.orig