You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
avcodec/scpr: Factor some indexes out in decode_run_i()
This improves the speed of decode_run_i() After: clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_SCPR_fuzzer-5656821117747200 in 13516 ms Before: clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_SCPR_fuzzer-5656821117747200 in 14018 ms Improves: 11270/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_SCPR_fuzzer-5656821117747200 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
@@ -140,26 +140,28 @@ static int decode_run_i(AVCodecContext *avctx, uint32_t ptype, int run,
|
|||||||
case 4:
|
case 4:
|
||||||
while (run-- > 0) {
|
while (run-- > 0) {
|
||||||
uint8_t *odst = (uint8_t *)dst;
|
uint8_t *odst = (uint8_t *)dst;
|
||||||
|
int off1 = (ly * linesize + lx) * 4;
|
||||||
|
int off2 = ((y * linesize + x) + off) * 4;
|
||||||
|
|
||||||
if (y < 1 || y >= avctx->height ||
|
if (y < 1 || y >= avctx->height ||
|
||||||
(y == 1 && x == 0))
|
(y == 1 && x == 0))
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
if (x == 0) {
|
if (x == 0) {
|
||||||
z = backstep;
|
z = backstep * 4;
|
||||||
} else {
|
} else {
|
||||||
z = 0;
|
z = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = odst[(ly * linesize + lx) * 4] +
|
r = odst[off1] +
|
||||||
odst[((y * linesize + x) + off) * 4 + 4] -
|
odst[off2 + 4] -
|
||||||
odst[((y * linesize + x) + off - z) * 4];
|
odst[off2 - z ];
|
||||||
g = odst[(ly * linesize + lx) * 4 + 1] +
|
g = odst[off1 + 1] +
|
||||||
odst[((y * linesize + x) + off) * 4 + 5] -
|
odst[off2 + 5] -
|
||||||
odst[((y * linesize + x) + off - z) * 4 + 1];
|
odst[off2 - z + 1];
|
||||||
b = odst[(ly * linesize + lx) * 4 + 2] +
|
b = odst[off1 + 2] +
|
||||||
odst[((y * linesize + x) + off) * 4 + 6] -
|
odst[off2 + 6] -
|
||||||
odst[((y * linesize + x) + off - z) * 4 + 2];
|
odst[off2 - z + 2];
|
||||||
clr = ((b & 0xFF) << 16) + ((g & 0xFF) << 8) + (r & 0xFF);
|
clr = ((b & 0xFF) << 16) + ((g & 0xFF) << 8) + (r & 0xFF);
|
||||||
dst[y * linesize + x] = clr;
|
dst[y * linesize + x] = clr;
|
||||||
lx = x;
|
lx = x;
|
||||||
|
Reference in New Issue
Block a user