WebRtcIsac_Encode and WebRtcIsacfix_Encode: Type encoded stream as uint8_t

We have to fix both at once, since there's a macro that calls one of
them or the other.

BUG=909
R=andrew@webrtc.org, bjornv@webrtc.org, henrik.lundin@webrtc.org, minyue@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/19229004

git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@7266 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/modules/audio_coding/codecs/isac/fix/interface/isacfix.h b/modules/audio_coding/codecs/isac/fix/interface/isacfix.h
index 7cd2954..942727a 100644
--- a/modules/audio_coding/codecs/isac/fix/interface/isacfix.h
+++ b/modules/audio_coding/codecs/isac/fix/interface/isacfix.h
@@ -130,7 +130,7 @@
 
   int16_t WebRtcIsacfix_Encode(ISACFIX_MainStruct *ISAC_main_inst,
                                const int16_t *speechIn,
-                               int16_t *encoded);
+                               uint8_t* encoded);
 
 
 
diff --git a/modules/audio_coding/codecs/isac/fix/source/isacfix.c b/modules/audio_coding/codecs/isac/fix/source/isacfix.c
index e855dae..48631b5 100644
--- a/modules/audio_coding/codecs/isac/fix/source/isacfix.c
+++ b/modules/audio_coding/codecs/isac/fix/source/isacfix.c
@@ -17,6 +17,7 @@
 
 #include "webrtc/modules/audio_coding/codecs/isac/fix/interface/isacfix.h"
 
+#include <assert.h>
 #include <stdlib.h>
 
 #include "webrtc/modules/audio_coding/codecs/isac/fix/source/bandwidth_estimator.h"
@@ -355,7 +356,7 @@
 
 int16_t WebRtcIsacfix_Encode(ISACFIX_MainStruct *ISAC_main_inst,
                              const int16_t    *speechIn,
-                             int16_t          *encoded)
+                             uint8_t* encoded)
 {
   ISACFIX_SubStruct *ISAC_inst;
   int16_t stream_len;
@@ -382,16 +383,20 @@
     return -1;
   }
 
-
-  /* convert from bytes to int16_t */
+  assert(stream_len % 2 == 0);
 #ifndef WEBRTC_ARCH_BIG_ENDIAN
-  for (k=0;k<(stream_len+1)>>1;k++) {
-    encoded[k] = (int16_t)( ( (uint16_t)(ISAC_inst->ISACenc_obj.bitstr_obj).stream[k] >> 8 )
-                                  | (((ISAC_inst->ISACenc_obj.bitstr_obj).stream[k] & 0x00FF) << 8));
+  /* The encoded data vector is supposesd to be big-endian, but our internal
+     representation is little-endian. So byteswap. */
+  for (k = 0; k < stream_len / 2; ++k) {
+    uint16_t s = ISAC_inst->ISACenc_obj.bitstr_obj.stream[k];
+    /* In big-endian, we have... */
+    encoded[2 * k] = s >> 8;  /* ...most significant byte at low address... */
+    encoded[2 * k + 1] = s;  /* ...least significant byte at high address. */
   }
-
 #else
-  WEBRTC_SPL_MEMCPY_W16(encoded, (ISAC_inst->ISACenc_obj.bitstr_obj).stream, (stream_len + 1)>>1);
+  /* The encoded data vector and our internal representation are both
+     big-endian. */
+  memcpy(encoded, ISAC_inst->ISACenc_obj.bitstr_obj.stream, stream_len);
 #endif
 
 
diff --git a/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc b/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc
index 3582751..207ee8c 100644
--- a/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc
+++ b/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc
@@ -71,7 +71,7 @@
   size_t pointer = 0;
   for (int idx = 0; idx < subblocks; idx++, pointer += subblock_length) {
     value = WebRtcIsacfix_Encode(ISACFIX_main_inst_, &in_data[pointer],
-                                 reinterpret_cast<int16_t*>(bit_stream));
+                                 bit_stream);
   }
   clocks = clock() - clocks;
   EXPECT_GT(value, 0);
