summaryrefslogtreecommitdiff
path: root/libavdevice/decklink_dec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libavdevice/decklink_dec.cpp')
-rw-r--r--libavdevice/decklink_dec.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp
index 77a0fe588c..747f47e582 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");