OpenMAXBellagio
0.9.3
queue.c
Go to the documentation of this file.
1
26
#include <stdio.h>
27
#include <stdlib.h>
28
#include <string.h>
29
30
#include "
queue.h
"
31
#include "
omx_comp_debug_levels.h
"
32
38
int
queue_init
(
queue_t
*
queue
) {
39
int
i;
40
qelem_t
* newelem;
41
qelem_t
* current;
42
i = pthread_mutex_init(&
queue
->mutex, NULL);
43
if
(i!=0) {
44
return
-1;
45
}
46
queue
->first = malloc(
sizeof
(
qelem_t
));
47
if
(!(
queue
->first)) {
48
return
-1;
49
}
50
memset(
queue
->first, 0,
sizeof
(
qelem_t
));
51
current =
queue
->last =
queue
->first;
52
queue
->nelem = 0;
53
for
(i = 0; i<
MAX_QUEUE_ELEMENTS
- 2; i++) {
54
newelem = malloc(
sizeof
(
qelem_t
));
55
if
(!newelem) {
56
// the memory is not enough. Free all
57
while
(
queue
->first!=NULL) {
58
current =
queue
->first->q_forw;
59
free(
queue
->first);
60
queue
->first = current;
61
}
62
return
-1;
63
}
64
memset(newelem, 0,
sizeof
(
qelem_t
));
65
current->
q_forw
= newelem;
66
current = newelem;
67
}
68
current->
q_forw
=
queue
->first;
69
return
0;
70
}
71
77
void
queue_deinit
(
queue_t
*
queue
) {
78
int
i;
79
qelem_t
* current;
80
current =
queue
->first;
81
for
(i = 0; i<
MAX_QUEUE_ELEMENTS
- 2; i++) {
82
if
(current != NULL) {
83
current = current->
q_forw
;
84
free(
queue
->first);
85
queue
->first = current;
86
}
87
}
88
if
(
queue
->first) {
89
free(
queue
->first);
90
queue
->first = NULL;
91
}
92
pthread_mutex_destroy(&
queue
->mutex);
93
}
94
103
int
queue
(
queue_t
*
queue
,
void
* data) {
104
if
(
queue
->last->data != NULL) {
105
return
-1;
106
}
107
pthread_mutex_lock(&
queue
->mutex);
108
queue
->last->data = data;
109
queue
->last =
queue
->last->q_forw;
110
queue
->nelem++;
111
pthread_mutex_unlock(&
queue
->mutex);
112
return
0;
113
}
114
122
void
*
dequeue
(
queue_t
*
queue
) {
123
void
* data;
124
if
(
queue
->first->data == NULL) {
125
return
NULL;
126
}
127
pthread_mutex_lock(&
queue
->mutex);
128
data =
queue
->first->data;
129
queue
->first->data = NULL;
130
queue
->first =
queue
->first->q_forw;
131
queue
->nelem--;
132
pthread_mutex_unlock(&
queue
->mutex);
133
134
return
data;
135
}
136
143
int
getquenelem
(
queue_t
*
queue
) {
144
int
qelem;
145
pthread_mutex_lock(&
queue
->mutex);
146
qelem =
queue
->nelem;
147
pthread_mutex_unlock(&
queue
->mutex);
148
return
qelem;
149
}
omx_comp_debug_levels.h
MAX_QUEUE_ELEMENTS
#define MAX_QUEUE_ELEMENTS
Definition:
queue.h:32
queue_init
int queue_init(queue_t *queue)
Definition:
queue.c:38
queue
int queue(queue_t *queue, void *data)
Definition:
queue.c:103
queue_deinit
void queue_deinit(queue_t *queue)
Definition:
queue.c:77
queue_t
Definition:
queue.h:43
dequeue
void * dequeue(queue_t *queue)
Definition:
queue.c:122
queue.h
getquenelem
int getquenelem(queue_t *queue)
Definition:
queue.c:143
qelem_t
Definition:
queue.h:36
qelem_t::q_forw
qelem_t * q_forw
Definition:
queue.h:37
Generated for OpenMAX Bellagio rel. 0.9.3 by
1.5.1