Anton Khirnov: > This avoids a potential race with the demuxer adding new streams. It is > also more efficient, since we no longer do inter-thread transfers of > packets that will be just discarded. > --- > fftools/ffmpeg.c | 22 ---------------------- > fftools/ffmpeg_demux.c | 23 +++++++++++++++++++++++ > 2 files changed, 23 insertions(+), 22 deletions(-) > > diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c > index 1393ca9c1e..37f52f0208 100644 > --- a/fftools/ffmpeg.c > +++ b/fftools/ffmpeg.c > @@ -3277,21 +3277,6 @@ static int init_output_stream(OutputStream *ost, > AVFrame *frame, > return ret; > } > > -static void report_new_stream(int input_index, AVPacket *pkt) > -{ > - InputFile *file = input_files[input_index]; > - AVStream *st = file->ctx->streams[pkt->stream_index]; > - > - if (pkt->stream_index < file->nb_streams_warn) > - return; > - av_log(file->ctx, AV_LOG_WARNING, > - "New %s stream %d:%d at pos:%"PRId64" and DTS:%ss\n", > - av_get_media_type_string(st->codecpar->codec_type), > - input_index, pkt->stream_index, > - pkt->pos, av_ts2timestr(pkt->dts, &st->time_base)); > - file->nb_streams_warn = pkt->stream_index + 1; > -} > - > static int transcode_init(void) > { > int ret = 0, i, j, k; > @@ -3831,13 +3816,6 @@ static int process_input(int file_index) > > reset_eagain(); > > - /* the following test is needed in case new streams appear > - dynamically in stream : we ignore them */ > - if (pkt->stream_index >= ifile->nb_streams) { > - report_new_stream(file_index, pkt); > - goto discard_packet; > - } > - > ist = input_streams[ifile->ist_index + pkt->stream_index]; > > ist->data_size += pkt->size; > diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c > index f9bd6d47fe..66cb6ebd5f 100644 > --- a/fftools/ffmpeg_demux.c > +++ b/fftools/ffmpeg_demux.c > @@ -20,6 +20,7 @@ > > #include "libavutil/error.h" > #include "libavutil/time.h" > +#include "libavutil/timestamp.h" > #include "libavutil/thread.h" > #include "libavutil/threadmessage.h" > > @@ -27,6 +28,20 @@ > > #include "libavformat/avformat.h" > > +static void report_new_stream(InputFile *file, AVPacket *pkt) > +{ > + AVStream *st = file->ctx->streams[pkt->stream_index];
Missing const on st and pkt. > + > + if (pkt->stream_index < file->nb_streams_warn) > + return; > + av_log(file->ctx, AV_LOG_WARNING, > + "New %s stream %d:%d at pos:%"PRId64" and DTS:%ss\n", > + av_get_media_type_string(st->codecpar->codec_type), > + file->index, pkt->stream_index, > + pkt->pos, av_ts2timestr(pkt->dts, &st->time_base)); > + file->nb_streams_warn = pkt->stream_index + 1; > +} > + > static void *input_thread(void *arg) > { > InputFile *f = arg; > @@ -51,6 +66,14 @@ static void *input_thread(void *arg) > f->ctx->streams[pkt->stream_index]); > } > > + /* the following test is needed in case new streams appear > + dynamically in stream : we ignore them */ > + if (pkt->stream_index >= f->nb_streams) { > + report_new_stream(f, pkt); > + av_packet_unref(pkt); > + continue; > + } > + > queue_pkt = av_packet_alloc(); > if (!queue_pkt) { > av_packet_unref(pkt); _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".