Sorry I completely forgot about the texi doc ! I agree with you regarding rgb48. It feels misleading. r210 is fine with me. I'll send the changes in a few minutes.
2017-09-06 18:47 GMT+02:00 Marton Balint <c...@passwd.hu>: > > > On Wed, 6 Sep 2017, Gildas Fargeas wrote: > > Alright, this should do the trick: >> - use named const for raw_format option >> - deprecate bm_v210 >> - bumped avdevice micro version >> >> --- >> libavdevice/decklink_common.cpp | 2 +- >> libavdevice/decklink_common_c.h | 1 + >> libavdevice/decklink_dec.cpp | 43 ++++++++++++++++++++++++++++++ >> ++++------- >> libavdevice/decklink_dec_c.c | 6 ++++++ >> libavdevice/version.h | 2 +- >> 5 files changed, 45 insertions(+), 9 deletions(-) >> > > Documentation is still missing for the new option from doc/indevs.texi. > > > >> diff --git a/libavdevice/decklink_common.cpp >> b/libavdevice/decklink_common.cpp >> index cbb591ce64..ff2df95909 100644 >> --- a/libavdevice/decklink_common.cpp >> +++ b/libavdevice/decklink_common.cpp >> @@ -241,7 +241,7 @@ int ff_decklink_set_format(AVFormatContext *avctx, >> if (ctx->bmd_mode == bmdModeUnknown) >> return -1; >> if (direction == DIRECTION_IN) { >> - if (ctx->dli->DoesSupportVideoMode(ctx->bmd_mode, >> bmdFormat8BitYUV, >> + if (ctx->dli->DoesSupportVideoMode(ctx->bmd_mode, >> (BMDPixelFormat) cctx->raw_format, >> bmdVideoOutputFlagDefault, >> &support, NULL) != S_OK) >> return -1; >> diff --git a/libavdevice/decklink_common_c.h >> b/libavdevice/decklink_common_c.h >> index e263480474..5616ab32f9 100644 >> --- a/libavdevice/decklink_common_c.h >> +++ b/libavdevice/decklink_common_c.h >> @@ -49,6 +49,7 @@ struct decklink_cctx { >> int video_input; >> int draw_bars; >> char *format_code; >> + int raw_format; >> int64_t queue_size; >> }; >> >> diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp >> index c271ff3639..ccbb6f09f5 100644 >> --- a/libavdevice/decklink_dec.cpp >> +++ b/libavdevice/decklink_dec.cpp >> @@ -651,6 +651,11 @@ av_cold int ff_decklink_read_header(AVFormatContext >> *avctx) >> return AVERROR_EXIT; >> } >> >> + if (cctx->v210) { >> + av_log(avctx, AV_LOG_WARNING, "The bm_v210 option is deprecated >> and will be removed. Please use the -raw_format yuv422p10.\n"); >> + cctx->raw_format = MKBETAG('v','2','1','0'); >> + } >> + >> strcpy (fname, avctx->filename); >> tmp=strchr (fname, '@'); >> if (tmp != NULL) { >> @@ -723,15 +728,39 @@ av_cold int ff_decklink_read_header(AVFormatContext >> *avctx) >> st->time_base.num = ctx->bmd_tb_num; >> av_stream_set_r_frame_rate(st, av_make_q(st->time_base.den, >> st->time_base.num)); >> >> - if (cctx->v210) { >> - st->codecpar->codec_id = AV_CODEC_ID_V210; >> - st->codecpar->codec_tag = MKTAG('V', '2', '1', '0'); >> - st->codecpar->bit_rate = av_rescale(ctx->bmd_width * >> ctx->bmd_height * 64, st->time_base.den, st->time_base.num * 3); >> - } else { >> + switch((BMDPixelFormat)cctx->raw_format) { >> + case bmdFormat8BitYUV: >> st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; >> - st->codecpar->format = AV_PIX_FMT_UYVY422; >> st->codecpar->codec_tag = MKTAG('U', 'Y', 'V', 'Y'); >> + st->codecpar->format = AV_PIX_FMT_UYVY422; >> st->codecpar->bit_rate = av_rescale(ctx->bmd_width * >> ctx->bmd_height * 16, st->time_base.den, st->time_base.num); >> + break; >> + case bmdFormat10BitYUV: >> + st->codecpar->codec_id = AV_CODEC_ID_V210; >> + st->codecpar->codec_tag = MKTAG('V','2','1','0'); >> + st->codecpar->bit_rate = av_rescale(ctx->bmd_width * >> ctx->bmd_height * 64, st->time_base.den, st->time_base.num * 3); >> + st->codecpar->bits_per_coded_sample = 10; >> + break; >> + case bmdFormat8BitARGB: >> + st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; >> + st->codecpar->codec_tag = avcodec_pix_fmt_to_codec_tag((enum >> AVPixelFormat)st->codecpar->format);; >> + st->codecpar->format = AV_PIX_FMT_ARGB; >> + break; >> + case bmdFormat8BitBGRA: >> + st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; >> + st->codecpar->codec_tag = avcodec_pix_fmt_to_codec_tag((enum >> AVPixelFormat)st->codecpar->format); >> + st->codecpar->format = AV_PIX_FMT_BGRA; >> + break; >> + case bmdFormat10BitRGB: >> + st->codecpar->codec_id = AV_CODEC_ID_R210; >> + st->codecpar->codec_tag = MKTAG('R','2','1','0'); >> + st->codecpar->format = AV_PIX_FMT_RGB48LE; >> + st->codecpar->bits_per_coded_sample = 10; >> > > You may want to add bitrates to the new formats. > > > + break; >> + default: >> + av_log(avctx, AV_LOG_ERROR, "Raw Format %.4s not supported\n", >> (char*) &cctx->raw_format); >> + ret = AVERROR(EINVAL); >> + goto error; >> } >> >> switch (ctx->bmd_field_dominance) { >> @@ -776,7 +805,7 @@ av_cold int ff_decklink_read_header(AVFormatContext >> *avctx) >> } >> >> result = ctx->dli->EnableVideoInput(ctx->bmd_mode, >> - cctx->v210 ? bmdFormat10BitYUV : >> bmdFormat8BitYUV, >> + (BMDPixelFormat) >> cctx->raw_format, >> bmdVideoInputFlagDefault); >> >> if (result != S_OK) { >> diff --git a/libavdevice/decklink_dec_c.c b/libavdevice/decklink_dec_c.c >> index e2118a619c..464cf760d2 100644 >> --- a/libavdevice/decklink_dec_c.c >> +++ b/libavdevice/decklink_dec_c.c >> @@ -34,6 +34,12 @@ static const AVOption options[] = { >> { "list_formats", "list supported formats" , OFFSET(list_formats), >> AV_OPT_TYPE_INT , { .i64 = 0 }, 0, 1, DEC }, >> { "format_code", "set format by fourcc" , OFFSET(format_code), >> AV_OPT_TYPE_STRING, { .str = NULL}, 0, 0, DEC }, >> { "bm_v210", "v210 10 bit per channel" , OFFSET(v210), >> AV_OPT_TYPE_INT , { .i64 = 0 }, 0, 1, DEC }, >> + { "raw_format", "pixel format to be returned by the card when >> capturing" , OFFSET(raw_format), AV_OPT_TYPE_INT, { .i64 = >> MKBETAG('2','v','u','y')}, 0, UINT_MAX, DEC, "raw_format" }, >> + { "uyvy422", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = >> MKBETAG('2','v','u','y') }, 0, 0, DEC, "raw_format"}, >> + { "yuv422p10", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = >> MKBETAG('v','2','1','0') }, 0, 0, DEC, "raw_format"}, >> + { "argb", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 32 >> }, 0, 0, DEC, "raw_format"}, >> + { "bgra", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = >> MKBETAG('B','G','R','A') }, 0, 0, DEC, "raw_format"}, >> + { "rgb48", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = >> MKBETAG('r','2','1','0') }, 0, 0, DEC, "raw_format"}, >> > > Maybe instead of rgb48 we should name it rgb10 instead, because later > somebody might add 12 bit rgb support, and the raw pixel format will be > also rgb48 for that... > > { "teletext_lines", "teletext lines bitmask", OFFSET(teletext_lines), >> AV_OPT_TYPE_INT64, { .i64 = 0 }, 0, 0x7ffffffffLL, DEC, "teletext_lines"}, >> { "standard", NULL, 0, >> AV_OPT_TYPE_CONST, { .i64 = 0x7fff9fffeLL}, 0, 0, DEC, "teletext_lines"}, >> { "all", NULL, 0, >> AV_OPT_TYPE_CONST, { .i64 = 0x7ffffffffLL}, 0, 0, DEC, "teletext_lines"}, >> diff --git a/libavdevice/version.h b/libavdevice/version.h >> index 948e4e1e08..358b6ff969 100644 >> --- a/libavdevice/version.h >> +++ b/libavdevice/version.h >> @@ -29,7 +29,7 @@ >> >> #define LIBAVDEVICE_VERSION_MAJOR 57 >> #define LIBAVDEVICE_VERSION_MINOR 8 >> -#define LIBAVDEVICE_VERSION_MICRO 100 >> +#define LIBAVDEVICE_VERSION_MICRO 101 >> >> #define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, >> \ >> LIBAVDEVICE_VERSION_MINOR, >> \ >> > > Thanks, > Marton > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel