[FFmpeg-devel] [PATCH 1/7] avcodec/mediacodec: convert to stdatomic

Matthieu Bouron matthieu.bouron at gmail.com
Thu Mar 23 20:15:56 EET 2017


Le 23 mars 2017 12:35 AM, "James Almer" <jamrial at gmail.com> a écrit :

Signed-off-by: James Almer <jamrial at gmail.com>
---
Untested.

 libavcodec/mediacodec.c           |  5 ++---
 libavcodec/mediacodecdec.c        |  1 -
 libavcodec/mediacodecdec_common.c | 14 ++++++--------
 libavcodec/mediacodecdec_common.h |  5 +++--
 4 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/libavcodec/mediacodec.c b/libavcodec/mediacodec.c
index 4ad5921bc2..91f725621d 100644
--- a/libavcodec/mediacodec.c
+++ b/libavcodec/mediacodec.c
@@ -31,7 +31,6 @@
 #include <jni.h>

 #include "libavcodec/avcodec.h"
-#include "libavutil/atomic.h"
 #include "libavutil/mem.h"

 #include "ffjni.h"
@@ -90,9 +89,9 @@ void av_mediacodec_default_free(AVCodecContext *avctx)
 int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render)
 {
     MediaCodecDecContext *ctx = buffer->ctx;
-    int released = avpriv_atomic_int_add_and_fetch(&buffer->released, 1);
+    atomic_int released = atomic_fetch_add(&buffer->released, 1);

-    if (released == 1) {
+    if (!released) {


Hello,

The underlying buffer is meant to be released once. Unless i miss something
there, you could potentially release a later buffer using the same index or
release an invalid buffer. A mediacodec buffer can only be released once.
Once it is released it goes back to the decoder pool and it is not usable
anymore unless it bas been returned by the decoder again. The buffer itself
is represented by an index. Can you bring the original check back ?
(released == 1)

I dont have the time to review and test the entire patch (nor the machine,
i m writing from my phone) as i am on holidays but i ll be back on monday
(and i ll test the patch).

Matthieu
[...]


More information about the ffmpeg-devel mailing list