diff --git a/src/picture.c b/src/picture.c index 7037897..4508adb 100644 --- a/src/picture.c +++ b/src/picture.c @@ -34,6 +34,7 @@ #include "h264.h" #include "h265.h" #include "mpeg2.h" +#include "vp8.h" #include #include @@ -107,6 +108,12 @@ static VAStatus codec_store_buffer(struct request_data *driver_data, sizeof(surface_object->params.h265.picture)); break; + case VAProfileVP8Version0_3: + memcpy(&surface_object->params.vp8.picture, + buffer_object->data, + sizeof(surface_object->params.vp8.picture)); + break; + default: break; } @@ -140,6 +147,12 @@ static VAStatus codec_store_buffer(struct request_data *driver_data, break; } + case VAProfileVP8Version0_3: + memcpy(&surface_object->params.vp8.slice, + buffer_object->data, + sizeof(surface_object->params.vp8.slice)); + break; + default: break; } @@ -173,6 +186,27 @@ static VAStatus codec_store_buffer(struct request_data *driver_data, surface_object->params.h265.iqmatrix_set = true; break; + case VAProfileVP8Version0_3: + memcpy(&surface_object->params.vp8.iqmatrix, + buffer_object->data, + sizeof(surface_object->params.vp8.iqmatrix)); + surface_object->params.vp8.iqmatrix_set = true; + break; + + default: + break; + } + break; + + case VAProbabilityBufferType: + switch (profile) { + case VAProfileVP8Version0_3: + memcpy(&surface_object->params.vp8.probability, + buffer_object->data, + sizeof(surface_object->params.vp8.probability)); + surface_object->params.vp8.probability_set = true; + break; + default: break; } @@ -217,6 +251,12 @@ static VAStatus codec_set_controls(struct request_data *driver_data, return VA_STATUS_ERROR_OPERATION_FAILED; break; + case VAProfileVP8Version0_3: + rc = vp8_set_controls(driver_data, context, surface_object); + if (rc < 0) + return VA_STATUS_ERROR_OPERATION_FAILED; + break; + default: return VA_STATUS_ERROR_UNSUPPORTED_PROFILE; } @@ -298,6 +338,8 @@ VAStatus RequestBeginPicture(VADriverContextP context, VAContextID context_id, surface_object->slices_count = 0; surface_object->params.h264.matrix_set = false; surface_object->params.h265.num_slices = 0; + surface_object->params.vp8.iqmatrix_set = false; + surface_object->params.vp8.probability_set = false; surface_object->status = VASurfaceRendering; context_object->render_surface_id = surface_id; diff --git a/src/surface.h b/src/surface.h index 2362902..764038a 100644 --- a/src/surface.h +++ b/src/surface.h @@ -110,6 +110,14 @@ struct object_surface { VAIQMatrixBufferHEVC iqmatrix; bool iqmatrix_set; } h265; + struct { + VAPictureParameterBufferVP8 picture; + VASliceParameterBufferVP8 slice; + VAIQMatrixBufferVP8 iqmatrix; + bool iqmatrix_set; + VAProbabilityDataBufferVP8 probability; + bool probability_set; + } vp8; } params; int request_fd;