diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-06-21 00:32:09 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-06-21 12:16:24 +0200 |
commit | 6c8a05268cfe2235e37a28a5cc5b20f6c16b90ad (patch) | |
tree | c0dc44e4f59e87c61ef91225d083a4f4f5ae8fd2 | |
parent | 95ee0fbacfad9e79ed0f67e1e1980a53a4d2807e (diff) | |
download | ffmpeg-6c8a05268cfe2235e37a28a5cc5b20f6c16b90ad.tar.gz |
avformat/rawenc: Store sample number for ADX
Fixes Ticket4540
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/rawenc.c | 20 | ||||
-rw-r--r-- | tests/ref/acodec/adpcm-adx | 2 | ||||
-rw-r--r-- | tests/ref/acodec/adpcm-adx-trellis | 2 |
3 files changed, 22 insertions, 2 deletions
diff --git a/libavformat/rawenc.c b/libavformat/rawenc.c index e59f1ae95e..d65c7c7909 100644 --- a/libavformat/rawenc.c +++ b/libavformat/rawenc.c @@ -56,6 +56,25 @@ AVOutputFormat ff_ac3_muxer = { #endif #if CONFIG_ADX_MUXER + +static int adx_write_trailer(AVFormatContext *s) +{ + AVIOContext *pb = s->pb; + AVCodecContext *avctx = s->streams[0]->codec; + + if (pb->seekable) { + int64_t file_size = avio_tell(pb); + uint64_t sample_count = (file_size - 36) / avctx->channels / 18 * 32; + if (sample_count <= UINT32_MAX) { + avio_seek(pb, 12, SEEK_SET); + avio_wb32(pb, sample_count); + avio_seek(pb, file_size, SEEK_SET); + } + } + + return 0; +} + AVOutputFormat ff_adx_muxer = { .name = "adx", .long_name = NULL_IF_CONFIG_SMALL("CRI ADX"), @@ -64,6 +83,7 @@ AVOutputFormat ff_adx_muxer = { .video_codec = AV_CODEC_ID_NONE, .write_header = force_one_stream, .write_packet = ff_raw_write_packet, + .write_trailer = adx_write_trailer, .flags = AVFMT_NOTIMESTAMPS, }; #endif diff --git a/tests/ref/acodec/adpcm-adx b/tests/ref/acodec/adpcm-adx index 34dd9b6c05..8c401001b8 100644 --- a/tests/ref/acodec/adpcm-adx +++ b/tests/ref/acodec/adpcm-adx @@ -1,4 +1,4 @@ -d7ec7d52a2f5c91464812d031b07cc1d *tests/data/fate/acodec-adpcm-adx.adx +6bf1a8e5ec9cc958a31cb2b1b66bfc75 *tests/data/fate/acodec-adpcm-adx.adx 297720 tests/data/fate/acodec-adpcm-adx.adx 5b5a436ec9d528d6eb0bebaf667521b0 *tests/data/fate/acodec-adpcm-adx.out.wav stddev: 2549.93 PSNR: 28.20 MAXDIFF:57514 bytes: 1058400/ 1058432 diff --git a/tests/ref/acodec/adpcm-adx-trellis b/tests/ref/acodec/adpcm-adx-trellis index d620d4a2f0..039f69f9db 100644 --- a/tests/ref/acodec/adpcm-adx-trellis +++ b/tests/ref/acodec/adpcm-adx-trellis @@ -1,4 +1,4 @@ -d7ec7d52a2f5c91464812d031b07cc1d *tests/data/fate/acodec-adpcm-adx-trellis.adx +6bf1a8e5ec9cc958a31cb2b1b66bfc75 *tests/data/fate/acodec-adpcm-adx-trellis.adx 297720 tests/data/fate/acodec-adpcm-adx-trellis.adx 5b5a436ec9d528d6eb0bebaf667521b0 *tests/data/fate/acodec-adpcm-adx-trellis.out.wav stddev: 2549.93 PSNR: 28.20 MAXDIFF:57514 bytes: 1058400/ 1058432 |