summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWang, Tiantian <tiantian.wang@intel.com>2017-04-18 06:53:12 -0400
committerXiang, Haihao <haihao.xiang@intel.com>2017-06-12 14:36:48 +0800
commit030e5c2939e685d03a8d284c67199ea65a6fef90 (patch)
treee9507f09ca77e4bd0b8b9e16159c9e6d51c5e7e8
parent6550659721c9531f5ca6decafb11b68312979725 (diff)
downloadlibva-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.c40
-rw-r--r--src/gen7_mfd.c40
-rw-r--r--src/gen8_mfd.c40
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)