[FFmpeg-cvslog] mace: use planar sample format

Justin Ruggles git at videolan.org
Wed Oct 10 13:05:20 CEST 2012


ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Mon Aug 27 14:19:51 2012 -0400| [c1a9cfd1feb281b1932b31895a1a9c1c795f6df5] | committer: Justin Ruggles

mace: use planar sample format

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c1a9cfd1feb281b1932b31895a1a9c1c795f6df5
---

 libavcodec/mace.c |   32 +++++++++++++++-----------------
 1 file changed, 15 insertions(+), 17 deletions(-)

diff --git a/libavcodec/mace.c b/libavcodec/mace.c
index 9d07180..8fef839 100644
--- a/libavcodec/mace.c
+++ b/libavcodec/mace.c
@@ -187,9 +187,7 @@ static int16_t read_table(ChannelData *chd, uint8_t val, int tab_idx)
     return current;
 }
 
-static void chomp3(ChannelData *chd, int16_t *output, uint8_t val,
-                   int tab_idx,
-                   uint32_t numChannels)
+static void chomp3(ChannelData *chd, int16_t *output, uint8_t val, int tab_idx)
 {
 
     int16_t current = read_table(chd, val, tab_idx);
@@ -200,9 +198,7 @@ static void chomp3(ChannelData *chd, int16_t *output, uint8_t val,
     *output = QT_8S_2_16S(current);
 }
 
-static void chomp6(ChannelData *chd, int16_t *output, uint8_t val,
-                   int tab_idx,
-                   uint32_t numChannels)
+static void chomp6(ChannelData *chd, int16_t *output, uint8_t val, int tab_idx)
 {
     int16_t current = read_table(chd, val, tab_idx);
 
@@ -222,8 +218,8 @@ static void chomp6(ChannelData *chd, int16_t *output, uint8_t val,
 
     output[0] = QT_8S_2_16S(chd->previous + chd->prev2 -
                             ((chd->prev2-current) >> 2));
-    output[numChannels] = QT_8S_2_16S(chd->previous + current +
-                                      ((chd->prev2-current) >> 2));
+    output[1] = QT_8S_2_16S(chd->previous + current +
+                            ((chd->prev2-current) >> 2));
     chd->prev2 = chd->previous;
     chd->previous = current;
 }
@@ -234,7 +230,7 @@ static av_cold int mace_decode_init(AVCodecContext * avctx)
 
     if (avctx->channels > 2)
         return -1;
-    avctx->sample_fmt = AV_SAMPLE_FMT_S16;
+    avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
 
     avcodec_get_frame_defaults(&ctx->frame);
     avctx->coded_frame = &ctx->frame;
@@ -247,7 +243,7 @@ static int mace_decode_frame(AVCodecContext *avctx, void *data,
 {
     const uint8_t *buf = avpkt->data;
     int buf_size = avpkt->size;
-    int16_t *samples;
+    int16_t **samples;
     MACEContext *ctx = avctx->priv_data;
     int i, j, k, l, ret;
     int is_mace3 = (avctx->codec_id == AV_CODEC_ID_MACE3);
@@ -258,10 +254,10 @@ static int mace_decode_frame(AVCodecContext *avctx, void *data,
         av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
         return ret;
     }
-    samples = (int16_t *)ctx->frame.data[0];
+    samples = (int16_t **)ctx->frame.extended_data;
 
     for(i = 0; i < avctx->channels; i++) {
-        int16_t *output = samples + i;
+        int16_t *output = samples[i];
 
         for (j=0; j < buf_size / (avctx->channels << is_mace3); j++)
             for (k=0; k < (1 << is_mace3); k++) {
@@ -273,13 +269,11 @@ static int mace_decode_frame(AVCodecContext *avctx, void *data,
 
                 for (l=0; l < 3; l++) {
                     if (is_mace3)
-                        chomp3(&ctx->chd[i], output, val[1][l], l,
-                               avctx->channels);
+                        chomp3(&ctx->chd[i], output, val[1][l], l);
                     else
-                        chomp6(&ctx->chd[i], output, val[0][l], l,
-                               avctx->channels);
+                        chomp6(&ctx->chd[i], output, val[0][l], l);
 
-                    output += avctx->channels << (1-is_mace3);
+                    output += 1 << (1-is_mace3);
                 }
             }
     }
@@ -299,6 +293,8 @@ AVCodec ff_mace3_decoder = {
     .decode         = mace_decode_frame,
     .capabilities   = CODEC_CAP_DR1,
     .long_name      = NULL_IF_CONFIG_SMALL("MACE (Macintosh Audio Compression/Expansion) 3:1"),
+    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
+                                                      AV_SAMPLE_FMT_NONE },
 };
 
 AVCodec ff_mace6_decoder = {
@@ -310,4 +306,6 @@ AVCodec ff_mace6_decoder = {
     .decode         = mace_decode_frame,
     .capabilities   = CODEC_CAP_DR1,
     .long_name      = NULL_IF_CONFIG_SMALL("MACE (Macintosh Audio Compression/Expansion) 6:1"),
+    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
+                                                      AV_SAMPLE_FMT_NONE },
 };



More information about the ffmpeg-cvslog mailing list