mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
avdevice/decklink_dec: add support for rgb/yuv pixel format autodetection
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
e33c0d8c69
commit
f1b908d20a
@ -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"},
|
||||||
|
Loading…
Reference in New Issue
Block a user