annotate sub_cc.c @ 18049:77a3b0d11ca5

Limit the number of entires to the amount that does fit into the chunk. the function need rewrite as it assumes quite many things that are not guaranteed by the specifications.
author iive
date Thu, 06 Apr 2006 20:04:02 +0000
parents fd0d4b94b5ec
children f61fd8cc3128
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
1 /*
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
2 * sub_cc.c - Decoder for Closed Captions
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
3 *
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
4 * This decoder relies on MPlayer's OSD to display subtitles.
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
5 * Be warned that the decoding is somewhat preliminary, though it basically works.
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
6 *
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
7 * Most notably, only the text information is decoded as of now, discarding color,
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
8 * background and position info (see source below).
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
9 *
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
10 * by Matteo Giani
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
11 *
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
12 * uses source from the xine closed captions decoder
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
13 */
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
14
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
15
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
16 #include <stdio.h>
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
17 #include <stdlib.h>
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7472
diff changeset
18 #include <string.h>
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
19
17630
7c4eef408b6b include config.h before includes that need it
iive
parents: 17566
diff changeset
20 #include "config.h"
6791
a3b2f80f3a26 codmetics :)
arpi
parents: 6784
diff changeset
21 #include "sub_cc.h"
a3b2f80f3a26 codmetics :)
arpi
parents: 6784
diff changeset
22
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
23 #include "subreader.h"
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
24
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
25 #include "libvo/video_out.h"
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
26 #include "libvo/sub.h"
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
27
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
28
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
29 #define CC_INPUTBUFFER_SIZE 256
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
30
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
31 #define CC_MAX_LINE_LENGTH 64
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
32
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
33 static char chartbl[128];
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
34
6791
a3b2f80f3a26 codmetics :)
arpi
parents: 6784
diff changeset
35 static subtitle buf1,buf2;
a3b2f80f3a26 codmetics :)
arpi
parents: 6784
diff changeset
36 static subtitle *fb,*bb;
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
37
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
38 static unsigned int cursor_pos=0;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
39
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
40 static int inited=0;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
41 static unsigned char inputbuffer[CC_INPUTBUFFER_SIZE];
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
42 static unsigned int inputlength;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
43
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
44 static void build_char_table(void)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
45 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
46 int i;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
47 /* first the normal ASCII codes */
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
48 for (i = 0; i < 128; i++)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
49 chartbl[i] = (char) i;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
50 /* now the special codes */
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
51 chartbl[0x2a] = 'á';
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
52 chartbl[0x5c] = 'é';
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
53 chartbl[0x5e] = 'í';
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
54 chartbl[0x5f] = 'ó';
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
55 chartbl[0x60] = 'ú';
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
56 chartbl[0x7b] = 'ç';
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
57 chartbl[0x7c] = '÷';
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
58 chartbl[0x7d] = 'Ñ';
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
59 chartbl[0x7e] = 'ñ';
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
60 chartbl[0x7f] = '¤'; /* FIXME: this should be a solid block */
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
61 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
62
6791
a3b2f80f3a26 codmetics :)
arpi
parents: 6784
diff changeset
63 static void clear_buffer(subtitle *buf)
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
64 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
65 int i;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
66 buf->lines=0;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
67 for(i=0;i<SUB_MAX_TEXT;i++) if(buf->text[i]) {free(buf->text[i]);buf->text[i]=NULL;}
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
68 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
69
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
70
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 8123
diff changeset
71 void subcc_init(void)
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
72 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
73 int i;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
74 //printf("subcc_init(): initing...\n");
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
75 build_char_table();
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
76 for(i=0;i<SUB_MAX_TEXT;i++) {buf1.text[i]=buf2.text[i]=NULL;}
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
77 buf1.lines=buf2.lines=0;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
78 fb=&buf1;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
79 bb=&buf2;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
80
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
81 inited=1;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
82 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
83
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
84 static void append_char(char c)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
85 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
86 if(!bb->lines) {bb->lines++; cursor_pos=0;}
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
87 if(bb->text[bb->lines - 1]==NULL)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
88 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
89 bb->text[bb->lines - 1]=malloc(CC_MAX_LINE_LENGTH);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
90 memset(bb->text[bb->lines - 1],0,CC_MAX_LINE_LENGTH);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
91 cursor_pos=0;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
92 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
93
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
94 if(c=='\n')
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
95 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
96 if(cursor_pos>0)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
97 bb->lines++;cursor_pos=0;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
98 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
99 else
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
100 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
101 if(cursor_pos==CC_MAX_LINE_LENGTH-1)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
102 {
17971
fd0d4b94b5ec Change some printf calls to fprintf.
diego
parents: 17630
diff changeset
103 fprintf(stderr,"sub_cc.c: append_char() reached CC_MAX_LINE_LENGTH!\n");
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
104 return;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
105 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
106 bb->text[bb->lines - 1][cursor_pos++]=c;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
107 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
108 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
109
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
110
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 8123
diff changeset
111 static void swap_buffers(void)
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
112 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
113 subtitle *foo;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
114 foo=fb;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
115 fb=bb;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
116 bb=foo;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
117 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
118
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
119 static void display_buffer(subtitle * buf)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
120 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
121 vo_sub=buf;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
122 vo_osd_changed(OSDTYPE_SUBTITLE);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
123 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
124
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
125
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
126 static void cc_decode_EIA608(unsigned short int data)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
127 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
128
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
129 static unsigned short int lastcode=0x0000;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
130 unsigned char c1 = data & 0x7f;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
131 unsigned char c2 = (data >> 8) & 0x7f;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
132
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
133 if (c1 & 0x60) { /* normal character, 0x20 <= c1 <= 0x7f */
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
134 append_char(chartbl[c1]);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
135 if(c2 & 0x60) /*c2 might not be a normal char even if c1 is*/
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
136 append_char(chartbl[c2]);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
137 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
138 else if (c1 & 0x10) // control code / special char
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
139 {
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 6791
diff changeset
140 // int channel= (c1 & 0x08) >> 3;
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
141 c1&=~0x08;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
142 if(data!=lastcode)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
143 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
144 if(c2 & 0x40) { /*PAC, Preamble Address Code */
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
145 append_char('\n'); /*FIXME properly interpret PACs*/
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
146 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
147 else
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
148 switch(c1)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
149 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
150 case 0x10: break; // ext attribute
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
151 case 0x11:
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
152 if((c2 & 0x30)==0x30)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
153 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
154 //printf("[debug]:Special char (ignored)\n");
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
155 /*cc_decode_special_char()*/;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
156 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
157 else if (c2 & 0x20)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
158 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
159 //printf("[debug]: midrow_attr (ignored)\n");
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
160 /*cc_decode_midrow_attr()*/;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
161 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
162 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
163 case 0x14:
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
164 switch(c2)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
165 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
166 case 0x2C: display_buffer(NULL); //EDM
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
167 clear_buffer(fb); break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
168 case 0x2d: append_char('\n'); //carriage return
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
169 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
170 case 0x2e: clear_buffer(bb); //ENM
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
171 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
172 case 0x2f: swap_buffers(); //Swap buffers
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
173 display_buffer(fb);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
174 clear_buffer(bb);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
175 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
176 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
177 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
178 case 0x17:
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
179 if( c2>=0x21 && c2<=0x23) //TAB
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
180 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
181 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
182 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
183 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
184 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
185 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
186 lastcode=data;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
187 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
188
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 8123
diff changeset
189 static void subcc_decode(void)
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
190 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
191 /* The first number may denote a channel number. I don't have the
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
192 * EIA-708 standard, so it is hard to say.
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
193 * From what I could figure out so far, the general format seems to be:
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
194 *
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
195 * repeat
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
196 *
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
197 * 0xfe starts 2 byte sequence of unknown purpose. It might denote
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
198 * field #2 in line 21 of the VBI. We'll ignore it for the
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
199 * time being.
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
200 *
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
201 * 0xff starts 2 byte EIA-608 sequence, field #1 in line 21 of the VBI.
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
202 * Followed by a 3-code triplet that starts either with 0xff or
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
203 * 0xfe. In either case, the following triplet needs to be ignored
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
204 * for line 21, field 1.
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
205 *
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
206 * 0x00 is padding, followed by 2 more 0x00.
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
207 *
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
208 * 0x01 always seems to appear at the beginning, always seems to
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
209 * be followed by 0xf8, 8-bit number.
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
210 * The lower 7 bits of this 8-bit number seem to denote the
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
211 * number of code triplets that follow.
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
212 * The most significant bit denotes whether the Line 21 field 1
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
213 * captioning information is at odd or even triplet offsets from this
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
214 * beginning triplet. 1 denotes odd offsets, 0 denotes even offsets.
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
215 *
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
216 * Most captions are encoded with odd offsets, so this is what we
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
217 * will assume.
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
218 *
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
219 * until end of packet
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
220 */
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
221 unsigned char *current = inputbuffer;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
222 unsigned int curbytes = 0;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
223 unsigned char data1, data2;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
224 unsigned char cc_code;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
225 int odd_offset = 1;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
226
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
227 while (curbytes < inputlength) {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
228 int skip = 2;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
229
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
230 cc_code = *(current);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
231
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
232 if (inputlength - curbytes < 2) {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
233 #ifdef LOG_DEBUG
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
234 fprintf(stderr, "Not enough data for 2-byte CC encoding\n");
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
235 #endif
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
236 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
237 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
238
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
239 data1 = *(current+1);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
240 data2 = *(current + 2);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
241 current++; curbytes++;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
242
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
243 switch (cc_code) {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
244 case 0xfe:
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
245 /* expect 2 byte encoding (perhaps CC3, CC4?) */
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
246 /* ignore for time being */
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
247 skip = 2;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
248 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
249
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
250 case 0xff:
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
251 /* expect EIA-608 CC1/CC2 encoding */
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
252 // FIXME check parity!
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
253 // Parity check omitted assuming we are reading from a DVD and therefore
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
254 // we should encounter no "transmission errors".
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
255 cc_decode_EIA608(data1 | (data2 << 8));
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
256 skip = 5;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
257 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
258
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
259 case 0x00:
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
260 /* This seems to be just padding */
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
261 skip = 2;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
262 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
263
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
264 case 0x01:
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
265 odd_offset = data2 & 0x80;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
266 if (odd_offset)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
267 skip = 2;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
268 else
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
269 skip = 5;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
270 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
271
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
272 default:
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
273 //#ifdef LOG_DEBUG
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
274 fprintf(stderr, "Unknown CC encoding: %x\n", cc_code);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
275 //#endif
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
276 skip = 2;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
277 break;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
278 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
279 current += skip;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
280 curbytes += skip;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
281 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
282 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
283
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
284
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
285 void subcc_process_data(unsigned char *inputdata,unsigned int len)
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
286 {
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
287 if(!subcc_enabled) return;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
288 if(!inited) subcc_init();
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
289
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
290 memcpy(inputbuffer,inputdata,len);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
291 inputlength=len;
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
292 subcc_decode();
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
293 }
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents:
diff changeset
294