parent
923d5c489f
commit
cc6a1f1417
@ -141,10 +141,26 @@ static int adx_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
|
|||||||
const AVFrame *frame, int *got_packet_ptr)
|
const AVFrame *frame, int *got_packet_ptr)
|
||||||
{
|
{
|
||||||
ADXContext *c = avctx->priv_data;
|
ADXContext *c = avctx->priv_data;
|
||||||
const int16_t *samples = (const int16_t *)frame->data[0];
|
const int16_t *samples = frame ? (const int16_t *)frame->data[0] : NULL;
|
||||||
uint8_t *dst;
|
uint8_t *dst;
|
||||||
int ch, out_size, ret;
|
int ch, out_size, ret;
|
||||||
|
|
||||||
|
if (!samples) {
|
||||||
|
if (c->eof)
|
||||||
|
return 0;
|
||||||
|
if ((ret = ff_alloc_packet2(avctx, avpkt, 18, 0)) < 0)
|
||||||
|
return ret;
|
||||||
|
c->eof = 1;
|
||||||
|
dst = avpkt->data;
|
||||||
|
bytestream_put_be16(&dst, 0x8001);
|
||||||
|
bytestream_put_be16(&dst, 0x000E);
|
||||||
|
bytestream_put_be64(&dst, 0x0);
|
||||||
|
bytestream_put_be32(&dst, 0x0);
|
||||||
|
bytestream_put_be16(&dst, 0x0);
|
||||||
|
*got_packet_ptr = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
out_size = BLOCK_SIZE * avctx->channels + !c->header_parsed * HEADER_SIZE;
|
out_size = BLOCK_SIZE * avctx->channels + !c->header_parsed * HEADER_SIZE;
|
||||||
if ((ret = ff_alloc_packet2(avctx, avpkt, out_size, 0)) < 0)
|
if ((ret = ff_alloc_packet2(avctx, avpkt, out_size, 0)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
@ -165,6 +181,8 @@ static int adx_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
|
|||||||
dst += BLOCK_SIZE;
|
dst += BLOCK_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
avpkt->pts = frame->pts;
|
||||||
|
avpkt->duration = frame->nb_samples;
|
||||||
*got_packet_ptr = 1;
|
*got_packet_ptr = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -177,6 +195,7 @@ AVCodec ff_adpcm_adx_encoder = {
|
|||||||
.priv_data_size = sizeof(ADXContext),
|
.priv_data_size = sizeof(ADXContext),
|
||||||
.init = adx_encode_init,
|
.init = adx_encode_init,
|
||||||
.encode2 = adx_encode_frame,
|
.encode2 = adx_encode_frame,
|
||||||
|
.capabilities = AV_CODEC_CAP_DELAY,
|
||||||
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16,
|
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16,
|
||||||
AV_SAMPLE_FMT_NONE },
|
AV_SAMPLE_FMT_NONE },
|
||||||
};
|
};
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
6bf1a8e5ec9cc958a31cb2b1b66bfc75 *tests/data/fate/acodec-adpcm-adx.adx
|
c257001314241b469a6512616fd56548 *tests/data/fate/acodec-adpcm-adx.adx
|
||||||
297720 tests/data/fate/acodec-adpcm-adx.adx
|
297738 tests/data/fate/acodec-adpcm-adx.adx
|
||||||
5b5a436ec9d528d6eb0bebaf667521b0 *tests/data/fate/acodec-adpcm-adx.out.wav
|
5b5a436ec9d528d6eb0bebaf667521b0 *tests/data/fate/acodec-adpcm-adx.out.wav
|
||||||
stddev: 2549.93 PSNR: 28.20 MAXDIFF:57514 bytes: 1058400/ 1058432
|
stddev: 2549.93 PSNR: 28.20 MAXDIFF:57514 bytes: 1058400/ 1058432
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
6bf1a8e5ec9cc958a31cb2b1b66bfc75 *tests/data/fate/acodec-adpcm-adx-trellis.adx
|
c257001314241b469a6512616fd56548 *tests/data/fate/acodec-adpcm-adx-trellis.adx
|
||||||
297720 tests/data/fate/acodec-adpcm-adx-trellis.adx
|
297738 tests/data/fate/acodec-adpcm-adx-trellis.adx
|
||||||
5b5a436ec9d528d6eb0bebaf667521b0 *tests/data/fate/acodec-adpcm-adx-trellis.out.wav
|
5b5a436ec9d528d6eb0bebaf667521b0 *tests/data/fate/acodec-adpcm-adx-trellis.out.wav
|
||||||
stddev: 2549.93 PSNR: 28.20 MAXDIFF:57514 bytes: 1058400/ 1058432
|
stddev: 2549.93 PSNR: 28.20 MAXDIFF:57514 bytes: 1058400/ 1058432
|
||||||
|
Loading…
x
Reference in New Issue
Block a user