summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJames Courtier-Dutton <jcdutton@users.sourceforge.net>2001-11-11 01:45:44 +0000
committerJames Courtier-Dutton <jcdutton@users.sourceforge.net>2001-11-11 01:45:44 +0000
commit125e91f56fed4202e183995f65164cc8bb58d13d (patch)
tree50dfbaf0ba948564efbc28a023ffc9163f7123ce /src
parentdbe93f98ddf73aa3485d1b43829310b393bb1b5b (diff)
downloadxine-lib-125e91f56fed4202e183995f65164cc8bb58d13d.tar.gz
xine-lib-125e91f56fed4202e183995f65164cc8bb58d13d.tar.bz2
Partial decoding of adaption field.
More to follow. CVS patchset: 1016 CVS date: 2001/11/11 01:45:44
Diffstat (limited to 'src')
-rw-r--r--src/demuxers/demux_ts.c62
1 files changed, 60 insertions, 2 deletions
diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c
index b7720494d..25eebac52 100644
--- a/src/demuxers/demux_ts.c
+++ b/src/demuxers/demux_ts.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: demux_ts.c,v 1.20 2001/10/25 00:47:01 miguelfreitas Exp $
+ * $Id: demux_ts.c,v 1.21 2001/11/11 01:45:44 jcdutton Exp $
*
* Demultiplexer for MPEG2 Transport Streams.
*
@@ -684,7 +684,61 @@ static unsigned char * demux_synchronise(demux_ts * this) {
packet_number++;
return return_pointer;
}
+
+static void demux_ts_adaption_field_parse( uint8_t *data, uint32_t adaption_field_length) {
+ uint32_t discontinuity_indicator;
+ uint32_t random_access_indicator;
+ uint32_t elementary_stream_priority_indicator;
+ uint32_t PCR_flag;
+ uint32_t OPCR_flag;
+ uint32_t slicing_point_flag;
+ uint32_t transport_private_data_flag;
+ uint32_t adaption_field_extension_flag;
+
+ discontinuity_indicator = ((data[0] >> 7) & 0x01);
+ random_access_indicator = ((data[0] >> 6) & 0x01);
+ elementary_stream_priority_indicator = ((data[0] >> 5) & 0x01);
+ PCR_flag = ((data[0] >> 4) & 0x01);
+ OPCR_flag = ((data[0] >> 3) & 0x01);
+ slicing_point_flag = ((data[0] >> 2) & 0x01);
+ transport_private_data_flag = ((data[0] >> 1) & 0x01);
+ adaption_field_extension_flag = (data[0] & 0x01);
+ printf("ADAPTION FIELD length=%d\n",
+ adaption_field_length);
+ if(discontinuity_indicator) {
+ printf("\tDiscontinuity indicator=%d\n",
+ discontinuity_indicator);
+ }
+ if(random_access_indicator) {
+ printf("\tRandom_access indicator=%d\n",
+ random_access_indicator);
+ }
+ if(elementary_stream_priority_indicator) {
+ printf("\tElementary_stream_priority_indicator=%d\n",
+ elementary_stream_priority_indicator);
+ }
+ if(PCR_flag) {
+ printf("\tPCR_flag=%d\n",
+ PCR_flag);
+ }
+ if(OPCR_flag) {
+ printf("\tOPCR flag=%d",
+ OPCR_flag);
+ }
+ if(slicing_point_flag) {
+ printf("\tslicing_point_flag=%d\n",
+ slicing_point_flag);
+ }
+ if(transport_private_data_flag) {
+ printf("\ttransport_private_data_flag=%d\n",
+ transport_private_data_flag);
+ }
+ printf("\tadaption_field_extension_flag=%d\n",
+ adaption_field_extension_flag);
+
+;
+}
/* transport stream packet layer */
static void demux_ts_parse_packet (demux_ts *this) {
@@ -734,10 +788,14 @@ static void demux_ts_parse_packet (demux_ts *this) {
* Has a payload! Calculate & check payload length.
*/
if (adaption_field_control & 0x2) {
+ uint32_t adaption_field_length = originalPkt[4];
+ if( adaption_field_length > 0) {
+ /* demux_ts_adaption_field_parse( originalPkt+5, adaption_field_length); */
+ }
/*
* Skip adaptation header.
*/
- data_offset+=originalPkt[4]+1;
+ data_offset += adaption_field_length + 1;
}
data_len = PKT_SIZE - data_offset;