From: Good Guy Date: Tue, 19 Dec 2017 23:37:52 +0000 (-0700) Subject: ffmpeg 3.4.1, add libopus, openexr probe tweak, rel path for filelist, avg_frame_rate... X-Git-Url: https://git.cinelerra-gg.org/git/?a=commitdiff_plain;h=9a91a25bfcf0a01f410f2a27584c8a6c524d37d1;p=goodguy%2Fhistory.git ffmpeg 3.4.1, add libopus, openexr probe tweak, rel path for filelist, avg_frame_rate for vpx, increase default cache size --- diff --git a/cinelerra-5.1/cinelerra/ffmpeg.C b/cinelerra-5.1/cinelerra/ffmpeg.C index fc3726e2..66003120 100644 --- a/cinelerra-5.1/cinelerra/ffmpeg.C +++ b/cinelerra-5.1/cinelerra/ffmpeg.C @@ -1986,6 +1986,7 @@ int FFMPEG::open_encoder(const char *type, const char *spec) break; } ctx->time_base = (AVRational) { frame_rate.den, frame_rate.num }; + st->avg_frame_rate = frame_rate; st->time_base = ctx->time_base; vid->writing = -1; vid->interlaced = asset->interlace_mode == ILACE_MODE_TOP_FIRST || diff --git a/cinelerra-5.1/cinelerra/filelist.C b/cinelerra-5.1/cinelerra/filelist.C index f44d11a8..b98864f9 100644 --- a/cinelerra-5.1/cinelerra/filelist.C +++ b/cinelerra-5.1/cinelerra/filelist.C @@ -181,34 +181,29 @@ int FileList::write_list_header() FILE *stream = fopen(asset->path, "w"); if( !stream ) return 1; // Use sprintf instead of fprintf for VFS. - char string[BCTEXTLEN]; - sprintf(string, "%s\n", list_prefix); - fwrite(string, strlen(string), 1, stream); - sprintf(string, "# First line is always %s\n", list_prefix); - fwrite(string, strlen(string), 1, stream); - sprintf(string, "# Frame rate:\n"); - fwrite(string, strlen(string), 1, stream); - sprintf(string, "%f\n", asset->frame_rate); - fwrite(string, strlen(string), 1, stream); - sprintf(string, "# Width:\n"); - fwrite(string, strlen(string), 1, stream); - sprintf(string, "%d\n", asset->width); - fwrite(string, strlen(string), 1, stream); - sprintf(string, "# Height:\n"); - fwrite(string, strlen(string), 1, stream); - sprintf(string, "%d\n", asset->height); - fwrite(string, strlen(string), 1, stream); - sprintf(string, "# List of image files follows\n"); - fwrite(string, strlen(string), 1, stream); - - for(int i = 0; i < path_list.total; i++) - { + fprintf(stream, "%s\n", list_prefix); + fprintf(stream, "# First line is always %s\n", list_prefix); + fprintf(stream, "# Frame rate:\n"); + fprintf(stream, "%f\n", asset->frame_rate); + fprintf(stream, "# Width:\n"); + fprintf(stream, "%d\n", asset->width); + fprintf(stream, "# Height:\n"); + fprintf(stream, "%d\n", asset->height); + fprintf(stream, "# List of image files follows\n"); + + char *cp = strrchr(asset->path, '/'); + int dir_len = !cp ? 0 : cp - asset->path; + + for(int i = 0; i < path_list.total; i++) { + const char *path = path_list.values[i]; // Fix path for VFS but leave leading slash - if(!strncmp(path_list.values[i], RENDERFARM_FS_PREFIX, strlen(RENDERFARM_FS_PREFIX))) - sprintf(string, "%s\n", path_list.values[i] + strlen(RENDERFARM_FS_PREFIX)); - else - sprintf(string, "%s\n", path_list.values[i]); - fwrite(string, strlen(string), 1, stream); + if( !strncmp(path, RENDERFARM_FS_PREFIX, strlen(RENDERFARM_FS_PREFIX)) ) + path += strlen(RENDERFARM_FS_PREFIX); +// ./path for relative list access + else if( dir_len > 0 && !strncmp(path, asset->path, dir_len) ) { + fprintf(stream, "."); path += dir_len; + } + fprintf(stream, "%s\n", path); } fclose(stream); return 0; @@ -244,15 +239,23 @@ int FileList::read_list_header() asset->audio_data = 0; asset->video_data = 1; -// Get all the paths + char prefix[BCTEXTLEN], *bp = prefix, *cp = strrchr(asset->path, '/'); + for( int i=0, n=!cp ? 0 : cp-asset->path; ipath[i]; + *bp = 0; + +// Get all the paths, expand relative paths int missing = 0; - while(!feof(stream) && fgets(string, BCTEXTLEN, stream) ) { + while( !feof(stream) && fgets(string, BCTEXTLEN, stream) ) { int len = strlen(string); - if( !len || string[0] == '#' || string[0] == ' ') continue; - string[len-1] = 0; - if( access(string,R_OK) && !missing++ ) - eprintf(_("%s:no such file"), string); - path_list.append(cstrdup(string)); + if( !len || string[0] == '#' || string[0] == ' ' ) continue; + if( string[len-1] == '\n' ) string[len-1] = 0; + char path[BCTEXTLEN], *pp = path, *ep = pp + sizeof(path)-1; + if( string[0] == '.' && string[1] == '/' && prefix[0] ) + pp += snprintf(pp, ep-pp, "%s/", prefix); + snprintf(pp, ep-pp, "%s", string); + if( access(path, R_OK) && !missing++ ) + eprintf(_("%s:no such file"), path); + path_list.append(cstrdup(path)); } //for(int i = 0; i < path_list.total; i++) printf("%s\n", path_list.values[i]); diff --git a/cinelerra-5.1/cinelerra/preferences.C b/cinelerra-5.1/cinelerra/preferences.C index b44319be..029feba5 100644 --- a/cinelerra-5.1/cinelerra/preferences.C +++ b/cinelerra-5.1/cinelerra/preferences.C @@ -60,7 +60,7 @@ Preferences::Preferences() sprintf(index_directory, "%s/", File::get_config_path()); if(strlen(index_directory)) fs.complete_path(index_directory); - cache_size = 0x1000000; + cache_size = 0x10000000; index_size = 0x400000; index_count = 500; use_thumbnails = 1; diff --git a/cinelerra-5.1/configure.ac b/cinelerra-5.1/configure.ac index 4fe5c0f0..dcfd41d4 100644 --- a/cinelerra-5.1/configure.ac +++ b/cinelerra-5.1/configure.ac @@ -126,7 +126,7 @@ PKG_3RD([fdk],[auto], [ libAACdec/include libAACenc/include libSYS/include ]) PKG_3RD([ffmpeg],[yes], - [ffmpeg-3.3.4], + [ffmpeg-3.4.1], [ libavutil/libavutil.a \ libavcodec/libavcodec.a \ libpostproc/libpostproc.a \ @@ -223,6 +223,11 @@ PKG_3RD([libjpeg],[auto], simd/.libs/libsimd.a ], [ . ]) +PKG_3RD([opus],[auto], + [opus-1.2.1], + [ .libs/libopus.a ], + [ include ]) + PKG_3RD([openjpeg],[auto], [openjpeg-2.1.0-20160221], [ bin/libopenjp2.a ], @@ -453,8 +458,6 @@ CHECK_LIB([fdk], [fdk-aac], [faacDecInit]) CHECK_HEADERS([fdk], [fdk headers], [fdk-aac/genericStds.h]) CHECK_LIB([jbig], [jbig], [jbg_dec_init]) CHECK_LIB([vdpau], [vdpau], [vdp_device_create_x11]) -CHECK_LIB([opus], [opus], [opus_multistream_decoder_create]) -CHECK_HEADERS([opus], [libopus headers], [opus/opus_multistream.h]) #if test "x$HAVE_mjpegtools" = "xyes"; then #CFG_CFLAGS+=" -I/usr/include/mjpegtools" @@ -524,6 +527,10 @@ CHECK_WANT([ESOUND], [no], [use esd], [ CHECK_LIB([audiofile], [audiofile], [afOpenFile]) CHECK_HEADERS([audiofile], [audiofile headers], [audiofile.h])]) +CHECK_WANT([LIBOPUS], [auto], [use libopus], [ + CHECK_LIB([opus], [opus], [opus_multistream_decoder_create]) + CHECK_HEADERS([opus], [libopus headers], [opus/opus_multistream.h])]) + CHECK_WANT([DL], [auto], [system has libdl], [ CHECK_LIB([DL], [dl], [dlopen])]) @@ -540,7 +547,7 @@ CHECK_WANT([OPENEXR], [auto], [use openexr], [ saved_LIBS="$LIBS" saved_CXXFLAGS="$CXXFLAGS" # ilmbase libs - LIBS=" -lIlmImf -lIlmThread -lIex" + LIBS=" -lIlmImf -lIlmThread -lIex -lpthread" CXXFLAGS="-I/usr/include/OpenEXR" AC_LANG_PUSH(C++) AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @@ -660,6 +667,7 @@ PKG_PROVIDE([twolame]) PKG_PROVIDE([x264]) PKG_PROVIDE([x265]) PKG_PROVIDE([libvpx]) +PKG_PROVIDE([opus], [$WANT_OPUS]) AC_SUBST(STATIC_BLDS) AC_SUBST(SHARED_LIBS) diff --git a/cinelerra-5.1/ffmpeg/plugin.opts b/cinelerra-5.1/ffmpeg/plugin.opts index 173a5a9e..95236fdb 100644 --- a/cinelerra-5.1/ffmpeg/plugin.opts +++ b/cinelerra-5.1/ffmpeg/plugin.opts @@ -50,12 +50,9 @@ aresample sample_rate=48000 #asettb #ashowinfo #asidedata -#asilencedetect -#asilenceremove #asplit astats #astreamselect -#astreamsync atadenoise atempo atrim start=1:end=240:start_pts=1:end_pts=2:duration=1:start_sample=1:end_sample=2 @@ -67,11 +64,10 @@ bass bbox bench biquad -bitplaneoise blackdetect blackframe #blend -boxblue +boxblur #buffer #buffersink bwdif @@ -124,8 +120,6 @@ erosion #extractplanes extrastereo fade -#ffabuffersink -#ffbuffersink fftfilt field #fieldhint @@ -135,7 +129,6 @@ fieldorder #find_rect #firequalizer flanger -#fliporder #format #fps #framepack @@ -166,7 +159,6 @@ il inflate interlace #interleave -#isdesctest #join kerndeint lenscorrection @@ -258,7 +250,7 @@ signalstats #silencedetect silenceremove sine -smartblue +smartblur #smptebars #smptehdbars sobel @@ -302,6 +294,30 @@ xbr yadif #yuvtestsrc zoompan +; new in 3.4.1 +#acopy +bitplanenoise +boxblur +ciescope +crossfeed +deflicker +despill +doubleweave +floodfill +haas +limiter +loop +lumakey +oscilloscope +pixscope +pseudocolor +roberts +smartblur +#superequalizer +#surround +tlut2 +tonemap +#vmafmotion ; in git #afir #headphone diff --git a/cinelerra-5.1/thirdparty/Makefile b/cinelerra-5.1/thirdparty/Makefile index 7268028b..e2d2d4d4 100644 --- a/cinelerra-5.1/thirdparty/Makefile +++ b/cinelerra-5.1/thirdparty/Makefile @@ -130,6 +130,7 @@ ffmpeg.cfg_params= \ $(call inc_path,lame,include) \ $(call inc_path,openjpeg,src/lib/openjp2) \ $(call inc_path,libogg,include) \ + $(call inc_path,opus,include) \ $(call inc_path,libvorbis,include) \ $(call inc_path,libtheora,include) \ $(call inc_path,libvpx) \ @@ -146,6 +147,7 @@ ffmpeg.cfg_params= \ $(call ld_path,twolame,libtwolame/.libs) \ $(call ld_path,lame,libmp3lame/.libs) \ $(call ld_path,openjpeg,bin) \ + $(call ld_path,opus,.libs) \ $(call ld_path,libogg,lib/.libs) \ $(call ld_path,libvorbis,lib/.libs) \ $(call ld_path,libtheora,lib/.libs) \ @@ -243,7 +245,7 @@ $(call rules,$(call std-build,esound,audiofile)) $(call rules,$(call std-build,faac)) $(call rules,$(call std-build,faad2)) $(call rules,$(call std-build,fdk)) -$(call rules,$(call std-build,ffmpeg, faad2 faac fdk twolame lame openjpeg libtheora x264 x265 libvpx)) +$(call rules,$(call std-build,ffmpeg, faad2 faac fdk twolame lame openjpeg opus libtheora x264 x265 libvpx)) $(call rules,$(call std-build,fftw)) $(call rules,$(call std-build,flac,libogg)) $(call rules,$(call std-build,giflib)) @@ -264,6 +266,7 @@ $(call rules,$(call std-build,mjpegtools, libjpeg)) $(call rules,$(call std-build,opencv)) $(call rules,$(call std-build,openexr, ilmbase)) $(call rules,$(call std-build,openjpeg)) +$(call rules,$(call std-build,opus)) $(call rules,$(call std-build,speech_tools)) $(call rules,$(call std-build,tiff)) $(call rules,$(call std-build,twolame)) diff --git a/cinelerra-5.1/thirdparty/downloads.txt b/cinelerra-5.1/thirdparty/downloads.txt index 579810c5..47936c5f 100644 --- a/cinelerra-5.1/thirdparty/downloads.txt +++ b/cinelerra-5.1/thirdparty/downloads.txt @@ -33,3 +33,4 @@ https://bitbucket.org/multicoreware/x265/downloads/x265_2.4.tar.gz http://ffmpeg.org/releases/ffmpeg-3.3.tar.bz2 https://chromium.googlesource.com/webm/libvpx/+archive/0c0a05046db1c0b59a7fcc29785a190fdbbe39c2.tar.gz = 1,6,1 https://github.com/swh/ladspa/releases/tag/v0.4.17, plugin.org.uk +https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz diff --git a/cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.patch1 b/cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.patch1 deleted file mode 100644 index 40d7eddc..00000000 --- a/cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.patch1 +++ /dev/null @@ -1,23 +0,0 @@ -diff -urN a/configure b/configure ---- a/configure 2017-04-12 19:55:54.000000000 -0600 -+++ b/configure 2017-04-16 16:12:23.518837543 -0600 -@@ -5812,7 +5812,7 @@ - { check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } || - die "ERROR: libopenjpeg not found"; } - enabled libopenmpt && require_pkg_config "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create --enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create -+enabled libopus && use_pkg_config opus opus_multistream.h opus_multistream_decoder_create - enabled libpulse && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new - enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket - enabled librubberband && require_pkg_config "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new -@@ -5871,7 +5871,9 @@ - die "ERROR: libx264 must be installed and version must be >= 0.118."; } && - { check_cpp_condition x264.h "X264_MPEG2" && - enable libx262; } --enabled libx265 && require_pkg_config x265 x265.h x265_api_get && -+enabled libx265 && { use_pkg_config x265 "stdint.h x265.h" x265_api_get || -+ { require libx265 x265.h x265_encoder_encode -lx265 -lstdc++ && -+ warn "using libx265 without pkg-config"; } } && - { check_cpp_condition x265.h "X265_BUILD >= 68" || - die "ERROR: libx265 version must be >= 68."; } - enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode -lxavs diff --git a/cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.patch2 b/cinelerra-5.1/thirdparty/src/ffmpeg-3.4.1.patch1 similarity index 100% rename from cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.patch2 rename to cinelerra-5.1/thirdparty/src/ffmpeg-3.4.1.patch1 diff --git a/cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.patch4 b/cinelerra-5.1/thirdparty/src/ffmpeg-3.4.1.patch2 similarity index 96% rename from cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.patch4 rename to cinelerra-5.1/thirdparty/src/ffmpeg-3.4.1.patch2 index 66edd3db..bb628d93 100644 --- a/cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.patch4 +++ b/cinelerra-5.1/thirdparty/src/ffmpeg-3.4.1.patch2 @@ -1,6 +1,6 @@ -diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c ---- a/libavformat/mpegtsenc.c 2017-04-12 19:55:55.000000000 -0600 -+++ b/libavformat/mpegtsenc.c 2017-04-16 16:40:18.488361991 -0600 +diff -ur a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c +--- a/libavformat/mpegtsenc.c 2017-12-10 14:35:10.000000000 -0700 ++++ b/libavformat/mpegtsenc.c 2017-12-18 10:54:14.260167666 -0700 @@ -56,9 +56,8 @@ int sid; /* service ID */ char *name; @@ -69,7 +69,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c typedef struct MpegTSWriteStream { struct MpegTSService *service; -@@ -717,6 +714,7 @@ +@@ -721,6 +718,7 @@ service->pmt.pid = ts->pmt_start_pid + ts->nb_services; service->sid = sid; service->pcr_pid = 0x1fff; @@ -77,7 +77,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c service->provider_name = av_strdup(provider_name); service->name = av_strdup(name); if (!service->provider_name || !service->name) -@@ -732,18 +730,11 @@ +@@ -736,18 +734,11 @@ return NULL; } @@ -97,7 +97,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c tp_extra_header = AV_RB32(&tp_extra_header); avio_write(s->pb, (unsigned char *) &tp_extra_header, sizeof(tp_extra_header)); -@@ -764,6 +755,7 @@ +@@ -768,6 +759,7 @@ MpegTSService *service; AVStream *st, *pcr_st = NULL; AVDictionaryEntry *title, *provider; @@ -105,7 +105,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c int i, j; const char *service_name; const char *provider_name; -@@ -772,6 +764,15 @@ +@@ -776,6 +768,15 @@ if (s->max_delay < 0) /* Not set by the caller */ s->max_delay = 0; @@ -121,7 +121,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c // round up to a whole number of TS packets ts->pes_payload_size = (ts->pes_payload_size + 14 + 183) / 184 * 184 - 14; -@@ -818,6 +819,8 @@ +@@ -822,6 +823,8 @@ service->program = program; } } @@ -130,7 +130,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c ts->pat.pid = PAT_PID; /* Initialize at 15 so that it wraps and is equal to 0 for the -@@ -903,10 +906,9 @@ +@@ -907,10 +910,9 @@ ts_st->discontinuity = ts->flags & MPEGTS_FLAG_DISCONT; /* update PCR pid by using the first video stream */ if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && @@ -143,7 +143,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c if (st->codecpar->codec_id == AV_CODEC_ID_AAC && st->codecpar->extradata_size > 0) { AVStream *ast; -@@ -942,78 +944,47 @@ +@@ -946,78 +948,47 @@ av_freep(&pids); /* if no video stream, use the first stream as PCR */ @@ -254,7 +254,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c return 0; -@@ -1028,22 +999,12 @@ +@@ -1032,22 +1003,12 @@ MpegTSWrite *ts = s->priv_data; int i; @@ -281,7 +281,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c mpegts_write_pat(s); for (i = 0; i < ts->nb_services; i++) mpegts_write_pmt(s, ts->services[i]); -@@ -1085,13 +1046,14 @@ +@@ -1089,13 +1050,14 @@ { MpegTSWrite *ts = s->priv_data; MpegTSWriteStream *ts_st = st->priv_data; @@ -298,7 +298,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c *q++ = 0x20 | ts_st->cc; /* Adaptation only */ /* Continuity Count field does not increment (see 13818-1 section 2.4.3.3) */ *q++ = TS_PACKET_SIZE - 5; /* Adaptation Field Length */ -@@ -1102,7 +1064,7 @@ +@@ -1106,7 +1068,7 @@ } /* PCR coded into 6 bytes */ @@ -307,7 +307,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c /* stuffing bytes */ memset(q, 0xFF, TS_PACKET_SIZE - (q - buf)); -@@ -1171,8 +1133,6 @@ +@@ -1175,8 +1137,6 @@ uint8_t *q; int val, is_start, len, header_len, write_pcr, is_dvb_subtitle, is_dvb_teletext, flags; int afc_len, stuffing_len; @@ -316,7 +316,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c int force_pat = st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && key && !ts_st->prev_payload_key; av_assert0(ts_st->payload != buf || st->codecpar->codec_type != AVMEDIA_TYPE_VIDEO); -@@ -1182,28 +1142,33 @@ +@@ -1186,28 +1146,33 @@ is_start = 1; while (payload_size > 0) { @@ -363,7 +363,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c continue; } -@@ -1213,6 +1178,10 @@ +@@ -1217,6 +1182,10 @@ val = ts_st->pid >> 8; if (is_start) val |= 0x40; @@ -374,7 +374,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c *q++ = val; *q++ = ts_st->pid; ts_st->cc = ts_st->cc + 1 & 0xf; -@@ -1224,7 +1193,7 @@ +@@ -1228,7 +1197,7 @@ } if (key && is_start && pts != AV_NOPTS_VALUE) { // set Random Access for key frames @@ -383,7 +383,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c write_pcr = 1; set_af_flag(buf, 0x40); q = get_ts_payload_start(buf); -@@ -1232,14 +1201,10 @@ +@@ -1236,14 +1205,10 @@ if (write_pcr) { set_af_flag(buf, 0x10); q = get_ts_payload_start(buf); @@ -400,7 +400,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c q = get_ts_payload_start(buf); } if (is_start) { -@@ -1340,11 +1305,13 @@ +@@ -1344,11 +1309,13 @@ *q++ = flags; *q++ = header_len; if (pts != AV_NOPTS_VALUE) { @@ -416,7 +416,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c q += 5; } if (pes_extension && st->codecpar->codec_id == AV_CODEC_ID_DIRAC) { -@@ -1515,7 +1482,6 @@ +@@ -1519,7 +1486,6 @@ uint8_t *data = NULL; MpegTSWrite *ts = s->priv_data; MpegTSWriteStream *ts_st = st->priv_data; @@ -424,7 +424,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c int64_t dts = pkt->dts, pts = pkt->pts; int opus_samples = 0; int side_data_size; -@@ -1536,16 +1502,15 @@ +@@ -1540,16 +1506,15 @@ } if (ts->flags & MPEGTS_FLAG_REEMIT_PAT_PMT) { @@ -444,7 +444,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c } if (ts_st->first_pts_check && pts == AV_NOPTS_VALUE) { -@@ -1733,7 +1698,7 @@ +@@ -1737,7 +1702,7 @@ AVStream *st2 = s->streams[i]; MpegTSWriteStream *ts_st2 = st2->priv_data; if ( ts_st2->payload_size @@ -453,7 +453,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c mpegts_write_pes(s, st2, ts_st2->payload, ts_st2->payload_size, ts_st2->payload_pts, ts_st2->payload_dts, ts_st2->payload_flags & AV_PKT_FLAG_KEY, stream_id); -@@ -1904,12 +1869,18 @@ +@@ -1908,12 +1873,18 @@ { "mpegts_pmt_start_pid", "Set the first pid of the PMT.", offsetof(MpegTSWrite, pmt_start_pid), AV_OPT_TYPE_INT, { .i64 = 0x1000 }, 0x0010, 0x1f00, AV_OPT_FLAG_ENCODING_PARAM }, @@ -473,7 +473,7 @@ diff -urN a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c { "muxrate", NULL, offsetof(MpegTSWrite, mux_rate), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM }, -@@ -1947,15 +1918,15 @@ +@@ -1951,15 +1922,15 @@ { "omit_video_pes_length", "Omit the PES packet length for video packets", offsetof(MpegTSWrite, omit_video_pes_length), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, AV_OPT_FLAG_ENCODING_PARAM }, diff --git a/cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.patch5 b/cinelerra-5.1/thirdparty/src/ffmpeg-3.4.1.patch3 similarity index 79% rename from cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.patch5 rename to cinelerra-5.1/thirdparty/src/ffmpeg-3.4.1.patch3 index 55cc48b8..a96cf1cd 100644 --- a/cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.patch5 +++ b/cinelerra-5.1/thirdparty/src/ffmpeg-3.4.1.patch3 @@ -1,6 +1,6 @@ diff -ur a/libavformat/avformat.h b/libavformat/avformat.h ---- a/libavformat/avformat.h 2017-06-06 20:03:55.000000000 -0600 -+++ b/libavformat/avformat.h 2017-07-20 09:10:40.434571231 -0600 +--- a/libavformat/avformat.h 2017-12-10 14:35:10.000000000 -0700 ++++ b/libavformat/avformat.h 2017-12-18 11:11:31.791996302 -0700 @@ -504,6 +504,9 @@ The user or muxer can override this through AVFormatContext.avoid_negative_ts @@ -22,8 +22,8 @@ diff -ur a/libavformat/avformat.h b/libavformat/avformat.h int flags; diff -ur a/libavformat/dv.c b/libavformat/dv.c ---- a/libavformat/dv.c 2017-06-06 20:03:55.000000000 -0600 -+++ b/libavformat/dv.c 2017-07-20 09:12:00.277148325 -0600 +--- a/libavformat/dv.c 2017-12-10 14:35:10.000000000 -0700 ++++ b/libavformat/dv.c 2017-12-18 11:11:31.792996246 -0700 @@ -632,6 +632,7 @@ AVInputFormat ff_dv_demuxer = { .name = "dv", @@ -33,9 +33,9 @@ diff -ur a/libavformat/dv.c b/libavformat/dv.c .read_probe = dv_probe, .read_header = dv_read_header, diff -ur a/libavformat/matroskadec.c b/libavformat/matroskadec.c ---- a/libavformat/matroskadec.c 2017-06-06 20:03:55.000000000 -0600 -+++ b/libavformat/matroskadec.c 2017-07-20 12:29:39.804273095 -0600 -@@ -3936,6 +3936,7 @@ +--- a/libavformat/matroskadec.c 2017-12-10 14:35:10.000000000 -0700 ++++ b/libavformat/matroskadec.c 2017-12-18 11:11:31.793996189 -0700 +@@ -3984,6 +3984,7 @@ AVInputFormat ff_matroska_demuxer = { .name = "matroska,webm", .long_name = NULL_IF_CONFIG_SMALL("Matroska / WebM"), @@ -43,7 +43,7 @@ diff -ur a/libavformat/matroskadec.c b/libavformat/matroskadec.c .extensions = "mkv,mk3d,mka,mks", .priv_data_size = sizeof(MatroskaDemuxContext), .read_probe = matroska_probe, -@@ -3949,6 +3950,7 @@ +@@ -3997,6 +3998,7 @@ AVInputFormat ff_webm_dash_manifest_demuxer = { .name = "webm_dash_manifest", .long_name = NULL_IF_CONFIG_SMALL("WebM DASH Manifest"), @@ -51,10 +51,10 @@ diff -ur a/libavformat/matroskadec.c b/libavformat/matroskadec.c .priv_data_size = sizeof(MatroskaDemuxContext), .read_header = webm_dash_manifest_read_header, .read_packet = webm_dash_manifest_read_packet, -diff -ur a/libavformat/utils.c b/libavformat/utils.c ---- a/libavformat/utils.c 2017-06-06 20:04:02.000000000 -0600 -+++ b/libavformat/utils.c 2017-07-20 09:53:28.684729516 -0600 -@@ -2412,6 +2412,13 @@ +diff -ur a/libavformat/utils.c ./libavformat/utils.c +--- a/libavformat/utils.c 2017-12-10 14:35:18.000000000 -0700 ++++ b/libavformat/utils.c 2017-12-18 11:11:31.795996077 -0700 +@@ -2416,6 +2416,13 @@ return seek_frame_byte(s, stream_index, timestamp, flags); } diff --git a/cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.tar.xz b/cinelerra-5.1/thirdparty/src/ffmpeg-3.4.1.tar.xz similarity index 51% rename from cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.tar.xz rename to cinelerra-5.1/thirdparty/src/ffmpeg-3.4.1.tar.xz index 671b6197..8970943c 100644 Binary files a/cinelerra-5.1/thirdparty/src/ffmpeg-3.3.4.tar.xz and b/cinelerra-5.1/thirdparty/src/ffmpeg-3.4.1.tar.xz differ diff --git a/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch1 b/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch1 index 2e9797e7..daa99538 100644 --- a/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch1 +++ b/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch1 @@ -1,6 +1,6 @@ -diff -ur a/libavformat/bluray.c b/libavformat/bluray.c ---- a/libavformat/bluray.c 2017-10-13 16:31:25.000000000 -0600 -+++ b/libavformat/bluray.c 2017-10-13 20:05:45.910046165 -0600 +diff -ru ffmpeg-3.0.orig/libavformat/bluray.c ffmpeg-3.0/libavformat/bluray.c +--- ffmpeg-3.0.orig/libavformat/bluray.c 2015-03-13 11:34:50.000000000 -0600 ++++ ffmpeg-3.0/libavformat/bluray.c 2016-05-09 14:07:34.758713307 -0600 @@ -28,7 +28,7 @@ #include "libavutil/opt.h" diff --git a/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch2 b/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch2 index fac11649..bb628d93 100644 --- a/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch2 +++ b/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch2 @@ -1,6 +1,6 @@ diff -ur a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c ---- a/libavformat/mpegtsenc.c 2017-10-13 16:31:25.000000000 -0600 -+++ b/libavformat/mpegtsenc.c 2017-10-13 20:06:27.930649088 -0600 +--- a/libavformat/mpegtsenc.c 2017-12-10 14:35:10.000000000 -0700 ++++ b/libavformat/mpegtsenc.c 2017-12-18 10:54:14.260167666 -0700 @@ -56,9 +56,8 @@ int sid; /* service ID */ char *name; @@ -496,4 +496,3 @@ diff -ur a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c { NULL }, }; -Only in b/libavformat: mpegtsenc.c.orig diff --git a/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch3 b/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch3 index c774d19a..a96cf1cd 100644 --- a/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch3 +++ b/cinelerra-5.1/thirdparty/src/ffmpeg.git.patch3 @@ -1,6 +1,6 @@ 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 +--- a/libavformat/avformat.h 2017-12-10 14:35:10.000000000 -0700 ++++ b/libavformat/avformat.h 2017-12-18 11:11:31.791996302 -0700 @@ -504,6 +504,9 @@ The user or muxer can override this through AVFormatContext.avoid_negative_ts @@ -22,8 +22,8 @@ diff -ur a/libavformat/avformat.h b/libavformat/avformat.h 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 +--- a/libavformat/dv.c 2017-12-10 14:35:10.000000000 -0700 ++++ b/libavformat/dv.c 2017-12-18 11:11:31.792996246 -0700 @@ -632,6 +632,7 @@ AVInputFormat ff_dv_demuxer = { .name = "dv", @@ -33,8 +33,8 @@ diff -ur a/libavformat/dv.c b/libavformat/dv.c .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 +--- a/libavformat/matroskadec.c 2017-12-10 14:35:10.000000000 -0700 ++++ b/libavformat/matroskadec.c 2017-12-18 11:11:31.793996189 -0700 @@ -3984,6 +3984,7 @@ AVInputFormat ff_matroska_demuxer = { .name = "matroska,webm", @@ -51,11 +51,10 @@ diff -ur a/libavformat/matroskadec.c b/libavformat/matroskadec.c .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 @@ +diff -ur a/libavformat/utils.c ./libavformat/utils.c +--- a/libavformat/utils.c 2017-12-10 14:35:18.000000000 -0700 ++++ b/libavformat/utils.c 2017-12-18 11:11:31.795996077 -0700 +@@ -2416,6 +2416,13 @@ return seek_frame_byte(s, stream_index, timestamp, flags); } @@ -69,4 +68,3 @@ diff -ur a/libavformat/utils.c b/libavformat/utils.c if (stream_index < 0) { stream_index = av_find_default_stream_index(s); if (stream_index < 0) -Only in b/libavformat: utils.c.orig diff --git a/cinelerra-5.1/thirdparty/src/opus-1.2.1.tar.xz b/cinelerra-5.1/thirdparty/src/opus-1.2.1.tar.xz new file mode 100644 index 00000000..c2f3c813 Binary files /dev/null and b/cinelerra-5.1/thirdparty/src/opus-1.2.1.tar.xz differ