mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
avcodec/dss_sp: Avoid a slow division and modulo in the pitch_lag calculation
Also check the combined_pitch for validity (which is needed to keep the behavior identical in the error case) Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
31fb029f2d
commit
b11edbd289
@ -50,6 +50,7 @@ typedef struct DssSpFrame {
|
||||
} DssSpFrame;
|
||||
|
||||
typedef struct DssSpContext {
|
||||
AVCodecContext *avctx;
|
||||
int32_t excitation[288 + 6];
|
||||
int32_t history[187];
|
||||
DssSpFrame fparam;
|
||||
@ -296,6 +297,7 @@ static av_cold int dss_sp_decode_init(AVCodecContext *avctx)
|
||||
|
||||
memset(p->history, 0, sizeof(p->history));
|
||||
p->pulse_dec_mode = 1;
|
||||
p->avctx = avctx;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -400,10 +402,15 @@ static void dss_sp_unpack_coeffs(DssSpContext *p, const uint8_t *src)
|
||||
|
||||
combined_pitch /= 151;
|
||||
|
||||
for (i = 1; i < SUBFRAMES; i++) {
|
||||
for (i = 1; i < SUBFRAMES - 1; i++) {
|
||||
fparam->pitch_lag[i] = combined_pitch % 48;
|
||||
combined_pitch /= 48;
|
||||
}
|
||||
if (combined_pitch > 47) {
|
||||
av_log (p->avctx, AV_LOG_WARNING, "combined_pitch was too large\n");
|
||||
combined_pitch = 0;
|
||||
}
|
||||
fparam->pitch_lag[i] = combined_pitch;
|
||||
|
||||
pitch_lag = fparam->pitch_lag[0];
|
||||
for (i = 1; i < SUBFRAMES; i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user