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

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

Issue 1392173004: Delete full-band mode from the iSAC codec (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@remove-isac-fb-neteq
Patch Set: Remove redundant DCHECK Created 5 years, 2 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 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 memset(instISAC->analysisFBState2, 0, 462 memset(instISAC->analysisFBState2, 0,
463 FB_STATE_SIZE_WORD32 * sizeof(int32_t)); 463 FB_STATE_SIZE_WORD32 * sizeof(int32_t));
464 464
465 status = EncoderInitUb(&(instISAC->instUB), 465 status = EncoderInitUb(&(instISAC->instUB),
466 instISAC->bandwidthKHz); 466 instISAC->bandwidthKHz);
467 if (status < 0) { 467 if (status < 0) {
468 instISAC->errorCode = -status; 468 instISAC->errorCode = -status;
469 return -1; 469 return -1;
470 } 470 }
471 } 471 }
472 memset(instISAC->state_in_resampler, 0, sizeof(instISAC->state_in_resampler));
473 /* Initialization is successful, set the flag. */ 472 /* Initialization is successful, set the flag. */
474 instISAC->initFlag |= BIT_MASK_ENC_INIT; 473 instISAC->initFlag |= BIT_MASK_ENC_INIT;
475 return 0; 474 return 0;
476 } 475 }
477 476
478 477
479 /**************************************************************************** 478 /****************************************************************************
480 * WebRtcIsac_Encode(...) 479 * WebRtcIsac_Encode(...)
481 * 480 *
482 * This function encodes 10ms frame(s) and inserts it into a package. 481 * This function encodes 10ms frame(s) and inserts it into a package.
(...skipping 26 matching lines...) Expand all
509 int streamLen = 0; 508 int streamLen = 0;
510 size_t k = 0; 509 size_t k = 0;
511 uint8_t garbageLen = 0; 510 uint8_t garbageLen = 0;
512 int32_t bottleneck = 0; 511 int32_t bottleneck = 0;
513 int16_t bottleneckIdx = 0; 512 int16_t bottleneckIdx = 0;
514 int16_t jitterInfo = 0; 513 int16_t jitterInfo = 0;
515 514
516 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; 515 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst;
517 ISACLBStruct* instLB = &(instISAC->instLB); 516 ISACLBStruct* instLB = &(instISAC->instLB);
518 ISACUBStruct* instUB = &(instISAC->instUB); 517 ISACUBStruct* instUB = &(instISAC->instUB);
519 const int16_t* speech_in_ptr = speechIn;
520 int16_t resampled_buff[FRAMESAMPLES_10ms * 2];
521 518
522 /* Check if encoder initiated. */ 519 /* Check if encoder initiated. */
523 if ((instISAC->initFlag & BIT_MASK_ENC_INIT) != 520 if ((instISAC->initFlag & BIT_MASK_ENC_INIT) !=
524 BIT_MASK_ENC_INIT) { 521 BIT_MASK_ENC_INIT) {
525 instISAC->errorCode = ISAC_ENCODER_NOT_INITIATED; 522 instISAC->errorCode = ISAC_ENCODER_NOT_INITIATED;
526 return -1; 523 return -1;
527 } 524 }
528 525
529 if (instISAC->in_sample_rate_hz == 48000) {
530 /* Samples in 10 ms @ 48 kHz. */
531 const size_t kNumInputSamples = FRAMESAMPLES_10ms * 3;
532 /* Samples 10 ms @ 32 kHz. */
533 const size_t kNumOutputSamples = FRAMESAMPLES_10ms * 2;
534 /* Resampler divide the input into blocks of 3 samples, i.e.
535 * kNumInputSamples / 3. */
536 const size_t kNumResamplerBlocks = FRAMESAMPLES_10ms;
537 int32_t buffer32[FRAMESAMPLES_10ms * 3 + SIZE_RESAMPLER_STATE];
538
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. */
541 for (k = 0; k < SIZE_RESAMPLER_STATE; k++) {
542 buffer32[k] = instISAC->state_in_resampler[k];
543 instISAC->state_in_resampler[k] = speechIn[kNumInputSamples -
544 SIZE_RESAMPLER_STATE + k];
545 }
546 for (k = 0; k < kNumInputSamples; k++) {
547 buffer32[SIZE_RESAMPLER_STATE + k] = speechIn[k];
548 }
549 /* Resampling 3 samples to 2. Function divides the input in
550 * |kNumResamplerBlocks| number of 3-sample groups, and output is
551 * |kNumResamplerBlocks| number of 2-sample groups. */
552 WebRtcSpl_Resample48khzTo32khz(buffer32, buffer32, kNumResamplerBlocks);
553 WebRtcSpl_VectorBitShiftW32ToW16(resampled_buff, kNumOutputSamples,
554 buffer32, 15);
555 speech_in_ptr = resampled_buff;
556 }
557
558 if (instISAC->encoderSamplingRateKHz == kIsacSuperWideband) { 526 if (instISAC->encoderSamplingRateKHz == kIsacSuperWideband) {
559 WebRtcSpl_AnalysisQMF(speech_in_ptr, SWBFRAMESAMPLES_10ms, speechInLB, 527 WebRtcSpl_AnalysisQMF(speechIn, SWBFRAMESAMPLES_10ms, speechInLB,
560 speechInUB, instISAC->analysisFBState1, 528 speechInUB, instISAC->analysisFBState1,
561 instISAC->analysisFBState2); 529 instISAC->analysisFBState2);
562 530
563 /* Convert from fixed to floating point. */ 531 /* Convert from fixed to floating point. */
564 for (k = 0; k < FRAMESAMPLES_10ms; k++) { 532 for (k = 0; k < FRAMESAMPLES_10ms; k++) {
565 inFrame[k] = (float)speechInLB[k]; 533 inFrame[k] = (float)speechInLB[k];
566 } 534 }
567 } else { 535 } else {
568 for (k = 0; k < FRAMESAMPLES_10ms; k++) { 536 for (k = 0; k < FRAMESAMPLES_10ms; k++) {
569 inFrame[k] = (float) speechIn[k]; 537 inFrame[k] = (float) speechIn[k];
(...skipping 1275 matching lines...) Expand 10 before | Expand all | Expand 10 after
1845 * 1813 *
1846 * Return Value : frame lenght in samples 1814 * Return Value : frame lenght in samples
1847 * 1815 *
1848 */ 1816 */
1849 int16_t WebRtcIsac_GetNewFrameLen(ISACStruct* ISAC_main_inst) { 1817 int16_t WebRtcIsac_GetNewFrameLen(ISACStruct* ISAC_main_inst) {
1850 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; 1818 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst;
1851 1819
1852 /* Return new frame length. */ 1820 /* Return new frame length. */
1853 if (instISAC->in_sample_rate_hz == 16000) 1821 if (instISAC->in_sample_rate_hz == 16000)
1854 return (instISAC->instLB.ISACencLB_obj.new_framelength); 1822 return (instISAC->instLB.ISACencLB_obj.new_framelength);
1855 else if (instISAC->in_sample_rate_hz == 32000) 1823 else /* 32000 Hz */
1856 return ((instISAC->instLB.ISACencLB_obj.new_framelength) * 2); 1824 return ((instISAC->instLB.ISACencLB_obj.new_framelength) * 2);
1857 else
1858 return ((instISAC->instLB.ISACencLB_obj.new_framelength) * 3);
1859 } 1825 }
1860 1826
1861 1827
1862 /**************************************************************************** 1828 /****************************************************************************
1863 * WebRtcIsac_GetErrorCode(...) 1829 * WebRtcIsac_GetErrorCode(...)
1864 * 1830 *
1865 * This function can be used to check the error code of an iSAC instance. 1831 * This function can be used to check the error code of an iSAC instance.
1866 * When a function returns -1 an error code will be set for that instance. 1832 * When a function returns -1 an error code will be set for that instance.
1867 * The function below extracts the code of the last error that occurred in 1833 * The function below extracts the code of the last error that occurred in
1868 * the specified instance. 1834 * the specified instance.
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
2198 2164
2199 2165
2200 /****************************************************************************** 2166 /******************************************************************************
2201 * WebRtcIsac_SetEncSampRate() 2167 * WebRtcIsac_SetEncSampRate()
2202 * This function sets the sampling rate of the encoder. Initialization of the 2168 * This function sets the sampling rate of the encoder. Initialization of the
2203 * encoder WILL NOT overwrite the sampling rate of the encoder. The default 2169 * encoder WILL NOT overwrite the sampling rate of the encoder. The default
2204 * value is 16 kHz which is set when the instance is created. The encoding-mode 2170 * value is 16 kHz which is set when the instance is created. The encoding-mode
2205 * and the bottleneck remain unchanged by this call, however, the maximum rate 2171 * and the bottleneck remain unchanged by this call, however, the maximum rate
2206 * and maximum payload-size will be reset to their default values. 2172 * and maximum payload-size will be reset to their default values.
2207 * 2173 *
2208 * NOTE:
2209 * The maximum internal sampling rate is 32 kHz. If the encoder sample rate is
2210 * set to 48 kHz the input is expected to be at 48 kHz but will be resampled to
2211 * 32 kHz before any further processing.
2212 * This mode is created for compatibility with full-band codecs if iSAC is used
2213 * in dual-streaming. See SetDecSampleRate() for sampling rates at the decoder.
2214 *
2215 * Input: 2174 * Input:
2216 * - ISAC_main_inst : iSAC instance 2175 * - ISAC_main_inst : iSAC instance
2217 * - sample_rate_hz : sampling rate in Hertz, valid values are 16000, 2176 * - sample_rate_hz : sampling rate in Hertz, valid values are 16000
2218 * 32000 and 48000. 2177 * and 32000.
2219 * 2178 *
2220 * Return value : 0 if successful 2179 * Return value : 0 if successful
2221 * -1 if failed. 2180 * -1 if failed.
2222 */ 2181 */
2223 int16_t WebRtcIsac_SetEncSampRate(ISACStruct* ISAC_main_inst, 2182 int16_t WebRtcIsac_SetEncSampRate(ISACStruct* ISAC_main_inst,
2224 uint16_t sample_rate_hz) { 2183 uint16_t sample_rate_hz) {
2225 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; 2184 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst;
2226 enum IsacSamplingRate encoder_operational_rate; 2185 enum IsacSamplingRate encoder_operational_rate;
2227 2186
2228 if ((sample_rate_hz != 16000) && (sample_rate_hz != 32000) && 2187 if ((sample_rate_hz != 16000) && (sample_rate_hz != 32000)) {
2229 (sample_rate_hz != 48000)) {
2230 /* Sampling Frequency is not supported. */ 2188 /* Sampling Frequency is not supported. */
2231 instISAC->errorCode = ISAC_UNSUPPORTED_SAMPLING_FREQUENCY; 2189 instISAC->errorCode = ISAC_UNSUPPORTED_SAMPLING_FREQUENCY;
2232 return -1; 2190 return -1;
2233 } 2191 }
2234 if (sample_rate_hz == 16000) { 2192 if (sample_rate_hz == 16000) {
2235 encoder_operational_rate = kIsacWideband; 2193 encoder_operational_rate = kIsacWideband;
2236 } else { 2194 } else {
2237 encoder_operational_rate = kIsacSuperWideband; 2195 encoder_operational_rate = kIsacSuperWideband;
2238 } 2196 }
2239 2197
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
2396 } 2354 }
2397 2355
2398 void WebRtcIsac_SetEncSampRateInDecoder(ISACStruct* inst, 2356 void WebRtcIsac_SetEncSampRateInDecoder(ISACStruct* inst,
2399 int sample_rate_hz) { 2357 int sample_rate_hz) {
2400 ISACMainStruct* instISAC = (ISACMainStruct*)inst; 2358 ISACMainStruct* instISAC = (ISACMainStruct*)inst;
2401 assert(instISAC->initFlag & BIT_MASK_DEC_INIT); 2359 assert(instISAC->initFlag & BIT_MASK_DEC_INIT);
2402 assert(!(instISAC->initFlag & BIT_MASK_ENC_INIT)); 2360 assert(!(instISAC->initFlag & BIT_MASK_ENC_INIT));
2403 assert(sample_rate_hz == 16000 || sample_rate_hz == 32000); 2361 assert(sample_rate_hz == 16000 || sample_rate_hz == 32000);
2404 instISAC->encoderSamplingRateKHz = sample_rate_hz / 1000; 2362 instISAC->encoderSamplingRateKHz = sample_rate_hz / 1000;
2405 } 2363 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698