Remove dead codes
[platform/core/api/mediacodec.git] / src / media_codec_queue.c
1 #include <media_codec_queue.h>
2 #include <dlog.h>
3
4 async_queue_t *mc_async_queue_new(void)
5 {
6         async_queue_t *async_queue;
7
8         async_queue = g_slice_new0(async_queue_t);
9         if (async_queue == NULL) {
10                 LOGE("async_queue initialization failed");
11                 return NULL;
12         }
13
14         g_cond_init(&async_queue->condition);
15         g_mutex_init(&async_queue->mutex);
16         async_queue->enabled = TRUE;
17
18         return async_queue;
19 }
20
21 void mc_async_queue_free(async_queue_t *async_queue)
22 {
23         g_cond_clear(&async_queue->condition);
24         g_mutex_clear(&async_queue->mutex);
25
26         g_list_free(async_queue->head);
27         g_slice_free(async_queue_t, async_queue);
28 }
29
30 void mc_async_queue_push(async_queue_t *async_queue, gpointer data)
31 {
32         g_mutex_lock(&async_queue->mutex);
33
34         async_queue->tail = g_list_append(async_queue->tail, data);
35         if (async_queue->tail->next)
36                 async_queue->tail = async_queue->tail->next;
37         else
38                 async_queue->head = async_queue->tail;
39
40         async_queue->length++;
41
42         g_cond_signal(&async_queue->condition);
43         /*LOGD("queue pushed : %p, %d, %p",queue, async_queue->length, data);*/
44
45         g_mutex_unlock(&async_queue->mutex);
46 }
47
48 gpointer mc_async_queue_pop(async_queue_t *async_queue)
49 {
50         gpointer data = NULL;
51
52         g_mutex_lock(&async_queue->mutex);
53
54         if (!async_queue->enabled) {
55                 /* g_warning ("not enabled!"); */
56                 goto leave;
57         }
58
59         if (!async_queue->head)
60                 g_cond_wait(&async_queue->condition, &async_queue->mutex);
61
62         if (async_queue->head) {
63                 GList *node = async_queue->head;
64                 data = node->data;
65
66                 async_queue->head = node->next;
67
68                 if (async_queue->head)
69                         async_queue->head->prev = NULL;
70                 else
71                         async_queue->tail = NULL;
72                 async_queue->length--;
73                 /*LOGD("async queue poped : %p, %d, %p",queue, async_queue->length, data);*/
74                 g_list_free_1(node);
75         }
76
77 leave:
78         g_mutex_unlock(&async_queue->mutex);
79
80         return data;
81 }
82
83 //LCOV_EXCL_START
84 gpointer mc_async_queue_pop_forced(async_queue_t *async_queue)
85 {
86         gpointer data = NULL;
87
88         g_mutex_lock(&async_queue->mutex);
89
90         if (async_queue->head) {
91                 GList *node = async_queue->head;
92                 data = node->data;
93
94                 async_queue->head = node->next;
95                 if (async_queue->head)
96                         async_queue->head->prev = NULL;
97                 else
98                         async_queue->tail = NULL;
99                 async_queue->length--;
100                 /*LOGD("async queue poped : %p, %d, %p",queue, async_queue->length, data);*/
101                 g_list_free_1(node);
102         }
103
104         g_mutex_unlock(&async_queue->mutex);
105
106         return data;
107 }
108 //LCOV_EXCL_STOP
109
110 void mc_async_queue_disable(async_queue_t *async_queue)
111 {
112         g_mutex_lock(&async_queue->mutex);
113         async_queue->enabled = FALSE;
114         g_cond_broadcast(&async_queue->condition);
115         g_mutex_unlock(&async_queue->mutex);
116 }
117
118 void mc_async_queue_flush(async_queue_t *async_queue)
119 {
120         g_mutex_lock(&async_queue->mutex);
121
122         g_list_free(async_queue->head);
123         async_queue->head = async_queue->tail = NULL;
124         async_queue->length = 0;
125
126         g_mutex_unlock(&async_queue->mutex);
127 }
128
129 gboolean mc_async_queue_is_empty(async_queue_t *async_queue)
130 {
131         return async_queue->head == NULL;
132 }
133