1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

avcodec/vp3: Use range-based loop variables

Motivated by:
    #if CONFIG_VP4_DECODER
        int j;
    #endif

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2023-09-13 16:10:17 +02:00
parent 5022be4e75
commit 11a9aab6c1

View File

@ -347,7 +347,6 @@ static void vp3_decode_flush(AVCodecContext *avctx)
static av_cold int vp3_decode_end(AVCodecContext *avctx)
{
Vp3DecodeContext *s = avctx->priv_data;
int i, j;
free_tables(avctx);
av_freep(&s->edge_emu_buffer);
@ -360,7 +359,7 @@ static av_cold int vp3_decode_end(AVCodecContext *avctx)
av_frame_free(&s->last_frame.f);
av_frame_free(&s->golden_frame.f);
for (i = 0; i < FF_ARRAY_ELEMS(s->coeff_vlc); i++)
for (int i = 0; i < FF_ARRAY_ELEMS(s->coeff_vlc); i++)
ff_vlc_free(&s->coeff_vlc[i]);
ff_vlc_free(&s->superblock_run_length_vlc);
@ -368,11 +367,11 @@ static av_cold int vp3_decode_end(AVCodecContext *avctx)
ff_vlc_free(&s->mode_code_vlc);
ff_vlc_free(&s->motion_vector_vlc);
for (j = 0; j < 2; j++)
for (i = 0; i < 7; i++)
for (int j = 0; j < 2; j++)
for (int i = 0; i < 7; i++)
ff_vlc_free(&s->vp4_mv_vlc[j][i]);
for (i = 0; i < 2; i++)
for (int i = 0; i < 2; i++)
ff_vlc_free(&s->block_pattern_vlc[i]);
return 0;
}
@ -386,10 +385,9 @@ static av_cold int vp3_decode_end(AVCodecContext *avctx)
*/
static int init_block_mapping(Vp3DecodeContext *s)
{
int sb_x, sb_y, plane;
int x, y, i, j = 0;
int j = 0;
for (plane = 0; plane < 3; plane++) {
for (int plane = 0; plane < 3; plane++) {
int sb_width = plane ? s->c_superblock_width
: s->y_superblock_width;
int sb_height = plane ? s->c_superblock_height
@ -397,11 +395,11 @@ static int init_block_mapping(Vp3DecodeContext *s)
int frag_width = s->fragment_width[!!plane];
int frag_height = s->fragment_height[!!plane];
for (sb_y = 0; sb_y < sb_height; sb_y++)
for (sb_x = 0; sb_x < sb_width; sb_x++)
for (i = 0; i < 16; i++) {
x = 4 * sb_x + hilbert_offset[i][0];
y = 4 * sb_y + hilbert_offset[i][1];
for (int sb_y = 0; sb_y < sb_height; sb_y++)
for (int sb_x = 0; sb_x < sb_width; sb_x++)
for (int i = 0; i < 16; i++) {
int x = 4 * sb_x + hilbert_offset[i][0];
int y = 4 * sb_y + hilbert_offset[i][1];
if (x < frag_width && y < frag_height)
s->superblock_fragments[j++] = s->fragment_start[plane] +
@ -421,12 +419,11 @@ static int init_block_mapping(Vp3DecodeContext *s)
static void init_dequantizer(Vp3DecodeContext *s, int qpi)
{
int ac_scale_factor = s->coded_ac_scale_factor[s->qps[qpi]];
int i, plane, inter, qri, bmi, bmj, qistart;
for (inter = 0; inter < 2; inter++) {
for (plane = 0; plane < 3; plane++) {
for (int inter = 0; inter < 2; inter++) {
for (int plane = 0; plane < 3; plane++) {
int dc_scale_factor = s->coded_dc_scale_factor[!!plane][s->qps[qpi]];
int sum = 0;
int sum = 0, bmi, bmj, qistart, qri;
for (qri = 0; qri < s->qr_count[inter][plane]; qri++) {
sum += s->qr_size[inter][plane][qri];
if (s->qps[qpi] <= sum)
@ -435,7 +432,7 @@ static void init_dequantizer(Vp3DecodeContext *s, int qpi)
qistart = sum - s->qr_size[inter][plane][qri];
bmi = s->qr_base[inter][plane][qri];
bmj = s->qr_base[inter][plane][qri + 1];
for (i = 0; i < 64; i++) {
for (int i = 0; i < 64; i++) {
int coeff = (2 * (sum - s->qps[qpi]) * s->base_matrix[bmi][i] -
2 * (qistart - s->qps[qpi]) * s->base_matrix[bmj][i] +
s->qr_size[inter][plane][qri]) /
@ -480,9 +477,7 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
int current_run = 0;
int num_partial_superblocks = 0;
int i, j;
int current_fragment;
int plane;
int plane0_num_coded_frags = 0;
if (s->keyframe) {
@ -537,7 +532,7 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
if (current_run == 34)
current_run += get_bits(gb, 12);
for (j = 0; j < current_run; current_superblock++) {
for (int j = 0; j < current_run; current_superblock++) {
if (current_superblock >= s->superblock_count) {
av_log(s->avctx, AV_LOG_ERROR,
"Invalid fully coded superblock run length\n");
@ -573,7 +568,7 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
s->coded_fragment_list[0] = s->keyframe ? s->kf_coded_fragment_list
: s->nkf_coded_fragment_list;
for (plane = 0; plane < 3; plane++) {
for (int plane = 0; plane < 3; plane++) {
int sb_start = superblock_starts[plane];
int sb_end = sb_start + (plane ? s->c_superblock_count
: s->y_superblock_count);
@ -581,9 +576,9 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
if (s->keyframe) {
if (s->num_kf_coded_fragment[plane] == -1) {
for (i = sb_start; i < sb_end; i++) {
for (int i = sb_start; i < sb_end; i++) {
/* iterate through all 16 fragments in a superblock */
for (j = 0; j < 16; j++) {
for (int j = 0; j < 16; j++) {
/* if the fragment is in bounds, check its coding status */
current_fragment = s->superblock_fragments[i * 16 + j];
if (current_fragment != -1) {
@ -596,12 +591,12 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
} else
num_coded_frags = s->num_kf_coded_fragment[plane];
} else {
for (i = sb_start; i < sb_end && get_bits_left(gb) > 0; i++) {
for (int i = sb_start; i < sb_end && get_bits_left(gb) > 0; i++) {
if (get_bits_left(gb) < plane0_num_coded_frags >> 2) {
return AVERROR_INVALIDDATA;
}
/* iterate through all 16 fragments in a superblock */
for (j = 0; j < 16; j++) {
for (int j = 0; j < 16; j++) {
/* if the fragment is in bounds, check its coding status */
current_fragment = s->superblock_fragments[i * 16 + j];
if (current_fragment != -1) {
@ -636,7 +631,7 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
if (!plane)
plane0_num_coded_frags = num_coded_frags;
s->total_num_coded_frags += num_coded_frags;
for (i = 0; i < 64; i++)
for (int i = 0; i < 64; i++)
s->num_coded_frags[plane][i] = num_coded_frags;
if (plane < 2)
s->coded_fragment_list[plane + 1] = s->coded_fragment_list[plane] +
@ -698,7 +693,7 @@ static int vp4_get_block_pattern(Vp3DecodeContext *s, GetBitContext *gb, int *ne
static int vp4_unpack_macroblocks(Vp3DecodeContext *s, GetBitContext *gb)
{
int plane, i, j, k, fragment;
int fragment;
int next_block_pattern_table;
int bit, current_run, has_partial;
@ -709,7 +704,7 @@ static int vp4_unpack_macroblocks(Vp3DecodeContext *s, GetBitContext *gb)
has_partial = 0;
bit = get_bits1(gb);
for (i = 0; i < s->yuv_macroblock_count; i += current_run) {
for (int i = 0; i < s->yuv_macroblock_count; i += current_run) {
if (get_bits_left(gb) <= 0)
return AVERROR_INVALIDDATA;
current_run = vp4_get_mb_count(s, gb);
@ -725,7 +720,7 @@ static int vp4_unpack_macroblocks(Vp3DecodeContext *s, GetBitContext *gb)
return AVERROR_INVALIDDATA;
bit = get_bits1(gb);
current_run = vp4_get_mb_count(s, gb);
for (i = 0; i < s->yuv_macroblock_count; i++) {
for (int i = 0; i < s->yuv_macroblock_count; i++) {
if (!s->superblock_coding[i]) {
if (!current_run) {
bit ^= 1;
@ -740,9 +735,7 @@ static int vp4_unpack_macroblocks(Vp3DecodeContext *s, GetBitContext *gb)
}
next_block_pattern_table = 0;
i = 0;
for (plane = 0; plane < 3; plane++) {
int sb_x, sb_y;
for (int plane = 0, i = 0; plane < 3; plane++) {
int sb_width = plane ? s->c_superblock_width : s->y_superblock_width;
int sb_height = plane ? s->c_superblock_height : s->y_superblock_height;
int mb_width = plane ? s->c_macroblock_width : s->macroblock_width;
@ -750,9 +743,9 @@ static int vp4_unpack_macroblocks(Vp3DecodeContext *s, GetBitContext *gb)
int fragment_width = s->fragment_width[!!plane];
int fragment_height = s->fragment_height[!!plane];
for (sb_y = 0; sb_y < sb_height; sb_y++) {
for (sb_x = 0; sb_x < sb_width; sb_x++) {
for (j = 0; j < 4; j++) {
for (int sb_y = 0; sb_y < sb_height; sb_y++) {
for (int sb_x = 0; sb_x < sb_width; sb_x++) {
for (int j = 0; j < 4; j++) {
int mb_x = 2 * sb_x + (j >> 1);
int mb_y = 2 * sb_y + (j >> 1) ^ (j & 1);
int mb_coded, pattern, coded;
@ -769,7 +762,7 @@ static int vp4_unpack_macroblocks(Vp3DecodeContext *s, GetBitContext *gb)
else
pattern = 0;
for (k = 0; k < 4; k++) {
for (int k = 0; k < 4; k++) {
if (BLOCK_X >= fragment_width || BLOCK_Y >= fragment_height)
continue;
fragment = s->fragment_start[plane] + BLOCK_Y * fragment_width + BLOCK_X;
@ -792,7 +785,6 @@ static int vp4_unpack_macroblocks(Vp3DecodeContext *s, GetBitContext *gb)
*/
static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
{
int i, j, k, sb_x, sb_y;
int scheme;
int current_macroblock;
int current_fragment;
@ -802,7 +794,7 @@ static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
Vp3Fragment *frag;
if (s->keyframe) {
for (i = 0; i < s->fragment_count; i++)
for (int i = 0; i < s->fragment_count; i++)
s->all_fragments[i].coding_method = MODE_INTRA;
} else {
/* fetch the mode coding scheme for this frame */
@ -810,9 +802,9 @@ static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
/* is it a custom coding scheme? */
if (scheme == 0) {
for (i = 0; i < 8; i++)
for (int i = 0; i < 8; i++)
custom_mode_alphabet[i] = MODE_INTER_NO_MV;
for (i = 0; i < 8; i++)
for (int i = 0; i < 8; i++)
custom_mode_alphabet[get_bits(gb, 3)] = i;
alphabet = custom_mode_alphabet;
} else
@ -820,12 +812,13 @@ static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
/* iterate through all of the macroblocks that contain 1 or more
* coded fragments */
for (sb_y = 0; sb_y < s->y_superblock_height; sb_y++) {
for (sb_x = 0; sb_x < s->y_superblock_width; sb_x++) {
for (int sb_y = 0; sb_y < s->y_superblock_height; sb_y++) {
for (int sb_x = 0; sb_x < s->y_superblock_width; sb_x++) {
if (get_bits_left(gb) <= 0)
return -1;
for (j = 0; j < 4; j++) {
for (int j = 0; j < 4; j++) {
int k;
int mb_x = 2 * sb_x + (j >> 1);
int mb_y = 2 * sb_y + (((j >> 1) + j) & 1);
current_macroblock = mb_y * s->macroblock_width + mb_x;
@ -906,7 +899,6 @@ static int vp4_get_mv(Vp3DecodeContext *s, GetBitContext *gb, int axis, int last
*/
static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
{
int j, k, sb_x, sb_y;
int coding_mode;
int motion_x[4];
int motion_y[4];
@ -928,12 +920,12 @@ static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
/* iterate through all of the macroblocks that contain 1 or more
* coded fragments */
for (sb_y = 0; sb_y < s->y_superblock_height; sb_y++) {
for (sb_x = 0; sb_x < s->y_superblock_width; sb_x++) {
for (int sb_y = 0; sb_y < s->y_superblock_height; sb_y++) {
for (int sb_x = 0; sb_x < s->y_superblock_width; sb_x++) {
if (get_bits_left(gb) <= 0)
return -1;
for (j = 0; j < 4; j++) {
for (int j = 0; j < 4; j++) {
int mb_x = 2 * sb_x + (j >> 1);
int mb_y = 2 * sb_y + (((j >> 1) + j) & 1);
current_macroblock = mb_y * s->macroblock_width + mb_x;
@ -981,7 +973,7 @@ static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
/* fetch 4 vectors from the bitstream, one for each
* Y fragment, then average for the C fragment vectors */
for (k = 0; k < 4; k++) {
for (int k = 0; k < 4; k++) {
current_fragment = BLOCK_Y * s->fragment_width[0] + BLOCK_X;
if (s->all_fragments[current_fragment].coding_method != MODE_COPY) {
if (coding_mode == 0) {
@ -1037,7 +1029,7 @@ static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
}
/* assign the motion vectors to the correct fragments */
for (k = 0; k < 4; k++) {
for (int k = 0; k < 4; k++) {
current_fragment =
BLOCK_Y * s->fragment_width[0] + BLOCK_X;
if (s->macroblock_coding[current_macroblock] == MODE_INTER_FOURMV) {
@ -1078,13 +1070,13 @@ static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
motion_x[1] = (motion_x[1] >> 1) | (motion_x[1] & 1);
}
frag = 2 * mb_y * s->fragment_width[1] + mb_x;
for (k = 0; k < 2; k++) {
for (int k = 0; k < 2; k++) {
s->motion_val[1][frag][0] = motion_x[k];
s->motion_val[1][frag][1] = motion_y[k];
frag += s->fragment_width[1];
}
} else {
for (k = 0; k < 4; k++) {
for (int k = 0; k < 4; k++) {
frag = BLOCK_Y * s->fragment_width[1] + BLOCK_X;
if (s->macroblock_coding[current_macroblock] == MODE_INTER_FOURMV) {
s->motion_val[1][frag][0] = motion_x[k];
@ -1104,11 +1096,11 @@ static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
static int unpack_block_qpis(Vp3DecodeContext *s, GetBitContext *gb)
{
int qpi, i, j, bit, run_length, blocks_decoded, num_blocks_at_qpi;
int num_blocks = s->total_num_coded_frags;
for (qpi = 0; qpi < s->nqps - 1 && num_blocks > 0; qpi++) {
i = blocks_decoded = num_blocks_at_qpi = 0;
for (int qpi = 0; qpi < s->nqps - 1 && num_blocks > 0; qpi++) {
int i = 0, blocks_decoded = 0, num_blocks_at_qpi = 0;
int bit, run_length;
bit = get_bits1(gb) ^ 1;
run_length = 0;
@ -1128,7 +1120,7 @@ static int unpack_block_qpis(Vp3DecodeContext *s, GetBitContext *gb)
if (!bit)
num_blocks_at_qpi += run_length;
for (j = 0; j < run_length; i++) {
for (int j = 0; j < run_length; i++) {
if (i >= s->total_num_coded_frags)
return -1;
@ -1186,7 +1178,7 @@ static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
int plane,
int eob_run)
{
int i, j = 0;
int j = 0;
int token;
int zero_run = 0;
int16_t coeff = 0;
@ -1267,7 +1259,7 @@ static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
// zero runs code multiple coefficients,
// so don't try to decode coeffs for those higher levels
for (i = coeff_index + 1; i <= coeff_index + zero_run; i++)
for (int i = coeff_index + 1; i <= coeff_index + zero_run; i++)
s->num_coded_frags[plane][i]--;
coeff_i++;
} else {
@ -1282,7 +1274,7 @@ static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
// decrement the number of blocks that have higher coefficients for each
// EOB run at this level
if (blocks_ended)
for (i = coeff_index + 1; i < 64; i++)
for (int i = coeff_index + 1; i < 64; i++)
s->num_coded_frags[plane][i] -= blocks_ended;
// setup the next buffer
@ -1304,7 +1296,6 @@ static void reverse_dc_prediction(Vp3DecodeContext *s,
*/
static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
{
int i;
int dc_y_table;
int dc_c_table;
int ac_y_table;
@ -1358,29 +1349,29 @@ static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
ac_c_table = get_bits(gb, 4);
/* build tables of AC VLC tables */
for (i = 1; i <= 5; i++) {
for (int i = 1; i <= 5; i++) {
/* AC VLC table group 1 */
y_tables[i] = &s->coeff_vlc[ac_y_table + 16];
c_tables[i] = &s->coeff_vlc[ac_c_table + 16];
}
for (i = 6; i <= 14; i++) {
for (int i = 6; i <= 14; i++) {
/* AC VLC table group 2 */
y_tables[i] = &s->coeff_vlc[ac_y_table + 32];
c_tables[i] = &s->coeff_vlc[ac_c_table + 32];
}
for (i = 15; i <= 27; i++) {
for (int i = 15; i <= 27; i++) {
/* AC VLC table group 3 */
y_tables[i] = &s->coeff_vlc[ac_y_table + 48];
c_tables[i] = &s->coeff_vlc[ac_c_table + 48];
}
for (i = 28; i <= 63; i++) {
for (int i = 28; i <= 63; i++) {
/* AC VLC table group 4 */
y_tables[i] = &s->coeff_vlc[ac_y_table + 64];
c_tables[i] = &s->coeff_vlc[ac_c_table + 64];
}
/* decode all AC coefficients */
for (i = 1; i <= 63; i++) {
for (int i = 1; i <= 63; i++) {
residual_eob_run = unpack_vlcs(s, gb, y_tables[i], i,
0, residual_eob_run);
if (residual_eob_run < 0)
@ -1467,24 +1458,20 @@ static void vp4_dc_predictor_reset(VP4Predictor *p)
static void vp4_dc_pred_before(const Vp3DecodeContext *s, VP4Predictor dc_pred[6][6], int sb_x)
{
int i, j;
for (i = 0; i < 4; i++)
for (int i = 0; i < 4; i++)
dc_pred[0][i + 1] = s->dc_pred_row[sb_x * 4 + i];
for (j = 1; j < 5; j++)
for (i = 0; i < 4; i++)
for (int j = 1; j < 5; j++)
for (int i = 0; i < 4; i++)
vp4_dc_predictor_reset(&dc_pred[j][i + 1]);
}
static void vp4_dc_pred_after(Vp3DecodeContext *s, VP4Predictor dc_pred[6][6], int sb_x)
{
int i;
for (i = 0; i < 4; i++)
for (int i = 0; i < 4; i++)
s->dc_pred_row[sb_x * 4 + i] = dc_pred[4][i + 1];
for (i = 1; i < 5; i++)
for (int i = 1; i < 5; i++)
dc_pred[i][0] = dc_pred[i][4];
}
@ -1520,10 +1507,9 @@ static int vp4_dc_pred(const Vp3DecodeContext *s, const VP4Predictor * dc_pred,
static void vp4_set_tokens_base(Vp3DecodeContext *s)
{
int plane, i;
int16_t *base = s->dct_tokens_base;
for (plane = 0; plane < 3; plane++) {
for (i = 0; i < 64; i++) {
for (int plane = 0; plane < 3; plane++) {
for (int i = 0; i < 64; i++) {
s->dct_tokens[plane][i] = base;
base += s->fragment_width[!!plane] * s->fragment_height[!!plane];
}
@ -1532,13 +1518,11 @@ static void vp4_set_tokens_base(Vp3DecodeContext *s)
static int vp4_unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
{
int i, j;
int dc_y_table;
int dc_c_table;
int ac_y_table;
int ac_c_table;
const VLC *tables[2][64];
int plane, sb_y, sb_x;
int eob_tracker[64];
VP4Predictor dc_pred[6][6];
int last_dc[NB_VP4_DC_TYPES];
@ -1558,22 +1542,22 @@ static int vp4_unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
/* DC table group */
tables[0][0] = &s->coeff_vlc[dc_y_table];
tables[1][0] = &s->coeff_vlc[dc_c_table];
for (i = 1; i <= 5; i++) {
for (int i = 1; i <= 5; i++) {
/* AC VLC table group 1 */
tables[0][i] = &s->coeff_vlc[ac_y_table + 16];
tables[1][i] = &s->coeff_vlc[ac_c_table + 16];
}
for (i = 6; i <= 14; i++) {
for (int i = 6; i <= 14; i++) {
/* AC VLC table group 2 */
tables[0][i] = &s->coeff_vlc[ac_y_table + 32];
tables[1][i] = &s->coeff_vlc[ac_c_table + 32];
}
for (i = 15; i <= 27; i++) {
for (int i = 15; i <= 27; i++) {
/* AC VLC table group 3 */
tables[0][i] = &s->coeff_vlc[ac_y_table + 48];
tables[1][i] = &s->coeff_vlc[ac_c_table + 48];
}
for (i = 28; i <= 63; i++) {
for (int i = 28; i <= 63; i++) {
/* AC VLC table group 4 */
tables[0][i] = &s->coeff_vlc[ac_y_table + 64];
tables[1][i] = &s->coeff_vlc[ac_c_table + 64];
@ -1583,21 +1567,21 @@ static int vp4_unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
memset(last_dc, 0, sizeof(last_dc));
for (plane = 0; plane < ((s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 1 : 3); plane++) {
for (int plane = 0; plane < ((s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 1 : 3); plane++) {
memset(eob_tracker, 0, sizeof(eob_tracker));
/* initialise dc prediction */
for (i = 0; i < s->fragment_width[!!plane]; i++)
for (int i = 0; i < s->fragment_width[!!plane]; i++)
vp4_dc_predictor_reset(&s->dc_pred_row[i]);
for (j = 0; j < 6; j++)
for (i = 0; i < 6; i++)
for (int j = 0; j < 6; j++)
for (int i = 0; i < 6; i++)
vp4_dc_predictor_reset(&dc_pred[j][i]);
for (sb_y = 0; sb_y * 4 < s->fragment_height[!!plane]; sb_y++) {
for (sb_x = 0; sb_x *4 < s->fragment_width[!!plane]; sb_x++) {
for (int sb_y = 0; sb_y * 4 < s->fragment_height[!!plane]; sb_y++) {
for (int sb_x = 0; sb_x *4 < s->fragment_width[!!plane]; sb_x++) {
vp4_dc_pred_before(s, dc_pred, sb_x);
for (j = 0; j < 16; j++) {
for (int j = 0; j < 16; j++) {
int hx = hilbert_offset[j][0];
int hy = hilbert_offset[j][1];
int x = 4 * sb_x + hx;
@ -1654,7 +1638,6 @@ static void reverse_dc_prediction(Vp3DecodeContext *s,
#define PUR 2
#define PL 1
int x, y;
int i = first_fragment;
int predicted_dc;
@ -1724,9 +1707,9 @@ static void reverse_dc_prediction(Vp3DecodeContext *s,
last_dc[2] = 0;
/* for each fragment row... */
for (y = 0; y < fragment_height; y++) {
for (int y = 0; y < fragment_height; y++) {
/* for each fragment in a row... */
for (x = 0; x < fragment_width; x++, i++) {
for (int x = 0; x < fragment_width; x++, i++) {
/* reverse prediction if this block was coded */
if (s->all_fragments[i].coding_method != MODE_COPY) {
@ -1797,7 +1780,6 @@ static void reverse_dc_prediction(Vp3DecodeContext *s,
static void apply_loop_filter(Vp3DecodeContext *s, int plane,
int ystart, int yend)
{
int x, y;
int *bounding_values = s->bounding_values_array + 127;
int width = s->fragment_width[!!plane];
@ -1809,8 +1791,8 @@ static void apply_loop_filter(Vp3DecodeContext *s, int plane,
stride = -stride;
plane_data += s->data_offset[plane] + 8 * ystart * stride;
for (y = ystart; y < yend; y++) {
for (x = 0; x < width; x++) {
for (int y = ystart; y < yend; y++) {
for (int x = 0; x < width; x++) {
/* This code basically just deblocks on the edges of coded blocks.
* However, it has to be much more complicated because of the
* brain damaged deblock ordering used in VP3/Theora. Order matters
@ -1908,7 +1890,7 @@ end:
*/
static void vp3_draw_horiz_band(Vp3DecodeContext *s, int y)
{
int h, cy, i;
int h, cy;
int offset[AV_NUM_DATA_POINTERS];
if (HAVE_THREADS && s->avctx->active_thread_type & FF_THREAD_FRAME) {
@ -1937,7 +1919,7 @@ static void vp3_draw_horiz_band(Vp3DecodeContext *s, int y)
offset[0] = s->current_frame.f->linesize[0] * y;
offset[1] = s->current_frame.f->linesize[1] * cy;
offset[2] = s->current_frame.f->linesize[2] * cy;
for (i = 3; i < AV_NUM_DATA_POINTERS; i++)
for (int i = 3; i < AV_NUM_DATA_POINTERS; i++)
offset[i] = 0;
emms_c();
@ -1979,7 +1961,6 @@ static int vp4_mc_loop_filter(Vp3DecodeContext *s, int plane, int motion_x, int
int subpel_mask = plane ? 3 : 1;
int *bounding_values = s->bounding_values_array + 127;
int i;
int x, y;
int x2, y2;
int x_subpel, y_subpel;
@ -2060,7 +2041,7 @@ static int vp4_mc_loop_filter(Vp3DecodeContext *s, int plane, int motion_x, int
safe_loop_filter(v_loop_filter, loop + (y_offset + 1)*loop_stride + 1, loop_stride, bounding_values);
}
for (i = 0; i < 9; i++)
for (int i = 0; i < 9; i++)
memcpy(temp + i*stride, loop + (i + 1) * loop_stride + 1, 9);
return 1;
@ -2073,16 +2054,15 @@ static int vp4_mc_loop_filter(Vp3DecodeContext *s, int plane, int motion_x, int
*/
static void render_slice(Vp3DecodeContext *s, int slice)
{
int x, y, i, j, fragment;
int16_t *block = s->block;
int motion_x = 0xdeadbeef, motion_y = 0xdeadbeef;
int motion_halfpel_index;
int plane, first_pixel;
int first_pixel;
if (slice >= s->c_superblock_height)
return;
for (plane = 0; plane < 3; plane++) {
for (int plane = 0; plane < 3; plane++) {
uint8_t *output_plane = s->current_frame.f->data[plane] +
s->data_offset[plane];
const uint8_t *last_plane = s->last_frame.f->data[plane] +
@ -2094,7 +2074,7 @@ static void render_slice(Vp3DecodeContext *s, int slice)
int plane_height = s->height >> (plane && s->chroma_y_shift);
const int8_t (*motion_val)[2] = s->motion_val[!!plane];
int sb_x, sb_y = slice << (!plane && s->chroma_y_shift);
int sb_y = slice << (!plane && s->chroma_y_shift);
int slice_height = sb_y + 1 + (!plane && s->chroma_y_shift);
int slice_width = plane ? s->c_superblock_width
: s->y_superblock_width;
@ -2114,14 +2094,14 @@ static void render_slice(Vp3DecodeContext *s, int slice)
/* for each superblock row in the slice (both of them)... */
for (; sb_y < slice_height; sb_y++) {
/* for each superblock in a row... */
for (sb_x = 0; sb_x < slice_width; sb_x++) {
for (int sb_x = 0; sb_x < slice_width; sb_x++) {
/* for each block in a superblock... */
for (j = 0; j < 16; j++) {
x = 4 * sb_x + hilbert_offset[j][0];
y = 4 * sb_y + hilbert_offset[j][1];
fragment = y * fragment_width + x;
for (int j = 0; j < 16; j++) {
int x = 4 * sb_x + hilbert_offset[j][0];
int y = 4 * sb_y + hilbert_offset[j][1];
int fragment = y * fragment_width + x;
i = fragment_start + fragment;
int i = fragment_start + fragment;
// bounds check
if (x >= fragment_width || y >= fragment_height)
@ -2329,13 +2309,10 @@ static av_cold int init_frames(Vp3DecodeContext *s)
static av_cold int vp3_decode_init(AVCodecContext *avctx)
{
Vp3DecodeContext *s = avctx->priv_data;
int i, inter, plane, ret;
int ret;
int c_width;
int c_height;
int y_fragment_count, c_fragment_count;
#if CONFIG_VP4_DECODER
int j;
#endif
ret = init_frames(s);
if (ret < 0)
@ -2364,7 +2341,7 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
ff_videodsp_init(&s->vdsp, 8);
ff_vp3dsp_init(&s->vp3dsp, avctx->flags);
for (i = 0; i < 64; i++) {
for (int i = 0; i < 64; i++) {
#define TRANSPOSE(x) (((x) >> 3) | (((x) & 7) << 3))
s->idct_permutation[i] = TRANSPOSE(i);
s->idct_scantable[i] = TRANSPOSE(ff_zigzag_direct[i]);
@ -2373,7 +2350,7 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
/* initialize to an impossible value which will force a recalculation
* in the first frame decode */
for (i = 0; i < 3; i++)
for (int i = 0; i < 3; i++)
s->qps[i] = -1;
ret = av_pix_fmt_get_chroma_sub_sample(avctx->pix_fmt, &s->chroma_x_shift, &s->chroma_y_shift);
@ -2418,7 +2395,7 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
if (!s->theora_tables) {
const uint8_t (*bias_tabs)[32][2];
for (i = 0; i < 64; i++) {
for (int i = 0; i < 64; i++) {
s->coded_dc_scale_factor[0][i] = s->version < 2 ? vp31_dc_scale_factor[i] : vp4_y_dc_scale_factor[i];
s->coded_dc_scale_factor[1][i] = s->version < 2 ? vp31_dc_scale_factor[i] : vp4_uv_dc_scale_factor[i];
s->coded_ac_scale_factor[i] = s->version < 2 ? vp31_ac_scale_factor[i] : vp4_ac_scale_factor[i];
@ -2428,8 +2405,8 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
s->filter_limit_values[i] = s->version < 2 ? vp31_filter_limit_values[i] : vp4_filter_limit_values[i];
}
for (inter = 0; inter < 2; inter++) {
for (plane = 0; plane < 3; plane++) {
for (int inter = 0; inter < 2; inter++) {
for (int plane = 0; plane < 3; plane++) {
s->qr_count[inter][plane] = 1;
s->qr_size[inter][plane][0] = 63;
s->qr_base[inter][plane][0] =
@ -2448,7 +2425,7 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
return ret;
}
} else {
for (i = 0; i < FF_ARRAY_ELEMS(s->coeff_vlc); i++) {
for (int i = 0; i < FF_ARRAY_ELEMS(s->coeff_vlc); i++) {
const HuffTable *tab = &s->huffman_table[i];
ret = ff_vlc_init_from_lengths(&s->coeff_vlc[i], 11, tab->nb_entries,
@ -2486,8 +2463,8 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
return ret;
#if CONFIG_VP4_DECODER
for (j = 0; j < 2; j++)
for (i = 0; i < 7; i++) {
for (int j = 0; j < 2; j++)
for (int i = 0; i < 7; i++) {
ret = ff_vlc_init_from_lengths(&s->vp4_mv_vlc[j][i], VP4_MV_VLC_BITS, 63,
&vp4_mv_vlc[j][i][0][1], 2,
&vp4_mv_vlc[j][i][0][0], 2, 1, -31,
@ -2497,7 +2474,7 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
}
/* version >= 2 */
for (i = 0; i < 2; i++)
for (int i = 0; i < 2; i++)
if ((ret = vlc_init(&s->block_pattern_vlc[i], 3, 14,
&vp4_block_pattern_vlc[i][0][1], 2, 1,
&vp4_block_pattern_vlc[i][0][0], 2, 1, 0)) < 0)
@ -2552,7 +2529,7 @@ static int vp3_update_thread_context(AVCodecContext *dst, const AVCodecContext *
{
Vp3DecodeContext *s = dst->priv_data;
const Vp3DecodeContext *s1 = src->priv_data;
int qps_changed = 0, i, err;
int qps_changed = 0, err;
if (!s1->current_frame.f->data[0] ||
s->width != s1->width || s->height != s1->height) {
@ -2569,7 +2546,7 @@ static int vp3_update_thread_context(AVCodecContext *dst, const AVCodecContext *
s->keyframe = s1->keyframe;
// copy qscale data if necessary
for (i = 0; i < 3; i++) {
for (int i = 0; i < 3; i++) {
if (s->qps[i] != s1->qps[1]) {
qps_changed = 1;
memcpy(&s->qmat[i], &s1->qmat[i], sizeof(s->qmat[i]));
@ -2598,7 +2575,7 @@ static int vp3_decode_frame(AVCodecContext *avctx, AVFrame *frame,
int buf_size = avpkt->size;
Vp3DecodeContext *s = avctx->priv_data;
GetBitContext gb;
int i, ret;
int ret;
if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0)
return ret;
@ -2648,14 +2625,14 @@ static int vp3_decode_frame(AVCodecContext *avctx, AVFrame *frame,
}
if (!s->theora)
skip_bits(&gb, 1);
for (i = 0; i < 3; i++)
for (int i = 0; i < 3; i++)
s->last_qps[i] = s->qps[i];
s->nqps = 0;
do {
s->qps[s->nqps++] = get_bits(&gb, 6);
} while (s->theora >= 0x030200 && s->nqps < 3 && get_bits1(&gb));
for (i = s->nqps; i < 3; i++)
for (int i = s->nqps; i < 3; i++)
s->qps[i] = -1;
if (s->avctx->debug & FF_DEBUG_PICT_INFO)
@ -2669,7 +2646,7 @@ static int vp3_decode_frame(AVCodecContext *avctx, AVFrame *frame,
if (s->qps[0] != s->last_qps[0])
init_loop_filter(s);
for (i = 0; i < s->nqps; i++)
for (int i = 0; i < s->nqps; i++)
// reinit all dequantizers if the first one changed, because
// the DC of the first quantizer must be used for all matrices
if (s->qps[i] != s->last_qps[i] || s->qps[0] != s->last_qps[0])
@ -2803,7 +2780,7 @@ static int vp3_decode_frame(AVCodecContext *avctx, AVFrame *frame,
#endif
}
for (i = 0; i < 3; i++) {
for (int i = 0; i < 3; i++) {
int height = s->height >> (i && s->chroma_y_shift);
if (s->flipped_image)
s->data_offset[i] = 0;
@ -2812,12 +2789,12 @@ static int vp3_decode_frame(AVCodecContext *avctx, AVFrame *frame,
}
s->last_slice_end = 0;
for (i = 0; i < s->c_superblock_height; i++)
for (int i = 0; i < s->c_superblock_height; i++)
render_slice(s, i);
// filter the last row
if (s->version < 2)
for (i = 0; i < 3; i++) {
for (int i = 0; i < 3; i++) {
int row = (s->height >> (3 + (i && s->chroma_y_shift))) - 1;
apply_loop_filter(s, i, row, row + 1);
}
@ -3006,7 +2983,7 @@ static int theora_decode_header(AVCodecContext *avctx, GetBitContext *gb)
static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb)
{
Vp3DecodeContext *s = avctx->priv_data;
int i, n, matrices, inter, plane, ret;
int n, matrices, ret;
if (!s->theora_header)
return AVERROR_INVALIDDATA;
@ -3015,7 +2992,7 @@ static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb)
n = get_bits(gb, 3);
/* loop filter limit values table */
if (n)
for (i = 0; i < 64; i++)
for (int i = 0; i < 64; i++)
s->filter_limit_values[i] = get_bits(gb, n);
}
@ -3024,7 +3001,7 @@ static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb)
else
n = 16;
/* quality threshold table */
for (i = 0; i < 64; i++)
for (int i = 0; i < 64; i++)
s->coded_ac_scale_factor[i] = get_bits(gb, n);
if (s->theora >= 0x030200)
@ -3032,7 +3009,7 @@ static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb)
else
n = 16;
/* dc scale factor table */
for (i = 0; i < 64; i++)
for (int i = 0; i < 64; i++)
s->coded_dc_scale_factor[0][i] =
s->coded_dc_scale_factor[1][i] = get_bits(gb, n);
@ -3046,12 +3023,12 @@ static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb)
return -1;
}
for (n = 0; n < matrices; n++)
for (i = 0; i < 64; i++)
s->base_matrix[n][i] = get_bits(gb, 8);
for (int j = 0; j < matrices; j++)
for (int i = 0; i < 64; i++)
s->base_matrix[j][i] = get_bits(gb, 8);
for (inter = 0; inter <= 1; inter++) {
for (plane = 0; plane <= 2; plane++) {
for (int inter = 0; inter <= 1; inter++) {
for (int plane = 0; plane <= 2; plane++) {
int newqr = 1;
if (inter || plane > 0)
newqr = get_bits1(gb);
@ -3074,7 +3051,7 @@ static int theora_decode_tables(AVCodecContext *avctx, GetBitContext *gb)
int qi = 0;
for (;;) {
i = get_bits(gb, av_log2(matrices - 1) + 1);
int i = get_bits(gb, av_log2(matrices - 1) + 1);
if (i >= matrices) {
av_log(avctx, AV_LOG_ERROR,
"invalid base matrix index\n");
@ -3116,7 +3093,6 @@ static av_cold int theora_decode_init(AVCodecContext *avctx)
int ptype;
const uint8_t *header_start[3];
int header_len[3];
int i;
int ret;
avctx->pix_fmt = AV_PIX_FMT_YUV420P;
@ -3134,7 +3110,7 @@ static av_cold int theora_decode_init(AVCodecContext *avctx)
return -1;
}
for (i = 0; i < 3; i++) {
for (int i = 0; i < 3; i++) {
if (header_len[i] <= 0)
continue;
ret = init_get_bits8(&gb, header_start[i], header_len[i]);