diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-09-03 23:44:36 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-10-03 20:50:49 +0200 |
commit | e9182820ad30dd7f68634822a03010408d90988c (patch) | |
tree | d687d81d9ed48903b58b5781b5f14f08ea764dd4 | |
parent | 86ec1093ebb488b3c07b0ba5a2e5962f4612477e (diff) | |
download | ffmpeg-e9182820ad30dd7f68634822a03010408d90988c.tar.gz |
examples/hw_decode: Don't use stack packet
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r-- | doc/examples/hw_decode.c | 22 |
1 files changed, 13 insertions, 9 deletions
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); |