From: Guenter B. <gu...@us...> - 2002-09-01 20:51:01
|
Update of /cvsroot/xine/xine-lib/src/demuxers In directory usw-pr-cvs1:/tmp/cvs-serv29220 Modified Files: demux_ogg.c Log Message: keyframe detection and hexdump enhancement by Staszek Pasko Index: demux_ogg.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_ogg.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- demux_ogg.c 28 Aug 2002 22:16:53 -0000 1.38 +++ demux_ogg.c 1 Sep 2002 20:50:57 -0000 1.39 @@ -47,8 +47,12 @@ #define CHUNKSIZE 8500 #define PACKET_TYPE_HEADER 0x01 +#define PACKET_TYPE_COMMENT 0x03 +#define PACKET_TYPE_CODEBOOK 0x05 +#define PACKET_TYPE_BITS 0x07 #define PACKET_LEN_BITS01 0xc0 #define PACKET_LEN_BITS2 0x02 +#define PACKET_IS_SYNCPOINT 0x08 #define MAX_STREAMS 16 @@ -138,33 +142,16 @@ static void hex_dump (uint8_t *p, int length) { - - int i; - - for (i=0; i<length; i++) { - unsigned char c = p[i]; - - printf ("%02x", c); - - if ((i % 16) == 15) - printf ("\n"); - - if ((i % 2) == 1) - printf (" "); - - } - printf ("\n"); - - for (i=0; i<length; i++) { - unsigned char c = p[i]; - if ( (c>=20) && (c<128)) - printf ("%c", c); - else - printf ("."); + int i,j; + unsigned char c; + for (j=0;j<length;j=i) { + printf ("%04X ",j); + for (i=j;i<(j+16<length?j+16:length);i++) + printf ("%02X ", c=p[i]); + for (i=j;i<(j+16<length?j+16:length);i++) + if ( ((c=p[i])>=20) && (c<128)) printf ("%c", c); else printf ("."); + printf("\n"); } - printf ("\n"); - - } /* redefine abs as macro to handle 64-bit diffs. @@ -765,11 +752,17 @@ } if (this->keyframe_needed) { - printf ("keyframe needed...\n"); - if (*op.packet & 8) +// printf ("keyframe needed...\n"); + if (((this->buf_types[stream_num] & 0xFF000000) == BUF_VIDEO_BASE) && + (*op.packet == PACKET_IS_SYNCPOINT)) { +/* + printf("keyframe: l%ld b%ld e%ld g%ld p%ld str%d\n", + op.bytes,op.b_o_s,op.e_o_s,(long) op.granulepos, + (long) op.packetno,stream_num); + hex_dump (op.packet, op.bytes); +*/ this->keyframe_needed = 0; - else - continue; + } else continue; } send_ogg_buf (this, &op, stream_num, 0); |