summaryrefslogtreecommitdiff
path: root/src/demuxers
diff options
context:
space:
mode:
authorDarren Salt <linux@youmustbejoking.demon.co.uk>2011-10-01 18:45:02 +0100
committerDarren Salt <linux@youmustbejoking.demon.co.uk>2011-10-01 18:45:02 +0100
commitd7c4d2bd622b1405ff520006dbeaf739e9725a89 (patch)
tree104f926890dbd24257e96741a5a065f1c64ec855 /src/demuxers
parenta15f6b82252b5afb81486e6f0e9e10e5e2e5ece5 (diff)
parent8ba50d7512e71ce2fa441f8e738459df21cec2ae (diff)
downloadxine-lib-d7c4d2bd622b1405ff520006dbeaf739e9725a89.tar.gz
xine-lib-d7c4d2bd622b1405ff520006dbeaf739e9725a89.tar.bz2
Merge from 1.1.
--HG-- rename : src/libdts/xine_dts_decoder.c => src/audio_dec/xine_dts_decoder.c rename : src/libmusepack/xine_musepack_decoder.c => src/audio_dec/xine_musepack_decoder.c
Diffstat (limited to 'src/demuxers')
-rw-r--r--src/demuxers/demux_ts.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c
index 74840885d..ff75c3282 100644
--- a/src/demuxers/demux_ts.c
+++ b/src/demuxers/demux_ts.c
@@ -1784,11 +1784,14 @@ static unsigned char * demux_synchronise(demux_ts_t* this) {
static int64_t demux_ts_adaptation_field_parse(uint8_t *data,
uint32_t adaptation_field_length) {
+#ifdef TS_LOG
uint32_t discontinuity_indicator=0;
uint32_t random_access_indicator=0;
uint32_t elementary_stream_priority_indicator=0;
+#endif
uint32_t PCR_flag=0;
- int64_t PCR=0;
+ int64_t PCR=-1;
+#ifdef TS_LOG
uint32_t EPCR=0;
uint32_t OPCR_flag=0;
uint32_t OPCR=0;
@@ -1796,16 +1799,21 @@ static int64_t demux_ts_adaptation_field_parse(uint8_t *data,
uint32_t slicing_point_flag=0;
uint32_t transport_private_data_flag=0;
uint32_t adaptation_field_extension_flag=0;
+#endif
uint32_t offset = 1;
+#ifdef TS_LOG
discontinuity_indicator = ((data[0] >> 7) & 0x01);
random_access_indicator = ((data[0] >> 6) & 0x01);
elementary_stream_priority_indicator = ((data[0] >> 5) & 0x01);
+#endif
PCR_flag = ((data[0] >> 4) & 0x01);
+#ifdef TS_LOG
OPCR_flag = ((data[0] >> 3) & 0x01);
slicing_point_flag = ((data[0] >> 2) & 0x01);
transport_private_data_flag = ((data[0] >> 1) & 0x01);
adaptation_field_extension_flag = (data[0] & 0x01);
+#endif
#ifdef TS_LOG
printf ("demux_ts: ADAPTATION FIELD length: %d (%x)\n",
@@ -1823,9 +1831,10 @@ static int64_t demux_ts_adaptation_field_parse(uint8_t *data,
elementary_stream_priority_indicator);
}
#endif
+
if(PCR_flag) {
if (adaptation_field_length < offset + 6)
- return 0;
+ return -1;
PCR = (((int64_t) data[offset]) & 0xFF) << 25;
PCR += (int64_t) ((data[offset+1] & 0xFF) << 17);
@@ -1833,13 +1842,15 @@ static int64_t demux_ts_adaptation_field_parse(uint8_t *data,
PCR += (int64_t) ((data[offset+3] & 0xFF) << 1);
PCR += (int64_t) ((data[offset+4] & 0x80) >> 7);
- EPCR = ((data[offset+4] & 0x1) << 8) | data[offset+5];
#ifdef TS_LOG
+ EPCR = ((data[offset+4] & 0x1) << 8) | data[offset+5];
printf ("demux_ts: PCR: %lld, EPCR: %u\n",
PCR, EPCR);
#endif
offset+=6;
}
+
+#ifdef TS_LOG
if(OPCR_flag) {
if (adaptation_field_length < offset + 6)
return PCR;
@@ -1850,13 +1861,13 @@ static int64_t demux_ts_adaptation_field_parse(uint8_t *data,
OPCR |= data[offset+3] << 1;
OPCR |= (data[offset+4] >> 7) & 0x01;
EOPCR = ((data[offset+4] & 0x1) << 8) | data[offset+5];
-#ifdef TS_LOG
+
printf ("demux_ts: OPCR: %u, EOPCR: %u\n",
OPCR,EOPCR);
-#endif
+
offset+=6;
}
-#ifdef TS_LOG
+
if(slicing_point_flag) {
printf ("demux_ts: slicing_point_flag: %d\n",
slicing_point_flag);
@@ -1869,7 +1880,8 @@ static int64_t demux_ts_adaptation_field_parse(uint8_t *data,
printf ("demux_ts: adaptation_field_extension_flag: %d\n",
adaptation_field_extension_flag);
}
-#endif
+#endif /* TS_LOG */
+
return PCR;
}