Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.0
@@ -21,7 +21,8 @@ | |||||
/** | /** | ||||
* @file | * @file | ||||
* Known FOURCCs: | * Known FOURCCs: | ||||
* 'ULY0' (YCbCr 4:2:0), 'ULY2' (YCbCr 4:2:2), 'ULRG' (RGB), 'ULRA' (RGBA) | |||||
* 'ULY0' (YCbCr 4:2:0), 'ULY2' (YCbCr 4:2:2), 'ULRG' (RGB), 'ULRA' (RGBA), | |||||
* 'ULH0' (YCbCr 4:2:0 BT.709), 'ULH2' (YCbCr 4:2:2 BT.709) | |||||
*/ | */ | ||||
#ifndef AVCODEC_LIBUTVIDEO_H | #ifndef AVCODEC_LIBUTVIDEO_H | ||||
@@ -45,6 +46,14 @@ | |||||
#define UTVF_NFCC_BGRA_BU UTVF_RGB32_WIN | #define UTVF_NFCC_BGRA_BU UTVF_RGB32_WIN | ||||
#endif | #endif | ||||
/* | |||||
* Ut Video version 13.0.1 introduced new BT.709 variants. | |||||
* Special-case these and only use them if v13 is detected. | |||||
*/ | |||||
#if defined(UTVF_HDYC) | |||||
#define UTV_BT709 | |||||
#endif | |||||
typedef struct { | typedef struct { | ||||
uint32_t version; | uint32_t version; | ||||
uint32_t original_format; | uint32_t original_format; | ||||
@@ -21,7 +21,8 @@ | |||||
/** | /** | ||||
* @file | * @file | ||||
* Known FOURCCs: | * Known FOURCCs: | ||||
* 'ULY0' (YCbCr 4:2:0), 'ULY2' (YCbCr 4:2:2), 'ULRG' (RGB), 'ULRA' (RGBA) | |||||
* 'ULY0' (YCbCr 4:2:0), 'ULY2' (YCbCr 4:2:2), 'ULRG' (RGB), 'ULRA' (RGBA), | |||||
* 'ULH0' (YCbCr 4:2:0 BT.709), 'ULH2' (YCbCr 4:2:2 BT.709) | |||||
*/ | */ | ||||
extern "C" { | extern "C" { | ||||
@@ -51,6 +52,20 @@ static av_cold int utvideo_decode_init(AVCodecContext *avctx) | |||||
/* Pick format based on FOURCC */ | /* Pick format based on FOURCC */ | ||||
switch (avctx->codec_tag) { | switch (avctx->codec_tag) { | ||||
#ifdef UTV_BT709 | |||||
case MKTAG('U', 'L', 'H', '0'): | |||||
avctx->pix_fmt = AV_PIX_FMT_YUV420P; | |||||
avctx->color_primaries = AVCOL_PRI_BT709; | |||||
avctx->colorspace = AVCOL_SPC_BT709; | |||||
format = UTVF_YV12; | |||||
break; | |||||
case MKTAG('U', 'L', 'H', '2'): | |||||
avctx->pix_fmt = AV_PIX_FMT_YUYV422; | |||||
avctx->color_primaries = AVCOL_PRI_BT709; | |||||
avctx->colorspace = AVCOL_SPC_BT709; | |||||
format = UTVF_YUY2; | |||||
break; | |||||
#endif | |||||
case MKTAG('U', 'L', 'Y', '0'): | case MKTAG('U', 'L', 'Y', '0'): | ||||
avctx->pix_fmt = AV_PIX_FMT_YUV420P; | avctx->pix_fmt = AV_PIX_FMT_YUV420P; | ||||
format = UTVF_YV12; | format = UTVF_YV12; | ||||
@@ -21,7 +21,8 @@ | |||||
/** | /** | ||||
* @file | * @file | ||||
* Known FOURCCs: | * Known FOURCCs: | ||||
* 'ULY0' (YCbCr 4:2:0), 'ULY2' (YCbCr 4:2:2), 'ULRG' (RGB), 'ULRA' (RGBA) | |||||
* 'ULY0' (YCbCr 4:2:0), 'ULY2' (YCbCr 4:2:2), 'ULRG' (RGB), 'ULRA' (RGBA), | |||||
* 'ULH0' (YCbCr 4:2:0 BT.709), 'ULH2' (YCbCr 4:2:2 BT.709) | |||||
*/ | */ | ||||
extern "C" { | extern "C" { | ||||
@@ -330,6 +330,9 @@ const AVCodecTag ff_codec_bmp_tags[] = { | |||||
{ AV_CODEC_ID_UTVIDEO, MKTAG('U', 'L', 'R', 'G') }, | { AV_CODEC_ID_UTVIDEO, MKTAG('U', 'L', 'R', 'G') }, | ||||
{ AV_CODEC_ID_UTVIDEO, MKTAG('U', 'L', 'Y', '0') }, | { AV_CODEC_ID_UTVIDEO, MKTAG('U', 'L', 'Y', '0') }, | ||||
{ AV_CODEC_ID_UTVIDEO, MKTAG('U', 'L', 'Y', '2') }, | { AV_CODEC_ID_UTVIDEO, MKTAG('U', 'L', 'Y', '2') }, | ||||
/* Ut Video version 13.0.1 BT.709 codecs */ | |||||
{ AV_CODEC_ID_UTVIDEO, MKTAG('U', 'L', 'H', '0') }, | |||||
{ AV_CODEC_ID_UTVIDEO, MKTAG('U', 'L', 'H', '2') }, | |||||
{ AV_CODEC_ID_VBLE, MKTAG('V', 'B', 'L', 'E') }, | { AV_CODEC_ID_VBLE, MKTAG('V', 'B', 'L', 'E') }, | ||||
{ AV_CODEC_ID_ESCAPE130, MKTAG('E', '1', '3', '0') }, | { AV_CODEC_ID_ESCAPE130, MKTAG('E', '1', '3', '0') }, | ||||
{ AV_CODEC_ID_DXTORY, MKTAG('x', 't', 'o', 'r') }, | { AV_CODEC_ID_DXTORY, MKTAG('x', 't', 'o', 'r') }, | ||||