Browse Source

avutil/buffer: separate public and internal flags inside AVBuffers

It's better to not mix user provided flags and internal flags set by
AVBufferRef helper functions.

Signed-off-by: James Almer <jamrial@gmail.com>
tags/n4.3
James Almer 5 years ago
parent
commit
b6c8444e23
2 changed files with 10 additions and 10 deletions
  1. +3
    -4
      libavutil/buffer.c
  2. +7
    -6
      libavutil/buffer_internal.h

+ 3
- 4
libavutil/buffer.c View File

@@ -44,8 +44,7 @@ AVBufferRef *av_buffer_create(uint8_t *data, int size,

atomic_init(&buf->refcount, 1);

if (flags & AV_BUFFER_FLAG_READONLY)
buf->flags |= BUFFER_FLAG_READONLY;
buf->flags = flags;

ref = av_mallocz(sizeof(*ref));
if (!ref) {
@@ -185,14 +184,14 @@ int av_buffer_realloc(AVBufferRef **pbuf, int size)
return AVERROR(ENOMEM);
}

buf->buffer->flags |= BUFFER_FLAG_REALLOCATABLE;
buf->buffer->flags_internal |= BUFFER_FLAG_REALLOCATABLE;
*pbuf = buf;

return 0;
} else if (buf->size == size)
return 0;

if (!(buf->buffer->flags & BUFFER_FLAG_REALLOCATABLE) ||
if (!(buf->buffer->flags_internal & BUFFER_FLAG_REALLOCATABLE) ||
!av_buffer_is_writable(buf) || buf->data != buf->buffer->data) {
/* cannot realloc, allocate a new reallocable buffer and copy data */
AVBufferRef *new = NULL;


+ 7
- 6
libavutil/buffer_internal.h View File

@@ -25,14 +25,10 @@
#include "buffer.h"
#include "thread.h"

/**
* The buffer is always treated as read-only.
*/
#define BUFFER_FLAG_READONLY (1 << 0)
/**
* The buffer was av_realloc()ed, so it is reallocatable.
*/
#define BUFFER_FLAG_REALLOCATABLE (1 << 1)
#define BUFFER_FLAG_REALLOCATABLE (1 << 0)

struct AVBuffer {
uint8_t *data; /**< data described by this buffer */
@@ -54,9 +50,14 @@ struct AVBuffer {
void *opaque;

/**
* A combination of BUFFER_FLAG_*
* A combination of AV_BUFFER_FLAG_*
*/
int flags;

/**
* A combination of BUFFER_FLAG_*
*/
int flags_internal;
};

typedef struct BufferPoolEntry {


Loading…
Cancel
Save