vp8: fix check for disabling the loop filter (again).
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Tue, 22 Apr 2014 15:25:15 +0000 (17:25 +0200)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Tue, 22 Apr 2014 16:30:18 +0000 (18:30 +0200)
Improve condition to disable the loop filter. The previous heuristic
used to check all filter levels, for all segments. It turns out that
only the base filter_level value defined in the frame header needs
to be checked.

This fixes 00-comprehensive-013.

gst-libs/gst/vaapi/gstvaapidecoder_vp8.c

index 07816de..7b82854 100644 (file)
@@ -273,7 +273,7 @@ fill_picture (GstVaapiDecoderVp8 * decoder, GstVaapiPicture * picture)
   GstVp8Parser *const parser = &priv->parser;
   GstVp8FrameHdr *const frame_hdr = &priv->frame_hdr;
   GstVp8Segmentation *const seg = &parser->segmentation;
-  gint i, filter_levels;
+  gint i;
 
   /* Fill in VAPictureParameterBufferVP8 */
   pic_param->frame_width = priv->width;
@@ -330,12 +330,8 @@ fill_picture (GstVaapiDecoderVp8 * decoder, GstVaapiPicture * picture)
 
   /* In decoding, the only loop filter settings that matter are those
      in the frame header (9.1) */
-  filter_levels = pic_param->loop_filter_level[0];
-  if (seg->segmentation_enabled) {
-    for (i = 1; i < 4; i++)
-      filter_levels |= pic_param->loop_filter_level[i];
-  }
-  pic_param->pic_fields.bits.loop_filter_disable = filter_levels == 0;
+  pic_param->pic_fields.bits.loop_filter_disable =
+      frame_hdr->loop_filter_level == 0;
 
   pic_param->prob_skip_false = frame_hdr->prob_skip_false;
   pic_param->prob_intra = frame_hdr->prob_intra;