diff --git a/modules/audio_coding/codecs/isac/fix/test/kenny.cc b/modules/audio_coding/codecs/isac/fix/test/kenny.cc
index c3c6f13..91c4d76 100644
--- a/modules/audio_coding/codecs/isac/fix/test/kenny.cc
+++ b/modules/audio_coding/codecs/isac/fix/test/kenny.cc
@@ -565,7 +565,7 @@
           /* Encode */
           stream_len = WebRtcIsacfix_Encode(ISAC_main_inst,
                                             shortdata,
-                                            (int16_t*)streamdata);
+                                            (uint8_t*)streamdata);
 
           /* If packet is ready, and CE testing, call the different API
              functions from the internal API. */
diff --git a/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c b/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c
index d5682b2..965f2bc 100644
--- a/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c
+++ b/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c
@@ -439,7 +439,9 @@
 			/* iSAC encoding */
 
 			if (mode==0 || mode ==1) {
-				stream_len = WebRtcIsac_Encode(ISAC_main_inst, shortdata,	streamdata);
+                          stream_len = WebRtcIsac_Encode(ISAC_main_inst,
+                                                         shortdata,
+                                                         (uint8_t*)streamdata);
 				if (stream_len < 0) {
 					/* exit if returned with error */
 					errtype=WebRtcIsac_GetErrorCode(ISAC_main_inst);
@@ -449,7 +451,10 @@
 			} else if (mode==2 || mode==3) {
 				/* iSAC encoding */
 				if (nbTest != 1)
-					stream_len = WebRtcIsacfix_Encode(ISACFIX_main_inst, shortdata,	streamdata);
+                                  stream_len = WebRtcIsacfix_Encode(
+                                      ISACFIX_main_inst,
+                                      shortdata,
+                                      (uint8_t*)streamdata);
 				else
 					stream_len = WebRtcIsacfix_EncodeNb(ISACFIX_main_inst, shortdata, streamdata);
 		
diff --git a/modules/audio_coding/codecs/isac/main/interface/isac.h b/modules/audio_coding/codecs/isac/main/interface/isac.h
index 76a61e6..4067058 100644
--- a/modules/audio_coding/codecs/isac/main/interface/isac.h
+++ b/modules/audio_coding/codecs/isac/main/interface/isac.h
@@ -147,7 +147,7 @@
   int16_t WebRtcIsac_Encode(
       ISACStruct*        ISAC_main_inst,
       const int16_t* speechIn,
-      int16_t*       encoded);
+      uint8_t* encoded);
 
 
   /******************************************************************************
diff --git a/modules/audio_coding/codecs/isac/main/source/isac.c b/modules/audio_coding/codecs/isac/main/source/isac.c
index d47eb80..13170a0 100644
--- a/modules/audio_coding/codecs/isac/main/source/isac.c
+++ b/modules/audio_coding/codecs/isac/main/source/isac.c
@@ -496,7 +496,7 @@
  */
 int16_t WebRtcIsac_Encode(ISACStruct* ISAC_main_inst,
                           const int16_t* speechIn,
-                          int16_t* encoded) {
+                          uint8_t* encoded) {
   float inFrame[FRAMESAMPLES_10ms];
   int16_t speechInLB[FRAMESAMPLES_10ms];
   int16_t speechInUB[FRAMESAMPLES_10ms];
@@ -504,7 +504,6 @@
   int16_t streamLenUB = 0;
   int16_t streamLen = 0;
   int16_t k = 0;
-  uint8_t* ptrEncodedUW8 = (uint8_t*)encoded;
   int garbageLen = 0;
   int32_t bottleneck = 0;
   int16_t bottleneckIdx = 0;
@@ -643,23 +642,22 @@
       streamLenUB = 0;
     }
 
-    memcpy(ptrEncodedUW8, instLB->ISACencLB_obj.bitstr_obj.stream, streamLenLB);
+    memcpy(encoded, instLB->ISACencLB_obj.bitstr_obj.stream, streamLenLB);
     streamLen = streamLenLB;
     if (streamLenUB > 0) {
-      ptrEncodedUW8[streamLenLB] = (uint8_t)(streamLenUB + 1 +
-                                                   LEN_CHECK_SUM_WORD8);
-      memcpy(&ptrEncodedUW8[streamLenLB + 1],
-             instUB->ISACencUB_obj.bitstr_obj.stream, streamLenUB);
-      streamLen += ptrEncodedUW8[streamLenLB];
+      encoded[streamLenLB] = streamLenUB + 1 + LEN_CHECK_SUM_WORD8;
+      memcpy(&encoded[streamLenLB + 1],
+             instUB->ISACencUB_obj.bitstr_obj.stream,
+             streamLenUB);
+      streamLen += encoded[streamLenLB];
     } else {
-      ptrEncodedUW8[streamLenLB] = 0;
+      encoded[streamLenLB] = 0;
     }
   } else {
     if (streamLenLB == 0) {
       return 0;
     }
-    memcpy(ptrEncodedUW8, instLB->ISACencLB_obj.bitstr_obj.stream,
-           streamLenLB);
+    memcpy(encoded, instLB->ISACencLB_obj.bitstr_obj.stream, streamLenLB);
     streamLenUB = 0;
     streamLen = streamLenLB;
   }
