diff options
author | Clément Bœsch <cboesch@gopro.com> | 2017-04-04 12:33:04 +0300 |
---|---|---|
committer | Clément Bœsch <cboesch@gopro.com> | 2017-04-04 12:33:04 +0300 |
commit | 3d12d106775a5a821b3cb3aaaeadd8cb48f19550 (patch) | |
tree | fdeff3353652d4a7f066e14ec08389dd7e717168 /doc/examples/decode_audio.c | |
parent | 87e16e2b44584fdb4397b59cf59274e68a58fb7c (diff) | |
parent | 3d66717f7cb5555257244be8f5bce172ed3af7ac (diff) |
Merge commit '3d66717f7cb5555257244be8f5bce172ed3af7ac'
* commit '3d66717f7cb5555257244be8f5bce172ed3af7ac':
examples/decode_audio: use the new audio decoding API
Merged-by: Clément Bœsch <cboesch@gopro.com>
Diffstat (limited to 'doc/examples/decode_audio.c')
-rw-r--r-- | doc/examples/decode_audio.c | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/doc/examples/decode_audio.c b/doc/examples/decode_audio.c index 8ad9f06fa2..47c878dc02 100644 --- a/doc/examples/decode_audio.c +++ b/doc/examples/decode_audio.c @@ -42,29 +42,34 @@ static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile) { - int len, got_frame; + int i, ch; + int ret, data_size; - while (pkt->size > 0) { - len = avcodec_decode_audio4(dec_ctx, frame, &got_frame, pkt); - if (len < 0) { - fprintf(stderr, "Error while decoding\n"); + /* send the packet with the compressed data to the decoder */ + ret = avcodec_send_packet(dec_ctx, pkt); + if (ret < 0) { + fprintf(stderr, "Error submitting the packet to the decoder\n"); + exit(1); + } + + /* read all the output frames (in general there may be any number of them */ + while (ret >= 0) { + ret = avcodec_receive_frame(dec_ctx, frame); + if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) + return; + else if (ret < 0) { + fprintf(stderr, "Error during decoding\n"); exit(1); } - if (got_frame) { - int i, ch; - /* if a frame has been decoded, output it */ - int data_size = av_get_bytes_per_sample(dec_ctx->sample_fmt); - if (data_size < 0) { - /* This should not occur, checking just for paranoia */ - fprintf(stderr, "Failed to calculate data size\n"); - exit(1); - } - for (i = 0; i < frame->nb_samples; i++) - for (ch = 0; ch < dec_ctx->channels; ch++) - fwrite(frame->data[ch] + data_size*i, 1, data_size, outfile); + data_size = av_get_bytes_per_sample(dec_ctx->sample_fmt); + if (data_size < 0) { + /* This should not occur, checking just for paranoia */ + fprintf(stderr, "Failed to calculate data size\n"); + exit(1); } - pkt->size -= len; - pkt->data += len; + for (i = 0; i < frame->nb_samples; i++) + for (ch = 0; ch < dec_ctx->channels; ch++) + fwrite(frame->data[ch] + data_size*i, 1, data_size, outfile); } } |