| @@ -55,13 +55,13 @@ static int vp9_frame_alloc(AVCodecContext *avctx, VP9Frame *f) | |||
| return ret; | |||
| sz = 64 * s->sb_cols * s->sb_rows; | |||
| f->extradata = av_buffer_allocz(sz * (1 + sizeof(struct VP9mvrefPair))); | |||
| f->extradata = av_buffer_allocz(sz * (1 + sizeof(VP9mvrefPair))); | |||
| if (!f->extradata) { | |||
| goto fail; | |||
| } | |||
| f->segmentation_map = f->extradata->data; | |||
| f->mv = (struct VP9mvrefPair *) (f->extradata->data + sz); | |||
| f->mv = (VP9mvrefPair *) (f->extradata->data + sz); | |||
| if (avctx->hwaccel) { | |||
| const AVHWAccel *hwaccel = avctx->hwaccel; | |||
| @@ -194,7 +194,7 @@ static int update_size(AVCodecContext *avctx, int w, int h) | |||
| assign(s->above_comp_ctx, uint8_t *, 8); | |||
| assign(s->above_ref_ctx, uint8_t *, 8); | |||
| assign(s->above_filter_ctx, uint8_t *, 8); | |||
| assign(s->lflvl, struct VP9Filter *, 1); | |||
| assign(s->lflvl, VP9Filter *, 1); | |||
| #undef assign | |||
| // these will be re-allocated a little later | |||
| @@ -924,7 +924,7 @@ static int decode_frame_header(AVCodecContext *avctx, | |||
| return (data2 - data) + size2; | |||
| } | |||
| static void decode_sb(AVCodecContext *avctx, int row, int col, struct VP9Filter *lflvl, | |||
| static void decode_sb(AVCodecContext *avctx, int row, int col, VP9Filter *lflvl, | |||
| ptrdiff_t yoff, ptrdiff_t uvoff, enum BlockLevel bl) | |||
| { | |||
| VP9Context *s = avctx->priv_data; | |||
| @@ -1003,7 +1003,7 @@ static void decode_sb(AVCodecContext *avctx, int row, int col, struct VP9Filter | |||
| s->counts.partition[bl][c][bp]++; | |||
| } | |||
| static void decode_sb_mem(AVCodecContext *avctx, int row, int col, struct VP9Filter *lflvl, | |||
| static void decode_sb_mem(AVCodecContext *avctx, int row, int col, VP9Filter *lflvl, | |||
| ptrdiff_t yoff, ptrdiff_t uvoff, enum BlockLevel bl) | |||
| { | |||
| VP9Context *s = avctx->priv_data; | |||
| @@ -1204,7 +1204,7 @@ static av_always_inline void filter_plane_rows(VP9Context *s, int row, int ss_h, | |||
| } | |||
| } | |||
| static void loopfilter_sb(AVCodecContext *avctx, struct VP9Filter *lflvl, | |||
| static void loopfilter_sb(AVCodecContext *avctx, VP9Filter *lflvl, | |||
| int row, int col, ptrdiff_t yoff, ptrdiff_t uvoff) | |||
| { | |||
| VP9Context *s = avctx->priv_data; | |||
| @@ -1449,7 +1449,7 @@ FF_ENABLE_DEPRECATION_WARNINGS | |||
| for (row = s->tile_row_start; row < s->tile_row_end; | |||
| row += 8, yoff += ls_y * 64, uvoff += ls_uv * 64 >> s->ss_v) { | |||
| struct VP9Filter *lflvl_ptr = s->lflvl; | |||
| VP9Filter *lflvl_ptr = s->lflvl; | |||
| ptrdiff_t yoff2 = yoff, uvoff2 = uvoff; | |||
| for (tile_col = 0; tile_col < s->s.h.tiling.tile_cols; tile_col++) { | |||
| @@ -248,23 +248,22 @@ typedef struct VP9DSPContext { | |||
| vp9_scaled_mc_func smc[5][4][2]; | |||
| } VP9DSPContext; | |||
| struct VP9mvrefPair { | |||
| typedef struct VP9mvrefPair { | |||
| VP56mv mv[2]; | |||
| int8_t ref[2]; | |||
| }; | |||
| } VP9mvrefPair; | |||
| struct VP9Filter { | |||
| typedef struct VP9Filter { | |||
| uint8_t level[8 * 8]; | |||
| uint8_t /* bit=col */ mask[2 /* 0=y, 1=uv */][2 /* 0=col, 1=row */] | |||
| [8 /* rows */][4 /* 0=16, 1=8, 2=4, 3=inner4 */]; | |||
| }; | |||
| } VP9Filter; | |||
| typedef struct VP9Frame { | |||
| ThreadFrame tf; | |||
| AVBufferRef *extradata; | |||
| uint8_t *segmentation_map; | |||
| struct VP9mvrefPair *mv; | |||
| VP9mvrefPair *mv; | |||
| int uses_2pass; | |||
| AVBufferRef *hwaccel_priv_buf; | |||
| @@ -454,7 +453,7 @@ typedef struct VP9Context { | |||
| // whole-frame cache | |||
| uint8_t *intra_pred_data[3]; | |||
| struct VP9Filter *lflvl; | |||
| VP9Filter *lflvl; | |||
| DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer)[135 * 144 * 2]; | |||
| // block reconstruction intermediates | |||
| @@ -486,7 +485,7 @@ void ff_vp9_fill_mv(VP9Context *s, VP56mv *mv, int mode, int sb); | |||
| void ff_vp9_adapt_probs(VP9Context *s); | |||
| void ff_vp9_decode_block(AVCodecContext *ctx, int row, int col, | |||
| struct VP9Filter *lflvl, ptrdiff_t yoff, ptrdiff_t uvoff, | |||
| VP9Filter *lflvl, ptrdiff_t yoff, ptrdiff_t uvoff, | |||
| enum BlockLevel bl, enum BlockPartition bp); | |||
| #endif /* AVCODEC_VP9_H */ | |||
| @@ -785,7 +785,7 @@ static void decode_mode(AVCodecContext *avctx) | |||
| // FIXME kinda ugly | |||
| for (y = 0; y < h4; y++) { | |||
| int x, o = (row + y) * s->sb_cols * 8 + col; | |||
| struct VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[o]; | |||
| VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[o]; | |||
| if (b->intra) { | |||
| for (x = 0; x < w4; x++) { | |||
| @@ -1883,7 +1883,7 @@ static av_always_inline void mask_edges(uint8_t (*mask)[8][4], int ss_h, int ss_ | |||
| } | |||
| void ff_vp9_decode_block(AVCodecContext *avctx, int row, int col, | |||
| struct VP9Filter *lflvl, ptrdiff_t yoff, ptrdiff_t uvoff, | |||
| VP9Filter *lflvl, ptrdiff_t yoff, ptrdiff_t uvoff, | |||
| enum BlockLevel bl, enum BlockPartition bp) | |||
| { | |||
| VP9Context *s = avctx->priv_data; | |||
| @@ -135,14 +135,14 @@ static void find_ref_mvs(VP9Context *s, | |||
| } while (0) | |||
| if (row > 0) { | |||
| struct VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[(row - 1) * s->sb_cols * 8 + col]; | |||
| VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[(row - 1) * s->sb_cols * 8 + col]; | |||
| if (mv->ref[0] == ref) | |||
| RETURN_MV(s->above_mv_ctx[2 * col + (sb & 1)][0]); | |||
| else if (mv->ref[1] == ref) | |||
| RETURN_MV(s->above_mv_ctx[2 * col + (sb & 1)][1]); | |||
| } | |||
| if (col > s->tile_col_start) { | |||
| struct VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[row * s->sb_cols * 8 + col - 1]; | |||
| VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[row * s->sb_cols * 8 + col - 1]; | |||
| if (mv->ref[0] == ref) | |||
| RETURN_MV(s->left_mv_ctx[2 * row7 + (sb >> 1)][0]); | |||
| else if (mv->ref[1] == ref) | |||
| @@ -159,7 +159,7 @@ static void find_ref_mvs(VP9Context *s, | |||
| if (c >= s->tile_col_start && c < s->cols && | |||
| r >= 0 && r < s->rows) { | |||
| struct VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[r * s->sb_cols * 8 + c]; | |||
| VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[r * s->sb_cols * 8 + c]; | |||
| if (mv->ref[0] == ref) | |||
| RETURN_MV(mv->mv[0]); | |||
| @@ -170,7 +170,7 @@ static void find_ref_mvs(VP9Context *s, | |||
| // MV at this position in previous frame, using same reference frame | |||
| if (s->s.h.use_last_frame_mvs) { | |||
| struct VP9mvrefPair *mv = &s->s.frames[REF_FRAME_MVPAIR].mv[row * s->sb_cols * 8 + col]; | |||
| VP9mvrefPair *mv = &s->s.frames[REF_FRAME_MVPAIR].mv[row * s->sb_cols * 8 + col]; | |||
| if (!s->s.frames[REF_FRAME_MVPAIR].uses_2pass) | |||
| ff_thread_await_progress(&s->s.frames[REF_FRAME_MVPAIR].tf, row >> 3, 0); | |||
| @@ -195,7 +195,7 @@ static void find_ref_mvs(VP9Context *s, | |||
| int c = p[i][0] + col, r = p[i][1] + row; | |||
| if (c >= s->tile_col_start && c < s->cols && r >= 0 && r < s->rows) { | |||
| struct VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[r * s->sb_cols * 8 + c]; | |||
| VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[r * s->sb_cols * 8 + c]; | |||
| if (mv->ref[0] != ref && mv->ref[0] >= 0) | |||
| RETURN_SCALE_MV(mv->mv[0], | |||
| @@ -211,7 +211,7 @@ static void find_ref_mvs(VP9Context *s, | |||
| // MV at this position in previous frame, using different reference frame | |||
| if (s->s.h.use_last_frame_mvs) { | |||
| struct VP9mvrefPair *mv = &s->s.frames[REF_FRAME_MVPAIR].mv[row * s->sb_cols * 8 + col]; | |||
| VP9mvrefPair *mv = &s->s.frames[REF_FRAME_MVPAIR].mv[row * s->sb_cols * 8 + col]; | |||
| // no need to await_progress, because we already did that above | |||
| if (mv->ref[0] != ref && mv->ref[0] >= 0) | |||