On Mon, Feb 18, 2013 at 10:13:35AM -0500, Daniel Kang wrote:
> --- a/libavcodec/x86/cavsdsp.c
> +++ b/libavcodec/x86/cavsdsp.c
> @@ -446,12 +446,18 @@ CAVS_MC(put_, 8, mmxext)
>
> static av_cold void ff_cavsdsp_init_mmxext(CAVSDSPContext *c,
> AVCodecContext *avctx)
> {
> +#if HAVE_YASM
> + c->put_cavs_qpel_pixels_tab[0][0] = ff_put_cavs_qpel16_mc00_mmx;
> + c->put_cavs_qpel_pixels_tab[1][0] = ff_put_cavs_qpel8_mc00_mmx;
> +#endif
> +
> +#if HAVE_INLINE_ASM
> #define dspfunc(PFX, IDX, NUM) \
> - c->PFX ## _pixels_tab[IDX][ 0] = ff_ ## PFX ## NUM ## _mc00_mmxext; \
> c->PFX ## _pixels_tab[IDX][ 2] = ff_ ## PFX ## NUM ## _mc20_mmxext; \
> @@ -475,12 +481,18 @@ CAVS_MC(put_, 8, 3dnow)
>
> static av_cold void ff_cavsdsp_init_3dnow(CAVSDSPContext *c,
> AVCodecContext *avctx)
> {
> +#if HAVE_YASM
> + c->put_cavs_qpel_pixels_tab[0][0] = ff_put_cavs_qpel16_mc00_mmx;
> + c->put_cavs_qpel_pixels_tab[1][0] = ff_put_cavs_qpel8_mc00_mmx;
> +#endif
> +
> +#if HAVE_INLINE_ASM
> #define dspfunc(PFX, IDX, NUM) \
> - c->PFX ## _pixels_tab[IDX][ 0] = ff_ ## PFX ## NUM ## _mc00_mmxext; \
> c->PFX ## _pixels_tab[IDX][ 2] = ff_ ## PFX ## NUM ## _mc20_3dnow; \
This should not be duplicated, but done in a separate mmx init function or an
mmx subpart of the global init function.
> --- a/libavcodec/x86/dsputil_mmx.c
> +++ b/libavcodec/x86/dsputil_mmx.c
> @@ -128,26 +136,45 @@ void ff_put_no_rnd_pixels8_y2_exact_mmxext(uint8_t
> *block,
> void ff_put_pixels8_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t
> line_size, int h);
> static void ff_put_pixels16_mmxext(uint8_t *block, const uint8_t *pixels,
> - int line_size, int h)
> + ptrdiff_t line_size, int h)
Rebase on top of master / your patch please.
> @@ -1148,27 +1033,27 @@ static void OPNAME ## qpel16_mc22_ ## MMX(uint8_t
> *dst, uint8_t *src, \
>
> -#if HAVE_INLINE_ASM
> void ff_put_rv40_qpel8_mc33_mmx(uint8_t *dst, uint8_t *src, int stride)
> {
> - put_pixels8_xy2_mmx(dst, src, stride, 8);
> + ff_put_pixels8_xy2_mmx(dst, src, stride, 8);
> }
> void ff_put_rv40_qpel16_mc33_mmx(uint8_t *dst, uint8_t *src, int stride)
> {
> - put_pixels16_xy2_mmx(dst, src, stride, 16);
> + ff_put_pixels16_xy2_mmx(dst, src, stride, 16);
> }
> void ff_avg_rv40_qpel8_mc33_mmx(uint8_t *dst, uint8_t *src, int stride)
> {
> - avg_pixels8_xy2_mmx(dst, src, stride, 8);
> + ff_avg_pixels8_xy2_mmx(dst, src, stride, 8);
> }
> void ff_avg_rv40_qpel16_mc33_mmx(uint8_t *dst, uint8_t *src, int stride)
> {
> - avg_pixels16_xy2_mmx(dst, src, stride, 16);
> + ff_avg_pixels16_xy2_mmx(dst, src, stride, 16);
> }
> +#endif /* HAVE_YASM */
Now that these rv40-specific functions no longer depend on static
functions local to the file, they could be moved to rv40dsp_init.c.
A follow-up patch doing just that would be much appreciated.
> @@ -1291,31 +1176,29 @@ void ff_put_pixels16_sse2(uint8_t *block, const
> uint8_t *pixels,
>
> /* CAVS-specific */
> -void ff_put_cavs_qpel8_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride)
> +void ff_put_cavs_qpel8_mc00_mmx(uint8_t *dst, uint8_t *src, int stride)
> {
> - put_pixels8_mmx(dst, src, stride, 8);
> + ff_put_pixels8_mmx(dst, src, stride, 8);
> }
>
> void ff_avg_cavs_qpel8_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride)
> {
> - avg_pixels8_mmx(dst, src, stride, 8);
> + ff_avg_pixels8_mmx(dst, src, stride, 8);
> }
>
> -void ff_put_cavs_qpel16_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride)
> +void ff_put_cavs_qpel16_mc00_mmx(uint8_t *dst, uint8_t *src, int stride)
> {
> - put_pixels16_mmx(dst, src, stride, 16);
> + ff_put_pixels16_mmx(dst, src, stride, 16);
> }
>
> void ff_avg_cavs_qpel16_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride)
> {
> - avg_pixels16_mmx(dst, src, stride, 16);
> + ff_avg_pixels16_mmx(dst, src, stride, 16);
> }
>
> /* VC-1-specific */
> void ff_put_vc1_mspel_mc00_mmx(uint8_t *dst, const uint8_t *src,
> int stride, int rnd)
same for these vc1 and cavs bits
Diego
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel