Commit 8ed6c13f authored by Stephen Hutchinson's avatar Stephen Hutchinson Committed by Michael Niedermayer

libutvideo: Add ULH0 and ULH2 decoding when using version 13.0.1

Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 0047da07
...@@ -21,7 +21,8 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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) ...@@ -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 @@ ...@@ -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[] = { ...@@ -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') },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment