diff options
author | Georg Lippitsch <georg.lippitsch@gmx.at> | 2015-01-18 20:44:33 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-02-08 04:31:27 +0100 |
commit | 97a27065c88c3486e46da1470a0161ce43890f3e (patch) | |
tree | 83948d2cddddfec4b389501613e2f51227262feb /libavdevice | |
parent | 6a8a3bfb873730c1c13a496c3afa37020a8328a2 (diff) | |
download | ffmpeg-streaming-97a27065c88c3486e46da1470a0161ce43890f3e.zip ffmpeg-streaming-97a27065c88c3486e46da1470a0161ce43890f3e.tar.gz |
avdevice/decklink: 10 Bit support for Decklink input device
Example to capture video clip at 1080i50 10 bit:
ffmpeg -bm_v210 1 -f decklink -i 'UltraStudio Mini Recorder@11' -acodec copy -vcodec copy output.avi
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavdevice')
-rw-r--r-- | libavdevice/decklink_common_c.h | 1 | ||||
-rw-r--r-- | libavdevice/decklink_dec.cpp | 18 | ||||
-rw-r--r-- | libavdevice/decklink_dec_c.c | 1 |
3 files changed, 16 insertions, 4 deletions
diff --git a/libavdevice/decklink_common_c.h b/libavdevice/decklink_common_c.h index 861a51a..fb2b788 100644 --- a/libavdevice/decklink_common_c.h +++ b/libavdevice/decklink_common_c.h @@ -28,5 +28,6 @@ struct decklink_cctx { int list_devices; int list_formats; double preroll; + int v210; }; diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp index 77a0fe5..747f47e 100644 --- a/libavdevice/decklink_dec.cpp +++ b/libavdevice/decklink_dec.cpp @@ -233,6 +233,7 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( ctx->video_st->time_base.den); if (videoFrame->GetFlags() & bmdFrameHasNoInputSource) { + if (videoFrame->GetPixelFormat() == bmdFormat8BitYUV) { unsigned bars[8] = { 0xEA80EA80, 0xD292D210, 0xA910A9A5, 0x90229035, 0x6ADD6ACA, 0x51EF515A, 0x286D28EF, 0x10801080 }; @@ -244,6 +245,7 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( for (int x = 0; x < width; x += 2) *p++ = bars[(x * 8) / width]; } + } if (!no_video) { av_log(avctx, AV_LOG_WARNING, "Frame received (#%lu) - No input signal detected " @@ -466,15 +468,21 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx) goto error; } st->codec->codec_type = AVMEDIA_TYPE_VIDEO; - st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; st->codec->width = ctx->bmd_width; st->codec->height = ctx->bmd_height; - st->codec->pix_fmt = AV_PIX_FMT_UYVY422; st->codec->time_base.den = ctx->bmd_tb_den; st->codec->time_base.num = ctx->bmd_tb_num; st->codec->bit_rate = avpicture_get_size(st->codec->pix_fmt, ctx->bmd_width, ctx->bmd_height) * 1/av_q2d(st->codec->time_base) * 8; - st->codec->codec_tag = MKTAG('U', 'Y', 'V', 'Y'); + + if (cctx->v210) { + st->codec->codec_id = AV_CODEC_ID_V210; + st->codec->codec_tag = MKTAG('V', '2', '1', '0'); + } else { + st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; + st->codec->pix_fmt = AV_PIX_FMT_UYVY422; + st->codec->codec_tag = MKTAG('U', 'Y', 'V', 'Y'); + } avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ @@ -487,7 +495,9 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx) goto error; } - result = ctx->dli->EnableVideoInput(ctx->bmd_mode, bmdFormat8BitYUV, bmdVideoInputFlagDefault); + result = ctx->dli->EnableVideoInput(ctx->bmd_mode, + cctx->v210 ? bmdFormat10BitYUV : bmdFormat8BitYUV, + bmdVideoInputFlagDefault); if (result != S_OK) { av_log(avctx, AV_LOG_ERROR, "Cannot enable video input\n"); diff --git a/libavdevice/decklink_dec_c.c b/libavdevice/decklink_dec_c.c index 2aea277..b1a65e6 100644 --- a/libavdevice/decklink_dec_c.c +++ b/libavdevice/decklink_dec_c.c @@ -31,6 +31,7 @@ static const AVOption options[] = { { "list_devices", "list available devices" , OFFSET(list_devices), AV_OPT_TYPE_INT , { .i64 = 0 }, 0, 1, DEC }, { "list_formats", "list supported formats" , OFFSET(list_formats), AV_OPT_TYPE_INT , { .i64 = 0 }, 0, 1, DEC }, + { "bm_v210", "v210 10 bit per channel" , OFFSET(v210), AV_OPT_TYPE_INT , { .i64 = 0 }, 0, 1, DEC }, { NULL }, }; |