[FFmpeg-devel] [PATCH] lavu/threadmessage: add av_thread_message_queue_nelem()
Rostislav Pehlivanov
atomnuker at gmail.com
Sun Apr 22 04:51:16 EEST 2018
On 21 April 2018 at 20:51, Clément Bœsch <u at pkh.me> wrote:
> ---
> Been away from FFmpeg for way too long. Hope this patch get me back on
> track. Feel free to nitpick on the name.
> ---
> doc/APIchanges | 3 +++
> libavutil/threadmessage.c | 9 +++++++++
> libavutil/threadmessage.h | 5 +++++
> libavutil/version.h | 2 +-
> tests/api/api-threadmessage-test.c | 4 +++-
> 5 files changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 4f6ac2a031..393491c8e9 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_nelem().
> +
> -------- 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..fed398926a 100644
> --- a/libavutil/threadmessage.c
> +++ b/libavutil/threadmessage.c
> @@ -102,6 +102,15 @@ void av_thread_message_queue_free(AVThreadMessageQueue
> **mq)
> #endif
> }
>
> +int av_thread_message_queue_nelem(AVThreadMessageQueue *mq)
> +{
> + int ret;
> + pthread_mutex_lock(&mq->lock);
> + ret = av_fifo_size(mq->fifo);
> + pthread_mutex_unlock(&mq->lock);
> + return ret / mq->elsize;
> +}
> +
> #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..e41d95ccf7 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_nelem(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..494808f176 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_nelem(rd->queue));
> av_thread_message_flush(rd->queue);
> } else {
> struct message msg;
> --
> 2.17.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
I think av_thread_message_queue_elems would be a better name, had to think
for a good period of time what "nelem" meant.
More information about the ffmpeg-devel
mailing list