Update a ton of audio code to use size_t more correctly and in general reduce

use of int16_t/uint16_t.

This is the upshot of a recommendation by henrik.lundin and kwiberg on an original small change ( https://webrtc-codereview.appspot.com/42569004/#ps1 ) to stop using int16_t just because values could fit in it, and is similar in nature to a previous "mass change to use size_t more" ( https://webrtc-codereview.appspot.com/23129004/ ) which also needed to be split up for review but to land all at once, since, like adding "const", such changes tend to cause a lot of transitive effects.

This was be reviewed and approved in pieces:
https://codereview.webrtc.org/1224093003
https://codereview.webrtc.org/1224123002
https://codereview.webrtc.org/1224163002
https://codereview.webrtc.org/1225133003
https://codereview.webrtc.org/1225173002
https://codereview.webrtc.org/1227163003
https://codereview.webrtc.org/1227203003
https://codereview.webrtc.org/1227213002
https://codereview.webrtc.org/1227893002
https://codereview.webrtc.org/1228793004
https://codereview.webrtc.org/1228803003
https://codereview.webrtc.org/1228823002
https://codereview.webrtc.org/1228823003
https://codereview.webrtc.org/1228843002
https://codereview.webrtc.org/1230693002
https://codereview.webrtc.org/1231713002

The change is being landed as TBR to all the folks who reviewed the above.

BUG=chromium:81439
TEST=none
R=andrew@webrtc.org, pbos@webrtc.org
TBR=aluebs, andrew, asapersson, henrika, hlundin, jan.skoglund, kwiberg, minyue, pbos, pthatcher

Review URL: https://codereview.webrtc.org/1230503003 .

Cr-Commit-Position: refs/heads/master@{#9768}
This commit is contained in:
Peter Kasting
2015-08-24 14:52:23 -07:00
parent b594041ec8
commit dce40cf804
471 changed files with 3716 additions and 3499 deletions

View File

@ -23,6 +23,8 @@
#include <assert.h>
#include <algorithm>
#include "webrtc/typedefs.h"
// needed for NetEqDecoder
#include "webrtc/modules/audio_coding/neteq/audio_decoder_impl.h"
@ -76,27 +78,27 @@
void NetEQTest_GetCodec_and_PT(char* name,
webrtc::NetEqDecoder* codec,
int* PT,
int frameLen,
size_t frameLen,
int* fs,
int* bitrate,
int* useRed);
int NetEQTest_init_coders(webrtc::NetEqDecoder coder,
int enc_frameSize,
size_t enc_frameSize,
int bitrate,
int sampfreq,
int vad,
int numChannels);
size_t numChannels);
void defineCodecs(webrtc::NetEqDecoder* usedCodec, int* noOfCodecs);
int NetEQTest_free_coders(webrtc::NetEqDecoder coder, int numChannels);
int NetEQTest_encode(int coder,
int16_t* indata,
int frameLen,
unsigned char* encoded,
int sampleRate,
int* vad,
int useVAD,
int bitrate,
int numChannels);
int NetEQTest_free_coders(webrtc::NetEqDecoder coder, size_t numChannels);
size_t NetEQTest_encode(int coder,
int16_t* indata,
size_t frameLen,
unsigned char* encoded,
int sampleRate,
int* vad,
int useVAD,
int bitrate,
size_t numChannels);
void makeRTPheader(unsigned char* rtp_data,
int payloadType,
int seqNo,
@ -109,13 +111,13 @@ int makeRedundantHeader(unsigned char* rtp_data,
uint16_t* blockLen,
int seqNo,
uint32_t ssrc);
int makeDTMFpayload(unsigned char* payload_data,
int Event,
int End,
int Volume,
int Duration);
void stereoDeInterleave(int16_t* audioSamples, int numSamples);
void stereoInterleave(unsigned char* data, int dataLen, int stride);
size_t makeDTMFpayload(unsigned char* payload_data,
int Event,
int End,
int Volume,
int Duration);
void stereoDeInterleave(int16_t* audioSamples, size_t numSamples);
void stereoInterleave(unsigned char* data, size_t dataLen, size_t stride);
/*********************/
/* Codec definitions */
@ -264,13 +266,14 @@ SPEEX_encinst_t* SPEEX16enc_inst[2];
#endif
int main(int argc, char* argv[]) {
int packet_size, fs;
size_t packet_size;
int fs;
webrtc::NetEqDecoder usedCodec;
int payloadType;
int bitrate = 0;
int useVAD, vad;
int useRed = 0;
int len, enc_len;
size_t len, enc_len;
int16_t org_data[4000];
unsigned char rtp_data[8000];
int16_t seqNo = 0xFFF;
@ -282,14 +285,14 @@ int main(int argc, char* argv[]) {
int red_PT[2] = {0};
uint32_t red_TS[2] = {0};
uint16_t red_len[2] = {0};
int RTPheaderLen = 12;
size_t RTPheaderLen = 12;
uint8_t red_data[8000];
#ifdef INSERT_OLD_PACKETS
uint16_t old_length, old_plen;
int old_enc_len;
size_t old_enc_len;
int first_old_packet = 1;
unsigned char old_rtp_data[8000];
int packet_age = 0;
size_t packet_age = 0;
#endif
#ifdef INSERT_DTMF_PACKETS
int NTone = 1;
@ -298,8 +301,8 @@ int main(int argc, char* argv[]) {
bool dtmfSent = false;
#endif
bool usingStereo = false;
int stereoMode = 0;
int numChannels = 1;
size_t stereoMode = 0;
size_t numChannels = 1;
/* check number of parameters */
if ((argc != 6) && (argc != 7)) {
@ -449,12 +452,13 @@ int main(int argc, char* argv[]) {
FILE* out_file = fopen(argv[2], "wb");
CHECK_NOT_NULL(out_file);
printf("Output file: %s\n\n", argv[2]);
packet_size = atoi(argv[3]);
if (packet_size <= 0) {
printf("Packet size %d must be positive", packet_size);
int packet_size_int = atoi(argv[3]);
if (packet_size_int <= 0) {
printf("Packet size %d must be positive", packet_size_int);
return -1;
}
printf("Packet size: %d\n", packet_size);
printf("Packet size: %d\n", packet_size_int);
packet_size = static_cast<size_t>(packet_size_int);
// check for stereo
if (argv[4][strlen(argv[4]) - 1] == '*') {
@ -653,10 +657,6 @@ int main(int argc, char* argv[]) {
enc_len =
NetEQTest_encode(usedCodec, org_data, packet_size, &rtp_data[12], fs,
&vad, useVAD, bitrate, numChannels);
if (enc_len == -1) {
printf("Error encoding frame\n");
exit(0);
}
if (usingStereo && stereoMode != STEREO_MODE_FRAME && vad == 1) {
// interleave the encoded payload for sample-based codecs (not for CNG)
@ -729,12 +729,12 @@ int main(int argc, char* argv[]) {
return -1;
}
#ifdef RANDOM_DATA
for (int k = 0; k < 12 + enc_len; k++) {
for (size_t k = 0; k < 12 + enc_len; k++) {
rtp_data[k] = rand() + rand();
}
#endif
#ifdef RANDOM_PAYLOAD_DATA
for (int k = 12; k < 12 + enc_len; k++) {
for (size_t k = 12; k < 12 + enc_len; k++) {
rtp_data[k] = rand() + rand();
}
#endif
@ -822,7 +822,7 @@ int main(int argc, char* argv[]) {
void NetEQTest_GetCodec_and_PT(char* name,
webrtc::NetEqDecoder* codec,
int* PT,
int frameLen,
size_t frameLen,
int* fs,
int* bitrate,
int* useRed) {
@ -887,14 +887,14 @@ void NetEQTest_GetCodec_and_PT(char* name,
}
int NetEQTest_init_coders(webrtc::NetEqDecoder coder,
int enc_frameSize,
size_t enc_frameSize,
int bitrate,
int sampfreq,
int vad,
int numChannels) {
size_t numChannels) {
int ok = 0;
for (int k = 0; k < numChannels; k++) {
for (size_t k = 0; k < numChannels; k++) {
VAD_inst[k] = WebRtcVad_Create();
if (!VAD_inst[k]) {
printf("Error: Couldn't allocate memory for VAD instance\n");
@ -962,7 +962,7 @@ int NetEQTest_init_coders(webrtc::NetEqDecoder coder,
WebRtcG729_EncoderInit(G729enc_inst[k], vad);
if ((vad == 1) && (enc_frameSize != 80)) {
printf("\nError - This simulation only supports VAD for G729 at "
"10ms packets (not %dms)\n", (enc_frameSize >> 3));
"10ms packets (not %" PRIuS "ms)\n", (enc_frameSize >> 3));
}
} else {
printf("\nError - g729 is only developed for 8kHz \n");
@ -1018,7 +1018,7 @@ int NetEQTest_init_coders(webrtc::NetEqDecoder coder,
}
if ((vad == 1) && (enc_frameSize != 160)) {
printf("\nError - This simulation only supports VAD for Speex at "
"20ms packets (not %dms)\n",
"20ms packets (not %" PRIuS "ms)\n",
(enc_frameSize >> 3));
vad = 0;
}
@ -1049,7 +1049,7 @@ int NetEQTest_init_coders(webrtc::NetEqDecoder coder,
}
if ((vad == 1) && (enc_frameSize != 320)) {
printf("\nError - This simulation only supports VAD for Speex at "
"20ms packets (not %dms)\n",
"20ms packets (not %" PRIuS "ms)\n",
(enc_frameSize >> 4));
vad = 0;
}
@ -1238,8 +1238,7 @@ int NetEQTest_init_coders(webrtc::NetEqDecoder coder,
"instance\n");
exit(0);
}
if (((enc_frameSize / 320) < 0) || ((enc_frameSize / 320) > 3) ||
((enc_frameSize % 320) != 0)) {
if (((enc_frameSize / 320) > 3) || ((enc_frameSize % 320) != 0)) {
printf("\nError - AMRwb must have frameSize of 20, 40 or 60ms\n");
exit(0);
}
@ -1320,7 +1319,8 @@ int NetEQTest_init_coders(webrtc::NetEqDecoder coder,
bitrate);
exit(0);
}
WebRtcIsac_Control(ISAC_inst[k], bitrate, enc_frameSize >> 4);
WebRtcIsac_Control(ISAC_inst[k], bitrate,
static_cast<int>(enc_frameSize >> 4));
} else {
printf("\nError - iSAC only supports 480 or 960 enc_frameSize (30 or "
"60 ms)\n");
@ -1379,7 +1379,8 @@ int NetEQTest_init_coders(webrtc::NetEqDecoder coder,
"56000 bps (not %i)\n", bitrate);
exit(0);
}
WebRtcIsac_Control(ISACSWB_inst[k], bitrate, enc_frameSize >> 5);
WebRtcIsac_Control(ISACSWB_inst[k], bitrate,
static_cast<int>(enc_frameSize >> 5));
} else {
printf("\nError - iSAC SWB only supports 960 enc_frameSize (30 "
"ms)\n");
@ -1424,8 +1425,8 @@ int NetEQTest_init_coders(webrtc::NetEqDecoder coder,
return (0);
}
int NetEQTest_free_coders(webrtc::NetEqDecoder coder, int numChannels) {
for (int k = 0; k < numChannels; k++) {
int NetEQTest_free_coders(webrtc::NetEqDecoder coder, size_t numChannels) {
for (size_t k = 0; k < numChannels; k++) {
WebRtcVad_Free(VAD_inst[k]);
#if (defined(CODEC_CNGCODEC8) || defined(CODEC_CNGCODEC16) || \
defined(CODEC_CNGCODEC32) || defined(CODEC_CNGCODEC48))
@ -1552,35 +1553,34 @@ int NetEQTest_free_coders(webrtc::NetEqDecoder coder, int numChannels) {
return (0);
}
int NetEQTest_encode(int coder,
int16_t* indata,
int frameLen,
unsigned char* encoded,
int sampleRate,
int* vad,
int useVAD,
int bitrate,
int numChannels) {
int cdlen = 0;
size_t NetEQTest_encode(int coder,
int16_t* indata,
size_t frameLen,
unsigned char* encoded,
int sampleRate,
int* vad,
int useVAD,
int bitrate,
size_t numChannels) {
size_t cdlen = 0;
int16_t* tempdata;
static int first_cng = 1;
int16_t tempLen;
size_t tempLen;
*vad = 1;
// check VAD first
if (useVAD) {
*vad = 0;
int sampleRate_10 = 10 * sampleRate / 1000;
int sampleRate_20 = 20 * sampleRate / 1000;
int sampleRate_30 = 30 * sampleRate / 1000;
for (int k = 0; k < numChannels; k++) {
size_t sampleRate_10 = static_cast<size_t>(10 * sampleRate / 1000);
size_t sampleRate_20 = static_cast<size_t>(20 * sampleRate / 1000);
size_t sampleRate_30 = static_cast<size_t>(30 * sampleRate / 1000);
for (size_t k = 0; k < numChannels; k++) {
tempLen = frameLen;
tempdata = &indata[k * frameLen];
int localVad = 0;
/* Partition the signal and test each chunk for VAD.
All chunks must be VAD=0 to produce a total VAD=0. */
All chunks must be VAD=0 to produce a total VAD=0. */
while (tempLen >= sampleRate_10) {
if ((tempLen % sampleRate_30) == 0) { // tempLen is multiple of 30ms
localVad |= WebRtcVad_Process(VAD_inst[k], sampleRate, tempdata,
@ -1607,7 +1607,7 @@ int NetEQTest_encode(int coder,
if (!*vad) {
// all channels are silent
cdlen = 0;
for (int k = 0; k < numChannels; k++) {
for (size_t k = 0; k < numChannels; k++) {
WebRtcCng_Encode(CNGenc_inst[k], &indata[k * frameLen],
(frameLen <= 640 ? frameLen : 640) /* max 640 */,
encoded, &tempLen, first_cng);
@ -1621,9 +1621,9 @@ int NetEQTest_encode(int coder,
}
// loop over all channels
int totalLen = 0;
size_t totalLen = 0;
for (int k = 0; k < numChannels; k++) {
for (size_t k = 0; k < numChannels; k++) {
/* Encode with the selected coder type */
if (coder == webrtc::kDecoderPCMu) { /*g711 u-law */
#ifdef CODEC_G711
@ -1652,7 +1652,8 @@ int NetEQTest_encode(int coder,
#endif
#ifdef CODEC_ILBC
else if (coder == webrtc::kDecoderILBC) { /*iLBC */
cdlen = WebRtcIlbcfix_Encode(iLBCenc_inst[k], indata, frameLen, encoded);
cdlen = static_cast<size_t>(std::max(
WebRtcIlbcfix_Encode(iLBCenc_inst[k], indata, frameLen, encoded), 0));
}
#endif
#if (defined(CODEC_ISAC) || \
@ -1660,28 +1661,30 @@ int NetEQTest_encode(int coder,
// NETEQ_ISACFIX_CODEC
else if (coder == webrtc::kDecoderISAC) { /*iSAC */
int noOfCalls = 0;
cdlen = 0;
while (cdlen <= 0) {
int res = 0;
while (res <= 0) {
#ifdef CODEC_ISAC /* floating point */
cdlen =
res =
WebRtcIsac_Encode(ISAC_inst[k], &indata[noOfCalls * 160], encoded);
#else /* fixed point */
cdlen = WebRtcIsacfix_Encode(ISAC_inst[k], &indata[noOfCalls * 160],
encoded);
res = WebRtcIsacfix_Encode(ISAC_inst[k], &indata[noOfCalls * 160],
encoded);
#endif
noOfCalls++;
}
cdlen = static_cast<size_t>(res);
}
#endif
#ifdef CODEC_ISAC_SWB
else if (coder == webrtc::kDecoderISACswb) { /* iSAC SWB */
int noOfCalls = 0;
cdlen = 0;
while (cdlen <= 0) {
cdlen = WebRtcIsac_Encode(ISACSWB_inst[k], &indata[noOfCalls * 320],
encoded);
int res = 0;
while (res <= 0) {
res = WebRtcIsac_Encode(ISACSWB_inst[k], &indata[noOfCalls * 320],
encoded);
noOfCalls++;
}
cdlen = static_cast<size_t>(res);
}
#endif
indata += frameLen;
@ -1757,11 +1760,11 @@ int makeRedundantHeader(unsigned char* rtp_data,
return rtpPointer - rtp_data; // length of header in bytes
}
int makeDTMFpayload(unsigned char* payload_data,
int Event,
int End,
int Volume,
int Duration) {
size_t makeDTMFpayload(unsigned char* payload_data,
int Event,
int End,
int Volume,
int Duration) {
unsigned char E, R, V;
R = 0;
V = (unsigned char)Volume;
@ -1778,11 +1781,11 @@ int makeDTMFpayload(unsigned char* payload_data,
return (4);
}
void stereoDeInterleave(int16_t* audioSamples, int numSamples) {
void stereoDeInterleave(int16_t* audioSamples, size_t numSamples) {
int16_t* tempVec;
int16_t* readPtr, *writeL, *writeR;
if (numSamples <= 0)
if (numSamples == 0)
return;
tempVec = (int16_t*)malloc(sizeof(int16_t) * numSamples);
@ -1797,7 +1800,7 @@ void stereoDeInterleave(int16_t* audioSamples, int numSamples) {
writeR = &audioSamples[numSamples / 2];
readPtr = tempVec;
for (int k = 0; k < numSamples; k += 2) {
for (size_t k = 0; k < numSamples; k += 2) {
*writeL = *readPtr;
readPtr++;
*writeR = *readPtr;
@ -1809,7 +1812,7 @@ void stereoDeInterleave(int16_t* audioSamples, int numSamples) {
free(tempVec);
}
void stereoInterleave(unsigned char* data, int dataLen, int stride) {
void stereoInterleave(unsigned char* data, size_t dataLen, size_t stride) {
unsigned char* ptrL, *ptrR;
unsigned char temp[10];