11/****************************************************************************
2- * PROJECT: Changes for Squeak
2+ * PROJECT: Changes for Squeak
33* FILE: changesForSqueak.c
4- * CONTENT:
4+ * CONTENT:
55*
66* AUTHOR: John McIntosh, and others.
7- * ADDRESS:
7+ * ADDRESS:
8899* RCSID: $Id$
1010*
1313*****************************************************************************/
1414/* Squeak on MPEG
1515 by John M McIntosh johnmci#smalltalkconsulting.com Sept 2000
16-
17- For the macintosh I've
16+
17+ For the macintosh I've
1818 1) coded up #ifdef for TARGET_OS_MAC
1919 2) Coded around the pthreads
2020 3) ignored most of mpeg3io_device
2121 4) some changes to make CodeWarrior 5 happy
22-
22+
2323 In General
24-
24+
2525 1) Added some casts
2626 2) had some problems with Mpeg3_stream_coeffs_t
2727 3) coded up memoryAllocate/memoryFree versus malloc/cmalloc/free
2828 4) created a mpeg3_generate_toc_for_Squeak
2929 5) Ignore perror
30-
30+
3131*/
3232// Nov 2nd, 2000 JMM changed memoryAllocate, use calloc
3333// Sept 7nd, 2001 JMM added carbon logic
3939#include "mpeg3protos.h"
4040#include "changesForSqueak.h"
4141
42- #if defined(TARGET_OS_MAC ) && !defined ( __APPLE__ ) && !defined ( __MACH__ )
43- #include <Memory.h>
44- #include <QuickDraw.h>
45- #include "sq.h"
46- #endif
47-
4842#ifdef _WIN32
4943#include <windows.h>
5044#endif
5145
5246mpeg3_demuxer_t * mpeg3_new_demuxer (mpeg3_t * file , int do_audio , int do_video , int stream_id );
5347mpeg3_title_t * mpeg3_new_title (mpeg3_t * file , char * path );
54- mpeg3demux_timecode_t * mpeg3_append_timecode (mpeg3_demuxer_t * demuxer ,
55- mpeg3_title_t * title ,
56- long prev_byte ,
57- double prev_time ,
58- long next_byte ,
48+ mpeg3demux_timecode_t * mpeg3_append_timecode (mpeg3_demuxer_t * demuxer ,
49+ mpeg3_title_t * title ,
50+ long prev_byte ,
51+ double prev_time ,
52+ long next_byte ,
5953 double next_time ,
6054 int dont_store );
61- void appendStringToBufferIfPossible (char * buffer ,char * append ,int bufferSize );
62-
55+ static void appendStringToBufferIfPossible (char * buffer ,char * append ,int bufferSize );
56+
6357
6458static long counter = 0 ;
6559
6660void * memoryAllocate (int number ,unsigned size ) {
6761 void * stuff ;
68- #if defined(TARGET_OS_MAC ) && !defined ( __APPLE__ ) && !defined ( __MACH__ )
69- #if TARGET_API_MAC_CARBON
70- stuff = (void * ) NewPtrClear (size * number );
71- #else
72- stuff = (void * ) NewPtrSysClear (size * number );
73- #endif
74- // if (stuff == nil) Debugger();
75- #else
7662 stuff = (void * ) calloc (size ,number );
77- #endif
7863 counter ++ ;
7964 return stuff ;
8065}
8166
8267void memoryFree (void * stuff ) {
8368 counter -- ;
84- #if defined(TARGET_OS_MAC ) && !defined ( __APPLE__ ) && !defined ( __MACH__ )
85- DisposePtr ((char * )stuff );
86- #else
8769 free (stuff );
88- #endif
8970}
9071
9172
9273
93- #if (defined(TARGET_OS_MAC ) && !defined ( __APPLE__ ) && !defined ( __MACH__ )) || (defined(_WIN32 ) && !defined(__GNUC__ ))
94- #define NEEDSTRFUNCS
95- #endif
96-
97- #ifdef NEEDSTRFUNCS
98- #ifndef _MSC_VER
74+ #if defined(_WIN32 ) && !defined(__GNUC__ )
75+ # ifndef _MSC_VER
9976void perror (const char * string ) {
10077
10178}
102- #endif
79+ # endif
10380
104- int strncasecmp (const char * str1 , const char * str2 , size_t nchars );
105- int strcasecmp (const char * str1 , const char * str2 );
81+ int strncasecmp (const char * str1 , const char * str2 , size_t nchars );
82+ int strcasecmp (const char * str1 , const char * str2 );
10683
107- int strncasecmp (const char * s1 , const char * s2 , size_t len )
84+ int strncasecmp (const char * s1 , const char * s2 , size_t len )
10885{
10986 /* Return true if the two strings are the same, not considering case. */
11087 int i , c1 , c2 ;
@@ -123,44 +100,16 @@ int strncasecmp(const char *s1, const char *s2, size_t len)
123100 return 1 ;
124101}
125102
126- int strcasecmp (const char * str1 , const char * str2 ) {
103+ int strcasecmp (const char * str1 , const char * str2 ) {
127104 if (strlen (str1 ) != strlen (str2 )) return 0 ;
128105 return strncasecmp (str1 ,str2 ,strlen (str1 ));
129106}
107+ #endif // defined(_WIN32) && !defined(__GNUC__)
130108
131-
132- #endif
133-
134- #ifdef _WIN32
135- int bzero (char * block , long size ) {
136- ZeroMemory (block ,size );
137- }
138- #endif
139-
140-
141- #if defined(TARGET_OS_MAC ) && !defined ( __APPLE__ ) && !defined ( __MACH__ )
142- int bzero (char * block ,long size ) {
143- BlockZero (block ,size );
144- }
145-
146- int main ()
147- {
148- }
149-
150- #endif
151-
152- #if defined(TARGET_OS_MAC ) && defined ( __APPLE__ ) && defined ( __MACH__ )
153- int isSystem9_0_or_better (void )
109+ static void appendStringToBufferIfPossible (char * buffer ,char * append ,int bufferSize )
154110{
155- return 1 ;
156- }
157- #endif
158-
159- void appendStringToBufferIfPossible (char * buffer ,char * append ,int bufferSize )
160- {
161- if (strlen (append ) + strlen (buffer ) < bufferSize )
111+ if (strlen (append ) + strlen (buffer ) < bufferSize )
162112 strcat (buffer ,append );
163-
164113}
165114
166115int mpeg3_generate_toc_for_Squeak (mpeg3_t * file , int timecode_search , int print_streams , char * buffer , int bufferSize ) {
@@ -176,17 +125,33 @@ int mpeg3_generate_toc_for_Squeak(mpeg3_t *file, int timecode_search, int print_
176125 if (print_streams ) mpeg3demux_print_streams_for_Squeak (demuxer , buffer ,bufferSize );
177126
178127 sprintf (temp_buffer , "SIZE: %ld\n" , demuxer -> titles [demuxer -> current_title ]-> total_bytes );
179- appendStringToBufferIfPossible (buffer ,temp_buffer ,bufferSize );
128+ appendStringToBufferIfPossible (buffer ,temp_buffer ,bufferSize );
180129 sprintf (temp_buffer , "PACKETSIZE: %ld\n" , demuxer -> packet_size );
181- appendStringToBufferIfPossible (buffer ,temp_buffer ,bufferSize );
130+ appendStringToBufferIfPossible (buffer ,temp_buffer ,bufferSize );
182131
183- mpeg3demux_print_timecodes (demuxer -> titles [demuxer -> current_title ], buffer );
132+ /* inline mpeg3demux_print_timecodes to use sprintf */
133+ mpeg3_title_t * title = demuxer -> titles [demuxer -> current_title ];
134+ if (title -> timecode_table )
135+ {
136+ for (i = 0 ; i < title -> timecode_table_size ; i ++ )
137+ {
138+ mpeg3demux_timecode_t * timecode = & title -> timecode_table [i ];
139+
140+ sprintf (temp_buffer , "REGION: %ld %ld %f %f\n" ,
141+ timecode -> start_byte ,
142+ timecode -> end_byte ,
143+ timecode -> start_time ,
144+ timecode -> end_time );
145+ appendStringToBufferIfPossible (buffer ,temp_buffer ,bufferSize );
146+ }
147+ }
184148
185149 mpeg3_delete_demuxer (demuxer );
186150 return 0 ;
187151 }
188152 return 1 ;
189153}
154+
190155/* Create a title. */
191156/* Build a table of timecodes contained in the program stream. */
192157/* If toc is 0 just read the first and last timecode. */
@@ -195,13 +160,13 @@ int mpeg3demux_create_title_for_Squeak(mpeg3_demuxer_t *demuxer, int timecode_se
195160 int result = 0 , done = 0 , counter_start , counter ;
196161 mpeg3_t * file = (mpeg3_t * ) demuxer -> file ;
197162 long next_byte = 0 , prev_byte = 0 ;
198- double next_time , prev_time , absolute_time ;
163+ double next_time , prev_time ;
199164 long i ;
200165 mpeg3_title_t * title ;
201166 unsigned long test_header = 0 ;
202167 mpeg3demux_timecode_t * timecode = 0 ;
203168 char temp_buffer [256 ];
204-
169+
205170 demuxer -> error_flag = 0 ;
206171 demuxer -> generating_timecode = 1 ;
207172
@@ -220,7 +185,7 @@ int mpeg3demux_create_title_for_Squeak(mpeg3_demuxer_t *demuxer, int timecode_se
220185 if (file -> is_program_stream )
221186 {
222187 mpeg3io_seek (title -> fs , 4 );
223- for (i = 0 ; i < MPEG3_MAX_PACKSIZE &&
188+ for (i = 0 ; i < MPEG3_MAX_PACKSIZE &&
224189 test_header != MPEG3_PACK_START_CODE ; i ++ )
225190 {
226191 test_header <<= 8 ;
@@ -245,26 +210,26 @@ int mpeg3demux_create_title_for_Squeak(mpeg3_demuxer_t *demuxer, int timecode_se
245210 {
246211 next_time = demuxer -> time ;
247212 sprintf (temp_buffer ,"%f %f\n" , next_time , prev_time );
248- appendStringToBufferIfPossible (buffer ,temp_buffer ,buffer_size );
249- if (next_time < prev_time ||
213+ appendStringToBufferIfPossible (buffer ,temp_buffer ,buffer_size );
214+ if (next_time < prev_time ||
250215 next_time - prev_time > MPEG3_CONTIGUOUS_THRESHOLD ||
251216 !title -> timecode_table_size )
252217 {
253218/* Discontinuous */
254- timecode = mpeg3_append_timecode (demuxer ,
255- title ,
256- prev_byte ,
257- prev_time ,
258- next_byte ,
219+ timecode = mpeg3_append_timecode (demuxer ,
220+ title ,
221+ prev_byte ,
222+ prev_time ,
223+ next_byte ,
259224 next_time ,
260225 0 );
261-
226+
262227 sprintf (temp_buffer ,"timecode: %ld %ld %f %f\n" ,
263228 timecode -> start_byte ,
264229 timecode -> end_byte ,
265230 timecode -> start_time ,
266231 timecode -> end_time );
267- appendStringToBufferIfPossible (buffer ,temp_buffer ,buffer_size );
232+ appendStringToBufferIfPossible (buffer ,temp_buffer ,buffer_size );
268233
269234
270235 counter_start = next_time ;
@@ -275,7 +240,7 @@ int mpeg3demux_create_title_for_Squeak(mpeg3_demuxer_t *demuxer, int timecode_se
275240 }
276241
277242/* Just get the first bytes if not building a toc to get the stream ID's. */
278- if (next_byte > 0x100000 &&
243+ if (next_byte > 0x100000 &&
279244 (!timecode_search || !buffer )) done = 1 ;
280245 }
281246
@@ -304,19 +269,19 @@ int mpeg3demux_print_streams_for_Squeak(mpeg3_demuxer_t *demuxer, char *buffer,i
304269{
305270 int i ;
306271 char temp_buffer [256 ];
307-
272+
308273/* Print the stream information */
309274 for (i = 0 ; i < MPEG3_MAX_STREAMS ; i ++ )
310275 {
311276 if (demuxer -> astream_table [i ]) {
312277 sprintf (temp_buffer , "ASTREAM: %d %d\n" , i , demuxer -> astream_table [i ]);
313- appendStringToBufferIfPossible (buffer ,temp_buffer ,buffer_size );
314- }
278+ appendStringToBufferIfPossible (buffer ,temp_buffer ,buffer_size );
279+ }
315280
316281 if (demuxer -> vstream_table [i ]) {
317282 sprintf (temp_buffer , "VSTREAM: %d %d\n" , i , demuxer -> vstream_table [i ]);
318- appendStringToBufferIfPossible (buffer ,temp_buffer ,buffer_size );
319- }
283+ appendStringToBufferIfPossible (buffer ,temp_buffer ,buffer_size );
284+ }
320285 }
321286 return 0 ;
322287}
0 commit comments