annotate libmpdemux/demux_ty_osd.c @ 31787:a60157df1f1f

Update global_sub_pos if we auto-selected a subtitle. This avoid strange behaviour with subtitle selection in that case, because the subtitle selection code thinks no subtitle was displayed while we actually did display one.
author reimar
date Thu, 29 Jul 2010 17:05:23 +0000
parents 32725ca88fed
children cc222c24104f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25768
3554b31074de Add name to email address.
diego
parents: 25671
diff changeset
1 // Most of this was written by Mike Baker <mbm@linux.com>
26648
e5f5e8891f86 Mike Baker agreed to relicense his parts of the code as GPL v2+ on IRC.
diego
parents: 25962
diff changeset
2 // and released under the GPL v2+ license.
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
3 //
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
4 // Modifications and SEVERE cleanup of the code was done by
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
5 // Christopher Wingert
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
6 // Copyright 2003
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
7 //
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
8 // Released under GPL2 License.
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
9
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
10 #include <stdio.h>
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
11 #include <stdlib.h>
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
12 #include <unistd.h>
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
13 #include <time.h>
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
14 #include <stdarg.h>
10310
68e714ed669f fix one missing #include, one missing extern and one 10l error.
rathann
parents: 10263
diff changeset
15 #include <string.h>
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
16
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
17 #include "config.h"
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
18 #include "mp_msg.h"
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
19 #include "help_mp.h"
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
20
22605
4d81dbdf46b9 Add explicit location for headers from the stream/ directory.
diego
parents: 19104
diff changeset
21 //#include "stream/stream.h"
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
22 //#include "demuxer.h"
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
23 //#include "parse_es.h"
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
24 //#include "stheader.h"
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
25 //#include "mp3_hdr.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 11000
diff changeset
26 //#include "subreader.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 11000
diff changeset
27 #include "sub_cc.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 11000
diff changeset
28 #include "libvo/sub.h"
30577
737b7fd47ef4 Add header for ty_ClearOSD(), ty_processuserdata(); avoids forward declarations.
diego
parents: 29263
diff changeset
29 #include "demux_ty_osd.h"
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
30
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
31 //#include "dvdauth.h"
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
32
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
33 extern int sub_justify;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
34
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
35 #define TY_TEXT_MODE ( 1 << 0 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
36 #define TY_OSD_MODE ( 1 << 1 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
37
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
38 static int TY_OSD_flags = TY_TEXT_MODE | TY_OSD_MODE;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
39 static int TY_OSD_debug = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
40
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
41 // ===========================================================================
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
42 // Closed Caption Decoding and OSD Presentation
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
43 // ===========================================================================
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
44 #define TY_CCNONE ( -3 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
45 #define TY_CCTEXTMODE ( -2 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
46 #define TY_CCPOPUPNB ( -1 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
47 #define TY_CCPOPUP ( 0 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
48 #define TY_CCPAINTON ( 1 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
49
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
50 #define TY_CC_MAX_X ( 45 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
51
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
52 static int TY_CC_CUR_X;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
53 static int TY_CC_CUR_Y;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
54 static int TY_CC_stat = TY_CCNONE;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
55 static char TY_CC_buf[ 255 ];
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
56 static char *TY_CC_ptr = TY_CC_buf;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
57 static unsigned TY_CC_lastcap = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
58 static int TY_CC_TextItalic;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
59 static int TY_CC_Y_Offset;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
60
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
61 static subtitle ty_OSD1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
62 static subtitle ty_OSD2;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
63 static subtitle *ty_pOSD1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
64 static subtitle *ty_pOSD2;
25962
afa125da85cf typo fix: inited --> initialized
diego
parents: 25768
diff changeset
65 static int tyOSDInitialized = 0;
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
66 static int tyOSDUpdate = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
67
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 17012
diff changeset
68 static void ty_DrawOSD(void)
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
69 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
70 // printf( "Calling ty_DrawOSD()\n" );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
71 tyOSDUpdate = 1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
72 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
73
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
74 void ty_ClearOSD( int start )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
75 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
76 int index;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
77 // printf( "Calling ty_ClearOSD()\n" );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
78 for ( index = start ; index < SUB_MAX_TEXT ; index++ )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
79 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
80 memset( ty_OSD1.text[ index ], ' ', TY_CC_MAX_X - 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
81 ty_OSD1.text[ index ][ TY_CC_MAX_X - 1 ] = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
82 memset( ty_OSD2.text[ index ], ' ', TY_CC_MAX_X - 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
83 ty_OSD2.text[ index ][ TY_CC_MAX_X - 1 ] = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
84 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
85 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
86
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
87 static void ty_DrawChar( int *x, int *y, char disChar, int fgColor, int bgColor )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
88 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
89 int cx;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
90 int cy;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
91
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
92 cx = *x;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
93 cy = *y;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
94
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
95 if ( *x >= ( TY_CC_MAX_X - 1 ) )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
96 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
97 cx = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
98 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
99 if ( ( *y + TY_CC_Y_Offset ) > SUB_MAX_TEXT )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
100 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
101 cy = SUB_MAX_TEXT - TY_CC_Y_Offset - 1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
102 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
103
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
104 // printf( "Calling ty_DrawChar() x:%d y:%d %c fg:%d bg:%d\n",
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
105 // cx, cy, disChar, fgColor, bgColor );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
106
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
107 ty_OSD1.text[ TY_CC_Y_Offset + cy ][ cx ] = disChar;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
108 memset( &( ty_OSD1.text[ TY_CC_Y_Offset + cy ][ cx + 1 ] ), ' ',
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
109 TY_CC_MAX_X - cx - 2 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
110 ( *x )++;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
111 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
112
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
113 static void ty_RollupBuf( int dest, int source, int numLines )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
114 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
115 int index;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
116
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
117 // printf( "Calling ty_RollupBuf() dest:%d source %d, numLines %d\n",
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
118 // dest, source, numLines );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
119 //
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
120 if ( ( source + TY_CC_Y_Offset + numLines ) > SUB_MAX_TEXT )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
121 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
122 ty_ClearOSD( 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
123 return;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
124 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
125
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
126 if ( ( source + TY_CC_Y_Offset + numLines ) < 0 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
127 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
128 ty_ClearOSD( 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
129 return;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
130 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
131
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
132 if ( numLines > SUB_MAX_TEXT )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
133 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
134 ty_ClearOSD( 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
135 return;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
136 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
137
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
138 for ( index = 0 ; index < numLines ; index++ )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
139 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
140 strcpy( ty_OSD1.text[ TY_CC_Y_Offset + dest ],
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
141 ty_OSD1.text[ TY_CC_Y_Offset + source ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
142 dest++;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
143 source++;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
144 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
145 memset( ty_OSD1.text[ TY_CC_Y_Offset + source - 1 ], ' ', TY_CC_MAX_X - 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
146 ty_OSD1.text[ TY_CC_Y_Offset + source - 1 ][ TY_CC_MAX_X - 1 ] = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
147 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
148
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
149 static void ty_drawchar( char c )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
150 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
151 if ( c < 2 ) return;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
152
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
153 if ( TY_OSD_flags & TY_OSD_MODE && TY_CC_stat != TY_CCNONE &&
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
154 TY_CC_CUR_Y != -1 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
155 ty_DrawChar( &TY_CC_CUR_X, &TY_CC_CUR_Y, c, 4, 13 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
156
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
157 if ( TY_CC_ptr - TY_CC_buf > sizeof( TY_CC_buf ) - 1 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
158 { // buffer overflow
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
159 TY_CC_ptr = TY_CC_buf;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
160 memset( TY_CC_buf, 0, sizeof( TY_CC_buf ) );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
161 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
162 *( TY_CC_ptr++ ) = ( c == 14 ) ? '/' : c; // swap a '/' for musical note
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
163 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
164
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 17012
diff changeset
165 static void ty_draw(void)
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
166 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
167 if ( TY_CC_ptr != TY_CC_buf && TY_OSD_flags & TY_TEXT_MODE )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
168 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
169 if ( *( TY_CC_ptr - 1 ) == '\n' ) *( TY_CC_ptr - 1 ) = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
170
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
171 mp_msg( MSGT_DEMUX, MSGL_V, "CC: %s\n", TY_CC_buf );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
172 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
173 TY_CC_lastcap = time( NULL );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
174
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
175 TY_CC_ptr = TY_CC_buf;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
176 memset( TY_CC_buf, 0, sizeof( TY_CC_buf) );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
177
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
178 if ( TY_OSD_flags & TY_OSD_MODE ) ty_DrawOSD();
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
179 if ( TY_CC_TextItalic ) TY_CC_TextItalic = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
180 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
181
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
182
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
183 static int CC_last = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
184 static char CC_mode = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
185 static int CC_row[] =
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
186 {
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
187 11, -1, 1, 2, 3, 4, 12, 13, 14, 15, 5, 6, 7, 8, 9, 10
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
188 };
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
189
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
190 // char specialchar[] = { '®', '°', '½', '¿', '*', '¢', '£', 14, 'à', ' ', 'è', 'â', 'ê', 'î', 'ô', 'û' };
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
191
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
192 static int ty_CCdecode( char b1, char b2 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
193 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
194 int x;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
195 int data = ( b2 << 8 ) + b1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
196
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
197 if ( b1 & 0x60 ) // text
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
198 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
199 if ( !TY_OSD_debug && TY_CC_stat == TY_CCNONE ) return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
200 if ( TY_OSD_debug > 3 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
201 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
202 mp_msg( MSGT_DEMUX, MSGL_DBG3, "%c %c", b1, b2 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
203 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
204 ty_drawchar( b1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
205 ty_drawchar( b2 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
206
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
207 if ( TY_CC_stat > 0 && TY_OSD_flags & TY_OSD_MODE ) ty_DrawOSD();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
208 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
209 else if ( ( b1 & 0x10 ) && ( b2 > 0x1F ) && ( data != CC_last ) )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
210 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
211 #define CURRENT ( ( b1 & 0x08 ) >> 3 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
212
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
213 if ( CC_mode != CURRENT && TY_CC_stat != TY_CCNONE )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
214 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
215 if ( TY_OSD_debug && TY_CC_ptr != TY_CC_buf ) ty_draw();
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
216 TY_CC_stat = TY_CCNONE;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
217 return 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
218 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
219
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
220 if ( TY_CC_stat == TY_CCNONE || TY_CC_CUR_Y == -1 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
221 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
222 if ( TY_CC_ptr != TY_CC_buf )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
223 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
224 if ( TY_OSD_debug )
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
225 mp_msg( MSGT_DEMUX, MSGL_DBG3, "(TY_OSD_debug) %s\n",
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
226 TY_CC_buf );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
227 TY_CC_ptr = TY_CC_buf;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
228 memset(TY_CC_buf, 0, sizeof(TY_CC_buf));
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
229 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
230
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
231 if ( CC_mode != CURRENT ) return 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
232 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
233
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
234 // preamble address code (row & indent)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
235 if ( b2 & 0x40 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
236 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
237 TY_CC_CUR_Y = CC_row[ ( ( b1 << 1 ) & 14 ) | ( ( b2 >> 5 ) & 1 ) ];
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
238
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
239 // Offset into MPlayer's Buffer
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
240 if ( ( TY_CC_CUR_Y >= 1 ) && ( TY_CC_CUR_Y <= 4 ) )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
241 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
242 TY_CC_Y_Offset = SUB_MAX_TEXT - 5 - 1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
243 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
244 if ( ( TY_CC_CUR_Y >= 5 ) && ( TY_CC_CUR_Y <= 10 ) )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
245 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
246 TY_CC_Y_Offset = SUB_MAX_TEXT - 5 - 5;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
247 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
248 if ( ( TY_CC_CUR_Y >= 12 ) && ( TY_CC_CUR_Y <= 15 ) )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
249 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
250 TY_CC_Y_Offset = SUB_MAX_TEXT - 5 - 12;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
251 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
252
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
253 if ( TY_OSD_debug > 3 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
254 mp_msg( MSGT_DEMUX, MSGL_DBG3, "<< preamble %d >>\n", TY_CC_CUR_Y );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
255
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
256 // we still have something in the text buffer
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
257 if (TY_CC_ptr != TY_CC_buf)
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
258 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
259 *(TY_CC_ptr++) = '\n';
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
260 if ( TY_CC_TextItalic )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
261 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
262 TY_CC_TextItalic = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
263 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
264 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
265
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
266 TY_CC_CUR_X = 1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
267 // row contains indent flag
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
268 if ( b2 & 0x10 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
269 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
270 for ( x = 0 ; x < ( ( b2 & 0x0F ) << 1 ) ; x++ )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
271 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
272 TY_CC_CUR_X++;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
273 *(TY_CC_ptr++) = ' ';
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
274 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
275 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
276 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
277 else
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
278 // !(b2 & 0x40)
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
279 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
280 if ( TY_OSD_debug > 3 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
281 mp_msg( MSGT_DEMUX, MSGL_DBG3, "<< %02x >>\n", b1 & 0x7 );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
282 switch (b1 & 0x07)
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
283 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
284 case 0x00: // attribute
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
285 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
286 if ( TY_OSD_debug > 1 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
287 mp_msg( MSGT_DEMUX, MSGL_DBG3, "<<A: %d>>\n", b2 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
288 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
289 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
290 case 0x01: // midrow or char
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
291 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
292 switch (b2 & 0x70)
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
293 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
294 case 0x20: // midrow attribute change
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
295 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
296 switch (b2 & 0x0e)
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
297 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
298 case 0x00: // italics off
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
299 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
300 TY_CC_TextItalic = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
301 *(TY_CC_ptr++) = ' ';
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
302 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
303 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
304 case 0x0e: // italics on
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
305 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
306 ty_drawchar(' ');
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
307 TY_CC_TextItalic = 1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
308 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
309 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
310 default:
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
311 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
312 if ( TY_OSD_debug > 1 )
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
313 mp_msg( MSGT_DEMUX, MSGL_DBG3, "<<D: %d>>\n",
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
314 b2 & 0x0e );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
315 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
316 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
317 if ( b2 & 0x01 )
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
318 {
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
319 // TextUnderline = 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
320 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
321 else
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
322 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
323 // TextUnderline = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
324 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
325 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
326 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
327 case 0x30: // special character..
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
328 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
329 // transparent space
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
330 if ( ( b2 & 0x0f ) == 9 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
331 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
332 TY_CC_CUR_X++;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
333 *(TY_CC_ptr++) = ' ';
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
334 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
335 else
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
336 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
337 // ty_drawchar(specialchar[ b2 & 0x0f ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
338 ty_drawchar( ' ' );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
339 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
340 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
341 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
342 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
343 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
344 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
345
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
346 case 0x04: // misc
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
347 case 0x05: // misc + F
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
348 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
349 if ( TY_OSD_debug > 3 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
350 mp_msg( MSGT_DEMUX, MSGL_DBG3, "<< misc %02x >>\n", b2 );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
351 switch ( b2 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
352 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
353 case 0x20: // resume caption (new caption)
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
354 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
355 if ( TY_OSD_flags & TY_OSD_MODE &&
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
356 TY_CC_stat != TY_CCPOPUP )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
357 ty_ClearOSD( 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
358 TY_CC_stat = TY_CCPOPUP;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
359 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
360 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
361
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
362 case 0x21: // backspace
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
363 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
364 TY_CC_CUR_X--;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
365 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
366 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
367
23913
8b9b08c45999 Do not use gnu case-range extension if it's easy to avoid
reimar
parents: 23635
diff changeset
368 case 0x25: // 2-4 row captions
8b9b08c45999 Do not use gnu case-range extension if it's easy to avoid
reimar
parents: 23635
diff changeset
369 case 0x26:
8b9b08c45999 Do not use gnu case-range extension if it's easy to avoid
reimar
parents: 23635
diff changeset
370 case 0x27:
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
371 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
372 if ( TY_CC_stat == TY_CCPOPUP ) ty_ClearOSD( 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
373 TY_CC_stat = b2 - 0x23;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
374 if ( TY_CC_CUR_Y < TY_CC_stat ) TY_CC_CUR_Y = TY_CC_stat;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
375 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
376 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
377
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
378 case 0x29: // resume direct caption
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
379 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
380 TY_CC_stat = TY_CCPAINTON;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
381 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
382 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
383
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
384 case 0x2A: // text restart
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
385 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
386 ty_draw();
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
387 /* FALL */
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
388 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
389
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
390 case 0x2B: // resume text display
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
391 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
392 TY_CC_stat = TY_CCTEXTMODE;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
393 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
394 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
395
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
396 case 0x2C: // erase displayed memory
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
397 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
398 TY_CC_lastcap = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
399 if ( TY_OSD_flags & TY_OSD_MODE )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
400 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
401 if ( TY_CC_stat > TY_CCPOPUP || TY_CC_ptr == TY_CC_buf )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
402 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
403 ty_ClearOSD( 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
404 ty_draw();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
405 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
406 else
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
407 {
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
408 ty_ClearOSD( 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
409
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
410 // CRW -
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
411 // new buffer
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
412 // Used to be a buffer swap here, dunno why
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
413 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
414 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
415 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
416 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
417
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
418 case 0x2D: // carriage return
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
419 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
420 ty_draw();
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
421 TY_CC_CUR_X = 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
422 if ( TY_OSD_flags & TY_OSD_MODE )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
423 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
424 if ( TY_CC_stat > TY_CCPAINTON )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
425 ty_RollupBuf
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
426 (
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
427 TY_CC_CUR_Y - TY_CC_stat + 1 ,
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
428 TY_CC_CUR_Y - TY_CC_stat + 2,
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
429 TY_CC_stat - 1
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
430 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
431 else
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
432 TY_CC_CUR_Y++;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
433 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
434 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
435 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
436
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
437 case 0x2F: // end caption + swap memory
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
438 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
439 ty_draw();
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
440 /* FALL THROUGH TO 0x2E */
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
441 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
442
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
443 case 0x2E: // erase non-displayed memory
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
444 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
445 if ( TY_OSD_debug && TY_CC_ptr != TY_CC_buf )
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
446 mp_msg( MSGT_DEMUX, MSGL_DBG3, "(TY_OSD_debug) %s\n",
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
447 TY_CC_buf );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
448 if ( TY_OSD_flags & TY_OSD_MODE ) ty_ClearOSD( 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
449
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
450 TY_CC_CUR_X = 1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
451 TY_CC_CUR_Y = -1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
452
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
453 TY_CC_ptr = TY_CC_buf;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
454 memset( TY_CC_buf, 0, sizeof( TY_CC_buf ) );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
455 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
456 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
457 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
458 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
459 case 0x07: // misc (TAB)
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
460 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
461 for ( x = 0 ; x < ( b2 - 0x20 ) ; x++ )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
462 TY_CC_CUR_X++;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
463 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
464 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
465 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
466 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
467 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
468 CC_last = data;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
469 return 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
470 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
471
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
472 // ===========================================================================
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
473 // Extended Data Service Decoding and OSD Presentation
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
474 // ===========================================================================
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
475 #define XDS_BUFFER_LENGTH ( 16 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
476 #define XDS_DISPLAY_FRAMES ( 120 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
477 static char *ty_XDS_Display[ XDS_BUFFER_LENGTH ];
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
478 static int ty_XDSAddLine = -1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
479 static int ty_XDSDisplayCount = -1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
480
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
481
19104
2ec2301183cd marks several read-only string parameters which aren't modified inside the called function as const. Patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents: 18958
diff changeset
482 static void ty_AddXDSToDisplay( const char *format, ... )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
483 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
484 char line[ 80 ];
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
485 int index;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
486 va_list ap;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
487
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
488 if ( ty_XDSAddLine == -1 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
489 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
490 for( index = 0 ; index < XDS_BUFFER_LENGTH ; index++ )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
491 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
492 ty_XDS_Display[ index ] = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
493 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
494 ty_XDSAddLine = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
495 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
496
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
497 va_start( ap, format );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
498 vsnprintf( line, 80, format, ap );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
499 va_end( ap );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
500 mp_msg( MSGT_DEMUX, MSGL_V, "XDS: %s\n", line );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
501
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
502 if ( ty_XDSAddLine == XDS_BUFFER_LENGTH )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
503 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
504 mp_msg( MSGT_DEMUX, MSGL_ERR, "XDS Buffer would have been blown\n" );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
505 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
506
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
507 if ( ty_XDS_Display[ ty_XDSAddLine ] != 0 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
508 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
509 free( ty_XDS_Display[ ty_XDSAddLine ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
510 ty_XDS_Display[ ty_XDSAddLine ] = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
511 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
512
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
513 ty_XDS_Display[ ty_XDSAddLine ] = malloc( strlen( line ) + 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
514 strcpy( ty_XDS_Display[ ty_XDSAddLine ], line );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
515 ty_XDSAddLine++;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
516 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
517
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
518
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 17012
diff changeset
519 static void ty_DisplayXDSInfo(void)
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
520 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
521 int index;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
522 int size;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
523
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
524 if ( ty_XDSDisplayCount == -1 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
525 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
526 for( index = 0 ; index < XDS_BUFFER_LENGTH ; index++ )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
527 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
528 if ( ty_XDS_Display[ index ] != 0 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
529 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
530 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
531 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
532 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
533 if ( index != XDS_BUFFER_LENGTH )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
534 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
535 size = strlen( ty_XDS_Display[ index ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
536
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
537 // Right Justify the XDS Stuff
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
538 memcpy( &( ty_OSD1.text[ 0 ][ TY_CC_MAX_X - size - 1 ] ),
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
539 ty_XDS_Display[ index ], size );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
540 free( ty_XDS_Display[ index ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
541 ty_XDS_Display[ index ] = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
542 ty_XDSDisplayCount = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
543 tyOSDUpdate = 1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
544
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
545 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
546 else
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
547 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
548 // We cleaned out all the XDS stuff to be displayed
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
549 ty_XDSAddLine = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
550 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
551 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
552 else
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
553 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
554 // We displayed that piece of XDS information long enough
11000
6e35326c742f many small typo and grammar fixes
gabucino
parents: 10858
diff changeset
555 // Let's move on
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
556 ty_XDSDisplayCount++;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
557 if ( ty_XDSDisplayCount >= XDS_DISPLAY_FRAMES )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
558 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
559 memset( ty_OSD1.text[ 0 ], ' ', TY_CC_MAX_X - 1 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
560 ty_OSD1.text[ 0 ][ TY_CC_MAX_X - 1 ] = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
561 ty_XDSDisplayCount = -1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
562 tyOSDUpdate = 1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
563 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
564 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
565 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
566
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
567
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
568 static int TY_XDS_mode = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
569 static int TY_XDS_type = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
570 static int TY_XDS_length = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
571 static char TY_XDS_checksum = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
572
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
573 // Array of [ Mode ][ Type ][ Length ]
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
574 static char TY_XDS [ 8 ][ 25 ][ 34 ];
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
575 static char TY_XDS_new[ 8 ][ 25 ][ 34 ];
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
576
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
577 // Array of [ MPAARating|TVRating ][ NumberRatings ]
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
578 static const char * const TY_XDS_CHIP[ 2 ][ 8 ] =
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
579 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
580 { "(NOT APPLICABLE)", "G", "PG", "PG-13", "R", "NC-17", "X", "(NOT RATED)" },
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
581 { "(NOT RATED)", "TV-Y", "TV-Y7", "TV-G", "TV-PG", "TV-14", "TV-MA",
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
582 "(NOT RATED)" }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
583 };
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
584
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
585 static const char * const TY_XDS_modes[] =
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
586 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
587 "CURRENT", // 01h-02h current program
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
588 "FUTURE ", // 03h-04h future program
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
589 "CHANNEL", // 05h-06h channel
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
590 "MISC. ", // 07h-08h miscellaneous
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
591 "PUBLIC ", // 09h-0Ah public service
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
592 "RESERV.", // 0Bh-0Ch reserved
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
593 "UNDEF. ",
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
594 "INVALID",
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
595 "INVALID",
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
596 "INVALID"
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
597 };
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
598
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
599 static int ty_XDSdecode( char b1, char b2 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
600 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
601 char line[ 80 ];
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
602
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
603 if ( b1 < 0x0F )
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
604 { // start packet
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
605 TY_XDS_length = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
606 TY_XDS_mode = b1 >> 1; // every other mode is a resume
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
607 TY_XDS_type = b2;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
608 TY_XDS_checksum = b1 + b2;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
609 return 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
610 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
611
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
612 TY_XDS_checksum += b1 + b2;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
613
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
614 // eof (next byte is checksum)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
615 if ( b1 == 0x0F )
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
616 {
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
617 // validity check
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
618 if ( !TY_XDS_length || TY_XDS_checksum & 0x7F )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
619 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
620 if ( TY_OSD_debug > 3 && !TY_XDS_length )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
621 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
622 mp_msg( MSGT_DEMUX, MSGL_DBG3,
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
623 "%% TY_XDS CHECKSUM ERROR (ignoring)\n" );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
624 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
625 else
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
626 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
627 TY_XDS_mode = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
628 TY_XDS_type = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
629 return 1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
630 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
631 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
632
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
633 // check to see if the data has changed.
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
634 if ( strncmp( TY_XDS[ TY_XDS_mode ][ TY_XDS_type ],
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
635 TY_XDS_new[ TY_XDS_mode ][ TY_XDS_type ], TY_XDS_length - 1 ) )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
636 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
637 char *TY_XDS_ptr = TY_XDS[ TY_XDS_mode ][ TY_XDS_type ];
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
638
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
639 TY_XDS_ptr[ TY_XDS_length ] = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
640 memcpy( TY_XDS[ TY_XDS_mode ][ TY_XDS_type ],
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
641 TY_XDS_new[ TY_XDS_mode ][ TY_XDS_type ], TY_XDS_length );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
642
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
643 // nasty hack: only print time codes if seconds are 0
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
644 if ( TY_XDS_mode == 3 && TY_XDS_type == 1 &&
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
645 !( TY_XDS_new[ 3 ][ 1 ][ 3 ] & 0x20 ) )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
646 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
647 return 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
648 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
649 if ( TY_XDS_mode == 0 && TY_XDS_type == 2 &&
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
650 ( TY_XDS_new[ 0 ][ 2 ][ 4 ] & 0x3f ) > 1 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
651 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
652 return 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
653 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
654
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
655 mp_msg( MSGT_DEMUX, MSGL_DBG3, "%% %s ", TY_XDS_modes[ TY_XDS_mode ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
656
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
657 line[ 0 ] = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
658 // printf( "XDS Code %x\n",
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
659 // ( TY_XDS_mode << 9 ) + TY_XDS_type + 0x100 );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
660 switch ( ( TY_XDS_mode << 9 ) + TY_XDS_type + 0x100 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
661 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
662 // cases are specified in 2 bytes hex representing mode, type.
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
663 // TY_XDS_ptr will point to the current class buffer
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
664 case 0x0101: // current
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
665 case 0x0301: // future
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
666 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
667 char *mon[] =
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
668 {
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
669 "0", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
670 "Aug", "Sep", "Oct", "Nov", "Dec", "13", "14", "15"
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
671 };
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
672 ty_AddXDSToDisplay( "AIR DATE: %s %2d %d:%02d:00",
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
673 mon[ TY_XDS_ptr[ 3 ] & 0x0f ],
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
674 TY_XDS_ptr[ 2 ] & 0x1f,
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
675 TY_XDS_ptr[ 1 ] & 0x1f,
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
676 TY_XDS_ptr[ 0 ] & 0x3f
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
677 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
678
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
679 // Program is tape delayed
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
680 if ( TY_XDS_ptr[ 3 ] & 0x10 ) ty_AddXDSToDisplay( " TAPE" );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
681 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
682 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
683
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
684 case 0x0102: // current program length
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
685 case 0x0302: // future
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
686 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
687 ty_AddXDSToDisplay(
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
688 "DURATION: %d:%02d:%02d of %d:%02d:%02d",
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
689 TY_XDS_ptr[ 3 ] & 0x3f,
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
690 TY_XDS_ptr[ 2 ] & 0x3f,
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
691 TY_XDS_ptr[ 4 ] & 0x3f,
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
692 TY_XDS_ptr[ 1 ] & 0x3f,
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
693 TY_XDS_ptr[ 0 ] & 0x3f, 0);
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
694 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
695 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
696
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
697 case 0x0103: // current program name
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
698 case 0x0303: // future
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
699 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
700 ty_AddXDSToDisplay( "TITLE: %s", TY_XDS_ptr );
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
701 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
702 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
703
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
704 case 0x0104: // current program type
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
705 case 0x0304: // future
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
706 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
707 // for now just print out the raw data
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
708 // requires a 127 string array to parse
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
709 // properly and isn't worth it.
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
710 sprintf ( line, "%sGENRE:", line );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
711 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
712 int x;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
713 for ( x = 0 ; x < TY_XDS_length ; x++ )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
714 sprintf( line, "%s %02x", line, TY_XDS_ptr[ x ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
715 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
716 ty_AddXDSToDisplay( line );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
717 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
718 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
719
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
720 case 0x0105: // current program rating
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
721 case 0x0305: // future
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
722 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
723 sprintf( line, "%sRATING: %s", line,
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
724 TY_XDS_CHIP[ ( TY_XDS_ptr[ 0 ] & 0x08 ) >> 3 ]
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
725 [ TY_XDS_ptr[ 1 ] & 0x07 ] );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
726 if ( TY_XDS_ptr[ 0 ] & 0x20 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
727 sprintf( line, "%s DIALOGUE", line );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
728 if ( TY_XDS_ptr[ 1 ] & 0x08 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
729 sprintf( line, "%s LANGUAGE", line );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
730 if ( TY_XDS_ptr[ 1 ] & 0x10 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
731 sprintf( line, "%s SEXUAL", line );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
732 if ( TY_XDS_ptr[ 1 ] & 0x20 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
733 sprintf( line, "%s VIOLENCE", line );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
734 ty_AddXDSToDisplay( line );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
735
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
736 // raw output for verification.
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
737 if ( TY_OSD_debug > 1 )
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
738 mp_msg( MSGT_DEMUX, MSGL_DBG3, " (%02x %02x)",
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
739 TY_XDS_ptr[ 0 ], TY_XDS_ptr[ 1 ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
740 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
741 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
742
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
743 case 0x0106: // current program audio services
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
744 case 0x0306: // future
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
745 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
746 // requires table, never actually seen it used either
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
747 ty_AddXDSToDisplay( "AUDIO: %02x %02x", TY_XDS_ptr[ 0 ],
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
748 TY_XDS_ptr[ 1 ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
749 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
750 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
751
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
752 case 0x0109: // current program aspect ratio
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
753 case 0x0309: // future
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
754 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
755 // requires table, rare
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
756 ty_AddXDSToDisplay( "ASPECT: %02x %02x",
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
757 TY_XDS_ptr[ 0 ], TY_XDS_ptr[ 1 ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
758 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
759 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
760
23914
43718b819ab4 Another missed case-range
reimar
parents: 23913
diff changeset
761 case 0x0110: // program description
43718b819ab4 Another missed case-range
reimar
parents: 23913
diff changeset
762 case 0x0111:
43718b819ab4 Another missed case-range
reimar
parents: 23913
diff changeset
763 case 0x0112:
43718b819ab4 Another missed case-range
reimar
parents: 23913
diff changeset
764 case 0x0113:
43718b819ab4 Another missed case-range
reimar
parents: 23913
diff changeset
765 case 0x0114:
43718b819ab4 Another missed case-range
reimar
parents: 23913
diff changeset
766 case 0x0115:
43718b819ab4 Another missed case-range
reimar
parents: 23913
diff changeset
767 case 0x0116:
43718b819ab4 Another missed case-range
reimar
parents: 23913
diff changeset
768 case 0x0117:
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
769 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
770 ty_AddXDSToDisplay( "DESCRIP: %s", TY_XDS_ptr );
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
771 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
772 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
773
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
774 case 0x0501: // channel network name
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
775 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
776 ty_AddXDSToDisplay( "NETWORK: %s", TY_XDS_ptr );
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
777 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
778 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
779
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
780 case 0x0502: // channel network call letters
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
781 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
782 ty_AddXDSToDisplay( "CALLSIGN: %s", TY_XDS_ptr );
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
783 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
784 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
785
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
786 case 0x0701: // misc. time of day
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
787 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
788 #define TIMEZONE ( TY_XDS[ 3 ][ 4 ][ 0 ] & 0x1f )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
789 #define DST ( ( TY_XDS[ 3 ][ 4 ][ 0 ] & 0x20 ) >> 5 )
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
790 struct tm tm =
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
791 {
10858
da9311e7f5fc warning fix (missing C initializers)
pl
parents: 10310
diff changeset
792 .tm_sec = 0, // sec
da9311e7f5fc warning fix (missing C initializers)
pl
parents: 10310
diff changeset
793 .tm_min = ( TY_XDS_ptr[ 0 ] & 0x3F ), // min
da9311e7f5fc warning fix (missing C initializers)
pl
parents: 10310
diff changeset
794 .tm_hour = ( TY_XDS_ptr[ 1 ] & 0x1F ), // hour
da9311e7f5fc warning fix (missing C initializers)
pl
parents: 10310
diff changeset
795 .tm_mday = ( TY_XDS_ptr[ 2 ] & 0x1F ), // day
da9311e7f5fc warning fix (missing C initializers)
pl
parents: 10310
diff changeset
796 .tm_mon = ( TY_XDS_ptr[ 3 ] & 0x1f ) - 1, // month
da9311e7f5fc warning fix (missing C initializers)
pl
parents: 10310
diff changeset
797 .tm_year = ( TY_XDS_ptr[ 5 ] & 0x3f ) + 90, // year
da9311e7f5fc warning fix (missing C initializers)
pl
parents: 10310
diff changeset
798 .tm_wday = 0, // day of week
da9311e7f5fc warning fix (missing C initializers)
pl
parents: 10310
diff changeset
799 .tm_yday = 0, // day of year
da9311e7f5fc warning fix (missing C initializers)
pl
parents: 10310
diff changeset
800 .tm_isdst = 0, // DST
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
801 };
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
802
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
803 time_t time_t = mktime( &tm );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
804 char *timestr;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
805
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
806 time_t -= ( ( TIMEZONE - DST ) * 60 * 60 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
807 timestr = ctime( &time_t );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
808 timestr[ strlen( timestr ) - 1 ] = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
809
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
810 sprintf( line, "%sCUR.TIME: %s ", line, timestr );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
811 if ( TY_XDS[ 3 ][ 4 ][ 0 ] )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
812 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
813 sprintf( line, "%sUTC-%d", line, TIMEZONE );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
814 if (DST) sprintf( line, "%s DST", line );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
815 }
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
816 else
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
817 sprintf( line, "%sUTC", line );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
818
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
819 ty_AddXDSToDisplay( line );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
820
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
821 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
822 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
823
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
824 case 0x0704: //misc. local time zone
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
825 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
826 sprintf( line, "%sTIMEZONE: UTC-%d",
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
827 line, TY_XDS_ptr[ 0 ] & 0x1f );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
828 if ( TY_XDS_ptr[ 0 ] & 0x20 ) sprintf( line, "%s DST", line );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
829 ty_AddXDSToDisplay( line );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
830 break;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
831 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
832
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
833 default:
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
834 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
835 mp_msg( MSGT_DEMUX, MSGL_DBG3, "UNKNOWN CLASS %d TYPE %d",
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
836 ( TY_XDS_mode << 1 ) + 1, TY_XDS_type );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
837 if ( TY_OSD_debug > 1 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
838 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
839 int x;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
840 mp_msg( MSGT_DEMUX, MSGL_DBG3, "\nDUMP:\n" );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
841 for ( x = 0 ; x < TY_XDS_length ; x++ )
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
842 mp_msg( MSGT_DEMUX, MSGL_DBG3, " %02x %c",
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
843 TY_XDS_ptr[ x ], TY_XDS_ptr[ x ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
844 mp_msg( MSGT_DEMUX, MSGL_DBG3, "\n" );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
845 }
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
846 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
847 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
848 if ( TY_OSD_debug > 1 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
849 mp_msg( MSGT_DEMUX, MSGL_DBG3, " (%d)", TY_XDS_length );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
850 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
851 TY_XDS_mode = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
852 TY_XDS_type = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
853 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27692
diff changeset
854 else if ( TY_XDS_length < 34 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
855 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
856 TY_XDS_new[ TY_XDS_mode ][ TY_XDS_type ][ TY_XDS_length++ ] = b1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
857 TY_XDS_new[ TY_XDS_mode ][ TY_XDS_type ][ TY_XDS_length++ ] = b2;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
858 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
859 return 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
860 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
861
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
862
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
863 // ===========================================================================
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
864 // Callback from Video Display Processing to put up the OSD
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
865 // ===========================================================================
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
866 void ty_processuserdata( unsigned char* buf, int len )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
867 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
868 int index;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
869
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
870 sub_justify = 1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
871
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
872 if ( subcc_enabled )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
873 {
25962
afa125da85cf typo fix: inited --> initialized
diego
parents: 25768
diff changeset
874 if ( tyOSDInitialized == 0 )
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
875 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
876 for ( index = 0; index < SUB_MAX_TEXT ; index++ )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
877 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
878 ty_OSD1.text[ index ] = malloc( TY_CC_MAX_X );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
879 ty_OSD2.text[ index ] = malloc( TY_CC_MAX_X );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
880 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
881 ty_ClearOSD( 0 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
882 ty_OSD1.lines = SUB_MAX_TEXT;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
883 ty_OSD2.lines = SUB_MAX_TEXT;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
884 ty_pOSD1 = &ty_OSD1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
885 ty_pOSD2 = &ty_OSD2;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
886 tyOSDUpdate = 0;
25962
afa125da85cf typo fix: inited --> initialized
diego
parents: 25768
diff changeset
887 tyOSDInitialized = 1;
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
888 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
889
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
890 if ( buf[ 0 ] == 0x01 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
891 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
892 ty_CCdecode( buf[ 1 ], buf[ 2 ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
893 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
894 if ( buf[ 0 ] == 0x02 )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
895 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
896 ty_XDSdecode( buf[ 1 ], buf[ 2 ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
897 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
898
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
899 ty_DisplayXDSInfo();
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
900
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
901 if ( tyOSDUpdate )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
902 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
903 // for ( index = 0; index < SUB_MAX_TEXT ; index++ )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
904 // {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
905 // printf( "OSD:%d:%s\n", index, ty_OSD1.text[ index ] );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
906 // }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
907 vo_sub = &ty_OSD1;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
908 vo_osd_changed( OSDTYPE_SUBTITLE );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
909 tyOSDUpdate = 0;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
910 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
911 }
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents:
diff changeset
912 }