[Mesa-dev] [PATCH 18/20] st/va: detect MJPEG format from bitstream
Leo Liu
leo.liu at amd.com
Wed Aug 16 17:53:21 UTC 2017
To find if the format is supported YUYV by sampling factor which
is embedded from bitstream. So we could use this info for buffer
relocation on the correct format.
Signed-off-by: Leo Liu <leo.liu at amd.com>
Reviewed-by: Christian König <christian.koenig at amd.com>
---
src/gallium/state_trackers/va/picture.c | 1 +
src/gallium/state_trackers/va/picture_mjpeg.c | 5 +++++
src/gallium/state_trackers/va/va_private.h | 4 ++++
3 files changed, 10 insertions(+)
diff --git a/src/gallium/state_trackers/va/picture.c b/src/gallium/state_trackers/va/picture.c
index 732079139e..1e1212dd7a 100644
--- a/src/gallium/state_trackers/va/picture.c
+++ b/src/gallium/state_trackers/va/picture.c
@@ -65,6 +65,7 @@ vlVaBeginPicture(VADriverContextP ctx, VAContextID context_id, VASurfaceID rende
context->target_id = render_target;
surf->ctx = context_id;
context->target = surf->buffer;
+ context->mjpeg.sampling_factor = 0;
if (!context->decoder) {
diff --git a/src/gallium/state_trackers/va/picture_mjpeg.c b/src/gallium/state_trackers/va/picture_mjpeg.c
index 326c890c88..396b743442 100644
--- a/src/gallium/state_trackers/va/picture_mjpeg.c
+++ b/src/gallium/state_trackers/va/picture_mjpeg.c
@@ -30,6 +30,7 @@
void vlVaHandlePictureParameterBufferMJPEG(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf)
{
VAPictureParameterBufferJPEGBaseline *mjpeg = buf->data;
+ unsigned sf;
int i;
assert(buf->size >= sizeof(VAPictureParameterBufferJPEGBaseline) && buf->num_elements == 1);
@@ -46,6 +47,10 @@ void vlVaHandlePictureParameterBufferMJPEG(vlVaDriver *drv, vlVaContext *context
mjpeg->components[i].v_sampling_factor;
context->desc.mjpeg.picture_parameter.components[i].quantiser_table_selector =
mjpeg->components[i].quantiser_table_selector;
+
+ sf = mjpeg->components[i].h_sampling_factor << 4 | mjpeg->components[i].v_sampling_factor;
+ context->mjpeg.sampling_factor <<= 8;
+ context->mjpeg.sampling_factor |= sf;
}
context->desc.mjpeg.picture_parameter.num_components = mjpeg->num_components;
diff --git a/src/gallium/state_trackers/va/va_private.h b/src/gallium/state_trackers/va/va_private.h
index a437a5b90f..9c09318127 100644
--- a/src/gallium/state_trackers/va/va_private.h
+++ b/src/gallium/state_trackers/va/va_private.h
@@ -277,6 +277,10 @@ typedef struct {
uint8_t start_code[32];
} mpeg4;
+ struct {
+ unsigned sampling_factor;
+ } mjpeg;
+
struct vl_deint_filter *deint;
vlVaBuffer *coded_buf;
int target_id;
--
2.11.0
More information about the mesa-dev
mailing list