FFMPEG YUV444P scale过程

av_cold void ff_sws_init_swscale_x86(SwsContext *c)
{
    int cpu_flags = av_get_cpu_flags();

...
      c->yuv2planeX = yuv2yuvX_sse3;
        hscalefn = c->dstBpc <= 14 ? ff_hscale8to15_ ## filtersize ## _ ## opt2 : 
                                     ff_hscale8to19_ ## filtersize ## _ ## opt1;    // 相当于c->hyScale = ff_hscale8to15_8_sse2
    c->hcScale = ff_hscale8to15_8_sse2
 
    c->yuv2planeX = ff_yuv2planeX_8_sse2  //vscale
    c->yuv2plane1 = ff_yuv2plane1_8_sse2
  ...
    c->hyScale = ff_hscale8to15_8_ssse3
    c->hcScale = ff_hscale8to15_8_ssse3
}
 

最后得到的值:

yuv2plane1                <ff_yuv2plane1_8_sse2>,   ×

yuv2planeX = 0x112ae60 <yuv2yuvX_sse3>,   //两个都变垂直 ✔

hyScale      = 0x1180090 <ff_hscale8to15_8_ssse3>, //水平     ✔     instance->filter = 8192, 7142, 1972, 64844, 65306, 0, 0, 0, 64614, 1972   filter size = 8

hcScale      = 0x1180090 <ff_hscale8to15_8_ssse3>  ✔                    instance->filter= 8192 7142 ....................................................................... filter size = 8

FFMPEG YUV444P  -> NV12过程  未缩放

yuv2plane1 = 0x11758b0 <ff_yuv2plane1_8_avx>,   ✔      缩放y通道

yuv2planeX = 0x11751e0 <ff_yuv2planeX_8_avx>,    

yuv2nv12cX = 0x113bac0 <yuv2nv12cX_c>,          ✔       将uv merge 起来

hyScale = 0x1180010 <ff_hscale8to15_4_ssse3>,  ✔       缩放y plane 的 水平方向

hcScale = 0x1180090 <ff_hscale8to15_8_ssse3>,   ✔      缩放 u plane 的水平方向   v plane 的水平方向

    

原文地址:https://www.cnblogs.com/luoyinjie/p/14519434.html