summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Ripard <maxime.ripard@bootlin.com>2018-07-17 15:17:35 +0200
committerMaxime Ripard <maxime.ripard@bootlin.com>2018-07-17 15:28:55 +0200
commit2d1bce38c251f5ff66153b43558d08cebf6623af (patch)
tree9fee5136868320d0a20e9f69a1bb2dc4fd670cec
parent38d38134c7b52caf09ac50ca915707bd950c1875 (diff)
downloadlibva-v4l2-request-2d1bce38c251f5ff66153b43558d08cebf6623af.tar.gz
libva-v4l2-request-2d1bce38c251f5ff66153b43558d08cebf6623af.tar.bz2
libva-v4l2-request-2d1bce38c251f5ff66153b43558d08cebf6623af.zip
h264: Don't set num_slices anymore
The num_slices parameter was improperly set to the number of reference frames, which is incorrect. Add a counter for the number of slices per surface, and set num_slices to that value. Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
-rw-r--r--src/h264.c5
-rw-r--r--src/picture.c1
-rw-r--r--src/surface.c1
-rw-r--r--src/surface.h1
4 files changed, 6 insertions, 2 deletions
diff --git a/src/h264.c b/src/h264.c
index be43ecb..90025ef 100644
--- a/src/h264.c
+++ b/src/h264.c
@@ -207,6 +207,7 @@ static void h264_fill_dpb(struct cedrus_data *data,
static void h264_va_picture_to_v4l2(struct cedrus_data *driver_data,
struct object_context *context,
+ struct object_surface *surface,
VAPictureParameterBufferH264 *VAPicture,
struct v4l2_ctrl_h264_decode_param *decode,
struct v4l2_ctrl_h264_pps *pps,
@@ -214,7 +215,7 @@ static void h264_va_picture_to_v4l2(struct cedrus_data *driver_data,
{
h264_fill_dpb(driver_data, context, decode);
- decode->num_slices = VAPicture->num_ref_frames;
+ decode->num_slices = surface->slices_count;
decode->top_field_order_cnt = VAPicture->CurrPic.TopFieldOrderCnt;
decode->bottom_field_order_cnt = VAPicture->CurrPic.BottomFieldOrderCnt;
@@ -420,7 +421,7 @@ int h264_set_controls(struct cedrus_data *driver_data,
dpb_update(context, &surface->params.h264.picture);
- h264_va_picture_to_v4l2(driver_data, context,
+ h264_va_picture_to_v4l2(driver_data, context, surface,
&surface->params.h264.picture,
&decode, &pps, &sps);
h264_va_matrix_to_v4l2(driver_data, context,
diff --git a/src/picture.c b/src/picture.c
index 059abf3..2338a8f 100644
--- a/src/picture.c
+++ b/src/picture.c
@@ -65,6 +65,7 @@ static VAStatus codec_store_buffer(struct cedrus_data *driver_data,
buffer_object->size * buffer_object->count);
surface_object->slices_size +=
buffer_object->size * buffer_object->count;
+ surface_object->slices_count++;
break;
case VAPictureParameterBufferType:
diff --git a/src/surface.c b/src/surface.c
index 583f5c8..ed1bfd6 100644
--- a/src/surface.c
+++ b/src/surface.c
@@ -161,6 +161,7 @@ VAStatus SunxiCedrusCreateSurfaces(VADriverContextP context, int width,
memset(&surface_object->params, 0,
sizeof(surface_object->params));
+ surface_object->slices_count = 0;
surface_object->slices_size = 0;
surface_object->request_fd = -1;
diff --git a/src/surface.h b/src/surface.h
index 58dcbd3..58e85a8 100644
--- a/src/surface.h
+++ b/src/surface.h
@@ -59,6 +59,7 @@ struct object_surface {
unsigned int destination_buffers_count;
unsigned int slices_size;
+ unsigned int slices_count;
union {
struct {