Commit 40a433e3 authored by Lukas Rusak's avatar Lukas Rusak Committed by Aman Gupta

avcodec/v4l2_buffers: split out v4l2_buf_increase_ref helper

Signed-off-by: 's avatarAman Gupta <aman@tmm1.net>
parent d620b1f9
...@@ -228,27 +228,17 @@ static void v4l2_free_buffer(void *opaque, uint8_t *unused) ...@@ -228,27 +228,17 @@ static void v4l2_free_buffer(void *opaque, uint8_t *unused)
} }
} }
static int v4l2_buf_to_bufref(V4L2Buffer *in, int plane, AVBufferRef **buf) static int v4l2_buf_increase_ref(V4L2Buffer *in)
{ {
V4L2m2mContext *s = buf_to_m2mctx(in); V4L2m2mContext *s = buf_to_m2mctx(in);
if (plane >= in->num_planes)
return AVERROR(EINVAL);
/* even though most encoders return 0 in data_offset encoding vp8 does require this value */
*buf = av_buffer_create((char *)in->plane_info[plane].mm_addr + in->planes[plane].data_offset,
in->plane_info[plane].length, v4l2_free_buffer, in, 0);
if (!*buf)
return AVERROR(ENOMEM);
if (in->context_ref) if (in->context_ref)
atomic_fetch_add(&in->context_refcount, 1); atomic_fetch_add(&in->context_refcount, 1);
else { else {
in->context_ref = av_buffer_ref(s->self_ref); in->context_ref = av_buffer_ref(s->self_ref);
if (!in->context_ref) { if (!in->context_ref)
av_buffer_unref(buf);
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
}
in->context_refcount = 1; in->context_refcount = 1;
} }
...@@ -258,6 +248,26 @@ static int v4l2_buf_to_bufref(V4L2Buffer *in, int plane, AVBufferRef **buf) ...@@ -258,6 +248,26 @@ static int v4l2_buf_to_bufref(V4L2Buffer *in, int plane, AVBufferRef **buf)
return 0; return 0;
} }
static int v4l2_buf_to_bufref(V4L2Buffer *in, int plane, AVBufferRef **buf)
{
int ret;
if (plane >= in->num_planes)
return AVERROR(EINVAL);
/* even though most encoders return 0 in data_offset encoding vp8 does require this value */
*buf = av_buffer_create((char *)in->plane_info[plane].mm_addr + in->planes[plane].data_offset,
in->plane_info[plane].length, v4l2_free_buffer, in, 0);
if (!*buf)
return AVERROR(ENOMEM);
ret = v4l2_buf_increase_ref(in);
if (ret)
av_buffer_unref(buf);
return ret;
}
static int v4l2_bufref_to_buf(V4L2Buffer *out, int plane, const uint8_t* data, int size, int offset, AVBufferRef* bref) static int v4l2_bufref_to_buf(V4L2Buffer *out, int plane, const uint8_t* data, int size, int offset, AVBufferRef* bref)
{ {
unsigned int bytesused, length; unsigned int bytesused, length;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment