git.videolan.org
/
ffmpeg.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3a165c1
)
mmaldec: convert to stdatomic
author
Anton Khirnov
<anton@khirnov.net>
Sun, 17 Jul 2016 20:24:35 +0000
(22:24 +0200)
committer
Anton Khirnov
<anton@khirnov.net>
Sun, 2 Oct 2016 17:35:12 +0000
(19:35 +0200)
libavcodec/mmaldec.c
patch
|
blob
|
history
diff --git
a/libavcodec/mmaldec.c
b/libavcodec/mmaldec.c
index
69258a2
..
924bfb2
100644
(file)
--- a/
libavcodec/mmaldec.c
+++ b/
libavcodec/mmaldec.c
@@
-31,10
+31,10
@@
#include <interface/mmal/util/mmal_util_params.h>
#include <interface/mmal/util/mmal_default_components.h>
#include <interface/mmal/vc/mmal_vc_api.h>
#include <interface/mmal/util/mmal_util_params.h>
#include <interface/mmal/util/mmal_default_components.h>
#include <interface/mmal/vc/mmal_vc_api.h>
+#include <stdatomic.h>
#include "avcodec.h"
#include "internal.h"
#include "avcodec.h"
#include "internal.h"
-#include "libavutil/atomic.h"
#include "libavutil/avassert.h"
#include "libavutil/buffer.h"
#include "libavutil/common.h"
#include "libavutil/avassert.h"
#include "libavutil/buffer.h"
#include "libavutil/common.h"
@@
-55,7
+55,7
@@
typedef struct FFBufferEntry {
// refcounting for AVFrames, we can free the MMAL_POOL_T only after all AVFrames
// have been unreferenced.
typedef struct FFPoolRef {
// refcounting for AVFrames, we can free the MMAL_POOL_T only after all AVFrames
// have been unreferenced.
typedef struct FFPoolRef {
-
volatile
int refcount;
+
atomic_
int refcount;
MMAL_POOL_T *pool;
} FFPoolRef;
MMAL_POOL_T *pool;
} FFPoolRef;
@@
-83,7
+83,7
@@
typedef struct MMALDecodeContext {
FFBufferEntry *waiting_buffers, *waiting_buffers_tail;
int64_t packets_sent;
FFBufferEntry *waiting_buffers, *waiting_buffers_tail;
int64_t packets_sent;
-
volatile
int packets_buffered;
+
atomic_
int packets_buffered;
int64_t frames_output;
int eos_received;
int eos_sent;
int64_t frames_output;
int eos_received;
int eos_sent;
@@
-96,7
+96,8
@@
typedef struct MMALDecodeContext {
static void ffmmal_poolref_unref(FFPoolRef *ref)
{
static void ffmmal_poolref_unref(FFPoolRef *ref)
{
- if (ref && avpriv_atomic_int_add_and_fetch(&ref->refcount, -1) == 0) {
+ if (ref &&
+ atomic_fetch_add_explicit(&ref->refcount, -1, memory_order_acq_rel) == 1) {
mmal_pool_destroy(ref->pool);
av_free(ref);
}
mmal_pool_destroy(ref->pool);
av_free(ref);
}
@@
-132,7
+133,7
@@
static int ffmmal_set_ref(AVFrame *frame, FFPoolRef *pool,
return AVERROR(ENOMEM);
}
return AVERROR(ENOMEM);
}
- a
vpriv_atomic_int_add_and_fetch(&ref->pool->refcount, 1
);
+ a
tomic_fetch_add_explicit(&ref->pool->refcount, 1, memory_order_relaxed
);
mmal_buffer_header_acquire(buffer);
frame->format = AV_PIX_FMT_MMAL;
mmal_buffer_header_acquire(buffer);
frame->format = AV_PIX_FMT_MMAL;
@@
-163,14
+164,14
@@
static void ffmmal_stop_decoder(AVCodecContext *avctx)
ctx->waiting_buffers = buffer->next;
if (buffer->flags & MMAL_BUFFER_HEADER_FLAG_FRAME_END)
ctx->waiting_buffers = buffer->next;
if (buffer->flags & MMAL_BUFFER_HEADER_FLAG_FRAME_END)
- a
vpriv_atomic_int_add_and_fetch
(&ctx->packets_buffered, -1);
+ a
tomic_fetch_add
(&ctx->packets_buffered, -1);
av_buffer_unref(&buffer->ref);
av_free(buffer);
}
ctx->waiting_buffers_tail = NULL;
av_buffer_unref(&buffer->ref);
av_free(buffer);
}
ctx->waiting_buffers_tail = NULL;
- av_assert0(a
vpriv_atomic_int_get
(&ctx->packets_buffered) == 0);
+ av_assert0(a
tomic_load
(&ctx->packets_buffered) == 0);
ctx->frames_output = ctx->eos_received = ctx->eos_sent = ctx->packets_sent = ctx->extradata_sent = 0;
}
ctx->frames_output = ctx->eos_received = ctx->eos_sent = ctx->packets_sent = ctx->extradata_sent = 0;
}
@@
-202,7
+203,7
@@
static void input_callback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer)
FFBufferEntry *entry = buffer->user_data;
av_buffer_unref(&entry->ref);
if (entry->flags & MMAL_BUFFER_HEADER_FLAG_FRAME_END)
FFBufferEntry *entry = buffer->user_data;
av_buffer_unref(&entry->ref);
if (entry->flags & MMAL_BUFFER_HEADER_FLAG_FRAME_END)
- a
vpriv_atomic_int_add_and_fetch
(&ctx->packets_buffered, -1);
+ a
tomic_fetch_add
(&ctx->packets_buffered, -1);
av_free(entry);
}
mmal_buffer_header_release(buffer);
av_free(entry);
}
mmal_buffer_header_release(buffer);
@@
-280,7
+281,7
@@
static int ffmal_update_format(AVCodecContext *avctx)
ret = AVERROR(ENOMEM);
goto fail;
}
ret = AVERROR(ENOMEM);
goto fail;
}
-
ctx->pool_out->refcount = 1
;
+
atomic_store(&ctx->pool_out->refcount, 1)
;
if (!format_out)
goto fail;
if (!format_out)
goto fail;
@@
-522,7
+523,7
@@
static int ffmmal_add_packet(AVCodecContext *avctx, AVPacket *avpkt,
if (!size) {
buffer->flags |= MMAL_BUFFER_HEADER_FLAG_FRAME_END;
if (!size) {
buffer->flags |= MMAL_BUFFER_HEADER_FLAG_FRAME_END;
- a
vpriv_atomic_int_add_and_fetch
(&ctx->packets_buffered, 1);
+ a
tomic_fetch_add
(&ctx->packets_buffered, 1);
}
if (!buffer->length) {
}
if (!buffer->length) {
@@
-587,7
+588,7
@@
static int ffmmal_fill_input_port(AVCodecContext *avctx)
mmal_buffer_header_release(mbuffer);
av_buffer_unref(&buffer->ref);
if (buffer->flags & MMAL_BUFFER_HEADER_FLAG_FRAME_END)
mmal_buffer_header_release(mbuffer);
av_buffer_unref(&buffer->ref);
if (buffer->flags & MMAL_BUFFER_HEADER_FLAG_FRAME_END)
- a
vpriv_atomic_int_add_and_fetch
(&ctx->packets_buffered, -1);
+ a
tomic_fetch_add
(&ctx->packets_buffered, -1);
av_free(buffer);
}
av_free(buffer);
}
@@
-666,7
+667,7
@@
static int ffmmal_read_frame(AVCodecContext *avctx, AVFrame *frame, int *got_fra
// excessive buffering.
// We also wait if we sent eos, but didn't receive it yet (think of decoding
// stream with a very low number of frames).
// excessive buffering.
// We also wait if we sent eos, but didn't receive it yet (think of decoding
// stream with a very low number of frames).
- if (a
vpriv_atomic_int_get
(&ctx->packets_buffered) > MAX_DELAYED_FRAMES ||
+ if (a
tomic_load
(&ctx->packets_buffered) > MAX_DELAYED_FRAMES ||
(ctx->packets_sent && ctx->eos_sent)) {
// MMAL will ignore broken input packets, which means the frame we
// expect here may never arrive. Dealing with this correctly is
(ctx->packets_sent && ctx->eos_sent)) {
// MMAL will ignore broken input packets, which means the frame we
// expect here may never arrive. Dealing with this correctly is