Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests/api
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2021-01-27 15:38:00 +0300
committerAnton Khirnov <anton@khirnov.net>2021-03-08 11:29:50 +0300
commitf942e1488400e94bfc2aeb38a413a9056c2f4b0d (patch)
tree705458b8e7e6bec86c05497e0e3fa266a825e74c /tests/api
parentba30fd6c81261c0896e5755a4e1440c2792e2e89 (diff)
tests/api-flac-test: convert to new encoding/decoding API
Diffstat (limited to 'tests/api')
-rw-r--r--tests/api/api-flac-test.c40
1 files changed, 26 insertions, 14 deletions
diff --git a/tests/api/api-flac-test.c b/tests/api/api-flac-test.c
index 7c96a4d99e..3d83c56987 100644
--- a/tests/api/api-flac-test.c
+++ b/tests/api/api-flac-test.c
@@ -113,7 +113,6 @@ static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx,
uint8_t *raw_in = NULL, *raw_out = NULL;
int in_offset = 0, out_offset = 0;
int result = 0;
- int got_output = 0;
int i = 0;
int in_frame_bytes, out_frame_bytes;
@@ -167,25 +166,40 @@ static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx,
}
memcpy(raw_in + in_offset, in_frame->data[0], in_frame_bytes);
in_offset += in_frame_bytes;
- result = avcodec_encode_audio2(enc_ctx, &enc_pkt, in_frame, &got_output);
+ result = avcodec_send_frame(enc_ctx, in_frame);
if (result < 0) {
- av_log(NULL, AV_LOG_ERROR, "Error encoding audio frame\n");
+ av_log(NULL, AV_LOG_ERROR, "Error submitting a frame for encoding\n");
return result;
}
- /* if we get an encoded packet, feed it straight to the decoder */
- if (got_output) {
- result = avcodec_decode_audio4(dec_ctx, out_frame, &got_output, &enc_pkt);
+ while (result >= 0) {
+ result = avcodec_receive_packet(enc_ctx, &enc_pkt);
+ if (result == AVERROR(EAGAIN))
+ break;
+ else if (result < 0 && result != AVERROR_EOF) {
+ av_log(NULL, AV_LOG_ERROR, "Error encoding audio frame\n");
+ return result;
+ }
+
+ /* if we get an encoded packet, feed it straight to the decoder */
+ result = avcodec_send_packet(dec_ctx, &enc_pkt);
+ av_packet_unref(&enc_pkt);
if (result < 0) {
- av_log(NULL, AV_LOG_ERROR, "Error decoding audio packet\n");
+ av_log(NULL, AV_LOG_ERROR, "Error submitting a packet for decoding\n");
return result;
}
- if (got_output) {
- if (result != enc_pkt.size) {
- av_log(NULL, AV_LOG_INFO, "Decoder consumed only part of a packet, it is allowed to do so -- need to update this test\n");
- return AVERROR_UNKNOWN;
- }
+ result = avcodec_receive_frame(dec_ctx, out_frame);
+ if (result == AVERROR(EAGAIN)) {
+ result = 0;
+ continue;
+ } else if (result == AVERROR(EOF)) {
+ result = 0;
+ break;
+ } else if (result < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Error decoding audio packet\n");
+ return result;
+ }
if (in_frame->nb_samples != out_frame->nb_samples) {
av_log(NULL, AV_LOG_ERROR, "Error frames before and after decoding has different number of samples\n");
@@ -208,9 +222,7 @@ static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx,
}
memcpy(raw_out + out_offset, out_frame->data[0], out_frame_bytes);
out_offset += out_frame_bytes;
- }
}
- av_packet_unref(&enc_pkt);
}
if (memcmp(raw_in, raw_out, out_frame_bytes * NUMBER_OF_AUDIO_FRAMES) != 0) {