From 59ab9e8ba1df7e3347a4cd2bd56c32e74aede802 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Thu, 20 Oct 2016 11:03:20 +0200 Subject: [PATCH] examples/encode_video: allocate the packet dynamically AVPackets on stack are discouraged. --- doc/examples/encode_video.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/doc/examples/encode_video.c b/doc/examples/encode_video.c index 2ff6354354..cb128361d5 100644 --- a/doc/examples/encode_video.c +++ b/doc/examples/encode_video.c @@ -69,7 +69,7 @@ int main(int argc, char **argv) int i, ret, x, y; FILE *f; AVFrame *picture; - AVPacket pkt; + AVPacket *pkt; uint8_t endcode[] = { 0, 0, 1, 0xb7 }; if (argc <= 1) { @@ -90,6 +90,10 @@ int main(int argc, char **argv) c = avcodec_alloc_context3(codec); picture = av_frame_alloc(); + pkt = av_packet_alloc(); + if (!pkt) + exit(1); + /* put sample parameters */ c->bit_rate = 400000; /* resolution must be a multiple of two */ @@ -127,10 +131,6 @@ int main(int argc, char **argv) /* encode 1 second of video */ for(i=0;i<25;i++) { - av_init_packet(&pkt); - pkt.data = NULL; // packet data will be allocated by the encoder - pkt.size = 0; - fflush(stdout); /* make sure the frame data is writable */ @@ -157,11 +157,11 @@ int main(int argc, char **argv) picture->pts = i; /* encode the image */ - encode(c, picture, &pkt, f); + encode(c, picture, pkt, f); } /* flush the encoder */ - encode(c, NULL, &pkt, f); + encode(c, NULL, pkt, f); /* add sequence end code to have a real MPEG file */ fwrite(endcode, 1, sizeof(endcode), f); @@ -169,6 +169,7 @@ int main(int argc, char **argv) avcodec_free_context(&c); av_frame_free(&picture); + av_packet_free(&pkt); return 0; }