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);
+//  }
+}
+
--- a/spudec.h	Sat Apr 21 15:38:01 2001 +0000
+++ b/spudec.h	Sat Apr 21 17:31:32 2001 +0000
@@ -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