@@ -697,11 +695,11 @@
      * 255 is the max garbage length we can signal using 8 bits. */
     if ((instISAC->bandwidthKHz == isac8kHz) ||
         (streamLenUB == 0)) {
-      ptrGarbage = &ptrEncodedUW8[streamLenLB];
+      ptrGarbage = &encoded[streamLenLB];
       limit = streamLen + 255;
     } else {
-      ptrGarbage = &ptrEncodedUW8[streamLenLB + 1 + streamLenUB];
-      limit = streamLen + (255 - ptrEncodedUW8[streamLenLB]);
+      ptrGarbage = &encoded[streamLenLB + 1 + streamLenUB];
+      limit = streamLen + (255 - encoded[streamLenLB]);
     }
     minBytes = (minBytes > limit) ? limit : minBytes;
 
@@ -718,13 +716,12 @@
        * That is the only way to preserve backward compatibility. */
       if ((instISAC->bandwidthKHz == isac8kHz) ||
           (streamLenUB == 0)) {
-        ptrEncodedUW8[streamLenLB] = (uint8_t)garbageLen;
+        encoded[streamLenLB] = garbageLen;
       } else {
-        ptrEncodedUW8[streamLenLB] += (uint8_t)garbageLen;
+        encoded[streamLenLB] += garbageLen;
         /* Write the length of the garbage at the end of the upper-band
          *  bit-stream, if exists. This helps for sanity check. */
-        ptrEncodedUW8[streamLenLB + 1 + streamLenUB] =
-            (uint8_t)garbageLen;
+        encoded[streamLenLB + 1 + streamLenUB] = garbageLen;
 
       }
       streamLen += garbageLen;
@@ -741,16 +738,14 @@
   if ((instISAC->bandwidthKHz != isac8kHz) && (streamLenUB > 0)) {
     uint32_t crc;
 
-    WebRtcIsac_GetCrc((int16_t*)(&(ptrEncodedUW8[streamLenLB + 1])),
+    WebRtcIsac_GetCrc((int16_t*)(&(encoded[streamLenLB + 1])),
                       streamLenUB + garbageLen, &crc);
 #ifndef WEBRTC_ARCH_BIG_ENDIAN
     for (k = 0; k < LEN_CHECK_SUM_WORD8; k++) {
-      ptrEncodedUW8[streamLen - LEN_CHECK_SUM_WORD8 + k] =
-        (uint8_t)((crc >> (24 - k * 8)) & 0xFF);
+      encoded[streamLen - LEN_CHECK_SUM_WORD8 + k] = crc >> (24 - k * 8);
     }
 #else
-    memcpy(&ptrEncodedUW8[streamLenLB + streamLenUB + 1], &crc,
-           LEN_CHECK_SUM_WORD8);
+    memcpy(&encoded[streamLenLB + streamLenUB + 1], &crc, LEN_CHECK_SUM_WORD8);
 #endif
   }
   return streamLen;
diff --git a/modules/audio_coding/codecs/isac/main/source/isac_unittest.cc b/modules/audio_coding/codecs/isac/main/source/isac_unittest.cc
index 3c55bd3..1d65373 100644
--- a/modules/audio_coding/codecs/isac/main/source/isac_unittest.cc
+++ b/modules/audio_coding/codecs/isac/main/source/isac_unittest.cc
@@ -31,7 +31,7 @@
 
   int16_t speech_data_[kIsacNumberOfSamples];
   int16_t output_data_[kIsacNumberOfSamples];
-  int16_t bitstream_[kMaxBytes / 2];
+  uint8_t bitstream_[kMaxBytes];
   uint8_t bitstream_small_[7];  // Simulate sync packets.
 };
 
