int height;
int format;
int queue_size;
+ int flags;
int num_attached;
queue free_queue;
static void
_tbm_surface_queue_init(tbm_surface_queue_h surface_queue,
int queue_size,
- int width, int height, int format,
+ int width, int height, int format, int flags,
const tbm_surface_queue_interface *impl, void *data)
{
pthread_condattr_t free_attr, dirty_attr;
surface_queue->width = width;
surface_queue->height = height;
surface_queue->format = format;
+ surface_queue->flags = flags;
surface_queue->impl = impl;
surface_queue->impl_data = data;
surface_queue->modes = TBM_SURFACE_QUEUE_MODE_NONE;
return TBM_SURFACE_QUEUE_ERROR_NONE;
}
-typedef struct {
- int flags;
-} tbm_queue_default;
-
-static void
-__tbm_queue_default_destroy(tbm_surface_queue_h surface_queue)
-{
- free(surface_queue->impl_data);
-}
-
static void
__tbm_queue_default_need_attach(tbm_surface_queue_h surface_queue)
{
- tbm_queue_default *data = (tbm_queue_default *)surface_queue->impl_data;
tbm_surface_h surface;
if (surface_queue->queue_size == surface_queue->num_attached)
surface = tbm_surface_internal_create_with_flags(surface_queue->width,
surface_queue->height,
surface_queue->format,
- data->flags);
+ surface_queue->flags);
TBM_RETURN_IF_FAIL(surface != NULL);
}
static const tbm_surface_queue_interface tbm_queue_default_impl = {
NULL, /*__tbm_queue_default_init*/
NULL, /*__tbm_queue_default_reset*/
- __tbm_queue_default_destroy,
+ NULL, /*__tbm_queue_default_destroy*/
__tbm_queue_default_need_attach,
NULL, /*__tbm_queue_default_enqueue*/
NULL, /*__tbm_queue_default_release*/
TBM_TRACE_SURFACE_QUEUE("tbm_surface_queue(%p)\n", surface_queue);
- tbm_queue_default *data = (tbm_queue_default *) calloc(1,
- sizeof(tbm_queue_default));
- if (data == NULL) {
- TBM_ERR("cannot allocate the tbm_queue_default.\n");
- _tbm_set_last_result(TBM_ERROR_OUT_OF_MEMORY);
- free(surface_queue);
- _tbm_surf_queue_mutex_unlock();
- return NULL;
- }
-
- data->flags = flags;
_tbm_surface_queue_init(surface_queue,
queue_size,
- width, height, format,
- &tbm_queue_default_impl, data);
+ width, height, format, flags,
+ &tbm_queue_default_impl, NULL);
_tbm_surf_queue_mutex_unlock();
}
typedef struct {
- int flags;
queue dequeue_list;
} tbm_queue_sequence;
static void
__tbm_queue_sequence_need_attach(tbm_surface_queue_h surface_queue)
{
- tbm_queue_sequence *data = (tbm_queue_sequence *)surface_queue->impl_data;
tbm_surface_h surface;
if (surface_queue->queue_size == surface_queue->num_attached)
surface = tbm_surface_internal_create_with_flags(surface_queue->width,
surface_queue->height,
surface_queue->format,
- data->flags);
+ surface_queue->flags);
TBM_RETURN_IF_FAIL(surface != NULL);
}
return NULL;
}
- data->flags = flags;
_tbm_surface_queue_init(surface_queue,
queue_size,
- width, height, format,
+ width, height, format, flags,
&tbm_queue_sequence_impl, data);
_tbm_surf_queue_mutex_unlock();