[FFmpeg-devel] [PATCH] lavu/threadmessage: add av_thread_message_queue_nelem()
Clément Bœsch
u at pkh.me
Sun Apr 22 10:33:04 EEST 2018
On Sun, Apr 22, 2018 at 02:51:16AM +0100, Rostislav Pehlivanov wrote:
[...]
> I think av_thread_message_queue_elems would be a better name, had to think
> for a good period of time what "nelem" meant.
I'm afraid of "queue_elems" implying "queuing elements" so I went for
the more explicit av_thread_message_queue_nb_elems() instead.
Also fixed the problem raised by Michael.
--
Clément B.
-------------- next part --------------
From 6647c716a31481b2d1348d03616557a63a6a0cef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <u at pkh.me>
Date: Sat, 21 Apr 2018 21:42:19 +0200
Subject: [PATCH] lavu/threadmessage: add av_thread_message_queue_nb_elems()
---
doc/APIchanges | 3 +++
libavutil/threadmessage.c | 13 +++++++++++++
libavutil/threadmessage.h | 5 +++++
libavutil/version.h | 2 +-
tests/api/api-threadmessage-test.c | 4 +++-
5 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/doc/APIchanges b/doc/APIchanges
index 4f6ac2a031..8d305d5867 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@ libavutil: 2017-10-21
API changes, most recent first:
+2018-04-xx - xxxxxxxxxx - lavu 56.16.100 - threadmessage.h
+ Add av_thread_message_queue_nb_elems().
+
-------- 8< --------- FFmpeg 4.0 was cut here -------- 8< ---------
2018-04-03 - d6fc031caf - lavu 56.13.100 - pixdesc.h
diff --git a/libavutil/threadmessage.c b/libavutil/threadmessage.c
index 872e9392b1..764b7fb813 100644
--- a/libavutil/threadmessage.c
+++ b/libavutil/threadmessage.c
@@ -102,6 +102,19 @@ void av_thread_message_queue_free(AVThreadMessageQueue **mq)
#endif
}
+int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq)
+{
+#if HAVE_THREADS
+ int ret;
+ pthread_mutex_lock(&mq->lock);
+ ret = av_fifo_size(mq->fifo);
+ pthread_mutex_unlock(&mq->lock);
+ return ret / mq->elsize;
+#else
+ return AVERROR(ENOSYS);
+#endif
+}
+
#if HAVE_THREADS
static int av_thread_message_queue_send_locked(AVThreadMessageQueue *mq,
diff --git a/libavutil/threadmessage.h b/libavutil/threadmessage.h
index 8480a0a3db..7ebf03a8ac 100644
--- a/libavutil/threadmessage.h
+++ b/libavutil/threadmessage.h
@@ -95,6 +95,11 @@ void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq,
void av_thread_message_queue_set_free_func(AVThreadMessageQueue *mq,
void (*free_func)(void *msg));
+/**
+ * Return the current number of messages in the queue.
+ */
+int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq);
+
/**
* Flush the message queue
*
diff --git a/libavutil/version.h b/libavutil/version.h
index 387421775f..23567000a3 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 56
-#define LIBAVUTIL_VERSION_MINOR 15
+#define LIBAVUTIL_VERSION_MINOR 16
#define LIBAVUTIL_VERSION_MICRO 100
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
diff --git a/tests/api/api-threadmessage-test.c b/tests/api/api-threadmessage-test.c
index 05a8062b8c..3c693a70d1 100644
--- a/tests/api/api-threadmessage-test.c
+++ b/tests/api/api-threadmessage-test.c
@@ -130,7 +130,9 @@ static void *receiver_thread(void *arg)
for (i = 0; i < rd->workload; i++) {
if (rand() % rd->workload < rd->workload / 10) {
- av_log(NULL, AV_LOG_INFO, "receiver #%d: flushing the queue\n", rd->id);
+ av_log(NULL, AV_LOG_INFO, "receiver #%d: flushing the queue, "
+ "discarding %d message(s)\n", rd->id,
+ av_thread_message_queue_nb_elems(rd->queue));
av_thread_message_flush(rd->queue);
} else {
struct message msg;
--
2.17.0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180422/21f27b2c/attachment.sig>
More information about the ffmpeg-devel
mailing list