[FFmpeg-cvslog] examples/hw_decode: Don't use stack packet

Andreas Rheinhardt git at videolan.org
Sun Oct 3 23:48:36 EEST 2021


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Fri Sep  3 23:44:36 2021 +0200| [e9182820ad30dd7f68634822a03010408d90988c] | committer: Andreas Rheinhardt

examples/hw_decode: Don't use stack packet

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e9182820ad30dd7f68634822a03010408d90988c
---

 doc/examples/hw_decode.c | 22 +++++++++++++---------
 1 file 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);



More information about the ffmpeg-cvslog mailing list