This is main.c in view mode; [Download] [Up]
/* * Copyright (c) 1992 The Regents of the University of California. * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice and the following * two paragraphs appear in all copies of this software. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #include "video.h" #include <sys/types.h> #include <signal.h> #include <netinet/in.h> #include "util.h" /* Define buffer length. */ #define BUF_LENGTH 80000 /* Function return type declarations */ void usage(); /* External declaration of main decoding call. */ extern VidStream *mpegVidRsrc(); extern VidStream *NewVidStream(); /* Global file pointer to incoming data. */ FILE *input; /* End of File flag. */ static int EOF_flag = 0; /* Loop flag. */ int loopFlag = 0; /* Setjmp/Longjmp env. */ jmp_buf env; /* *-------------------------------------------------------------- * * get_more_data -- * * Called by correct_underflow in bit parsing utilities to * read in more data. * * Results: * Input buffer updated, buffer length updated. * Returns 1 if data read, 0 if EOF, -1 if error. * * Side effects: * None. * *-------------------------------------------------------------- */ int get_more_data(buf_start, max_length, length_ptr, buf_ptr) unsigned int *buf_start; int max_length; int *length_ptr; unsigned int **buf_ptr; { int length, num_read, i, request; unsigned char *buffer, *mark; unsigned int *lmark; if (EOF_flag) return 0; length = *length_ptr; buffer = (unsigned char *) *buf_ptr; if (length > 0) { memcpy((unsigned char *) buf_start, buffer, (length*4)); mark = ((unsigned char *) (buf_start + length)); } else { mark = (unsigned char *) buf_start; length = 0; } request = (max_length-length)*4; num_read = fread( mark, 1, request, input); if (num_read < 0) { return -1; } else if (num_read == 0) { *buf_ptr = buf_start; /* Make 32 bits after end equal to 0 and 32 bits after that equal to seq end code in order to prevent messy data from infinite recursion. */ *(buf_start + length) = 0x0; *(buf_start + length+1) = SEQ_END_CODE; EOF_flag = 1; return 0; } lmark = (unsigned int *) mark; num_read = num_read/4; for (i=0; i<num_read; i++) { *lmark = htonl(*lmark); lmark++; } *buf_ptr = buf_start; *length_ptr = length + num_read; return 1; } /* *-------------------------------------------------------------- * * int_handler -- * * Handles Cntl-C interupts.. * * Results: * None. * * Side effects: * None. * *-------------------------------------------------------------- */ void int_handler() { fprintf(stderr, "Interrupted!\n"); if (curVidStream != NULL) DestroyVidStream(curVidStream); exit(1); } /* global - writes binary data to stdout if set */ int writeToStdout; /* *-------------------------------------------------------------- * * main -- * * Parses command line, starts decoding and displaying. * * Results: * None. * * Side effects: * None. * *-------------------------------------------------------------- */ void main(argc, argv) int argc; char **argv; { static VidStream *theStream; int mark; int i; writeToStdout = 1; mark = 1; argc--; input = stdin; while (argc) { if (strcmp(argv[mark], "-nop") == 0) { TogglePFlag(); argc--; mark++; } else if (strcmp(argv[mark], "-nob") == 0) { ToggleBFlag(); argc--; mark++; } else if (strcmp(argv[mark], "-toFile") == 0) { writeToStdout = 0; argc--; mark++; } else if (strcmp(argv[mark], "-loop") == 0) { argc--; mark++; loopFlag = 1; } else if (argv[mark][0] == '-') { fprintf(stderr, "Un-recognized flag %s\n",argv[mark]); usage(argv[0]); } else { input = fopen(argv[mark], "r"); if (input == NULL) { fprintf(stderr, "Could not open file %s\n", argv[mark]); usage(argv[0]); } argc--; mark++; } } signal(SIGINT, int_handler); init_tables(); InitColorDither(); if (setjmp(env) != 0) { DestroyVidStream(theStream); rewind(input); EOF_flag = 0; curBits = 0; bitOffset = 0; bufLength = 0; bitBuffer = NULL; totNumFrames = 0; } theStream = NewVidStream(BUF_LENGTH); mpegVidRsrc(0, theStream); i = 1; realTimeStart = ReadSysClock(); while (1) { /* Ctl-C to exit if in loop mode */ mpegVidRsrc(0, theStream); } } /* *-------------------------------------------------------------- * * usage -- * * Print mpeg_play usage * * Results: * None. * * Side effects: * exits with a return value -1 * *-------------------------------------------------------------- */ void usage(s) char *s; /* program name */ { fprintf(stderr, "Usage:\n"); fprintf(stderr, "mpeg_play\n"); fprintf(stderr, " [-nob]\n"); fprintf(stderr, " [-nop]\n"); fprintf(stderr, " [-loop]\n"); fprintf(stderr, " file_name\n"); exit (-1); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.