diff options
author | Wang, Tiantian <tiantian.wang@intel.com> | 2017-04-18 06:53:12 -0400 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2017-06-12 14:36:48 +0800 |
commit | 030e5c2939e685d03a8d284c67199ea65a6fef90 (patch) | |
tree | e9507f09ca77e4bd0b8b9e16159c9e6d51c5e7e8 | |
parent | 6550659721c9531f5ca6decafb11b68312979725 (diff) | |
download | libva-intel-driver-030e5c2939e685d03a8d284c67199ea65a6fef90.tar.gz |
correct subsampling calculate methods of various fourcc that jpeg support.
This fixes https://github.com/01org/intel-vaapi-driver/issues/10
Signed-off-by: Wang Tiantian <tiantian.wang@intel.com>
(cherry picked from commit 4055625baf6fcfb4a93ed64e3a7c491bc143d757)
-rw-r--r-- | src/gen75_mfd.c | 40 | ||||
-rw-r--r-- | src/gen7_mfd.c | 40 | ||||
-rw-r--r-- | src/gen8_mfd.c | 40 |
3 files changed, 48 insertions, 72 deletions
diff --git a/src/gen75_mfd.c b/src/gen75_mfd.c index 4a055f95..926d3dfa 100644 --- a/src/gen75_mfd.c +++ b/src/gen75_mfd.c @@ -2169,32 +2169,24 @@ gen75_mfd_jpeg_decode_init(VADriverContextP ctx, int v2 = pic_param->components[1].v_sampling_factor; int v3 = pic_param->components[2].v_sampling_factor; - if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 1 && v3 == 1) { + if (h1 == 2 * h2 && h2 == h3 && + v1 == 2 * v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV420; fourcc = VA_FOURCC_IMC3; - } else if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) { + } else if (h1 == 2 * h2 && h2 == h3 && + v1 == v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV422H; fourcc = VA_FOURCC_422H; - } else if (h1 == 1 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) { + } else if (h1 == h2 && h2 == h3 && + v1 == v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV444; fourcc = VA_FOURCC_444P; - } else if (h1 == 4 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) { + } else if (h1 == 4 * h2 && h2 == h3 && + v1 == v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV411; fourcc = VA_FOURCC_411P; - } else if (h1 == 1 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 1 && v3 == 1) { - subsampling = SUBSAMPLE_YUV422V; - fourcc = VA_FOURCC_422V; - } else if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 2 && v3 == 2) { - subsampling = SUBSAMPLE_YUV422H; - fourcc = VA_FOURCC_422H; - } else if (h1 == 2 && h2 == 2 && h3 == 2 && - v1 == 2 && v2 == 1 && v3 == 1) { + } else if (h1 == h2 && h2 == h3 && + v1 == 2 * v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV422V; fourcc = VA_FOURCC_422V; } else @@ -2262,17 +2254,17 @@ gen75_mfd_jpeg_pic_state(VADriverContextP ctx, int v2 = pic_param->components[1].v_sampling_factor; int v3 = pic_param->components[2].v_sampling_factor; - if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 1 && v3 == 1) + if (h1 == 2 * h2 && h2 == h3 && + v1 == 2 * v2 && v2 == v3) chroma_type = GEN7_YUV420; else if (h1 == 2 && h2 == 1 && h3 == 1 && v1 == 1 && v2 == 1 && v3 == 1) chroma_type = GEN7_YUV422H_2Y; - else if (h1 == 1 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) + else if (h1 == h2 && h2 == h3 && + v1 == v2 && v2 == v3) chroma_type = GEN7_YUV444; - else if (h1 == 4 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) + else if (h1 == 4 * h2 && h2 == h3 && + v1 == v2 && v2 == v3) chroma_type = GEN7_YUV411; else if (h1 == 1 && h2 == 1 && h3 == 1 && v1 == 2 && v2 == 1 && v3 == 1) diff --git a/src/gen7_mfd.c b/src/gen7_mfd.c index 57a26b8e..7c836a29 100644 --- a/src/gen7_mfd.c +++ b/src/gen7_mfd.c @@ -1853,32 +1853,24 @@ gen7_mfd_jpeg_decode_init(VADriverContextP ctx, int v2 = pic_param->components[1].v_sampling_factor; int v3 = pic_param->components[2].v_sampling_factor; - if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 1 && v3 == 1) { + if (h1 == 2 * h2 && h2 == h3 && + v1 == 2 * v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV420; fourcc = VA_FOURCC_IMC3; - } else if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) { + } else if (h1 == 2 * h2 && h2 == h3 && + v1 == v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV422H; fourcc = VA_FOURCC_422H; - } else if (h1 == 1 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) { + } else if (h1 == h2 && h2 == h3 && + v1 == v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV444; fourcc = VA_FOURCC_444P; - } else if (h1 == 4 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) { + } else if (h1 == 4 * h2 && h2 == h3 && + v1 == v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV411; fourcc = VA_FOURCC_411P; - } else if (h1 == 1 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 1 && v3 == 1) { - subsampling = SUBSAMPLE_YUV422V; - fourcc = VA_FOURCC_422V; - } else if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 2 && v3 == 2) { - subsampling = SUBSAMPLE_YUV422H; - fourcc = VA_FOURCC_422H; - } else if (h1 == 2 && h2 == 2 && h3 == 2 && - v1 == 2 && v2 == 1 && v3 == 1) { + } else if (h1 == h2 && h2 == h3 && + v1 == 2 * v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV422V; fourcc = VA_FOURCC_422V; } else @@ -1946,17 +1938,17 @@ gen7_mfd_jpeg_pic_state(VADriverContextP ctx, int v2 = pic_param->components[1].v_sampling_factor; int v3 = pic_param->components[2].v_sampling_factor; - if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 1 && v3 == 1) + if (h1 == 2 * h2 && h2 == h3 && + v1 == 2 * v2 && v2 == v3) chroma_type = GEN7_YUV420; else if (h1 == 2 && h2 == 1 && h3 == 1 && v1 == 1 && v2 == 1 && v3 == 1) chroma_type = GEN7_YUV422H_2Y; - else if (h1 == 1 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) + else if (h1 == h2 && h2 == h3 && + v1 == v2 && v2 == v3) chroma_type = GEN7_YUV444; - else if (h1 == 4 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) + else if (h1 == 4 * h2 && h2 == h3 && + v1 == v2 && v2 == v3) chroma_type = GEN7_YUV411; else if (h1 == 1 && h2 == 1 && h3 == 1 && v1 == 2 && v2 == 1 && v3 == 1) diff --git a/src/gen8_mfd.c b/src/gen8_mfd.c index bc8b3730..5c70ff0c 100644 --- a/src/gen8_mfd.c +++ b/src/gen8_mfd.c @@ -1905,32 +1905,24 @@ gen8_mfd_jpeg_decode_init(VADriverContextP ctx, int v2 = pic_param->components[1].v_sampling_factor; int v3 = pic_param->components[2].v_sampling_factor; - if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 1 && v3 == 1) { + if (h1 == 2 * h2 && h2 == h3 && + v1 == 2 * v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV420; fourcc = VA_FOURCC_IMC3; - } else if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) { + } else if (h1 == 2 * h2 && h2 == h3 && + v1 == v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV422H; fourcc = VA_FOURCC_422H; - } else if (h1 == 1 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) { + } else if (h1 == h2 && h2 == h3 && + v1 == v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV444; fourcc = VA_FOURCC_444P; - } else if (h1 == 4 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) { + } else if (h1 == 4 * h2 && h2 == h3 && + v1 == v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV411; fourcc = VA_FOURCC_411P; - } else if (h1 == 1 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 1 && v3 == 1) { - subsampling = SUBSAMPLE_YUV422V; - fourcc = VA_FOURCC_422V; - } else if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 2 && v3 == 2) { - subsampling = SUBSAMPLE_YUV422H; - fourcc = VA_FOURCC_422H; - } else if (h1 == 2 && h2 == 2 && h3 == 2 && - v1 == 2 && v2 == 1 && v3 == 1) { + } else if (h1 == h2 && h2 == h3 && + v1 == 2 * v2 && v2 == v3) { subsampling = SUBSAMPLE_YUV422V; fourcc = VA_FOURCC_422V; } else @@ -1998,17 +1990,17 @@ gen8_mfd_jpeg_pic_state(VADriverContextP ctx, int v2 = pic_param->components[1].v_sampling_factor; int v3 = pic_param->components[2].v_sampling_factor; - if (h1 == 2 && h2 == 1 && h3 == 1 && - v1 == 2 && v2 == 1 && v3 == 1) + if (h1 == 2 * h2 && h2 == h3 && + v1 == 2 * v2 && v2 == v3) chroma_type = GEN7_YUV420; else if (h1 == 2 && h2 == 1 && h3 == 1 && v1 == 1 && v2 == 1 && v3 == 1) chroma_type = GEN7_YUV422H_2Y; - else if (h1 == 1 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) + else if (h1 == h2 && h2 == h3 && + v1 == v2 && v2 == v3) chroma_type = GEN7_YUV444; - else if (h1 == 4 && h2 == 1 && h3 == 1 && - v1 == 1 && v2 == 1 && v3 == 1) + else if (h1 == 4 * h2 && h2 == h3 && + v1 == v2 && v2 == v3) chroma_type = GEN7_YUV411; else if (h1 == 1 && h2 == 1 && h3 == 1 && v1 == 2 && v2 == 1 && v3 == 1) |