ffmpeg | branch: master | Clément Bœsch <[email protected]> | Wed Apr 26 17:17:50 2017 +0200| [a0ffd66caaae1bff1abebffb36e135abcc8122e6] | committer: Clément Bœsch
Merge commit '0fea8555ae25124c21f4c4f55a5fa76e9169aa03' * commit '0fea8555ae25124c21f4c4f55a5fa76e9169aa03': v4l2: use codec descriptors for mapping a codec name to id Merged-by: Clément Bœsch <[email protected]> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a0ffd66caaae1bff1abebffb36e135abcc8122e6 --- libavdevice/v4l2.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c index 15629755a1..17451cdb60 100644 --- a/libavdevice/v4l2.c +++ b/libavdevice/v4l2.c @@ -884,14 +884,14 @@ static int v4l2_read_header(AVFormatContext *ctx) avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ if (s->pixel_format) { - AVCodec *codec = avcodec_find_decoder_by_name(s->pixel_format); + const AVCodecDescriptor *desc = avcodec_descriptor_get_by_name(s->pixel_format); - if (codec) - ctx->video_codec_id = codec->id; + if (desc) + ctx->video_codec_id = desc->id; pix_fmt = av_get_pix_fmt(s->pixel_format); - if (pix_fmt == AV_PIX_FMT_NONE && !codec) { + if (pix_fmt == AV_PIX_FMT_NONE && !desc) { av_log(ctx, AV_LOG_ERROR, "No such input format: %s.\n", s->pixel_format); ====================================================================== diff --cc libavdevice/v4l2.c index 15629755a1,a8afe8ab58..17451cdb60 --- a/libavdevice/v4l2.c +++ b/libavdevice/v4l2.c @@@ -841,62 -756,35 +841,62 @@@ static int v4l2_read_header(AVFormatCon if (s->fd < 0) return s->fd; - if (s->list_format) { - list_formats(s1, s->fd, s->list_format); - return AVERROR_EXIT; + if (s->channel != -1) { + /* set video input */ + 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; + } + } else { + /* get current video input */ + if (v4l2_ioctl(s->fd, VIDIOC_G_INPUT, &s->channel) < 0) { + res = AVERROR(errno); + av_log(ctx, AV_LOG_ERROR, "ioctl(VIDIOC_G_INPUT): %s\n", av_err2str(res)); + goto fail; + } } - avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ + /* enum input */ + input.index = s->channel; + if (v4l2_ioctl(s->fd, VIDIOC_ENUMINPUT, &input) < 0) { + res = AVERROR(errno); + av_log(ctx, AV_LOG_ERROR, "ioctl(VIDIOC_ENUMINPUT): %s\n", av_err2str(res)); + goto fail; + } + s->std_id = input.std; + av_log(ctx, AV_LOG_DEBUG, "Current input_channel: %d, input_name: %s, input_std: %"PRIx64"\n", + s->channel, input.name, (uint64_t)input.std); - if (s->video_size && - (res = av_parse_video_size(&s->width, &s->height, s->video_size)) < 0) { - av_log(s1, AV_LOG_ERROR, "Could not parse video size '%s'.\n", - s->video_size); - return res; + if (s->list_format) { + list_formats(ctx, s->list_format); + res = AVERROR_EXIT; + goto fail; } + if (s->list_standard) { + list_standards(ctx); + res = AVERROR_EXIT; + goto fail; + } + + avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ + if (s->pixel_format) { - AVCodec *codec = avcodec_find_decoder_by_name(s->pixel_format); + const AVCodecDescriptor *desc = avcodec_descriptor_get_by_name(s->pixel_format); - if (codec) - ctx->video_codec_id = codec->id; - if (desc) { - s1->video_codec_id = desc->id; - st->need_parsing = AVSTREAM_PARSE_HEADERS; - } ++ if (desc) ++ ctx->video_codec_id = desc->id; pix_fmt = av_get_pix_fmt(s->pixel_format); - if (pix_fmt == AV_PIX_FMT_NONE && !codec) { + if (pix_fmt == AV_PIX_FMT_NONE && !desc) { - av_log(s1, AV_LOG_ERROR, "No such input format: %s.\n", + av_log(ctx, AV_LOG_ERROR, "No such input format: %s.\n", s->pixel_format); - return AVERROR(EINVAL); + res = AVERROR(EINVAL); + goto fail; } } _______________________________________________ ffmpeg-cvslog mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
