From 5aaeaa28e782647843570f01b4661a65ff3aa376 Mon Sep 17 00:00:00 2001 From: Kamil Debski Date: Tue, 6 Mar 2012 10:33:02 +0100 Subject: v4l-mfc-example: version 0.1 --- v4l2-mfc-example/queue.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 v4l2-mfc-example/queue.c (limited to 'v4l2-mfc-example/queue.c') diff --git a/v4l2-mfc-example/queue.c b/v4l2-mfc-example/queue.c new file mode 100644 index 0000000..62b7dfd --- /dev/null +++ b/v4l2-mfc-example/queue.c @@ -0,0 +1,80 @@ +/* + * V4L2 Codec decoding example application + * Kamil Debski + * + * Queue handling + * + * Copyright 2012 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "common.h" +#include "queue.h" + +#include +#include + +int queue_init(struct queue *q, int size) +{ + q->q = (int*)malloc(size * sizeof(int)); + if (!q->q) { + err("Failed to init queue (malloc failed)"); + return -1; + } + q->size = size; + q->head = 0; + q->tail = 0; + q->n = 0; + pthread_mutex_init(&q->mutex, NULL); + return 0; +} + +int queue_add(struct queue *q, int e) +{ + pthread_mutex_lock(&q->mutex); + if (q->n >= q->size) { + pthread_mutex_unlock(&q->mutex); + return -1; + } + q->q[q->head] = e; + q->head++; + q->head %= q->size; + q->n++; + pthread_mutex_unlock(&q->mutex); + return 0; +} + +int queue_remove(struct queue *q) +{ + int x; + pthread_mutex_lock(&q->mutex); + if (q->n == 0) { + pthread_mutex_unlock(&q->mutex); + return -1; + } + x = q->q[q->tail]; + q->tail++; + q->tail %= q->size; + q->n--; + pthread_mutex_unlock(&q->mutex); + return x; +} + +void queue_free(struct queue *q) +{ + free(q->q); + pthread_mutex_destroy(&q->mutex); +} + -- cgit v1.2.3