2011-07-07 08:21:25 +00:00
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
|
|
|
*
|
|
|
|
|
* Use of this source code is governed by a BSD-style license
|
|
|
|
|
* that can be found in the LICENSE file in the root of the source
|
|
|
|
|
* tree. An additional intellectual property rights grant can be found
|
|
|
|
|
* in the file PATENTS. All contributing project authors may
|
|
|
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/******************************************************************
|
|
|
|
|
|
|
|
|
|
iLBC Speech Coder ANSI-C Source Code
|
|
|
|
|
|
|
|
|
|
WebRtcIlbcfix_GetCbVec.c
|
|
|
|
|
|
|
|
|
|
******************************************************************/
|
|
|
|
|
|
2018-02-01 15:11:41 +01:00
|
|
|
#include "modules/audio_coding/codecs/ilbc/get_cd_vec.h"
|
2016-08-24 02:46:44 -07:00
|
|
|
|
2018-02-01 15:11:41 +01:00
|
|
|
#include "modules/audio_coding/codecs/ilbc/defines.h"
|
|
|
|
|
#include "modules/audio_coding/codecs/ilbc/constants.h"
|
|
|
|
|
#include "modules/audio_coding/codecs/ilbc/create_augmented_vec.h"
|
2011-07-07 08:21:25 +00:00
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------*
|
|
|
|
|
* Construct codebook vector for given index.
|
|
|
|
|
*---------------------------------------------------------------*/
|
|
|
|
|
|
2016-08-24 02:46:44 -07:00
|
|
|
bool WebRtcIlbcfix_GetCbVec(
|
2013-04-09 00:28:06 +00:00
|
|
|
int16_t *cbvec, /* (o) Constructed codebook vector */
|
|
|
|
|
int16_t *mem, /* (i) Codebook buffer */
|
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}
2015-08-24 14:52:23 -07:00
|
|
|
size_t index, /* (i) Codebook index */
|
|
|
|
|
size_t lMem, /* (i) Length of codebook buffer */
|
|
|
|
|
size_t cbveclen /* (i) Codebook vector length */
|
2011-07-07 08:21:25 +00:00
|
|
|
){
|
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}
2015-08-24 14:52:23 -07:00
|
|
|
size_t k, base_size;
|
|
|
|
|
size_t lag;
|
2011-07-07 08:21:25 +00:00
|
|
|
/* Stack based */
|
2013-04-09 00:28:06 +00:00
|
|
|
int16_t tempbuff2[SUBL+5];
|
2011-07-07 08:21:25 +00:00
|
|
|
|
|
|
|
|
/* Determine size of codebook sections */
|
|
|
|
|
|
|
|
|
|
base_size=lMem-cbveclen+1;
|
|
|
|
|
|
|
|
|
|
if (cbveclen==SUBL) {
|
2014-10-08 15:36:30 +00:00
|
|
|
base_size += cbveclen / 2;
|
2011-07-07 08:21:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* No filter -> First codebook section */
|
|
|
|
|
|
|
|
|
|
if (index<lMem-cbveclen+1) {
|
|
|
|
|
|
|
|
|
|
/* first non-interpolated vectors */
|
|
|
|
|
|
|
|
|
|
k=index+cbveclen;
|
|
|
|
|
/* get vector */
|
|
|
|
|
WEBRTC_SPL_MEMCPY_W16(cbvec, mem+lMem-k, cbveclen);
|
|
|
|
|
|
|
|
|
|
} else if (index < base_size) {
|
|
|
|
|
|
|
|
|
|
/* Calculate lag */
|
|
|
|
|
|
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}
2015-08-24 14:52:23 -07:00
|
|
|
k = (2 * (index - (lMem - cbveclen + 1))) + cbveclen;
|
2011-07-07 08:21:25 +00:00
|
|
|
|
2014-10-08 15:36:30 +00:00
|
|
|
lag = k / 2;
|
2011-07-07 08:21:25 +00:00
|
|
|
|
|
|
|
|
WebRtcIlbcfix_CreateAugmentedVec(lag, mem+lMem, cbvec);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Higher codebbok section based on filtering */
|
|
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
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}
2015-08-24 14:52:23 -07:00
|
|
|
size_t memIndTest;
|
2011-07-07 08:21:25 +00:00
|
|
|
|
|
|
|
|
/* first non-interpolated vectors */
|
|
|
|
|
|
|
|
|
|
if (index-base_size<lMem-cbveclen+1) {
|
|
|
|
|
|
|
|
|
|
/* Set up filter memory, stuff zeros outside memory buffer */
|
|
|
|
|
|
|
|
|
|
memIndTest = lMem-(index-base_size+cbveclen);
|
|
|
|
|
|
|
|
|
|
WebRtcSpl_MemSetW16(mem-CB_HALFFILTERLEN, 0, CB_HALFFILTERLEN);
|
|
|
|
|
WebRtcSpl_MemSetW16(mem+lMem, 0, CB_HALFFILTERLEN);
|
|
|
|
|
|
|
|
|
|
/* do filtering to get the codebook vector */
|
|
|
|
|
|
|
|
|
|
WebRtcSpl_FilterMAFastQ12(
|
2013-04-09 00:28:06 +00:00
|
|
|
&mem[memIndTest+4], cbvec, (int16_t*)WebRtcIlbcfix_kCbFiltersRev,
|
2011-07-07 08:21:25 +00:00
|
|
|
CB_FILTERLEN, cbveclen);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* interpolated vectors */
|
|
|
|
|
|
|
|
|
|
else {
|
2016-08-24 02:46:44 -07:00
|
|
|
if (cbveclen < SUBL) {
|
|
|
|
|
// We're going to fill in cbveclen + 5 elements of tempbuff2 in
|
|
|
|
|
// WebRtcSpl_FilterMAFastQ12, less than the SUBL + 5 elements we'll be
|
|
|
|
|
// using in WebRtcIlbcfix_CreateAugmentedVec. This error is caused by
|
|
|
|
|
// bad values in |index| (which come from the encoded stream). Tell the
|
|
|
|
|
// caller that things went south, and that the decoder state is now
|
|
|
|
|
// corrupt (because it's half-way through an update that we can't
|
|
|
|
|
// complete).
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2011-07-07 08:21:25 +00:00
|
|
|
/* Stuff zeros outside memory buffer */
|
|
|
|
|
memIndTest = lMem-cbveclen-CB_FILTERLEN;
|
|
|
|
|
WebRtcSpl_MemSetW16(mem+lMem, 0, CB_HALFFILTERLEN);
|
|
|
|
|
|
|
|
|
|
/* do filtering */
|
|
|
|
|
WebRtcSpl_FilterMAFastQ12(
|
2013-04-09 00:28:06 +00:00
|
|
|
&mem[memIndTest+7], tempbuff2, (int16_t*)WebRtcIlbcfix_kCbFiltersRev,
|
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}
2015-08-24 14:52:23 -07:00
|
|
|
CB_FILTERLEN, cbveclen+5);
|
2011-07-07 08:21:25 +00:00
|
|
|
|
|
|
|
|
/* Calculate lag index */
|
|
|
|
|
lag = (cbveclen<<1)-20+index-base_size-lMem-1;
|
|
|
|
|
|
|
|
|
|
WebRtcIlbcfix_CreateAugmentedVec(lag, tempbuff2+SUBL+5, cbvec);
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-08-24 02:46:44 -07:00
|
|
|
|
|
|
|
|
return true; // Success.
|
2011-07-07 08:21:25 +00:00
|
|
|
}
|