v4l2: simplify away io_method

Only mmap is supported.
This commit is contained in:
Luca Barbato 2011-12-27 05:52:02 +01:00
parent a896d7f45a
commit 246007d370
1 changed files with 5 additions and 40 deletions

View File

@ -51,17 +51,10 @@
static const int desired_video_buffers = 256; static const int desired_video_buffers = 256;
enum io_method {
io_read,
io_mmap,
io_userptr
};
struct video_data { struct video_data {
AVClass *class; AVClass *class;
int fd; int fd;
int frame_format; /* V4L2_PIX_FMT_* */ int frame_format; /* V4L2_PIX_FMT_* */
enum io_method io_method;
int width, height; int width, height;
int frame_size; int frame_size;
int interlaced; int interlaced;
@ -337,11 +330,6 @@ static int mmap_init(AVFormatContext *ctx)
return 0; return 0;
} }
static int read_init(AVFormatContext *ctx)
{
return -1;
}
static void mmap_release_buffer(AVPacket *pkt) static void mmap_release_buffer(AVPacket *pkt)
{ {
struct v4l2_buffer buf; struct v4l2_buffer buf;
@ -422,11 +410,6 @@ static int mmap_read_frame(AVFormatContext *ctx, AVPacket *pkt)
return s->buf_len[buf.index]; return s->buf_len[buf.index];
} }
static int read_frame(AVFormatContext *ctx, AVPacket *pkt)
{
return -1;
}
static int mmap_start(AVFormatContext *ctx) static int mmap_start(AVFormatContext *ctx)
{ {
struct video_data *s = ctx->priv_data; struct video_data *s = ctx->priv_data;
@ -693,19 +676,13 @@ static int v4l2_read_header(AVFormatContext *s1, AVFormatParameters *ap)
avpicture_get_size(st->codec->pix_fmt, s->width, s->height); avpicture_get_size(st->codec->pix_fmt, s->width, s->height);
if (capabilities & V4L2_CAP_STREAMING) { if (capabilities & V4L2_CAP_STREAMING) {
s->io_method = io_mmap; if (!(res = mmap_init(s1)))
res = mmap_init(s1);
if (res == 0) {
res = mmap_start(s1); res = mmap_start(s1);
}
} else { } else {
s->io_method = io_read; res = AVERROR(ENOSYS);
res = read_init(s1);
} }
if (res < 0) { if (res < 0) {
close(s->fd); close(s->fd);
res = AVERROR(EIO);
goto out; goto out;
} }
s->top_field_first = first_field(s->fd); s->top_field_first = first_field(s->fd);
@ -726,18 +703,8 @@ static int v4l2_read_packet(AVFormatContext *s1, AVPacket *pkt)
AVFrame *frame = s1->streams[0]->codec->coded_frame; AVFrame *frame = s1->streams[0]->codec->coded_frame;
int res; int res;
if (s->io_method == io_mmap) { av_init_packet(pkt);
av_init_packet(pkt); if ((res = mmap_read_frame(s1, pkt)) < 0) {
res = mmap_read_frame(s1, pkt);
} else if (s->io_method == io_read) {
if (av_new_packet(pkt, s->frame_size) < 0)
return AVERROR(EIO);
res = read_frame(s1, pkt);
} else {
return AVERROR(EIO);
}
if (res < 0) {
return res; return res;
} }
@ -753,9 +720,7 @@ static int v4l2_read_close(AVFormatContext *s1)
{ {
struct video_data *s = s1->priv_data; struct video_data *s = s1->priv_data;
if (s->io_method == io_mmap) { mmap_close(s);
mmap_close(s);
}
close(s->fd); close(s->fd);
return 0; return 0;