summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetri Hintukainen <phintuka@users.sourceforge.net>2013-10-29 13:18:58 +0200
committerPetri Hintukainen <phintuka@users.sourceforge.net>2013-10-29 13:18:58 +0200
commit6104e5b1ed52e51ad9333dc412c6a7131940f3fd (patch)
treec1ae094b63b05e9d1aa2d8e11f278b6df157f3a6
parentad3fc90c9f745d0cf053c32ddf93ff844ac8df56 (diff)
downloadxine-lib-6104e5b1ed52e51ad9333dc412c6a7131940f3fd.tar.gz
xine-lib-6104e5b1ed52e51ad9333dc412c6a7131940f3fd.tar.bz2
demux HEVC from mpeg-ts
-rw-r--r--src/demuxers/demux_ts.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c
index 89fb48faa..890b8e12e 100644
--- a/src/demuxers/demux_ts.c
+++ b/src/demuxers/demux_ts.c
@@ -242,6 +242,8 @@
ISO_14496_PART2_VIDEO = 0x10, /* ISO/IEC 14496-2 Visual (MPEG-4) */
ISO_14496_PART3_AUDIO = 0x11, /* ISO/IEC 14496-3 Audio with LATM transport syntax */
ISO_14496_PART10_VIDEO = 0x1b, /* ISO/IEC 14496-10 Video (MPEG-4 part 10/AVC, aka H.264) */
+ STREAM_VIDEO_HEVC = 0x24,
+
STREAM_VIDEO_MPEG = 0x80,
STREAM_AUDIO_AC3 = 0x81,
@@ -1098,6 +1100,11 @@ static int demux_ts_parse_pes_header (xine_t *xine, demux_ts_media *m,
return header_len;
}
+ if (m->descriptor_tag == STREAM_VIDEO_HEVC) {
+ m->type = BUF_VIDEO_HEVC;
+ return header_len;
+ }
+
if (m->descriptor_tag == HDMV_SPU_BITMAP) {
m->type |= BUF_SPU_HDMV;
m->buf->decoder_info[2] = m->pes_bytes_left;
@@ -1668,6 +1675,7 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num
case ISO_13818_VIDEO:
case ISO_14496_PART2_VIDEO:
case ISO_14496_PART10_VIDEO:
+ case STREAM_VIDEO_HEVC:
case STREAM_VIDEO_VC1:
if (this->videoPid == INVALID_PID) {
#ifdef TS_PMT_LOG
@@ -1715,6 +1723,19 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num
#endif
break;
case ISO_13818_PES_PRIVATE:
+ {
+ uint32_t format_identifier=0;
+ demux_ts_get_reg_desc(this, &format_identifier, stream + 5, stream_info_length);
+ if (format_identifier == 0x48455643 /* HEVC */ ) {
+ mi = demux_ts_dynamic_pmt_find (this, pid, BUF_VIDEO_BASE, STREAM_VIDEO_HEVC);
+ if (mi >= 0) {
+ this->videoMedia = mi;
+ this->videoPid = pid;
+ }
+ break;
+ }
+ }
+
for (i = 5; i < coded_length; i += stream[i+1] + 2) {
if ((stream[i] == DESCRIPTOR_AC3) || (stream[i] == DESCRIPTOR_EAC3) || (stream[i] == DESCRIPTOR_DTS)) {