You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
4.7 KiB

/*
* pvm_functions.h
*
* Copyright (C) Marzio Malanchini - July 2003
*
* This file is part of transcode, a video stream processing tool
*
* transcode is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* transcode is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Make; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#ifndef _PVM_FUNCTIONS_H
#define _PVM_FUNCTIONS_H
#include <stdio.h>
#include <pvm3.h>
#include <pvm_version.h>
typedef struct _pvm_res_func_t {
int s_rc;
int s_ret_size;
int s_msg_type;
int s_dim_buffer;
char *p_result;
} pvm_res_func_t;
typedef struct _pvm_func_t {
int s_nproc;
int s_nhosts;
int s_current_tid;
int *p_slave_tids;
int *p_used_tid;
} pvm_func_t;
#define PVM_EXP_OPT_INIT 0x00000000
#define PVM_EXP_OPT_OPEN 0x00000001
#define PVM_EXP_OPT_ENCODE 0x00000002
#define PVM_EXP_OPT_CLOSE 0x00000003
#define PVM_EXP_OPT_STOP 0x00000004
#define PVM_EXP_OPT_RESTART_ENCODE1 0x00000005
#define PVM_JOIN_OPT_RUN 0x00000006
#define PVM_JOIN_OPT_ADD_ELAB 0x00000007
#define PVM_JOIN_OPT_ADD_REMOVE 0x00000008
#define PVM_JOIN_OPT_INIT 0x00000009
#define PVM_INIT_SKED 0x0000000A
#define PVM_INIT_JOIN 0x0000000B
#define PVM_CHECK_VERSION 0x0000000C
#define PVM_JOIN_OPT_SENDFILE 0x0000000D
#define PVM_MERGER_INIT 0x0000000E
#define PVM_EXP_OPT_PREINIT 0x0000000F
#define PVM_EXP_OPT_RESTART_ENCODE2 0x00000010
#define PVM_MSG_WORK 0x00000020
#define PVM_MSG_RING 0x00000021
#define PVM_MSG_CONF 0x00000022
#define PVM_MSG_WRKN 0x00000023
#define PVM_MSG_JOIN 0x00000024
#define PVM_MSG_CONF_JOIN 0x00000025
#define PVM_MSG_MERG_SEND 0x00000026
#define PVM_MSG_MERG_PASTE 0x00000027
#define PVM_MSG_ADD_REM 0x00000028
#define PVM_MSG_ENDTASK_SYSTEM INT_MAX-2
#define PVM_MSG_ENDTASK_VIDEO INT_MAX-1
#define PVM_MSG_ENDTASK_AUDIO INT_MAX
#define PVM_MSG_LAST_SEQ PVM_MSG_ENDTASK_SYSTEM
#ifdef PVM_DL_FUNC
/*public function*/
pvm_func_t * (*f_pvm_master_start_stop)(char *p_option,char *p_spawn_process,char **p_argv,int s_nproc_host,int s_nproc_max,pvm_func_t *p_func);
void (*f_pvm_skeduler)(pvm_res_func_t *(*f_my_elab_func)(int,char *,int,int));
int (*f_pvm_send)(int s_buff_size,char *p_buffer,int s_option,int s_pos_tids,pvm_func_t *p_func);
int (*f_pvm_set_send)(int s_set_seq);
int (*f_pvm_multi_send)(int s_buff_size,char *p_buffer,int s_option,pvm_func_t *p_func);
int (*f_pvm_multi_send_nw)(int s_buff_size,char *p_buffer,int s_option,pvm_func_t *p_func);
int (*f_pvm_nrecv)(int *s_buff_size,char *p_buffer,int *s_rc);
int (*f_pvm_recv)(int *s_buff_size,char *p_buffer,int *s_rc);
int (*f_pvm_set_nrecv)(int s_seq);
int (*f_pvm_set_recv)(int s_seq);
int (*f_pvm_start_single_process)(char *p_spawn_process,char **p_argv,char *p_where);
void (*f_pvm_stop_single_process)(int p_slave_tid);
#else
/*private function*/
/* f_pvm_master_start_stop:
s_type: 1 start 0 end
p_spawn_process: process to spawn
s_nproc_host: number of process per host
s_nproc_max: max number of process
*/
pvm_func_t *f_pvm_master_start_stop(char *p_option,char *p_spawn_process,char **p_argv,int s_nproc_host,int s_nproc_max,pvm_func_t *p_func);
/* the skeduler require a function to elab the input data*/
void f_pvm_skeduler(pvm_res_func_t *(*f_my_elab_func)(int,char *,int,int));
int f_pvm_send(int s_buff_size,char *p_buffer,int s_option,int s_pos_tids,pvm_func_t *p_func);
int f_pvm_set_send(int s_set_seq);
int f_pvm_multi_send(int s_buff_size,char *p_buffer,int s_option,pvm_func_t *p_func);/*broadcast the info and wait for the completition of all the task*/
int f_pvm_multi_send_nw(int s_buff_size,char *p_buffer,int s_option,pvm_func_t *p_func);/*broadcast the info*/
/* If you start with a non blocking receive you must continue with the save api or set the seq number with the set api*/
int f_pvm_nrecv(int *s_buff_size,char *p_buffer,int *s_rc);
int f_pvm_recv(int *s_buff_size,char *p_buffer,int *s_rc);
int f_pvm_set_nrecv(int s_seq);
int f_pvm_set_recv(int s_seq);
int f_ring(int s_father_tid,int *s_rec_seq,int s_msg_type,int s_rc);
int f_pvm_start_single_process(char *p_spawn_process,char **p_argv,char *p_where);
void f_pvm_stop_single_process(int p_slave_tid);
#endif
#endif