diff options
author | Stefano Sabatini <stefasab@gmail.com> | 2014-01-08 18:42:14 +0400 |
---|---|---|
committer | Stefano Sabatini <stefasab@gmail.com> | 2014-01-09 13:51:52 +0400 |
commit | 9abe4a10fd58564df194e7a8e3f082dd266d36b1 (patch) | |
tree | 1467ad09049db577af2cbc84af632741ca3c0ce3 | |
parent | 80bca6eabe8acd3bc6ab2d4257cc5d9bbcbe8a79 (diff) |
examples/muxing: reuse global audio frame
Simplify logic, avoid multiple unnecessary alloc/free operations.
-rw-r--r-- | doc/examples/muxing.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/doc/examples/muxing.c b/doc/examples/muxing.c index 5aeabc19de..c4735cf29f 100644 --- a/doc/examples/muxing.c +++ b/doc/examples/muxing.c @@ -123,6 +123,7 @@ static AVStream *add_stream(AVFormatContext *oc, AVCodec **codec, static float t, tincr, tincr2; +AVFrame *audio_frame; static uint8_t **src_samples_data; static int src_samples_linesize; static int src_nb_samples; @@ -141,6 +142,13 @@ static void open_audio(AVFormatContext *oc, AVCodec *codec, AVStream *st) c = st->codec; + /* allocate and init a re-usable frame */ + audio_frame = av_frame_alloc(); + if (!audio_frame) { + fprintf(stderr, "Could not allocate audio frame\n"); + exit(1); + } + /* open it */ ret = avcodec_open2(c, codec, NULL); if (ret < 0) { @@ -225,7 +233,6 @@ static void write_audio_frame(AVFormatContext *oc, AVStream *st) { AVCodecContext *c; AVPacket pkt = { 0 }; // data and size must be 0; - AVFrame *frame = av_frame_alloc(); int got_packet, ret, dst_nb_samples; av_init_packet(&pkt); @@ -261,18 +268,18 @@ static void write_audio_frame(AVFormatContext *oc, AVStream *st) dst_nb_samples = src_nb_samples; } - frame->nb_samples = dst_nb_samples; - avcodec_fill_audio_frame(frame, c->channels, c->sample_fmt, + audio_frame->nb_samples = dst_nb_samples; + avcodec_fill_audio_frame(audio_frame, c->channels, c->sample_fmt, dst_samples_data[0], dst_samples_size, 0); - ret = avcodec_encode_audio2(c, &pkt, frame, &got_packet); + ret = avcodec_encode_audio2(c, &pkt, audio_frame, &got_packet); if (ret < 0) { fprintf(stderr, "Error encoding audio frame: %s\n", av_err2str(ret)); exit(1); } if (!got_packet) - goto freeframe; + return; pkt.stream_index = st->index; @@ -283,8 +290,6 @@ static void write_audio_frame(AVFormatContext *oc, AVStream *st) av_err2str(ret)); exit(1); } -freeframe: - av_frame_free(&frame); } static void close_audio(AVFormatContext *oc, AVStream *st) @@ -296,6 +301,7 @@ static void close_audio(AVFormatContext *oc, AVStream *st) } av_free(src_samples_data[0]); av_free(src_samples_data); + av_frame_free(&audio_frame); } /**************************************************************/ |