aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Hutchinson <qyot27@gmail.com>2013-06-09 08:08:03 -0400
committerMichael Niedermayer <michaelni@gmx.at>2013-06-10 10:12:15 +0200
commit8ed6c13fe3d7990962c10f22dc0b60dba67d7a04 (patch)
tree525a2af88d45cc62cda71664add32ecf7e470e3b
parent0047da071ed18318e87b6e59d7442f37e24f5678 (diff)
downloadffmpeg-8ed6c13fe3d7990962c10f22dc0b60dba67d7a04.tar.gz
libutvideo: Add ULH0 and ULH2 decoding when using version 13.0.1
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavcodec/libutvideo.h11
-rw-r--r--libavcodec/libutvideodec.cpp17
-rw-r--r--libavcodec/libutvideoenc.cpp3
-rw-r--r--libavformat/riff.c3
4 files changed, 31 insertions, 3 deletions
diff --git a/libavcodec/libutvideo.h b/libavcodec/libutvideo.h
index b35d19ce19..5fb1174c84 100644
--- a/libavcodec/libutvideo.h
+++ b/libavcodec/libutvideo.h
@@ -21,7 +21,8 @@
/**
* @file
* 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
@@ -45,6 +46,14 @@
#define UTVF_NFCC_BGRA_BU UTVF_RGB32_WIN
#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 {
uint32_t version;
uint32_t original_format;
diff --git a/libavcodec/libutvideodec.cpp b/libavcodec/libutvideodec.cpp
index bc491e2329..eadf4a145d 100644
--- a/libavcodec/libutvideodec.cpp
+++ b/libavcodec/libutvideodec.cpp
@@ -21,7 +21,8 @@
/**
* @file
* 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" {
@@ -51,6 +52,20 @@ static av_cold int utvideo_decode_init(AVCodecContext *avctx)
/* Pick format based on FOURCC */
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'):
avctx->pix_fmt = AV_PIX_FMT_YUV420P;
format = UTVF_YV12;
diff --git a/libavcodec/libutvideoenc.cpp b/libavcodec/libutvideoenc.cpp
index 07205f7139..44cd42f02b 100644
--- a/libavcodec/libutvideoenc.cpp
+++ b/libavcodec/libutvideoenc.cpp
@@ -21,7 +21,8 @@
/**
* @file
* 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" {
diff --git a/libavformat/riff.c b/libavformat/riff.c
index 09a7863ffd..119cbc9399 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.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', 'Y', '0') },
{ 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_ESCAPE130, MKTAG('E', '1', '3', '0') },
{ AV_CODEC_ID_DXTORY, MKTAG('x', 't', 'o', 'r') },