aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMateusz <mateuszb@poczta.onet.pl>2017-10-07 19:05:53 +0200
committerPaul B Mahol <onemda@gmail.com>2017-10-26 18:32:28 +0200
commita4743d2574254aa0c494b337947e8c9880c7ead7 (patch)
treeb5474dad4e1d31befaa8108054be7da3c1d21cec
parentf2c867051c8fb2eb06c1b43a4b08d60a1eafd987 (diff)
downloadffmpeg-a4743d2574254aa0c494b337947e8c9880c7ead7.tar.gz
avformat/yuv4mpeg: add gray9/10/12 support
Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl>
-rw-r--r--libavformat/yuv4mpegdec.c6
-rw-r--r--libavformat/yuv4mpegenc.c23
2 files changed, 26 insertions, 3 deletions
diff --git a/libavformat/yuv4mpegdec.c b/libavformat/yuv4mpegdec.c
index 462b823860..ff0125e4cf 100644
--- a/libavformat/yuv4mpegdec.c
+++ b/libavformat/yuv4mpegdec.c
@@ -126,6 +126,12 @@ static int yuv4_read_header(AVFormatContext *s)
pix_fmt = AV_PIX_FMT_YUV444P;
} else if (strncmp("mono16", tokstart, 6) == 0) {
pix_fmt = AV_PIX_FMT_GRAY16;
+ } else if (strncmp("mono12", tokstart, 6) == 0) {
+ pix_fmt = AV_PIX_FMT_GRAY12;
+ } else if (strncmp("mono10", tokstart, 6) == 0) {
+ pix_fmt = AV_PIX_FMT_GRAY10;
+ } else if (strncmp("mono9", tokstart, 5) == 0) {
+ pix_fmt = AV_PIX_FMT_GRAY9;
} else if (strncmp("mono", tokstart, 4) == 0) {
pix_fmt = AV_PIX_FMT_GRAY8;
} else {
diff --git a/libavformat/yuv4mpegenc.c b/libavformat/yuv4mpegenc.c
index b4dc6e9ef6..44f40bbad9 100644
--- a/libavformat/yuv4mpegenc.c
+++ b/libavformat/yuv4mpegenc.c
@@ -69,6 +69,15 @@ static int yuv4_generate_header(AVFormatContext *s, char* buf)
case AV_PIX_FMT_GRAY8:
colorspace = " Cmono";
break;
+ case AV_PIX_FMT_GRAY9:
+ colorspace = " Cmono9";
+ break;
+ case AV_PIX_FMT_GRAY10:
+ colorspace = " Cmono10";
+ break;
+ case AV_PIX_FMT_GRAY12:
+ colorspace = " Cmono12";
+ break;
case AV_PIX_FMT_GRAY16:
colorspace = " Cmono16";
break;
@@ -184,6 +193,9 @@ static int yuv4_write_packet(AVFormatContext *s, AVPacket *pkt)
case AV_PIX_FMT_YUV422P:
case AV_PIX_FMT_YUV444P:
break;
+ case AV_PIX_FMT_GRAY9:
+ case AV_PIX_FMT_GRAY10:
+ case AV_PIX_FMT_GRAY12:
case AV_PIX_FMT_GRAY16:
case AV_PIX_FMT_YUV420P9:
case AV_PIX_FMT_YUV422P9:
@@ -213,7 +225,8 @@ static int yuv4_write_packet(AVFormatContext *s, AVPacket *pkt)
ptr += frame->linesize[0];
}
- if (st->codecpar->format != AV_PIX_FMT_GRAY8 &&
+ if (st->codecpar->format != AV_PIX_FMT_GRAY8 && st->codecpar->format != AV_PIX_FMT_GRAY9 &&
+ st->codecpar->format != AV_PIX_FMT_GRAY10 && st->codecpar->format != AV_PIX_FMT_GRAY12 &&
st->codecpar->format != AV_PIX_FMT_GRAY16) {
// Adjust for smaller Cb and Cr planes
av_pix_fmt_get_chroma_sub_sample(st->codecpar->format, &h_chroma_shift,
@@ -255,11 +268,14 @@ static int yuv4_write_header(AVFormatContext *s)
"stream, some mjpegtools might not work.\n");
break;
case AV_PIX_FMT_GRAY8:
- case AV_PIX_FMT_GRAY16:
case AV_PIX_FMT_YUV420P:
case AV_PIX_FMT_YUV422P:
case AV_PIX_FMT_YUV444P:
break;
+ case AV_PIX_FMT_GRAY9:
+ case AV_PIX_FMT_GRAY10:
+ case AV_PIX_FMT_GRAY12:
+ case AV_PIX_FMT_GRAY16:
case AV_PIX_FMT_YUV420P9:
case AV_PIX_FMT_YUV422P9:
case AV_PIX_FMT_YUV444P9:
@@ -291,7 +307,8 @@ static int yuv4_write_header(AVFormatContext *s)
"yuv444p10, yuv422p10, yuv420p10, "
"yuv444p12, yuv422p12, yuv420p12, "
"yuv444p14, yuv422p14, yuv420p14, "
- "yuv444p16, yuv422p16, yuv420p16 "
+ "yuv444p16, yuv422p16, yuv420p16, "
+ "gray9, gray10, gray12 "
"and gray16 pixel formats. "
"Use -pix_fmt to select one.\n");
return AVERROR(EIO);