X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fffmpeg.C;h=d13cf8b32f0aeccb9f2296e9435aff66950f7d6a;hp=65e0c780e793cfaa82b04cd3860cafbe8cb98066;hb=c98ecabef4f08c66ad7dbd3004cf7995e012dc3e;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/ffmpeg.C b/cinelerra-5.1/cinelerra/ffmpeg.C index 65e0c780..d13cf8b3 100644 --- a/cinelerra-5.1/cinelerra/ffmpeg.C +++ b/cinelerra-5.1/cinelerra/ffmpeg.C @@ -48,6 +48,9 @@ #define AUDIO_REFILL_THRESH 0x1000 #define AUDIO_MIN_FRAME_SZ 128 +#define FF_ESTM_TIMES 0x0001 +#define FF_BAD_TIMES 0x0002 + Mutex FFMPEG::fflock("FFMPEG::fflock"); static void ff_err(int ret, const char *fmt, ...) @@ -481,7 +484,7 @@ int FFStream::write_packet(FFPacket &pkt) int FFStream::encode_frame(AVFrame *frame) { int pkts = 0, ret = 0; - for( int retry=100; --retry>=0; ) { + for( int retry=MAX_RETRY; --retry>=0; ) { if( frame || !pkts ) ret = avcodec_send_frame(avctx, frame); if( !ret && frame ) return pkts; @@ -1325,6 +1328,7 @@ FFMPEG::FFMPEG(FileBase *file_base) opt_duration = -1; opt_video_filter = 0; opt_audio_filter = 0; + fflags = 0; char option_path[BCTEXTLEN]; set_option_path(option_path, "%s", "ffmpeg.opts"); read_options(option_path, opts); @@ -1999,10 +2003,10 @@ int FFMPEG::open_decoder() estimated = 1; } } - static int notified = 0; - if( !notified && estimated ) { - notified = 1; - printf("FFMPEG::open_decoder: some stream times estimated\n"); + if( estimated && !(fflags & FF_ESTM_TIMES) ) { + fflags |= FF_ESTM_TIMES; + printf("FFMPEG::open_decoder: some stream times estimated: %s\n", + fmt_ctx->url); } ff_lock("FFMPEG::open_decoder"); @@ -2058,8 +2062,11 @@ int FFMPEG::open_decoder() default: break; } } - if( bad_time ) - printf("FFMPEG::open_decoder: some stream have bad times\n"); + if( bad_time && !(fflags & FF_BAD_TIMES) ) { + fflags |= FF_BAD_TIMES; + printf("FFMPEG::open_decoder: some stream have bad times: %s\n", + fmt_ctx->url); + } ff_unlock(); return ret < 0 ? -1 : 0; }