diff --git a/doc/examples/hw_decode.c b/doc/examples/hw_decode.c index 096a229c0d..0d23f451e6 100644 --- a/doc/examples/hw_decode.c +++ b/doc/examples/hw_decode.c @@ -153,7 +153,7 @@ int main(int argc, char *argv[]) AVStream *video = NULL; AVCodecContext *decoder_ctx = NULL; const AVCodec *decoder = NULL; - AVPacket packet; + AVPacket *packet = NULL; enum AVHWDeviceType type; int i; @@ -172,6 +172,12 @@ int main(int argc, char *argv[]) return -1; } + packet = av_packet_alloc(); + if (!packet) { + fprintf(stderr, "Failed to allocate AVPacket\n"); + return -1; + } + /* open the input file */ if (avformat_open_input(&input_ctx, argv[2], NULL, NULL) != 0) { fprintf(stderr, "Cannot open input file '%s'\n", argv[2]); @@ -227,23 +233,21 @@ int main(int argc, char *argv[]) /* actual decoding and dump the raw data */ while (ret >= 0) { - if ((ret = av_read_frame(input_ctx, &packet)) < 0) + if ((ret = av_read_frame(input_ctx, packet)) < 0) break; - if (video_stream == packet.stream_index) - ret = decode_write(decoder_ctx, &packet); + if (video_stream == packet->stream_index) + ret = decode_write(decoder_ctx, packet); - av_packet_unref(&packet); + av_packet_unref(packet); } /* flush the decoder */ - packet.data = NULL; - packet.size = 0; - ret = decode_write(decoder_ctx, &packet); - av_packet_unref(&packet); + ret = decode_write(decoder_ctx, NULL); if (output_file) fclose(output_file); + av_packet_free(&packet); avcodec_free_context(&decoder_ctx); avformat_close_input(&input_ctx); av_buffer_unref(&hw_device_ctx);