diff options
-rw-r--r-- | libavfilter/src_movie.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/libavfilter/src_movie.c b/libavfilter/src_movie.c index b9b940684d..75ac3bfaf6 100644 --- a/libavfilter/src_movie.c +++ b/libavfilter/src_movie.c @@ -71,7 +71,7 @@ typedef struct MovieContext { AVFormatContext *format_ctx; int eof; - AVPacket pkt, pkt0; + AVPacket pkt; int max_stream_index; /**< max stream # actually used for output */ MovieStream *st; /**< array of all streams, one per output */ @@ -493,25 +493,21 @@ static int movie_push_frame(AVFilterContext *ctx, unsigned out_id) pkt->stream_index = movie->st[out_id].st->index; /* packet is already ready for flushing */ } else { - ret = av_read_frame(movie->format_ctx, &movie->pkt0); + ret = av_read_frame(movie->format_ctx, pkt); if (ret < 0) { - *pkt = movie->pkt0; if (ret == AVERROR_EOF) { movie->eof = 1; return 0; /* start flushing */ } return ret; } - *pkt = movie->pkt0; } } pkt_out_id = pkt->stream_index > movie->max_stream_index ? -1 : movie->out_index[pkt->stream_index]; if (pkt_out_id < 0) { - av_packet_unref(&movie->pkt0); - pkt->size = 0; /* ready for next run */ - pkt->data = NULL; + av_packet_unref(pkt); return 0; } st = &movie->st[pkt_out_id]; @@ -536,9 +532,7 @@ static int movie_push_frame(AVFilterContext *ctx, unsigned out_id) if (ret < 0) { av_log(ctx, AV_LOG_WARNING, "Decode error: %s\n", av_err2str(ret)); av_frame_free(&frame); - av_packet_unref(&movie->pkt0); - movie->pkt.size = 0; - movie->pkt.data = NULL; + av_packet_unref(pkt); return 0; } if (!ret || st->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) @@ -546,11 +540,8 @@ static int movie_push_frame(AVFilterContext *ctx, unsigned out_id) pkt->data += ret; pkt->size -= ret; - if (pkt->size <= 0) { - av_packet_unref(&movie->pkt0); - pkt->size = 0; /* ready for next run */ - pkt->data = NULL; - } + if (pkt->size <= 0) + av_packet_unref(pkt); if (!got_frame) { if (!ret) st->done = 1; |