Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Side by Side Diff: webrtc/modules/audio_coding/codecs/isac/main/source/isac.c

Issue 1230503003: Update a ton of audio code to use size_t more correctly and in general reduce (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Resync Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 */ 500 */
501 int WebRtcIsac_Encode(ISACStruct* ISAC_main_inst, 501 int WebRtcIsac_Encode(ISACStruct* ISAC_main_inst,
502 const int16_t* speechIn, 502 const int16_t* speechIn,
503 uint8_t* encoded) { 503 uint8_t* encoded) {
504 float inFrame[FRAMESAMPLES_10ms]; 504 float inFrame[FRAMESAMPLES_10ms];
505 int16_t speechInLB[FRAMESAMPLES_10ms]; 505 int16_t speechInLB[FRAMESAMPLES_10ms];
506 int16_t speechInUB[FRAMESAMPLES_10ms]; 506 int16_t speechInUB[FRAMESAMPLES_10ms];
507 int streamLenLB = 0; 507 int streamLenLB = 0;
508 int streamLenUB = 0; 508 int streamLenUB = 0;
509 int streamLen = 0; 509 int streamLen = 0;
510 int16_t k = 0; 510 size_t k = 0;
511 uint8_t garbageLen = 0; 511 uint8_t garbageLen = 0;
512 int32_t bottleneck = 0; 512 int32_t bottleneck = 0;
513 int16_t bottleneckIdx = 0; 513 int16_t bottleneckIdx = 0;
514 int16_t jitterInfo = 0; 514 int16_t jitterInfo = 0;
515 515
516 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; 516 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst;
517 ISACLBStruct* instLB = &(instISAC->instLB); 517 ISACLBStruct* instLB = &(instISAC->instLB);
518 ISACUBStruct* instUB = &(instISAC->instUB); 518 ISACUBStruct* instUB = &(instISAC->instUB);
519 const int16_t* speech_in_ptr = speechIn; 519 const int16_t* speech_in_ptr = speechIn;
520 int16_t resampled_buff[FRAMESAMPLES_10ms * 2]; 520 int16_t resampled_buff[FRAMESAMPLES_10ms * 2];
521 521
522 /* Check if encoder initiated. */ 522 /* Check if encoder initiated. */
523 if ((instISAC->initFlag & BIT_MASK_ENC_INIT) != 523 if ((instISAC->initFlag & BIT_MASK_ENC_INIT) !=
524 BIT_MASK_ENC_INIT) { 524 BIT_MASK_ENC_INIT) {
525 instISAC->errorCode = ISAC_ENCODER_NOT_INITIATED; 525 instISAC->errorCode = ISAC_ENCODER_NOT_INITIATED;
526 return -1; 526 return -1;
527 } 527 }
528 528
529 if (instISAC->in_sample_rate_hz == 48000) { 529 if (instISAC->in_sample_rate_hz == 48000) {
530 /* Samples in 10 ms @ 48 kHz. */ 530 /* Samples in 10 ms @ 48 kHz. */
531 const int kNumInputSamples = FRAMESAMPLES_10ms * 3; 531 const size_t kNumInputSamples = FRAMESAMPLES_10ms * 3;
532 /* Samples 10 ms @ 32 kHz. */ 532 /* Samples 10 ms @ 32 kHz. */
533 const int kNumOutputSamples = FRAMESAMPLES_10ms * 2; 533 const size_t kNumOutputSamples = FRAMESAMPLES_10ms * 2;
534 /* Resampler divide the input into blocks of 3 samples, i.e. 534 /* Resampler divide the input into blocks of 3 samples, i.e.
535 * kNumInputSamples / 3. */ 535 * kNumInputSamples / 3. */
536 const int kNumResamplerBlocks = FRAMESAMPLES_10ms; 536 const size_t kNumResamplerBlocks = FRAMESAMPLES_10ms;
537 int32_t buffer32[FRAMESAMPLES_10ms * 3 + SIZE_RESAMPLER_STATE]; 537 int32_t buffer32[FRAMESAMPLES_10ms * 3 + SIZE_RESAMPLER_STATE];
538 538
539 /* Restore last samples from the past to the beginning of the buffer 539 /* Restore last samples from the past to the beginning of the buffer
540 * and store the last samples of current frame for the next resampling. */ 540 * and store the last samples of current frame for the next resampling. */
541 for (k = 0; k < SIZE_RESAMPLER_STATE; k++) { 541 for (k = 0; k < SIZE_RESAMPLER_STATE; k++) {
542 buffer32[k] = instISAC->state_in_resampler[k]; 542 buffer32[k] = instISAC->state_in_resampler[k];
543 instISAC->state_in_resampler[k] = speechIn[kNumInputSamples - 543 instISAC->state_in_resampler[k] = speechIn[kNumInputSamples -
544 SIZE_RESAMPLER_STATE + k]; 544 SIZE_RESAMPLER_STATE + k];
545 } 545 }
546 for (k = 0; k < kNumInputSamples; k++) { 546 for (k = 0; k < kNumInputSamples; k++) {
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
999 * - packet_size : size of the packet. 999 * - packet_size : size of the packet.
1000 * - rtp_seq_number : the RTP number of the packet. 1000 * - rtp_seq_number : the RTP number of the packet.
1001 * - arr_ts : the arrival time of the packet (from NetEq) 1001 * - arr_ts : the arrival time of the packet (from NetEq)
1002 * in samples. 1002 * in samples.
1003 * 1003 *
1004 * Return value : 0 - Ok 1004 * Return value : 0 - Ok
1005 * -1 - Error 1005 * -1 - Error
1006 */ 1006 */
1007 int16_t WebRtcIsac_UpdateBwEstimate(ISACStruct* ISAC_main_inst, 1007 int16_t WebRtcIsac_UpdateBwEstimate(ISACStruct* ISAC_main_inst,
1008 const uint8_t* encoded, 1008 const uint8_t* encoded,
1009 int32_t packet_size, 1009 size_t packet_size,
1010 uint16_t rtp_seq_number, 1010 uint16_t rtp_seq_number,
1011 uint32_t send_ts, 1011 uint32_t send_ts,
1012 uint32_t arr_ts) { 1012 uint32_t arr_ts) {
1013 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; 1013 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst;
1014 Bitstr streamdata; 1014 Bitstr streamdata;
1015 #ifndef WEBRTC_ARCH_BIG_ENDIAN 1015 #ifndef WEBRTC_ARCH_BIG_ENDIAN
1016 int k; 1016 int k;
1017 #endif 1017 #endif
1018 int16_t err; 1018 int16_t err;
1019 1019
(...skipping 29 matching lines...) Expand all
1049 if (err < 0) { 1049 if (err < 0) {
1050 /* Return error code if something went wrong. */ 1050 /* Return error code if something went wrong. */
1051 instISAC->errorCode = -err; 1051 instISAC->errorCode = -err;
1052 return -1; 1052 return -1;
1053 } 1053 }
1054 return 0; 1054 return 0;
1055 } 1055 }
1056 1056
1057 static int Decode(ISACStruct* ISAC_main_inst, 1057 static int Decode(ISACStruct* ISAC_main_inst,
1058 const uint8_t* encoded, 1058 const uint8_t* encoded,
1059 int16_t lenEncodedBytes, 1059 size_t lenEncodedBytes,
1060 int16_t* decoded, 1060 int16_t* decoded,
1061 int16_t* speechType, 1061 int16_t* speechType,
1062 int16_t isRCUPayload) { 1062 int16_t isRCUPayload) {
1063 /* Number of samples (480 or 960), output from decoder 1063 /* Number of samples (480 or 960), output from decoder
1064 that were actually used in the encoder/decoder 1064 that were actually used in the encoder/decoder
1065 (determined on the fly). */ 1065 (determined on the fly). */
1066 int16_t numSamplesLB; 1066 int16_t numSamplesLB;
1067 int16_t numSamplesUB; 1067 int16_t numSamplesUB;
1068 int16_t speechIdx; 1068 int16_t speechIdx;
1069 float outFrame[MAX_FRAMESAMPLES]; 1069 float outFrame[MAX_FRAMESAMPLES];
1070 int16_t outFrameLB[MAX_FRAMESAMPLES]; 1070 int16_t outFrameLB[MAX_FRAMESAMPLES];
1071 int16_t outFrameUB[MAX_FRAMESAMPLES]; 1071 int16_t outFrameUB[MAX_FRAMESAMPLES];
1072 int numDecodedBytesLB; 1072 int numDecodedBytesLBint;
1073 size_t numDecodedBytesLB;
1073 int numDecodedBytesUB; 1074 int numDecodedBytesUB;
1074 int16_t lenEncodedLBBytes; 1075 size_t lenEncodedLBBytes;
1075 int16_t validChecksum = 1; 1076 int16_t validChecksum = 1;
1076 int16_t k; 1077 int16_t k;
1077 uint16_t numLayer; 1078 uint16_t numLayer;
1078 int16_t totSizeBytes; 1079 size_t totSizeBytes;
1079 int16_t err; 1080 int16_t err;
1080 1081
1081 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; 1082 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst;
1082 ISACUBDecStruct* decInstUB = &(instISAC->instUB.ISACdecUB_obj); 1083 ISACUBDecStruct* decInstUB = &(instISAC->instUB.ISACdecUB_obj);
1083 ISACLBDecStruct* decInstLB = &(instISAC->instLB.ISACdecLB_obj); 1084 ISACLBDecStruct* decInstLB = &(instISAC->instLB.ISACdecLB_obj);
1084 1085
1085 /* Check if decoder initiated. */ 1086 /* Check if decoder initiated. */
1086 if ((instISAC->initFlag & BIT_MASK_DEC_INIT) != 1087 if ((instISAC->initFlag & BIT_MASK_DEC_INIT) !=
1087 BIT_MASK_DEC_INIT) { 1088 BIT_MASK_DEC_INIT) {
1088 instISAC->errorCode = ISAC_DECODER_NOT_INITIATED; 1089 instISAC->errorCode = ISAC_DECODER_NOT_INITIATED;
1089 return -1; 1090 return -1;
1090 } 1091 }
1091 1092
1092 if (lenEncodedBytes <= 0) { 1093 if (lenEncodedBytes == 0) {
1093 /* return error code if the packet length is null. */ 1094 /* return error code if the packet length is null. */
1094 instISAC->errorCode = ISAC_EMPTY_PACKET; 1095 instISAC->errorCode = ISAC_EMPTY_PACKET;
1095 return -1; 1096 return -1;
1096 } 1097 }
1097 1098
1098 /* The size of the encoded lower-band is bounded by 1099 /* The size of the encoded lower-band is bounded by
1099 * STREAM_SIZE_MAX. If a payload with the size larger than STREAM_SIZE_MAX 1100 * STREAM_SIZE_MAX. If a payload with the size larger than STREAM_SIZE_MAX
1100 * is received, it is not considered erroneous. */ 1101 * is received, it is not considered erroneous. */
1101 lenEncodedLBBytes = (lenEncodedBytes > STREAM_SIZE_MAX) ? 1102 lenEncodedLBBytes = (lenEncodedBytes > STREAM_SIZE_MAX) ?
1102 STREAM_SIZE_MAX : lenEncodedBytes; 1103 STREAM_SIZE_MAX : lenEncodedBytes;
1103 1104
1104 /* Copy to lower-band bit-stream structure. */ 1105 /* Copy to lower-band bit-stream structure. */
1105 memcpy(instISAC->instLB.ISACdecLB_obj.bitstr_obj.stream, encoded, 1106 memcpy(instISAC->instLB.ISACdecLB_obj.bitstr_obj.stream, encoded,
1106 lenEncodedLBBytes); 1107 lenEncodedLBBytes);
1107 1108
1108 /* We need to initialize numSamplesLB to something; otherwise, in the test 1109 /* We need to initialize numSamplesLB to something; otherwise, in the test
1109 for whether we should return -1 below, the compiler might generate code 1110 for whether we should return -1 below, the compiler might generate code
1110 that fools Memcheck (Valgrind) into thinking that the control flow depends 1111 that fools Memcheck (Valgrind) into thinking that the control flow depends
1111 on the uninitialized value in numSamplesLB (since WebRtcIsac_DecodeLb will 1112 on the uninitialized value in numSamplesLB (since WebRtcIsac_DecodeLb will
1112 not fill it in if it fails and returns -1). */ 1113 not fill it in if it fails and returns -1). */
1113 numSamplesLB = 0; 1114 numSamplesLB = 0;
1114 1115
1115 /* Regardless of that the current codec is setup to work in 1116 /* Regardless of that the current codec is setup to work in
1116 * wideband or super-wideband, the decoding of the lower-band 1117 * wideband or super-wideband, the decoding of the lower-band
1117 * has to be performed. */ 1118 * has to be performed. */
1118 numDecodedBytesLB = WebRtcIsac_DecodeLb(&instISAC->transform_tables, 1119 numDecodedBytesLBint = WebRtcIsac_DecodeLb(&instISAC->transform_tables,
1119 outFrame, decInstLB, 1120 outFrame, decInstLB,
1120 &numSamplesLB, isRCUPayload); 1121 &numSamplesLB, isRCUPayload);
1121 1122 numDecodedBytesLB = (size_t)numDecodedBytesLBint;
1122 if ((numDecodedBytesLB < 0) || (numDecodedBytesLB > lenEncodedLBBytes) || 1123 if ((numDecodedBytesLBint < 0) ||
1124 (numDecodedBytesLB > lenEncodedLBBytes) ||
1123 (numSamplesLB > MAX_FRAMESAMPLES)) { 1125 (numSamplesLB > MAX_FRAMESAMPLES)) {
1124 instISAC->errorCode = ISAC_LENGTH_MISMATCH; 1126 instISAC->errorCode = ISAC_LENGTH_MISMATCH;
1125 return -1; 1127 return -1;
1126 } 1128 }
1127 1129
1128 /* Error Check, we accept multi-layer bit-stream This will limit number 1130 /* Error Check, we accept multi-layer bit-stream This will limit number
1129 * of iterations of the while loop. Even without this the number 1131 * of iterations of the while loop. Even without this the number
1130 * of iterations is limited. */ 1132 * of iterations is limited. */
1131 numLayer = 1; 1133 numLayer = 1;
1132 totSizeBytes = numDecodedBytesLB; 1134 totSizeBytes = numDecodedBytesLB;
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 * 1357 *
1356 * Output: 1358 * Output:
1357 * - decoded : The decoded vector 1359 * - decoded : The decoded vector
1358 * 1360 *
1359 * Return value : >0 - number of samples in decoded vector 1361 * Return value : >0 - number of samples in decoded vector
1360 * -1 - Error 1362 * -1 - Error
1361 */ 1363 */
1362 1364
1363 int WebRtcIsac_Decode(ISACStruct* ISAC_main_inst, 1365 int WebRtcIsac_Decode(ISACStruct* ISAC_main_inst,
1364 const uint8_t* encoded, 1366 const uint8_t* encoded,
1365 int16_t lenEncodedBytes, 1367 size_t lenEncodedBytes,
1366 int16_t* decoded, 1368 int16_t* decoded,
1367 int16_t* speechType) { 1369 int16_t* speechType) {
1368 int16_t isRCUPayload = 0; 1370 int16_t isRCUPayload = 0;
1369 return Decode(ISAC_main_inst, encoded, lenEncodedBytes, decoded, 1371 return Decode(ISAC_main_inst, encoded, lenEncodedBytes, decoded,
1370 speechType, isRCUPayload); 1372 speechType, isRCUPayload);
1371 } 1373 }
1372 1374
1373 /**************************************************************************** 1375 /****************************************************************************
1374 * WebRtcIsac_DecodeRcu(...) 1376 * WebRtcIsac_DecodeRcu(...)
1375 * 1377 *
(...skipping 11 matching lines...) Expand all
1387 * - decoded : The decoded vector 1389 * - decoded : The decoded vector
1388 * 1390 *
1389 * Return value : >0 - number of samples in decoded vector 1391 * Return value : >0 - number of samples in decoded vector
1390 * -1 - Error 1392 * -1 - Error
1391 */ 1393 */
1392 1394
1393 1395
1394 1396
1395 int WebRtcIsac_DecodeRcu(ISACStruct* ISAC_main_inst, 1397 int WebRtcIsac_DecodeRcu(ISACStruct* ISAC_main_inst,
1396 const uint8_t* encoded, 1398 const uint8_t* encoded,
1397 int16_t lenEncodedBytes, 1399 size_t lenEncodedBytes,
1398 int16_t* decoded, 1400 int16_t* decoded,
1399 int16_t* speechType) { 1401 int16_t* speechType) {
1400 int16_t isRCUPayload = 1; 1402 int16_t isRCUPayload = 1;
1401 return Decode(ISAC_main_inst, encoded, lenEncodedBytes, decoded, 1403 return Decode(ISAC_main_inst, encoded, lenEncodedBytes, decoded,
1402 speechType, isRCUPayload); 1404 speechType, isRCUPayload);
1403 } 1405 }
1404 1406
1405 1407
1406 /**************************************************************************** 1408 /****************************************************************************
1407 * WebRtcIsac_DecodePlc(...) 1409 * WebRtcIsac_DecodePlc(...)
1408 * 1410 *
1409 * This function conducts PLC for ISAC frame(s). Output speech length 1411 * This function conducts PLC for ISAC frame(s). Output speech length
1410 * will be a multiple of 480 samples: 480 or 960 samples, 1412 * will be a multiple of 480 samples: 480 or 960 samples,
1411 * depending on the frameSize (30 or 60 ms). 1413 * depending on the frameSize (30 or 60 ms).
1412 * 1414 *
1413 * Input: 1415 * Input:
1414 * - ISAC_main_inst : ISAC instance. 1416 * - ISAC_main_inst : ISAC instance.
1415 * - noOfLostFrames : Number of PLC frames to produce 1417 * - noOfLostFrames : Number of PLC frames to produce
1416 * 1418 *
1417 * Output: 1419 * Output:
1418 * - decoded : The decoded vector 1420 * - decoded : The decoded vector
1419 * 1421 *
1420 * Return value : >0 - number of samples in decoded PLC vector 1422 * Return value : Number of samples in decoded PLC vector
1421 * -1 - Error
1422 */ 1423 */
1423 int16_t WebRtcIsac_DecodePlc(ISACStruct* ISAC_main_inst, 1424 size_t WebRtcIsac_DecodePlc(ISACStruct* ISAC_main_inst,
1424 int16_t* decoded, 1425 int16_t* decoded,
1425 int16_t noOfLostFrames) { 1426 size_t noOfLostFrames) {
1426 int16_t numSamples = 0; 1427 size_t numSamples = 0;
1427 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; 1428 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst;
1428 1429
1429 /* Limit number of frames to two = 60 millisecond. 1430 /* Limit number of frames to two = 60 millisecond.
1430 * Otherwise we exceed data vectors. */ 1431 * Otherwise we exceed data vectors. */
1431 if (noOfLostFrames > 2) { 1432 if (noOfLostFrames > 2) {
1432 noOfLostFrames = 2; 1433 noOfLostFrames = 2;
1433 } 1434 }
1434 1435
1435 /* Get the number of samples per frame */ 1436 /* Get the number of samples per frame */
1436 switch (instISAC->decoderSamplingRateKHz) { 1437 switch (instISAC->decoderSamplingRateKHz) {
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after
2409 } 2410 }
2410 2411
2411 void WebRtcIsac_SetEncSampRateInDecoder(ISACStruct* inst, 2412 void WebRtcIsac_SetEncSampRateInDecoder(ISACStruct* inst,
2412 int sample_rate_hz) { 2413 int sample_rate_hz) {
2413 ISACMainStruct* instISAC = (ISACMainStruct*)inst; 2414 ISACMainStruct* instISAC = (ISACMainStruct*)inst;
2414 assert(instISAC->initFlag & BIT_MASK_DEC_INIT); 2415 assert(instISAC->initFlag & BIT_MASK_DEC_INIT);
2415 assert(!(instISAC->initFlag & BIT_MASK_ENC_INIT)); 2416 assert(!(instISAC->initFlag & BIT_MASK_ENC_INIT));
2416 assert(sample_rate_hz == 16000 || sample_rate_hz == 32000); 2417 assert(sample_rate_hz == 16000 || sample_rate_hz == 32000);
2417 instISAC->encoderSamplingRateKHz = sample_rate_hz / 1000; 2418 instISAC->encoderSamplingRateKHz = sample_rate_hz / 1000;
2418 } 2419 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698