Mercurial > mplayer.hg
changeset 561:36fd71db0d33
spudec_decode() moved from mplayer.c to spudec.c
author | arpi_esp |
---|---|
date | Sat, 21 Apr 2001 17:31:32 +0000 |
parents | 28ae99036574 |
children | 312fee2a6816 |
files | mplayer.c spudec.c spudec.h |
diffstat | 3 files changed, 35 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/mplayer.c Sat Apr 21 15:38:01 2001 +0000 +++ b/mplayer.c Sat Apr 21 17:31:32 2001 +0000 @@ -2065,32 +2065,11 @@ if(len>=2){ int len2; len2=(packet[0]<<8)+packet[1]; - printf("\rDVD sub: %d / %d \n",len,len2); - if(len==len2){ - -//----------------------------------------------------- - int x0, x1; - int d1, d2; - int lifetime; - x0 = (packet[2] << 8) + packet[3]; - x1 = (packet[x0+2] << 8) + packet[x0+3]; - - /* /Another/ sanity check. */ - if((packet[x1+2]<<8) + packet[x1+3] != x1) { - printf("spudec: Incorrect packet.\n"); - return; - } - lifetime= ((packet[x1]<<8) + packet[x1+1]); - printf("lifetime=%d\n",lifetime); - - d1 = d2 = -1; - spudec_process_control(packet + x0 + 2, x1-x0-2, &d1, &d2); -// if((d1 != -1) && (d2 != -1)) { -// spudec_process_data(packet, x0, d1, d2); -// } -//----------------------------------------------------- - - } else printf("fragmented dvd-subs not yet supported!!!\n"); + if(verbose) printf("\rDVD sub: %d / %d \n",len,len2); + if(len==len2) + spudec_decode(packet,len); + else + printf("fragmented dvd-subs not yet supported!!!\n"); } else if(len>=0) { printf("invalud dvd sub\n"); }
--- a/spudec.c Sat Apr 21 15:38:01 2001 +0000 +++ b/spudec.c Sat Apr 21 17:31:32 2001 +0000 @@ -84,5 +84,34 @@ } while(off < size); } +// SPU packet format: (guess only, by A'rpi) +// 0 word whole packet size +// 2 word x0 sub-packet size +// 4 x0-2 pixel data +// x0+2 word x1 sub-packet size +// x0+4 x1-x0-2 process control data +// x1 word lifetime +// x1+2 word x1 sub-packet size again +void spudec_decode(unsigned char *packet,int len){ + int x0, x1; + int d1, d2; + int lifetime; + x0 = (packet[2] << 8) + packet[3]; + x1 = (packet[x0+2] << 8) + packet[x0+3]; + /* /Another/ sanity check. */ + if((packet[x1+2]<<8) + packet[x1+3] != x1) { + printf("spudec: Incorrect packet.\n"); + return; + } + lifetime= ((packet[x1]<<8) + packet[x1+1]); + printf("lifetime=%d\n",lifetime); + + d1 = d2 = -1; + spudec_process_control(packet + x0 + 2, x1-x0-2, &d1, &d2); +// if((d1 != -1) && (d2 != -1)) { +// spudec_process_data(packet, x0, d1, d2); +// } +} +