Signed-off-by: Marton Balint <cus@passwd.hu>tags/n4.4
@@ -296,16 +296,31 @@ supports it. | |||||
Set the pixel format of the captured video. | Set the pixel format of the captured video. | ||||
Available values are: | Available values are: | ||||
@table @samp | @table @samp | ||||
@item auto | |||||
This is the default which means 8-bit YUV 422 or 8-bit ARGB if format | |||||
autodetection is used, 8-bit YUV 422 otherwise. | |||||
@item uyvy422 | @item uyvy422 | ||||
8-bit YUV 422. | |||||
@item yuv422p10 | @item yuv422p10 | ||||
10-bit YUV 422. | |||||
@item argb | @item argb | ||||
8-bit RGB. | |||||
@item bgra | @item bgra | ||||
8-bit RGB. | |||||
@item rgb10 | @item rgb10 | ||||
10-bit RGB. | |||||
@end table | @end table | ||||
@item teletext_lines | @item teletext_lines | ||||
@@ -1044,9 +1044,13 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( | |||||
HRESULT decklink_input_callback::VideoInputFormatChanged( | HRESULT decklink_input_callback::VideoInputFormatChanged( | ||||
BMDVideoInputFormatChangedEvents events, IDeckLinkDisplayMode *mode, | BMDVideoInputFormatChangedEvents events, IDeckLinkDisplayMode *mode, | ||||
BMDDetectedVideoInputFormatFlags) | |||||
BMDDetectedVideoInputFormatFlags formatFlags) | |||||
{ | { | ||||
struct decklink_cctx *cctx = (struct decklink_cctx *) avctx->priv_data; | |||||
ctx->bmd_mode = mode->GetDisplayMode(); | ctx->bmd_mode = mode->GetDisplayMode(); | ||||
// check the C context member to make sure we set both raw_format and bmd_mode with data from the same format change callback | |||||
if (!cctx->raw_format) | |||||
ctx->raw_format = (formatFlags & bmdDetectedVideoInputRGB444) ? bmdFormat8BitARGB : bmdFormat8BitYUV; | |||||
return S_OK; | return S_OK; | ||||
} | } | ||||
@@ -1228,6 +1232,8 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx) | |||||
} | } | ||||
av_log(avctx, AV_LOG_INFO, "Autodetected the input mode\n"); | av_log(avctx, AV_LOG_INFO, "Autodetected the input mode\n"); | ||||
} | } | ||||
if (ctx->raw_format == bmdFormatUnspecified) | |||||
ctx->raw_format = bmdFormat8BitYUV; | |||||
if (ff_decklink_set_format(avctx, DIRECTION_IN) < 0) { | if (ff_decklink_set_format(avctx, DIRECTION_IN) < 0) { | ||||
av_log(avctx, AV_LOG_ERROR, "Could not set format code %s for %s\n", | av_log(avctx, AV_LOG_ERROR, "Could not set format code %s for %s\n", | ||||
cctx->format_code ? cctx->format_code : "(unset)", avctx->url); | cctx->format_code ? cctx->format_code : "(unset)", avctx->url); | ||||
@@ -33,7 +33,8 @@ static const AVOption options[] = { | |||||
{ "list_devices", "list available devices" , OFFSET(list_devices), AV_OPT_TYPE_INT , { .i64 = 0 }, 0, 1, DEC }, | { "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 }, | { "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 }, | { "format_code", "set format by fourcc" , OFFSET(format_code), AV_OPT_TYPE_STRING, { .str = NULL}, 0, 0, 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" }, | |||||
{ "raw_format", "pixel format to be returned by the card when capturing" , OFFSET(raw_format), AV_OPT_TYPE_INT, { .i64 = 0}, 0, UINT_MAX, DEC, "raw_format" }, | |||||
{ "auto", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, DEC, "raw_format"}, | |||||
{ "uyvy422", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MKBETAG('2','v','u','y') }, 0, 0, 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"}, | { "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"}, | { "argb", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 32 }, 0, 0, DEC, "raw_format"}, | ||||