On Wed, Mar 26, 2014 at 05:48:53PM +0100, Vittorio Giovara wrote:
> --- a/configure
> +++ b/configure
> @@ -1846,6 +1846,7 @@ vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
> vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
> vp6a_decoder_select="vp6_decoder"
> vp6f_decoder_select="vp6_decoder"
> +vp7_decoder_select="h264pred videodsp"
> vp8_decoder_select="h264pred videodsp"
How much code is actually shared? It might make sense to have one decoder
select the other.
> --- a/libavcodec/arm/vp8dsp_init_neon.c
> +++ b/libavcodec/arm/vp8dsp_init_neon.c
> @@ -39,9 +39,65 @@ VP8_BILIN(16, neon);
>
> av_cold void ff_vp8dsp_init_neon(VP8DSPContext *dsp)
> {
> - dsp->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_neon;
> + dsp->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_neon;
stray change
> --- a/libavcodec/vp8.c
> +++ b/libavcodec/vp8.c
> @@ -291,6 +338,54 @@ static VP56Frame ref_to_update(VP8Context *s, int
> update, VP56Frame ref)
> @@ -302,10 +397,188 @@ static void update_refs(VP8Context *s)
> +static int vp7_decode_frame_header(VP8Context *s, const uint8_t *buf, int
> buf_size)
> +{
> + VP56RangeCoder *c = &s->c;
> + int part1_size, hscale, vscale, i, j, ret;
> + int width = s->avctx->width;
> + int height = s->avctx->height;
> +
> + s->profile = (buf[0]>>1) & 7;
spaces around >>
> + s->update_golden = s->update_altref = VP56_FRAME_CURRENT;
> + vp78_reset_probability_tables(s);
> + memcpy(s->prob->pred16x16, vp8_pred16x16_prob_inter,
> sizeof(s->prob->pred16x16));
> + memcpy(s->prob->pred8x8c , vp8_pred8x8c_prob_inter ,
> sizeof(s->prob->pred8x8c));
spaces before ,
> + s->segmentation.enabled = 0;
> + s->segmentation.update_map = 0;
> + s->lf_delta.enabled = 0;
align
> + /* D. Golden frame update flag (a Flag) for interframes only */
> + if (!s->keyframe) {
> + s->update_golden = vp8_rac_get(c) ? VP56_FRAME_CURRENT :
> VP56_FRAME_NONE;
> + s->sign_bias[VP56_FRAME_GOLDEN] = 0;
> + }
> +
> + s->update_last = 1;
> + s->update_probabilities = 1;
> + s->fade_present = 1;
ditto
> + dst = prev_frame->tf.f->data[0];
> + linesize = prev_frame->tf.f->linesize[0];
again
> @@ -904,14 +1331,12 @@ void decode_mb_coeffs(VP8Context *s, VP8ThreadData
> *td, VP56RangeCoder *c,
> - nnz_pred = l_nnz[i + 2 * y] + t_nnz[i + 2 * x];
> - nnz = decode_block_coeffs(c, td->block[i][(y << 1) + x],
> - s->prob->token[2],
> - 0, nnz_pred,
> - s->qmat[segment].chroma_qmul);
> - td->non_zero_count_cache[i][(y << 1) + x] = nnz;
> - t_nnz[i + 2 * x] = l_nnz[i + 2 * y] = !!nnz;
> - nnz_total += nnz;
> + nnz_pred = l_nnz[i+2*y] + t_nnz[i+2*x];
> + nnz = decode_block_coeffs(c, td->block[i][(y<<1)+x],
> s->prob->token[2], 0,
> + nnz_pred,
> s->qmat[segment].chroma_qmul, s->prob[0].scan, is_vp7);
> + td->non_zero_count_cache[i][(y<<1)+x] = nnz;
> + t_nnz[i+2*x] = l_nnz[i+2*y] = !!nnz;
lots of missing spaces around operators
> @@ -1094,19 +1522,18 @@ void intra_predict(VP8Context *s, VP8ThreadData *td,
> uint8_t *dst[3],
> - copy_dst[3] = 127U;
> - AV_WN32A(copy_dst + 4, 127U * 0x01010101U);
> + copy_dst[3] = lo;
> + AV_WN32A(copy_dst+4, lo * 0x01010101U);
again
> @@ -1578,20 +2022,22 @@ void filter_mb(VP8Context *s, uint8_t *dst[3],
> VP8FilterStrength *f,
> }
>
> if (inner_filter) {
> - s->vp8dsp.vp8_v_loop_filter16y_inner(dst[0] + 4 * linesize,
> - linesize, bedge_lim,
> + s->vp8dsp.vp8_v_loop_filter16y_inner(dst[0]+ 4*linesize,
> + linesize, bedge_lim_y,
> inner_limit, hev_thresh);
> - s->vp8dsp.vp8_v_loop_filter16y_inner(dst[0] + 8 * linesize,
> - linesize, bedge_lim,
> + s->vp8dsp.vp8_v_loop_filter16y_inner(dst[0]+ 8*linesize,
> + linesize, bedge_lim_y,
> inner_limit, hev_thresh);
> - s->vp8dsp.vp8_v_loop_filter16y_inner(dst[0] + 12 * linesize,
> - linesize, bedge_lim,
> + s->vp8dsp.vp8_v_loop_filter16y_inner(dst[0]+12*linesize,
> + linesize, bedge_lim_y,
same
Also, these look like half stray changes.
> @@ -1888,12 +2339,11 @@ static int vp8_decode_mb_row_sliced(AVCodecContext
> *avctx, void *tdata,
> td->thread_nr = threadnr;
> for (mb_y = jobnr; mb_y < s->mb_height; mb_y += num_jobs) {
> - if (mb_y >= s->mb_height)
> - break;
> - td->thread_mb_pos = mb_y << 16;
> + if (mb_y >= s->mb_height) break;
> + td->thread_mb_pos = mb_y<<16;
This was better before, please no stray changes.
> --- a/libavcodec/vp8data.h
> +++ b/libavcodec/vp8data.h
> @@ -51,6 +58,63 @@ static const int8_t vp8_pred16x16_tree_inter[4][2] = {
>
> +typedef struct {
> + int8_t yoffset;
> + int8_t xoffset;
> + uint8_t subblock;
> + uint8_t score;
> +} VP7MVPred;
Please no more anonymous structs.
> @@ -121,7 +189,6 @@ static const uint8_t vp8_pred8x8c_prob_intra[3] = {
> static const uint8_t vp8_pred8x8c_prob_inter[3] = {
> 162, 101, 204
> };
> -
> static const uint8_t vp8_pred4x4_prob_inter[9] = {
> 120, 90, 79, 133, 87, 85, 80, 111, 151
> };
stray change
> --- a/libavcodec/vp8dsp.c
> +++ b/libavcodec/vp8dsp.c
> @@ -348,7 +482,7 @@ PUT_PIXELS(4)
> cm[(F[2] * src[x + 0 * stride] - F[1] * src[x - 1 * stride] +
> \
> F[3] * src[x + 1 * stride] - F[4] * src[x + 2 * stride] + 64) >> 7]
>
> -#define VP8_EPEL_H(SIZE, TAPS)
> \
> +#define VP8_EPEL_H(SIZE, TAPS) \
> static void put_vp8_epel ## SIZE ## _h ## TAPS ## _c(uint8_t *dst,
> \
> ptrdiff_t
> dststride, \
> uint8_t *src,
> \
> @@ -397,7 +531,6 @@ PUT_PIXELS(4)
> uint8_t tmp_array[(2 * SIZE + VTAPS - 1) * SIZE];
> \
> uint8_t *tmp = tmp_array;
> \
> src -= (2 - (VTAPS == 4)) * srcstride;
> \
> -
> \
> for (y = 0; y < h + VTAPS - 1; y++) {
> \
> for (x = 0; x < SIZE; x++)
> \
> tmp[x] = FILTER_ ## HTAPS ## TAP(src, filter, 1);
> \
> @@ -406,7 +539,6 @@ PUT_PIXELS(4)
> }
> \
> tmp = tmp_array + (2 - (VTAPS == 4)) * SIZE;
> \
> filter = subpel_filters[my - 1];
> \
> -
> \
> for (y = 0; y < h; y++) {
> \
> for (x = 0; x < SIZE; x++)
> \
> dst[x] = FILTER_ ## VTAPS ## TAP(tmp, filter, SIZE);
> \
> @@ -441,7 +573,7 @@ VP8_EPEL_HV(16, 6, 6)
> VP8_EPEL_HV( 8, 6, 6)
> VP8_EPEL_HV( 4, 6, 6)
>
> -#define VP8_BILINEAR(SIZE)
> \
> +#define VP8_BILINEAR(SIZE) \
> static void put_vp8_bilinear ## SIZE ## _h_c(uint8_t *dst, ptrdiff_t
> dstride, \
> uint8_t *src, ptrdiff_t
> sstride, \
> int h, int mx, int my)
> \
> @@ -496,7 +628,7 @@ VP8_BILINEAR(16)
> VP8_BILINEAR(8)
> VP8_BILINEAR(4)
>
> -#define VP8_MC_FUNC(IDX, SIZE) \
> +#define VP8_MC_FUNC(IDX, SIZE)
> \
> dsp->put_vp8_epel_pixels_tab[IDX][0][0] = put_vp8_pixels ## SIZE ## _c;
> \
> dsp->put_vp8_epel_pixels_tab[IDX][0][1] = put_vp8_epel ## SIZE ## _h4_c;
> \
> dsp->put_vp8_epel_pixels_tab[IDX][0][2] = put_vp8_epel ## SIZE ## _h6_c;
> \
> @@ -507,7 +639,7 @@ VP8_BILINEAR(4)
> dsp->put_vp8_epel_pixels_tab[IDX][2][1] = put_vp8_epel ## SIZE ##
> _h4v6_c; \
> dsp->put_vp8_epel_pixels_tab[IDX][2][2] = put_vp8_epel ## SIZE ## _h6v6_c
>
> -#define VP8_BILINEAR_MC_FUNC(IDX, SIZE) \
> +#define VP8_BILINEAR_MC_FUNC(IDX, SIZE)
> \
> dsp->put_vp8_bilinear_pixels_tab[IDX][0][0] = put_vp8_pixels ## SIZE ##
> _c; \
> dsp->put_vp8_bilinear_pixels_tab[IDX][0][1] = put_vp8_bilinear ## SIZE
> ## _h_c; \
> dsp->put_vp8_bilinear_pixels_tab[IDX][0][2] = put_vp8_bilinear ## SIZE
> ## _h_c; \
Please self-review for stray changes.
> @@ -518,27 +650,35 @@ VP8_BILINEAR(4)
>
> -av_cold void ff_vp8dsp_init(VP8DSPContext *dsp)
> +av_cold void ff_vp8dsp_init(VP8DSPContext *dsp, int vp7)
Why don't you split the dsp stuff in two and call just one or both of
ff_vp8dsp_init() and ff_vp8dsp_init()?
> --- a/libavcodec/x86/vp8dsp_init.c
> +++ b/libavcodec/x86/vp8dsp_init.c
> @@ -324,9 +374,10 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPContext* c)
> c->vp8_idct_dc_add = ff_vp8_idct_dc_add_mmx;
> c->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_mmx;
> #if ARCH_X86_32
> - c->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_mmx;
> - c->vp8_idct_add = ff_vp8_idct_add_mmx;
> - c->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_mmx;
> + c->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_mmx;
> + c->vp8_idct_add = ff_vp8_idct_add_mmx;
> + c->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_mmx;
stray changes
> @@ -342,10 +393,10 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPContext* c)
> c->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_mmx;
> c->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_mmx;
>
> - c->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16y_mbedge_mmx;
> - c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_mmx;
> - c->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mbedge_mmx;
> - c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_mmx;
> + c->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16y_mbedge_mmx;
> + c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_mmx;
> + c->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mbedge_mmx;
> + c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_mmx;
same
> @@ -360,24 +411,24 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPContext* c)
>
> - c->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_mmxext;
> - c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_mmxext;
> + c->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_mmxext;
> + c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_mmxext;
>
> c->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16y_inner_mmxext;
> c->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16y_inner_mmxext;
> c->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_mmxext;
> c->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_mmxext;
>
> - c->vp8_v_loop_filter16y =
> ff_vp8_v_loop_filter16y_mbedge_mmxext;
> - c->vp8_h_loop_filter16y =
> ff_vp8_h_loop_filter16y_mbedge_mmxext;
> - c->vp8_v_loop_filter8uv =
> ff_vp8_v_loop_filter8uv_mbedge_mmxext;
> - c->vp8_h_loop_filter8uv =
> ff_vp8_h_loop_filter8uv_mbedge_mmxext;
> + c->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16y_mbedge_mmxext;
> + c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_mmxext;
> + c->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mbedge_mmxext;
> + c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_mmxext;
> #endif
> }
>
> if (EXTERNAL_SSE(cpu_flags)) {
> - c->vp8_idct_add = ff_vp8_idct_add_sse;
> - c->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_sse;
> + c->vp8_idct_add = ff_vp8_idct_add_sse;
> + c->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_sse;
> c->put_vp8_epel_pixels_tab[0][0][0] =
> c->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_sse;
more
> @@ -393,20 +444,20 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPContext* c)
> c->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16y_inner_sse2;
> c->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_sse2;
>
> - c->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16y_mbedge_sse2;
> - c->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mbedge_sse2;
> + c->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16y_mbedge_sse2;
> + c->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mbedge_sse2;
> }
>
> if (EXTERNAL_SSE2(cpu_flags)) {
> - c->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_sse2;
> + c->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_sse2;
>
> c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_sse2;
>
> c->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16y_inner_sse2;
> c->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_sse2;
>
> - c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_sse2;
> - c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_sse2;
> + c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_sse2;
> + c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_sse2;
> }
>
> if (EXTERNAL_SSSE3(cpu_flags)) {
> @@ -425,18 +476,18 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPContext* c)
> c->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_ssse3;
> c->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_ssse3;
>
> - c->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16y_mbedge_ssse3;
> - c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_ssse3;
> - c->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mbedge_ssse3;
> - c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_ssse3;
> + c->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16y_mbedge_ssse3;
> + c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_ssse3;
> + c->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mbedge_ssse3;
> + c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_ssse3;
> }
>
> if (EXTERNAL_SSE4(cpu_flags)) {
> - c->vp8_idct_dc_add = ff_vp8_idct_dc_add_sse4;
> + c->vp8_idct_dc_add = ff_vp8_idct_dc_add_sse4;
>
> - c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_sse4;
> - c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_sse4;
> - c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_sse4;
> + c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_sse4;
> + c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_sse4;
> + c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_sse4;
.. and more ..
Diego
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel