pcm_zork: use AV_SAMPLE_FMT_U8 instead of shifting all samples by 8.
authorJustin Ruggles <justin.ruggles@gmail.com>
Wed, 28 Sep 2011 23:31:05 +0000 (19:31 -0400)
committerJustin Ruggles <justin.ruggles@gmail.com>
Wed, 26 Oct 2011 16:01:07 +0000 (12:01 -0400)
libavcodec/pcm.c

index e7cf874..ec2660c 100644 (file)
@@ -172,10 +172,11 @@ static int pcm_encode_frame(AVCodecContext *avctx,
         dst += n*sample_size;
         break;
     case CODEC_ID_PCM_ZORK:
-        for(;n>0;n--) {
-            v= *samples++ >> 8;
-            if(v<0)   v = -v;
-            else      v+= 128;
+        srcu8 = data;
+        for (; n > 0; n--) {
+            v = *srcu8++;
+            if (v < 128)
+                v = 128 - v;
             *dst++ = v;
         }
         break;
@@ -387,12 +388,11 @@ static int pcm_decode_frame(AVCodecContext *avctx,
         samples += n * sample_size;
         break;
     case CODEC_ID_PCM_ZORK:
-        for(;n>0;n--) {
-            int x= *src++;
-            if(x&128) x-= 128;
-            else      x = -x;
-            AV_WN16A(samples, x << 8);
-            samples += 2;
+        for (; n > 0; n--) {
+            int v = *src++;
+            if (v < 128)
+                v = 128 - v;
+            *samples++ = v;
         }
         break;
     case CODEC_ID_PCM_ALAW:
@@ -518,4 +518,4 @@ PCM_CODEC  (CODEC_ID_PCM_U24BE, AV_SAMPLE_FMT_S32, pcm_u24be, "PCM unsigned 24-b
 PCM_CODEC  (CODEC_ID_PCM_U24LE, AV_SAMPLE_FMT_S32, pcm_u24le, "PCM unsigned 24-bit little-endian");
 PCM_CODEC  (CODEC_ID_PCM_U32BE, AV_SAMPLE_FMT_S32, pcm_u32be, "PCM unsigned 32-bit big-endian");
 PCM_CODEC  (CODEC_ID_PCM_U32LE, AV_SAMPLE_FMT_S32, pcm_u32le, "PCM unsigned 32-bit little-endian");
-PCM_CODEC  (CODEC_ID_PCM_ZORK,  AV_SAMPLE_FMT_S16, pcm_zork, "PCM Zork");
+PCM_CODEC  (CODEC_ID_PCM_ZORK,  AV_SAMPLE_FMT_U8,  pcm_zork,  "PCM Zork");