From d55d23bfaaa88528d76fd1b615cd01f767f3de17 Mon Sep 17 00:00:00 2001 From: rigaya Date: Sat, 8 Apr 2023 09:48:45 +0900 Subject: [PATCH] avdevice/v4l2: add option to ignore input error (-ignore_input_error). Some device returns error with VIDIOC_S_INPUT, VIDIOC_G_INPUT. --- libavdevice/v4l2.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c index 7c24709b22..a4a3634dcc 100644 --- a/libavdevice/v4l2.c +++ b/libavdevice/v4l2.c @@ -89,6 +89,7 @@ struct video_data { int top_field_first; int multi_planer; int ts_mode; + int ignore_input_error; TimeFilter *timefilter; int64_t last_time_m; @@ -940,8 +941,10 @@ static int v4l2_read_header(AVFormatContext *ctx) av_log(ctx, AV_LOG_DEBUG, "Selecting input_channel: %d\n", s->channel); if (v4l2_ioctl(s->fd, VIDIOC_S_INPUT, &s->channel) < 0) { res = AVERROR(errno); - av_log(ctx, AV_LOG_ERROR, "ioctl(VIDIOC_S_INPUT): %s\n", av_err2str(res)); - goto fail; + av_log(ctx, (s->ignore_input_error) ? AV_LOG_WARNING : AV_LOG_ERROR, "ioctl(VIDIOC_S_INPUT): %s\n", av_err2str(res)); + if (!s->ignore_input_error) { + goto fail; + } } } else { /* get current video input */ @@ -1183,6 +1186,7 @@ static const AVOption options[] = { { "pixel_format", "set preferred pixel format", OFFSET(pixel_format), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, { "input_format", "set preferred pixel format (for raw video) or codec name", OFFSET(pixel_format), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, { "framerate", "set frame rate", OFFSET(framerate), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, + { "ignore_input_error", "ignore input error", OFFSET(ignore_input_error), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, DEC }, { "list_formats", "list available formats and exit", OFFSET(list_format), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, DEC, .unit = "list_formats" }, { "all", "show all available formats", OFFSET(list_format), AV_OPT_TYPE_CONST, {.i64 = V4L_ALLFORMATS }, 0, INT_MAX, DEC, .unit = "list_formats" },