diff --git a/libavformat/wc3movie.c b/libavformat/wc3movie.c index 76e945d261..cd69931a42 100644 --- a/libavformat/wc3movie.c +++ b/libavformat/wc3movie.c @@ -69,7 +69,7 @@ typedef struct Wc3DemuxContext { int video_stream_index; int audio_stream_index; - AVPacket vpkt; + AVPacket *vpkt; } Wc3DemuxContext; @@ -77,8 +77,7 @@ static int wc3_read_close(AVFormatContext *s) { Wc3DemuxContext *wc3 = s->priv_data; - if (wc3->vpkt.size > 0) - av_packet_unref(&wc3->vpkt); + av_packet_free(&wc3->vpkt); return 0; } @@ -110,8 +109,9 @@ static int wc3_read_header(AVFormatContext *s) wc3->height = WC3_DEFAULT_HEIGHT; wc3->pts = 0; wc3->video_stream_index = wc3->audio_stream_index = 0; - av_init_packet(&wc3->vpkt); - wc3->vpkt.data = NULL; wc3->vpkt.size = 0; + wc3->vpkt = av_packet_alloc(); + if (!wc3->vpkt) + return AVERROR(ENOMEM); /* skip the first 3 32-bit numbers */ avio_skip(pb, 12); @@ -162,7 +162,7 @@ static int wc3_read_header(AVFormatContext *s) case PALT_TAG: /* one of several palettes */ avio_seek(pb, -8, SEEK_CUR); - av_append_packet(pb, &wc3->vpkt, 8 + PALETTE_SIZE); + av_append_packet(pb, wc3->vpkt, 8 + PALETTE_SIZE); break; default: @@ -248,18 +248,17 @@ static int wc3_read_packet(AVFormatContext *s, case SHOT_TAG: /* load up new palette */ avio_seek(pb, -8, SEEK_CUR); - av_append_packet(pb, &wc3->vpkt, 8 + 4); + av_append_packet(pb, wc3->vpkt, 8 + 4); break; case VGA__TAG: /* send out video chunk */ avio_seek(pb, -8, SEEK_CUR); - ret= av_append_packet(pb, &wc3->vpkt, 8 + size); + ret= av_append_packet(pb, wc3->vpkt, 8 + size); // ignore error if we have some data - if (wc3->vpkt.size > 0) + if (wc3->vpkt->size > 0) ret = 0; - *pkt = wc3->vpkt; - wc3->vpkt.data = NULL; wc3->vpkt.size = 0; + av_packet_move_ref(pkt, wc3->vpkt); pkt->stream_index = wc3->video_stream_index; pkt->pts = wc3->pts; packet_read = 1;