/*
* GPAC - Multimedia Framework C SDK
*
* Authors: Arash Shafiei
* Copyright (c) Telecom ParisTech 2000-2013
* All rights reserved
*
* This file is part of GPAC / dashcast
*
* GPAC is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* GPAC 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#ifndef CONTROLER_H_
#define CONTROLER_H_
#include <gpac/tools.h>
#include <gpac/thread.h>
#include <gpac/media_tools.h>
#include "register.h"
#include "video_decoder.h"
#include "video_encoder.h"
#include "audio_decoder.h"
#include "audio_encoder.h"
#include "cmd_data.h"
#include "message_queue.h"
/* General thread parameters */
typedef struct {
/* command data */
CmdData *in_data;
/* handle to thread */
GF_Thread *thread;
MessageQueue *mq;
} ThreadParam;
/* Video thread parameters */
typedef struct {
/* command data */
CmdData *in_data;
/* The index in the configuration file to a video entry corresponding to the thread. */
int video_conf_idx;
/* Video input data structure corresponding to the thread. (This data is shared between video decoder and video scaler) */
VideoInputData *video_input_data;
/* Video scaled data structure corresponding to the thread. (This data is shared between video scaler and video encoder) */
VideoScaledData *video_scaled_data;
/* Video input file structure corresponding to the thread */
VideoInputFile **video_input_file;
/* handle to the thread */
GF_Thread *thread;
MessageQueue *mq;
MessageQueue *delete_seg_mq;
MessageQueue *send_seg_mq;
} VideoThreadParam;
/* Audio thread parameters */
typedef struct {
/* command data */
CmdData *in_data;
/* The index in the configuration file to an audio entry corresponding to the thread */
int audio_conf_idx;
/* Audio input data (This data is shared between audio decoder and audio encoder */
AudioInputData *audio_input_data;
/* Audio input file structure */
AudioInputFile *audio_input_file;
/* handle to the thread */
GF_Thread *thread;
MessageQueue *mq;
MessageQueue *delete_seg_mq;
MessageQueue *send_seg_mq;
} AudioThreadParam;
/*
* Run controler runs all decoder, scalers, and encoders
* of audio and video
*
* @param cmd_data [in] command data
*
* @return 0 on success, -1 on failure
*/
int dc_run_controler(CmdData *);
#endif /* CONTROLER_H_ */