summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Liu <leo.liu@amd.com>2017-08-15 14:08:02 -0400
committerLeo Liu <leo.liu@amd.com>2017-08-21 10:09:09 -0400
commit2ebc530ca376fc5f07b7982d9598bdfb5fe4032e (patch)
tree804be71d602fc555e95758a0d9afbb58c2b2b13f
parent7319ff87871c8e5f909a1674cd60279ef53cbbd0 (diff)
st/va: detect MJPEG format from bitstream
To find if the format is supported YUYV by sampling factor which is embedded from bitstream. So we could use this info for buffer reallocation on the correct format. Signed-off-by: Leo Liu <leo.liu@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
-rw-r--r--src/gallium/state_trackers/va/picture.c1
-rw-r--r--src/gallium/state_trackers/va/picture_mjpeg.c5
-rw-r--r--src/gallium/state_trackers/va/va_private.h4
3 files changed, 10 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/va/picture.c b/src/gallium/state_trackers/va/picture.c
index 732079139ea..1e1212dd7a9 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 326c890c880..396b7434425 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 a437a5b90f1..9c093181277 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;