diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2021-04-02 18:31:02 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-04-02 18:31:02 +0000 |
commit | e203ab79e0fa3b151e7e2a11bd5041d546b1a432 (patch) | |
tree | 48756ec8a803e79373ba7e1c2a616f46f1d82039 | |
parent | 7e912bbe302a4d18261a5a99ce6ffd711ff32dc2 (diff) | |
parent | 393ac239819fbba24f5831f45d1e0db85ca582c8 (diff) |
Merge "Valid pitch value is required to prevent out of bound access" into rvc-qpr-dev
-rw-r--r-- | media/libstagefright/codecs/amrnb/enc/src/pitch_fr.cpp | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/media/libstagefright/codecs/amrnb/enc/src/pitch_fr.cpp b/media/libstagefright/codecs/amrnb/enc/src/pitch_fr.cpp index 5a846fa624..584f79b727 100644 --- a/media/libstagefright/codecs/amrnb/enc/src/pitch_fr.cpp +++ b/media/libstagefright/codecs/amrnb/enc/src/pitch_fr.cpp @@ -570,12 +570,14 @@ static void searchFrac( Word16 corr[], /* i : normalized correlation */ Word16 flag3, /* i : subsample resolution (3: =1 / 6: =0) */ - Flag *pOverflow + Flag *pOverflow, + enum Mode mode ) { Word16 i; Word16 max; Word16 corr_int; + Word16 minPitch; /* Test the fractions around T0 and choose the one which maximizes */ /* the interpolated normalized correlation. */ @@ -593,14 +595,22 @@ static void searchFrac( } } + minPitch = (mode == MR122) ? PIT_MIN_MR122 : PIT_MIN; if (flag3 == 0) { /* Limit the fraction value in the interval [-2,-1,0,1,2,3] */ if (*frac == -3) { - *frac = 3; - (*lag)--; + if (*lag > minPitch) + { + *frac = 3; + (*lag)--; + } + else + { + *frac = -2; + } } } else @@ -609,13 +619,27 @@ static void searchFrac( if (*frac == -2) { - *frac = 1; - (*lag)--; + if (*lag > minPitch) + { + *frac = 1; + (*lag)--; + } + else + { + *frac = -1; + } } - if (*frac == 2) + else if (*frac == 2) { - *frac = -1; - (*lag)++; + if (*lag < PIT_MAX) + { + *frac = -1; + (*lag)++; + } + else + { + *frac = 1; + } } } } @@ -1533,20 +1557,20 @@ Word16 Pitch_fr( /* o : pitch period (integer) */ /* normal search in fractions around T0 */ - searchFrac(&lag, &frac, last_frac, corr, flag3, pOverflow); + searchFrac(&lag, &frac, last_frac, corr, flag3, pOverflow, mode); } else if (lag == (tmp_lag - 2)) { /* limit search around T0 to the right side */ frac = 0; - searchFrac(&lag, &frac, last_frac, corr, flag3, pOverflow); + searchFrac(&lag, &frac, last_frac, corr, flag3, pOverflow, mode); } else if (lag == (tmp_lag + 1)) { /* limit search around T0 to the left side */ last_frac = 0; - searchFrac(&lag, &frac, last_frac, corr, flag3, pOverflow); + searchFrac(&lag, &frac, last_frac, corr, flag3, pOverflow, mode); } else { @@ -1556,7 +1580,7 @@ Word16 Pitch_fr( /* o : pitch period (integer) */ } else /* test the fractions around T0 */ - searchFrac(&lag, &frac, last_frac, corr, flag3, pOverflow); + searchFrac(&lag, &frac, last_frac, corr, flag3, pOverflow, mode); } /*-----------------------------------------------------------------------* |