1
mirror of https://github.com/mpv-player/mpv synced 2024-12-24 07:33:46 +01:00

spudec_decode() moved from mplayer.c to spudec.c

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@562 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
arpi_esp 2001-04-21 17:31:32 +00:00
parent e0af35ff34
commit d73d923d05
3 changed files with 35 additions and 26 deletions

View File

@ -2065,32 +2065,11 @@ switch(file_format){
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");
}

View File

@ -84,5 +84,34 @@ void spudec_process_control(unsigned char *control, int size, int* d1, int* d2)
} 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);
// }
}

View File

@ -2,5 +2,6 @@
#define _MPLAYER_SPUDEC_H
void spudec_process_control(unsigned char *, int, int*, int*);
void spudec_decode(unsigned char *packet,int len);
#endif