Lines Matching defs:mq
42 int av_thread_message_queue_alloc(AVThreadMessageQueue **mq,
77 *mq = rmq;
80 *mq = NULL;
85 void av_thread_message_queue_set_free_func(AVThreadMessageQueue *mq,
89 mq->free_func = free_func;
93 void av_thread_message_queue_free(AVThreadMessageQueue **mq)
96 if (*mq) {
97 av_thread_message_flush(*mq);
98 av_fifo_freep2(&(*mq)->fifo);
99 pthread_cond_destroy(&(*mq)->cond_send);
100 pthread_cond_destroy(&(*mq)->cond_recv);
101 pthread_mutex_destroy(&(*mq)->lock);
102 av_freep(mq);
107 int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq)
111 pthread_mutex_lock(&mq->lock);
112 ret = av_fifo_can_read(mq->fifo);
113 pthread_mutex_unlock(&mq->lock);
122 static int av_thread_message_queue_send_locked(AVThreadMessageQueue *mq,
126 while (!mq->err_send && !av_fifo_can_write(mq->fifo)) {
129 pthread_cond_wait(&mq->cond_send, &mq->lock);
131 if (mq->err_send)
132 return mq->err_send;
133 av_fifo_write(mq->fifo, msg, 1);
135 pthread_cond_signal(&mq->cond_recv);
139 static int av_thread_message_queue_recv_locked(AVThreadMessageQueue *mq,
143 while (!mq->err_recv && !av_fifo_can_read(mq->fifo)) {
146 pthread_cond_wait(&mq->cond_recv, &mq->lock);
148 if (!av_fifo_can_read(mq->fifo))
149 return mq->err_recv;
150 av_fifo_read(mq->fifo, msg, 1);
152 pthread_cond_signal(&mq->cond_send);
158 int av_thread_message_queue_send(AVThreadMessageQueue *mq,
165 pthread_mutex_lock(&mq->lock);
166 ret = av_thread_message_queue_send_locked(mq, msg, flags);
167 pthread_mutex_unlock(&mq->lock);
174 int av_thread_message_queue_recv(AVThreadMessageQueue *mq,
181 pthread_mutex_lock(&mq->lock);
182 ret = av_thread_message_queue_recv_locked(mq, msg, flags);
183 pthread_mutex_unlock(&mq->lock);
190 void av_thread_message_queue_set_err_send(AVThreadMessageQueue *mq,
194 pthread_mutex_lock(&mq->lock);
195 mq->err_send = err;
196 pthread_cond_broadcast(&mq->cond_send);
197 pthread_mutex_unlock(&mq->lock);
201 void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq,
205 pthread_mutex_lock(&mq->lock);
206 mq->err_recv = err;
207 pthread_cond_broadcast(&mq->cond_recv);
208 pthread_mutex_unlock(&mq->lock);
215 AVThreadMessageQueue *mq = arg;
218 mq->free_func(msg + i * mq->elsize);
223 void av_thread_message_flush(AVThreadMessageQueue *mq)
228 pthread_mutex_lock(&mq->lock);
229 used = av_fifo_can_read(mq->fifo);
230 if (mq->free_func)
231 av_fifo_read_to_cb(mq->fifo, free_func_wrap, mq, &used);
234 pthread_cond_broadcast(&mq->cond_send);
235 pthread_mutex_unlock(&mq->lock);