/*===========================================================================*
 * parallel.h                                    *
 *                                       *
 *  parallel encoding                            *
 *                                       *
 *===========================================================================*/

/*
 * Copyright (c) 1995 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.
 */

/*  
 *  $Header: /n/picasso/project/mpeg/mpeg_dist/mpeg_encode/headers/RCS/parallel.h,v 1.5 1995/08/15 23:43:26 smoot Exp $
 *  $Log: parallel.h,v $
 *  Revision 1.5  1995/08/15 23:43:26  smoot
 *  *** empty log message ***
 *
 *  Revision 1.4  1995/01/19 23:55:08  eyhung
 *  Changed copyrights
 *
 * Revision 1.3  1994/11/12  02:12:53  keving
 * nothing
 *
 * Revision 1.2  1993/07/22  22:24:23  keving
 * nothing
 *
 * Revision 1.1  1993/07/09  00:17:23  keving
 * nothing
 *
 */


/*==============*
 * HEADER FILES *
 *==============*/

#include "ansi.h"
#include "bitio.h"
#include "frame.h"


/*===============================*
 * EXTERNAL PROCEDURE prototypes *
 *===============================*/

void 
StartMasterServer(int numInputFiles,
                  char *paramFile,
                  char *outputFileName);

void
NotifyMasterDone(const char * const hostName, 
                 int          const portNum, 
                 int          const machineNumber, 
                 int          const seconds, 
                 int *        const frameStartP,
                 int *        const frameEndP);

void 
StartIOServer(int numInputFiles,
              char *hostName, int portNum);
void 
StartCombineServer(int numInputFiles,
                   char *outputFileName,
                   char *hostName, int portNum);

void 
StartDecodeServer(int numInputFiles,
                  char *outputFileName,
                  char *hostName, int portNum);

void
WaitForOutputFile(int number);

void
GetRemoteFrame(MpegFrame *frame, int frameNumber);

void
SendRemoteFrame(int frameNumber, BitBucket *bb);

void
NoteFrameDone(int frameStart, int frameEnd);

void
SetIOConvert(boolean separate);

void
SetRemoteShell(const char * const shell);

void 
NotifyDecodeServerReady(int id);

void 
WaitForDecodedFrame(int id);

void 
SendDecodedFrame(MpegFrame *frame);

void 
GetRemoteDecodedRefFrame(MpegFrame *frame,
                         int frameNumber);

void 
SetParallelPerfect(boolean val);


/*==================*
 * GLOBAL VARIABLES *
 *==================*/

extern int parallelTestFrames;
extern int parallelTimeChunks;

extern const char *IOhostName;
extern int ioPortNumber;
extern int combinePortNumber;
extern int decodePortNumber;

extern boolean  ioServer;
extern boolean  niceProcesses;
extern boolean  forceIalign;
extern int    machineNumber;
extern boolean remoteIO;
extern boolean  separateConversion;







