Reorder functions, with a straightforward logic

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
This commit is contained in:
Paul Kocialkowski
2018-04-23 16:51:11 +02:00
parent e25b757b7e
commit 4b7e71668e
11 changed files with 116 additions and 114 deletions
+28 -28
View File
@@ -120,21 +120,33 @@ VAStatus SunxiCedrusCreateBuffer(VADriverContextP context,
return VA_STATUS_SUCCESS;
}
VAStatus SunxiCedrusBufferSetNumElements(VADriverContextP context,
VABufferID buffer_id, unsigned int count)
void sunxi_cedrus_destroy_buffer(struct sunxi_cedrus_driver_data *driver_data,
struct object_buffer *obj_buffer)
{
if (obj_buffer->data != NULL) {
if (obj_buffer->type != VASliceDataBufferType)
free(obj_buffer->data);
else if (obj_buffer->map != NULL && obj_buffer->map_size > 0)
munmap(obj_buffer->map, obj_buffer->map_size);
obj_buffer->map = NULL;
obj_buffer->data = NULL;
}
object_heap_free(&driver_data->buffer_heap, obj_buffer);
}
VAStatus SunxiCedrusDestroyBuffer(VADriverContextP context,
VABufferID buffer_id)
{
struct sunxi_cedrus_driver_data *driver_data =
(struct sunxi_cedrus_driver_data *) context->pDriverData;
VAStatus vaStatus = VA_STATUS_SUCCESS;
struct object_buffer *obj_buffer = BUFFER(buffer_id);
assert(obj_buffer);
if ((count < 0) || (count > obj_buffer->initial_count))
vaStatus = VA_STATUS_ERROR_UNKNOWN;
if (VA_STATUS_SUCCESS == vaStatus)
obj_buffer->count = count;
sunxi_cedrus_destroy_buffer(driver_data, obj_buffer);
return vaStatus;
return VA_STATUS_SUCCESS;
}
VAStatus SunxiCedrusMapBuffer(VADriverContextP context, VABufferID buffer_id,
@@ -173,33 +185,21 @@ VAStatus SunxiCedrusUnmapBuffer(VADriverContextP context, VABufferID buffer_id)
return VA_STATUS_SUCCESS;
}
void sunxi_cedrus_destroy_buffer(struct sunxi_cedrus_driver_data *driver_data,
struct object_buffer *obj_buffer)
{
if (obj_buffer->data != NULL) {
if (obj_buffer->type != VASliceDataBufferType)
free(obj_buffer->data);
else if (obj_buffer->map != NULL && obj_buffer->map_size > 0)
munmap(obj_buffer->map, obj_buffer->map_size);
obj_buffer->map = NULL;
obj_buffer->data = NULL;
}
object_heap_free(&driver_data->buffer_heap, obj_buffer);
}
VAStatus SunxiCedrusDestroyBuffer(VADriverContextP context,
VABufferID buffer_id)
VAStatus SunxiCedrusBufferSetNumElements(VADriverContextP context,
VABufferID buffer_id, unsigned int count)
{
struct sunxi_cedrus_driver_data *driver_data =
(struct sunxi_cedrus_driver_data *) context->pDriverData;
VAStatus vaStatus = VA_STATUS_SUCCESS;
struct object_buffer *obj_buffer = BUFFER(buffer_id);
assert(obj_buffer);
sunxi_cedrus_destroy_buffer(driver_data, obj_buffer);
if ((count < 0) || (count > obj_buffer->initial_count))
vaStatus = VA_STATUS_ERROR_UNKNOWN;
if (VA_STATUS_SUCCESS == vaStatus)
obj_buffer->count = count;
return VA_STATUS_SUCCESS;
return vaStatus;
}
VAStatus SunxiCedrusBufferInfo(VADriverContextP context, VABufferID buffer_id,
+5 -5
View File
@@ -51,15 +51,15 @@ struct object_buffer {
VAStatus SunxiCedrusCreateBuffer(VADriverContextP context,
VAContextID context_id, VABufferType type, unsigned int size,
unsigned int count, void *data, VABufferID *buffer_id);
VAStatus SunxiCedrusBufferSetNumElements(VADriverContextP context,
VABufferID buffer_id, unsigned int count);
VAStatus SunxiCedrusMapBuffer(VADriverContextP context, VABufferID buffer_id,
void **data_map);
VAStatus SunxiCedrusUnmapBuffer(VADriverContextP context, VABufferID buffer_id);
void sunxi_cedrus_destroy_buffer(struct sunxi_cedrus_driver_data *driver_data,
struct object_buffer *obj_buffer);
VAStatus SunxiCedrusDestroyBuffer(VADriverContextP context,
VABufferID buffer_id);
VAStatus SunxiCedrusMapBuffer(VADriverContextP context, VABufferID buffer_id,
void **data_map);
VAStatus SunxiCedrusUnmapBuffer(VADriverContextP context, VABufferID buffer_id);
VAStatus SunxiCedrusBufferSetNumElements(VADriverContextP context,
VABufferID buffer_id, unsigned int count);
VAStatus SunxiCedrusBufferInfo(VADriverContextP context, VABufferID buffer_id,
VABufferType *type, unsigned int *size, unsigned int *count);
-1
View File
@@ -171,4 +171,3 @@ VAStatus SunxiCedrusDestroyContext(VADriverContextP context,
return VA_STATUS_SUCCESS;
}
+19 -19
View File
@@ -32,14 +32,6 @@
#include "tiled_yuv.h"
VAStatus SunxiCedrusQueryImageFormats(VADriverContextP context,
VAImageFormat *formats, int *formats_count)
{
formats[0].fourcc = VA_FOURCC_NV12;
*formats_count = 1;
return VA_STATUS_SUCCESS;
}
VAStatus SunxiCedrusCreateImage(VADriverContextP context, VAImageFormat *format,
int width, int height, VAImage *image)
{
@@ -81,6 +73,21 @@ VAStatus SunxiCedrusCreateImage(VADriverContextP context, VAImageFormat *format,
return VA_STATUS_SUCCESS;
}
VAStatus SunxiCedrusDestroyImage(VADriverContextP context, VAImageID image_id)
{
struct sunxi_cedrus_driver_data *driver_data =
(struct sunxi_cedrus_driver_data *) context->pDriverData;
struct object_image *obj_img;
obj_img = IMAGE(image);
assert(obj_img);
SunxiCedrusDestroyBuffer(context, obj_img->buf);
object_heap_free(&driver_data->image_heap, &obj_img->base);
return VA_STATUS_SUCCESS;
}
VAStatus SunxiCedrusDeriveImage(VADriverContextP context,
VASurfaceID surface_id, VAImage *image)
{
@@ -112,18 +119,11 @@ VAStatus SunxiCedrusDeriveImage(VADriverContextP context,
return VA_STATUS_SUCCESS;
}
VAStatus SunxiCedrusDestroyImage(VADriverContextP context, VAImageID image_id)
VAStatus SunxiCedrusQueryImageFormats(VADriverContextP context,
VAImageFormat *formats, int *formats_count)
{
struct sunxi_cedrus_driver_data *driver_data =
(struct sunxi_cedrus_driver_data *) context->pDriverData;
struct object_image *obj_img;
obj_img = IMAGE(image);
assert(obj_img);
SunxiCedrusDestroyBuffer(context, obj_img->buf);
object_heap_free(&driver_data->image_heap, &obj_img->base);
formats[0].fourcc = VA_FOURCC_NV12;
*formats_count = 1;
return VA_STATUS_SUCCESS;
}
+3 -3
View File
@@ -38,13 +38,13 @@ struct object_image {
VABufferID buffer_id;
};
VAStatus SunxiCedrusQueryImageFormats(VADriverContextP context,
VAImageFormat *formats, int *formats_count);
VAStatus SunxiCedrusCreateImage(VADriverContextP context, VAImageFormat *format,
int width, int height, VAImage *image);
VAStatus SunxiCedrusDestroyImage(VADriverContextP context, VAImageID image_id);
VAStatus SunxiCedrusDeriveImage(VADriverContextP context,
VASurfaceID surface_id, VAImage *image);
VAStatus SunxiCedrusDestroyImage(VADriverContextP context, VAImageID image_id);
VAStatus SunxiCedrusQueryImageFormats(VADriverContextP context,
VAImageFormat *formats, int *formats_count);
VAStatus SunxiCedrusSetImagePalette(VADriverContextP context,
VAImageID image_id, unsigned char *palette);
VAStatus SunxiCedrusGetImage(VADriverContextP context, VASurfaceID surface_id,
-2
View File
@@ -233,5 +233,3 @@ VAStatus SunxiCedrusEndPicture(VADriverContextP context,
return vaStatus;
}
+5 -5
View File
@@ -26,11 +26,6 @@
#include "sunxi_cedrus.h"
#include "subpicture.h"
VAStatus SunxiCedrusQuerySubpictureFormats(VADriverContextP context,
VAImageFormat *formats, unsigned int *flags,
unsigned int *formats_count)
{ return VA_STATUS_SUCCESS; }
VAStatus SunxiCedrusCreateSubpicture(VADriverContextP context,
VAImageID image_id, VASubpictureID *subpicture_id)
{ return VA_STATUS_SUCCESS; }
@@ -39,6 +34,11 @@ VAStatus SunxiCedrusDestroySubpicture(VADriverContextP context,
VASubpictureID subpicture_id)
{ return VA_STATUS_SUCCESS; }
VAStatus SunxiCedrusQuerySubpictureFormats(VADriverContextP context,
VAImageFormat *formats, unsigned int *flags,
unsigned int *formats_count)
{ return VA_STATUS_SUCCESS; }
VAStatus SunxiCedrusSetSubpictureImage(VADriverContextP context,
VASubpictureID subpicture_id, VAImageID image_id)
{ return VA_STATUS_SUCCESS; }
+3 -3
View File
@@ -28,13 +28,13 @@
#include <va/va_backend.h>
VAStatus SunxiCedrusQuerySubpictureFormats(VADriverContextP context,
VAImageFormat *formats, unsigned int *flags,
unsigned int *formats_count);
VAStatus SunxiCedrusCreateSubpicture(VADriverContextP context,
VAImageID image_id, VASubpictureID *subpicture_id);
VAStatus SunxiCedrusDestroySubpicture(VADriverContextP context,
VASubpictureID subpicture_id);
VAStatus SunxiCedrusQuerySubpictureFormats(VADriverContextP context,
VAImageFormat *formats, unsigned int *flags,
unsigned int *formats_count);
VAStatus SunxiCedrusSetSubpictureImage(VADriverContextP context,
VASubpictureID subpicture_id, VAImageID image_id);
VAStatus SunxiCedrusSetSubpicturePalette(VADriverContextP context,
+48 -45
View File
@@ -60,52 +60,11 @@ void sunxi_cedrus_msg(const char *msg, ...)
va_end(args);
}
VAStatus SunxiCedrusTerminate(VADriverContextP context)
{
struct sunxi_cedrus_driver_data *driver_data =
(struct sunxi_cedrus_driver_data *) context->pDriverData;
struct object_buffer *obj_buffer;
struct object_config *obj_config;
object_heap_iterator iter;
/* Set default visibility for the init function only. */
VAStatus __attribute__((visibility("default")))
VA_DRIVER_INIT_FUNC(VADriverContextP context);
/* Free memory and close v4l device */
for (int i = 0; i < INPUT_BUFFERS_NB; i++)
if (driver_data->request_fds[i] >= 0)
close(driver_data->request_fds[i]);
close(driver_data->mem2mem_fd);
/* Clean up left over buffers */
obj_buffer = (struct object_buffer *) object_heap_first(&driver_data->buffer_heap, &iter);
while (obj_buffer)
{
sunxi_cedrus_msg("vaTerminate: bufferID %08x still allocated, destroying\n", obj_buffer->base.id);
sunxi_cedrus_destroy_buffer(driver_data, obj_buffer);
obj_buffer = (struct object_buffer *) object_heap_next(&driver_data->buffer_heap, &iter);
}
object_heap_destroy(&driver_data->buffer_heap);
object_heap_destroy(&driver_data->surface_heap);
object_heap_destroy(&driver_data->context_heap);
/* Clean up configIDs */
obj_config = (struct object_config *) object_heap_first(&driver_data->config_heap, &iter);
while (obj_config)
{
object_heap_free(&driver_data->config_heap, (object_base_p) obj_config);
obj_config = (struct object_config *) object_heap_next(&driver_data->config_heap, &iter);
}
object_heap_destroy(&driver_data->config_heap);
free(context->pDriverData);
context->pDriverData = NULL;
return VA_STATUS_SUCCESS;
}
/* Only expose the init function. */
VAStatus __attribute__((visibility("default"))) VA_DRIVER_INIT_FUNC(VADriverContextP context)
VAStatus VA_DRIVER_INIT_FUNC(VADriverContextP context)
{
struct VADriverVTable * const vtable = context->vtable;
struct sunxi_cedrus_driver_data *driver_data;
@@ -203,3 +162,47 @@ VAStatus __attribute__((visibility("default"))) VA_DRIVER_INIT_FUNC(VADriverCont
return VA_STATUS_SUCCESS;
}
VAStatus SunxiCedrusTerminate(VADriverContextP context)
{
struct sunxi_cedrus_driver_data *driver_data =
(struct sunxi_cedrus_driver_data *) context->pDriverData;
struct object_buffer *obj_buffer;
struct object_config *obj_config;
object_heap_iterator iter;
/* Free memory and close v4l device */
for (int i = 0; i < INPUT_BUFFERS_NB; i++)
if (driver_data->request_fds[i] >= 0)
close(driver_data->request_fds[i]);
close(driver_data->mem2mem_fd);
/* Clean up left over buffers */
obj_buffer = (struct object_buffer *) object_heap_first(&driver_data->buffer_heap, &iter);
while (obj_buffer)
{
sunxi_cedrus_msg("vaTerminate: bufferID %08x still allocated, destroying\n", obj_buffer->base.id);
sunxi_cedrus_destroy_buffer(driver_data, obj_buffer);
obj_buffer = (struct object_buffer *) object_heap_next(&driver_data->buffer_heap, &iter);
}
object_heap_destroy(&driver_data->buffer_heap);
object_heap_destroy(&driver_data->surface_heap);
object_heap_destroy(&driver_data->context_heap);
/* Clean up configIDs */
obj_config = (struct object_config *) object_heap_first(&driver_data->config_heap, &iter);
while (obj_config)
{
object_heap_free(&driver_data->config_heap, (object_base_p) obj_config);
obj_config = (struct object_config *) object_heap_next(&driver_data->config_heap, &iter);
}
object_heap_destroy(&driver_data->config_heap);
free(context->pDriverData);
context->pDriverData = NULL;
return VA_STATUS_SUCCESS;
}
+5 -2
View File
@@ -41,8 +41,6 @@
#define SUNXI_CEDRUS_MAX_SUBPIC_FORMATS 4
#define SUNXI_CEDRUS_MAX_DISPLAY_ATTRIBUTES 4
void sunxi_cedrus_msg(const char *msg, ...);
struct sunxi_cedrus_driver_data {
struct object_heap config_heap;
struct object_heap context_heap;
@@ -57,4 +55,9 @@ struct sunxi_cedrus_driver_data {
int slice_offset[INPUT_BUFFERS_NB];
};
void sunxi_cedrus_msg(const char *msg, ...);
VAStatus VA_DRIVER_INIT_FUNC(VADriverContextP context);
VAStatus SunxiCedrusTerminate(VADriverContextP context);
#endif
-1
View File
@@ -227,7 +227,6 @@ VAStatus SunxiCedrusQuerySurfaceStatus(VADriverContextP context,
return vaStatus;
}
VAStatus SunxiCedrusPutSurface(VADriverContextP context, VASurfaceID surface_id,
void *draw, short src_x, short src_y, unsigned short src_width,
unsigned short src_height, short dst_x, short dst_y,