On Tue, 25 Sep 2012, Justin Ruggles wrote:

> +;------------------------------------------------------------------------------
> +; void ff_scale_samples_s16(VolumeContext *ctx, uint8_t *src, int len,
> +;                           int volume)
> +;------------------------------------------------------------------------------
> +
> +INIT_XMM sse4
> +cglobal scale_samples_s16, 4,4,4, ctx, src, len, volume
> +    movd        m0, volumed
> +    pshufd      m0, m0, 0
> +    mova        m1, [pd_128]
> +    lea       lenq, [lend*2-mmsize]
> +.loop:
> +    ; src[i] = av_clip_int16((src[i] * volume + 128) >> 8);
> +    mova        m2, [srcq+lenq]
> +    pmovsxwd    m3, m2
> +    psrldq      m2, 8
> +    pmovsxwd    m2, m2
> +    pmulld      m2, m0
> +    pmulld      m3, m0
> +    paddd       m2, m1
> +    paddd       m3, m1
> +    psrad       m2, 8
> +    psrad       m3, 8
> +    packssdw    m3, m2
> +    mova  [srcq+lenq], m3
> +    sub    lenq, mmsize
> +    jge .loop
> +    REP_RET

INIT_XMM sse2
cglobal scale_samples_s16, 3,3,4, ctx, src, len, volume
    movd        m0, volumem
    pshuflw     m0, m0, 0
    punpcklwd   m0, [pw_1]
    mova        m1, [pw_128]
    lea       lenq, [lend*2-mmsize]
.loop:
    ; src[i] = av_clip_int16((src[i] * volume + 128) >> 8);
    mova        m2, [srcq+lenq]
    punpcklwd   m3, m2, m1
    punpckhwd   m2, m1
    pmaddwd     m3, m0
    pmaddwd     m2, m0
    psrad       m3, 8
    psrad       m2, 8
    packssdw    m3, m2
    mova  [srcq+lenq], m3
    sub    lenq, mmsize
    jge .loop
    REP_RET

(untested)

--Loren Merritt
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to