vaapidecode: set initial decode format according surface chroma type
authorWangfei <fei.w.wang@intel.com>
Tue, 25 Jun 2019 02:31:20 +0000 (10:31 +0800)
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Wed, 26 Jun 2019 10:36:56 +0000 (10:36 +0000)
For surfaces with different chroma type, it is prefer to initialize
a format which chroma type should be same with surface chroma type
instead of using fixed NV12.

gst/vaapi/gstvaapidecode.c

index 5e348f7..1bd79c1 100644 (file)
@@ -413,9 +413,14 @@ is_surface_resolution_changed (GstVaapiDecode * decode,
     surface_format = gst_vaapi_surface_get_format (surface);
 
     /* if the VA context delivers a currently unrecognized format
-     * (ICM3, e.g.), we can assume NV12 "safely" */
+     * (ICM3, e.g.), we can assume one according surface chroma
+     * type. If fail, then use NV12 "safely" */
     if (surface_format == GST_VIDEO_FORMAT_UNKNOWN
         || surface_format == GST_VIDEO_FORMAT_ENCODED)
+      surface_format =
+          gst_vaapi_video_format_from_chroma (gst_vaapi_surface_get_chroma_type
+          (surface));
+    if (surface_format == GST_VIDEO_FORMAT_UNKNOWN)
       surface_format = GST_VIDEO_FORMAT_NV12;
   }