diff options
author | Maxime Ripard <maxime.ripard@bootlin.com> | 2018-07-17 15:17:35 +0200 |
---|---|---|
committer | Maxime Ripard <maxime.ripard@bootlin.com> | 2018-07-17 15:28:55 +0200 |
commit | 2d1bce38c251f5ff66153b43558d08cebf6623af (patch) | |
tree | 9fee5136868320d0a20e9f69a1bb2dc4fd670cec | |
parent | 38d38134c7b52caf09ac50ca915707bd950c1875 (diff) | |
download | libva-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.c | 5 | ||||
-rw-r--r-- | src/picture.c | 1 | ||||
-rw-r--r-- | src/surface.c | 1 | ||||
-rw-r--r-- | src/surface.h | 1 |
4 files changed, 6 insertions, 2 deletions
@@ -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 { |