diff options
author | Torsten Jager <t.jager@gmx.de> | 2012-10-29 10:01:04 +0200 |
---|---|---|
committer | Torsten Jager <t.jager@gmx.de> | 2012-10-29 10:01:04 +0200 |
commit | 116e99de153e3bde08b5e2c0848d93d62a5b1048 (patch) | |
tree | 0854adeb55c7b597af4952e7ba517f7d77097748 /src/demuxers/demux_yuv4mpeg2.c | |
parent | 8214523994f881cd7e35626ec262126c004a75c2 (diff) | |
download | xine-lib-116e99de153e3bde08b5e2c0848d93d62a5b1048.tar.gz xine-lib-116e99de153e3bde08b5e2c0848d93d62a5b1048.tar.bz2 |
input_test: added full range color test video
Diffstat (limited to 'src/demuxers/demux_yuv4mpeg2.c')
-rw-r--r-- | src/demuxers/demux_yuv4mpeg2.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/demuxers/demux_yuv4mpeg2.c b/src/demuxers/demux_yuv4mpeg2.c index e8877057c..f06201d74 100644 --- a/src/demuxers/demux_yuv4mpeg2.c +++ b/src/demuxers/demux_yuv4mpeg2.c @@ -69,6 +69,7 @@ typedef struct { int aspect_d; int progressive; int top_field_first; + int color_matrix; unsigned int frame_pts_inc; unsigned int frame_size; @@ -89,6 +90,8 @@ static int open_yuv4mpeg2_file(demux_yuv4mpeg2_t *this) { this->aspect_n = this->aspect_d = this->progressive = this->top_field_first = this->data_start = 0; + this->color_matrix = 4; /* undefined, mpeg range */ + if (_x_demux_read_header(this->input, header, Y4M_HEADER_BYTES) != Y4M_HEADER_BYTES) return 0; @@ -179,6 +182,17 @@ static int open_yuv4mpeg2_file(demux_yuv4mpeg2_t *this) { header_ptr = header_endptr; break; + case 'X': + /* private extra info */ + if (!strncasecmp (header_ptr + 1, "XINE_CM=", 8)) { + int i = strtol(header_ptr + 9, &header_endptr, 10); + if (header_endptr > header_ptr + 9) { + this->color_matrix = i; + header_ptr = header_endptr; + break; + } + } + /* fall through */ default: /* skip whatever this is */ while ((*header_ptr != ' ') && (header_ptr < header_end)) @@ -257,6 +271,9 @@ static int demux_yuv4mpeg2_send_chunk(demux_plugin_t *this_gen) { buf->extra_info->input_time = pts / 90; buf->pts = pts; + buf->decoder_flags |= BUF_FLAG_COLOR_MATRIX; + buf->decoder_info[4] = this->color_matrix; + buf->size = MIN(bytes_remaining, buf->max_size); bytes_remaining -= buf->size; |