avformat/rawenc: Store sample number for ADX
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 20 Jun 2015 22:32:09 +0000 (00:32 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 21 Jun 2015 10:16:24 +0000 (12:16 +0200)
Fixes Ticket4540

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/rawenc.c
tests/ref/acodec/adpcm-adx
tests/ref/acodec/adpcm-adx-trellis

index e59f1ae..d65c7c7 100644 (file)
@@ -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
index 34dd9b6..8c40100 100644 (file)
@@ -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
index d620d4a..039f69f 100644 (file)
@@ -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