diff --git a/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc b/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc
index c5f9561..8af4e6f 100644
--- a/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc
+++ b/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc
@@ -662,8 +662,8 @@
             if(!(testNum == 3 && framecnt == 0))
             {
                 stream_len = WebRtcIsac_Encode(ISAC_main_inst,
-                    shortdata,
-                    (int16_t*)streamdata);
+                                               shortdata,
+                                               (uint8_t*)streamdata);
                 if((payloadSize != 0) && (stream_len > payloadSize))
                 {
                     if(testNum == 0)
diff --git a/modules/audio_coding/codecs/isac/main/test/SwitchingSampRate/SwitchingSampRate.cc b/modules/audio_coding/codecs/isac/main/test/SwitchingSampRate/SwitchingSampRate.cc
index fd70eca..72d3fe8 100644
--- a/modules/audio_coding/codecs/isac/main/test/SwitchingSampRate/SwitchingSampRate.cc
+++ b/modules/audio_coding/codecs/isac/main/test/SwitchingSampRate/SwitchingSampRate.cc
@@ -283,7 +283,8 @@
 
 
       streamLen = WebRtcIsac_Encode(codecInstance[senderIdx],
-                                    audioBuff10ms, (short*)bitStream);
+                                    audioBuff10ms,
+                                    (uint8_t*)bitStream);
       int16_t ggg;
       if (streamLen > 0) {
         if((  WebRtcIsac_ReadFrameLen(codecInstance[receiverIdx],
diff --git a/modules/audio_coding/codecs/isac/main/test/simpleKenny.c b/modules/audio_coding/codecs/isac/main/test/simpleKenny.c
index 980465d..2df5a84 100644
--- a/modules/audio_coding/codecs/isac/main/test/simpleKenny.c
+++ b/modules/audio_coding/codecs/isac/main/test/simpleKenny.c
@@ -373,8 +373,10 @@
 				cur_framesmpls += samplesIn10Ms;
 
 				//-------- iSAC encoding ---------
-				stream_len = WebRtcIsac_Encode(ISAC_main_inst, shortdata,
-					(int16_t*)payload);
+                                stream_len = WebRtcIsac_Encode(
+                                        ISAC_main_inst,
+                                        shortdata,
+                                        (uint8_t*)payload);
 
 				if(stream_len < 0)
 				{
diff --git a/modules/audio_coding/main/acm2/acm_isac.cc b/modules/audio_coding/main/acm2/acm_isac.cc
index 850204f..f3682f1 100644
--- a/modules/audio_coding/main/acm2/acm_isac.cc
+++ b/modules/audio_coding/main/acm2/acm_isac.cc
@@ -347,8 +347,9 @@
       return -1;
     }
     *bitstream_len_byte = ACM_ISAC_ENCODE(
-        codec_inst_ptr_->inst, &in_audio_[in_audio_ix_read_],
-        reinterpret_cast<int16_t*>(bitstream));
+        codec_inst_ptr_->inst,
+        &in_audio_[in_audio_ix_read_],
+        bitstream);
     // increment the read index this tell the caller that how far
     // we have gone forward in reading the audio buffer
     in_audio_ix_read_ += samples_in_10ms_audio_;
diff --git a/modules/audio_coding/neteq/audio_decoder_unittest.cc b/modules/audio_coding/neteq/audio_decoder_unittest.cc
index d33c8f2..624e6a4 100644
--- a/modules/audio_coding/neteq/audio_decoder_unittest.cc
+++ b/modules/audio_coding/neteq/audio_decoder_unittest.cc
@@ -348,14 +348,11 @@
   virtual int EncodeFrame(const int16_t* input, size_t input_len_samples,
                           uint8_t* output) {
     // Insert 3 * 10 ms. Expect non-zero output on third call.
-    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input,
-                                   reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input, output));
     input += input_size_;
-    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input,
-                                   reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input, output));
     input += input_size_;
