Browse Source

examples/encode_video: allocate the packet dynamically

AVPackets on stack are discouraged.
tags/n3.4
Anton Khirnov 9 years ago
parent
commit
59ab9e8ba1
1 changed files with 8 additions and 7 deletions
  1. +8
    -7
      doc/examples/encode_video.c

+ 8
- 7
doc/examples/encode_video.c View File

@@ -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;
}

Loading…
Cancel
Save