Ticket #7124: ffmpeg_altivec_yuv2rgb.patch

File ffmpeg_altivec_yuv2rgb.patch, 3.5 KB (added by Chip Kerchner, 7 years ago)

Fixes compiler bug - replace vec_lvsl/vec_perm instructions with vec_xl

  • libswscale/ppc/yuv2rgb_altivec.c

    diff --git a/libswscale/ppc/yuv2rgb_altivec.c b/libswscale/ppc/yuv2rgb_altivec.c
    index c1e2852adb..536545293d 100644
    a b static int altivec_ ## name(SwsContext *c, const unsigned char **in, \  
    305305    vector signed short R1, G1, B1;                                           \
    306306    vector unsigned char R, G, B;                                             \
    307307                                                                              \
    308     const vector unsigned char *y1ivP, *y2ivP, *uivP, *vivP;                  \
    309     vector unsigned char align_perm;                                          \
    310                                                                               \
    311308    vector signed short lCY       = c->CY;                                    \
    312309    vector signed short lOY       = c->OY;                                    \
    313310    vector signed short lCRV      = c->CRV;                                   \
    static int altivec_ ## name(SwsContext *c, const unsigned char **in, \  
    338335        vec_dstst(oute, (0x02000002 | (((w * 3 + 32) / 32) << 16)), 1);       \
    339336                                                                              \
    340337        for (j = 0; j < w / 16; j++) {                                        \
    341             y1ivP = (const vector unsigned char *) y1i;                       \
    342             y2ivP = (const vector unsigned char *) y2i;                       \
    343             uivP  = (const vector unsigned char *) ui;                        \
    344             vivP  = (const vector unsigned char *) vi;                        \
    345                                                                               \
    346             align_perm = vec_lvsl(0, y1i);                                    \
    347             y0 = (vector unsigned char)                                       \
    348                      vec_perm(y1ivP[0], y1ivP[1], align_perm);                \
     338            y0 = vec_xl(0, y1i);                                              \
    349339                                                                              \
    350             align_perm = vec_lvsl(0, y2i);                                    \
    351             y1 = (vector unsigned char)                                       \
    352                      vec_perm(y2ivP[0], y2ivP[1], align_perm);                \
     340            y1 = vec_xl(0, y2i);                                              \
    353341                                                                              \
    354             align_perm = vec_lvsl(0, ui);                                     \
    355             u = (vector signed char)                                          \
    356                     vec_perm(uivP[0], uivP[1], align_perm);                   \
     342            u = (vector signed char) vec_xl(0, ui);                           \
    357343                                                                              \
    358             align_perm = vec_lvsl(0, vi);                                     \
    359             v = (vector signed char)                                          \
    360                     vec_perm(vivP[0], vivP[1], align_perm);                   \
     344            v = (vector signed char) vec_xl(0, vi);                           \
    361345                                                                              \
    362346            u = (vector signed char)                                          \
    363347                    vec_sub(u,                                                \