-    int enc_len_bytes =
-        WebRtcIsac_Encode(encoder_, input, reinterpret_cast<int16_t*>(output));
+    int enc_len_bytes = WebRtcIsac_Encode(encoder_, input, output);
     EXPECT_GT(enc_len_bytes, 0);
     return enc_len_bytes;
   }
@@ -388,14 +385,11 @@
   virtual int EncodeFrame(const int16_t* input, size_t input_len_samples,
                           uint8_t* output) {
     // Insert 3 * 10 ms. Expect non-zero output on third call.
-    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input,
-                                   reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input, output));
     input += input_size_;
-    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input,
-                                   reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input, output));
     input += input_size_;
-    int enc_len_bytes =
-        WebRtcIsac_Encode(encoder_, input, reinterpret_cast<int16_t*>(output));
+    int enc_len_bytes = WebRtcIsac_Encode(encoder_, input, output);
     EXPECT_GT(enc_len_bytes, 0);
     return enc_len_bytes;
   }
@@ -441,14 +435,11 @@
   virtual int EncodeFrame(const int16_t* input, size_t input_len_samples,
                           uint8_t* output) {
     // Insert 3 * 10 ms. Expect non-zero output on third call.
-    EXPECT_EQ(0, WebRtcIsacfix_Encode(encoder_, input,
-                                      reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsacfix_Encode(encoder_, input, output));
     input += input_size_;
-    EXPECT_EQ(0, WebRtcIsacfix_Encode(encoder_, input,
-                                      reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsacfix_Encode(encoder_, input, output));
     input += input_size_;
-    int enc_len_bytes = WebRtcIsacfix_Encode(
-        encoder_, input, reinterpret_cast<int16_t*>(output));
+    int enc_len_bytes = WebRtcIsacfix_Encode(encoder_, input, output);
     EXPECT_GT(enc_len_bytes, 0);
     return enc_len_bytes;
   }
diff --git a/modules/audio_coding/neteq/test/RTPencode.cc b/modules/audio_coding/neteq/test/RTPencode.cc
index 93b366b..92bccee 100644
--- a/modules/audio_coding/neteq/test/RTPencode.cc
+++ b/modules/audio_coding/neteq/test/RTPencode.cc
@@ -1632,9 +1632,13 @@
             cdlen=0;
             while (cdlen<=0) {
 #ifdef CODEC_ISAC /* floating point */
-                cdlen=WebRtcIsac_Encode(ISAC_inst[k],&indata[noOfCalls*160],(int16_t*)encoded);
+                cdlen = WebRtcIsac_Encode(ISAC_inst[k],
+                                          &indata[noOfCalls * 160],
+                                          encoded);
 #else /* fixed point */
-                cdlen=WebRtcIsacfix_Encode(ISAC_inst[k],&indata[noOfCalls*160],(int16_t*)encoded);
+                cdlen = WebRtcIsacfix_Encode(ISAC_inst[k],
+                                             &indata[noOfCalls * 160],
+                                             encoded);
 #endif
                 noOfCalls++;
             }
@@ -1645,7 +1649,9 @@
             int noOfCalls=0;
             cdlen=0;
             while (cdlen<=0) {
-                cdlen=WebRtcIsac_Encode(ISACSWB_inst[k],&indata[noOfCalls*320],(int16_t*)encoded);
+                cdlen = WebRtcIsac_Encode(ISACSWB_inst[k],
+                                          &indata[noOfCalls * 320],
+                                          encoded);
                 noOfCalls++;
             }
         }
diff --git a/modules/audio_coding/neteq/test/neteq_isac_quality_test.cc b/modules/audio_coding/neteq/test/neteq_isac_quality_test.cc
index 6b0f482..b672a0c 100644
--- a/modules/audio_coding/neteq/test/neteq_isac_quality_test.cc
+++ b/modules/audio_coding/neteq/test/neteq_isac_quality_test.cc
@@ -138,8 +138,7 @@
     // The Isac encoder does not perform encoding (and returns 0) until it
     // receives a sequence of sub-blocks that amount to the frame duration.
     EXPECT_EQ(0, value);
-    value = WebRtcIsacfix_Encode(isac_encoder_, &in_data[pointer],
-                                 reinterpret_cast<int16_t*>(payload));
+    value = WebRtcIsacfix_Encode(isac_encoder_, &in_data[pointer], payload);
   }
   EXPECT_GT(value, 0);
   return value;