dpcm: factor out the stereo flag calculation
authorJustin Ruggles <justin.ruggles@gmail.com>
Sun, 11 Sep 2011 15:19:00 +0000 (11:19 -0400)
committerJustin Ruggles <justin.ruggles@gmail.com>
Fri, 30 Sep 2011 22:15:52 +0000 (18:15 -0400)
libavcodec/dpcm.c

index 1c80522..185d04e 100644 (file)
@@ -169,6 +169,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
     int in, out = 0;
     int predictor[2];
     int ch = 0;
+    int stereo = s->channels - 1;
     short *output_samples = data;
     int shift[2];
     unsigned char byte;
@@ -184,11 +185,11 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
     switch(avctx->codec->id) {
 
     case CODEC_ID_ROQ_DPCM:
-        if (s->channels == 1)
-            predictor[0] = AV_RL16(&buf[6]);
-        else {
+        if (stereo) {
             predictor[0] = buf[7] << 8;
             predictor[1] = buf[6] << 8;
+        } else {
+            predictor[0] = AV_RL16(&buf[6]);
         }
         SE_16BIT(predictor[0]);
         SE_16BIT(predictor[1]);
@@ -200,7 +201,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
             output_samples[out] = predictor[ch];
 
             /* toggle channel */
-            ch ^= s->channels - 1;
+            ch ^= stereo;
         }
         break;
 
@@ -210,7 +211,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
         in += 2;
         SE_16BIT(predictor[0])
         output_samples[out++] = predictor[0];
-        if (s->channels == 2) {
+        if (stereo) {
             predictor[1] = AV_RL16(&buf[in]);
             in += 2;
             SE_16BIT(predictor[1])
@@ -223,7 +224,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
             output_samples[out++] = predictor[ch];
 
             /* toggle channel */
-            ch ^= s->channels - 1;
+            ch ^= stereo;
         }
 
         break;
@@ -234,7 +235,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
         predictor[0] = AV_RL16(&buf[in]);
         in += 2;
         SE_16BIT(predictor[0]);
-        if (s->channels == 2) {
+        if (stereo) {
             predictor[1] = AV_RL16(&buf[in]);
             in += 2;
             SE_16BIT(predictor[1]);
@@ -258,7 +259,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
             output_samples[out++] = predictor[ch];
 
             /* toggle channel */
-            ch ^= s->channels - 1;
+            ch ^= stereo;
         }
         break;
     case CODEC_ID_SOL_DPCM:
@@ -271,13 +272,13 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
                 n1 = (buf[in] >> 4) & 0xF;
                 n2 = buf[in++] & 0xF;
                 s->sample[0] += s->sol_table[n1];
-                if (s->sample[0] < 0) s->sample[0] = 0;
+                if (s->sample[0] < 0)   s->sample[0] = 0;
                 if (s->sample[0] > 255) s->sample[0] = 255;
                 output_samples[out++] = (s->sample[0] - 128) << 8;
-                s->sample[s->channels - 1] += s->sol_table[n2];
-                if (s->sample[s->channels - 1] < 0) s->sample[s->channels - 1] = 0;
-                if (s->sample[s->channels - 1] > 255) s->sample[s->channels - 1] = 255;
-                output_samples[out++] = (s->sample[s->channels - 1] - 128) << 8;
+                s->sample[stereo] += s->sol_table[n2];
+                if (s->sample[stereo] < 0)   s->sample[stereo] = 0;
+                if (s->sample[stereo] > 255) s->sample[stereo] = 255;
+                output_samples[out++] = (s->sample[stereo] - 128) << 8;
             }
         } else {
             while (in < buf_size) {
@@ -288,7 +289,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
                 s->sample[ch] = av_clip_int16(s->sample[ch]);
                 output_samples[out++] = s->sample[ch];
                 /* toggle channel */
-                ch ^= s->channels - 1;
+                ch ^= stereo;
             }
         }
         break;