[Libva] [PATCH Libva-intel-driver 4/4] Add the csc conversion from YV16 to NV12
Zhao Yakui
yakui.zhao at intel.com
Mon Mar 17 02:08:11 PDT 2014
V1->V2: Follow Zhiwen's comment to add the missing code when the source is
YV16 image instead of YV16 surface.
Reviewed-by: Wind Yuan <feng.yuan at intel.com>
Tested-by: Wind Yuan <feng.yuan at intel.com>
Signed-off-by: Zhao Yakui <yakui.zhao at intel.com>
---
src/gen8_post_processing.c | 8 ++++++++
src/i965_post_processing.c | 23 +++++++++++++++++++++--
2 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/src/gen8_post_processing.c b/src/gen8_post_processing.c
index f34392c..a5b3b90 100644
--- a/src/gen8_post_processing.c
+++ b/src/gen8_post_processing.c
@@ -496,8 +496,10 @@ gen8_pp_set_media_rw_message_surface(VADriverContextP ctx, struct i965_post_proc
dri_bo *bo;
int fourcc = pp_get_surface_fourcc(ctx, surface);
const int U = (fourcc == VA_FOURCC('Y', 'V', '1', '2') ||
+ fourcc == VA_FOURCC('Y', 'V', '1', '6') ||
fourcc == VA_FOURCC('I', 'M', 'C', '1')) ? 2 : 1;
const int V = (fourcc == VA_FOURCC('Y', 'V', '1', '2') ||
+ fourcc == VA_FOURCC('Y', 'V', '1', '6') ||
fourcc == VA_FOURCC('I', 'M', 'C', '1')) ? 1 : 2;
int interleaved_uv = fourcc == VA_FOURCC('N', 'V', '1', '2');
int packed_yuv = (fourcc == VA_FOURCC('Y', 'U', 'Y', '2') || fourcc == VA_FOURCC('U', 'Y', 'V', 'Y'));
@@ -564,6 +566,12 @@ gen8_pp_set_media_rw_message_surface(VADriverContextP ctx, struct i965_post_proc
height[2] = obj_image->image.height / 2;
pitch[2] = obj_image->image.pitches[V];
offset[2] = obj_image->image.offsets[V];
+ if (fourcc == VA_FOURCC('V', 'V', '1', '6')) {
+ width[1] = obj_image->image.width / 2;
+ height[1] = obj_image->image.height;
+ width[2] = obj_image->image.width / 2;
+ height[2] = obj_image->image.height;
+ }
}
}
diff --git a/src/i965_post_processing.c b/src/i965_post_processing.c
index 936c1a6..3242257 100755
--- a/src/i965_post_processing.c
+++ b/src/i965_post_processing.c
@@ -1764,8 +1764,12 @@ pp_set_media_rw_message_surface(VADriverContextP ctx, struct i965_post_processin
dri_bo *bo;
int fourcc = pp_get_surface_fourcc(ctx, surface);
const int Y = 0;
- const int U = fourcc == VA_FOURCC('Y', 'V', '1', '2') ? 2 : 1;
- const int V = fourcc == VA_FOURCC('Y', 'V', '1', '2') ? 1 : 2;
+ const int U = ((fourcc == VA_FOURCC('Y', 'V', '1', '2')) ||
+ (fourcc == VA_FOURCC('Y', 'V', '1', '6')))
+ ? 2 : 1;
+ const int V = ((fourcc == VA_FOURCC('Y', 'V', '1', '2')) ||
+ (fourcc == VA_FOURCC('Y', 'V', '1', '6')))
+ ? 1 : 2;
const int UV = 1;
int interleaved_uv = fourcc == VA_FOURCC('N', 'V', '1', '2');
int packed_yuv = (fourcc == VA_FOURCC('Y', 'U', 'Y', '2') || fourcc == VA_FOURCC('U', 'Y', 'V', 'Y'));
@@ -1832,6 +1836,12 @@ pp_set_media_rw_message_surface(VADriverContextP ctx, struct i965_post_processin
height[2] = obj_image->image.height / 2;
pitch[2] = obj_image->image.pitches[2];
offset[2] = obj_image->image.offsets[2];
+ if (fourcc == VA_FOURCC('V', 'V', '1', '6')) {
+ width[1] = obj_image->image.width / 2;
+ height[1] = obj_image->image.height;
+ width[2] = obj_image->image.width / 2;
+ height[2] = obj_image->image.height;
+ }
}
}
@@ -1875,8 +1885,10 @@ gen7_pp_set_media_rw_message_surface(VADriverContextP ctx, struct i965_post_proc
dri_bo *bo;
int fourcc = pp_get_surface_fourcc(ctx, surface);
const int U = (fourcc == VA_FOURCC('Y', 'V', '1', '2') ||
+ fourcc == VA_FOURCC('V', 'V', '1', '6') ||
fourcc == VA_FOURCC('I', 'M', 'C', '1')) ? 2 : 1;
const int V = (fourcc == VA_FOURCC('Y', 'V', '1', '2') ||
+ fourcc == VA_FOURCC('V', 'V', '1', '6') ||
fourcc == VA_FOURCC('I', 'M', 'C', '1')) ? 1 : 2;
int interleaved_uv = fourcc == VA_FOURCC('N', 'V', '1', '2');
int packed_yuv = (fourcc == VA_FOURCC('Y', 'U', 'Y', '2') || fourcc == VA_FOURCC('U', 'Y', 'V', 'Y'));
@@ -1942,6 +1954,12 @@ gen7_pp_set_media_rw_message_surface(VADriverContextP ctx, struct i965_post_proc
height[2] = obj_image->image.height / 2;
pitch[2] = obj_image->image.pitches[V];
offset[2] = obj_image->image.offsets[V];
+ if (fourcc == VA_FOURCC('V', 'V', '1', '6')) {
+ width[1] = obj_image->image.width / 2;
+ height[1] = obj_image->image.height;
+ width[2] = obj_image->image.width / 2;
+ height[2] = obj_image->image.height;
+ }
}
}
@@ -5230,6 +5248,7 @@ i965_image_processing(VADriverContextP ctx,
case VA_FOURCC('4', '2', '2', 'V'):
case VA_FOURCC('4', '1', '1', 'P'):
case VA_FOURCC('4', '4', '4', 'P'):
+ case VA_FOURCC('Y', 'V', '1', '6'):
status = i965_image_pl3_processing(ctx,
src_surface,
src_rect,
--
1.8.2-rc2
More information about the Libva
mailing list