[FFmpeg-cvslog] avcodec/x86/lossless_videodsp: disable median optimizations for 16bps

Michael Niedermayer git at videolan.org
Thu Jan 23 02:03:52 CET 2014


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Thu Jan 23 01:35:29 2014 +0100| [e6d1c66d742d766a80a26ed2a9524a0fffbcf958] | committer: Michael Niedermayer

avcodec/x86/lossless_videodsp: disable median optimizations for 16bps

They only support upto 15bps

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e6d1c66d742d766a80a26ed2a9524a0fffbcf958
---

 libavcodec/huffyuvdec.c                 |    2 +-
 libavcodec/x86/lossless_videodsp_init.c |    3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/libavcodec/huffyuvdec.c b/libavcodec/huffyuvdec.c
index e110124..c1e171a 100644
--- a/libavcodec/huffyuvdec.c
+++ b/libavcodec/huffyuvdec.c
@@ -261,7 +261,6 @@ static av_cold int decode_init(AVCodecContext *avctx)
 {
     HYuvContext *s = avctx->priv_data;
 
-    ff_huffyuv_common_init(avctx);
     memset(s->vlc, 0, 4 * sizeof(VLC));
 
     s->interlaced = s->height > 288;
@@ -470,6 +469,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
         }
     }
 
+    ff_huffyuv_common_init(avctx);
 
     if ((avctx->pix_fmt == AV_PIX_FMT_YUV422P || avctx->pix_fmt == AV_PIX_FMT_YUV420P) && avctx->width & 1) {
         av_log(avctx, AV_LOG_ERROR, "width must be even for this colorspace\n");
diff --git a/libavcodec/x86/lossless_videodsp_init.c b/libavcodec/x86/lossless_videodsp_init.c
index fe88c4e..03ea2df 100644
--- a/libavcodec/x86/lossless_videodsp_init.c
+++ b/libavcodec/x86/lossless_videodsp_init.c
@@ -35,13 +35,14 @@ void ff_sub_hfyu_median_prediction_int16_mmxext(uint16_t *dst, const uint16_t *s
 void ff_llviddsp_init_x86(LLVidDSPContext *c, AVCodecContext *avctx)
 {
     int cpu_flags = av_get_cpu_flags();
+    const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(avctx->pix_fmt);
 
     if (EXTERNAL_MMX(cpu_flags)) {
         c->add_int16 = ff_add_int16_mmx;
         c->diff_int16 = ff_diff_int16_mmx;
     }
 
-    if (EXTERNAL_MMXEXT(cpu_flags)) {
+    if (EXTERNAL_MMXEXT(cpu_flags) && pix_desc->comp[0].depth_minus1<15) {
         c->add_hfyu_median_prediction_int16 = ff_add_hfyu_median_prediction_int16_mmxext;
         c->sub_hfyu_median_prediction_int16 = ff_sub_hfyu_median_prediction_int16_mmxext;
     }



More information about the ffmpeg-cvslog mailing list