mixer.h 2.4 KB
/**
 * \file Mixer.h
 *
 * \author Eduardo
 * \date 17/01/2012
 */

/**
* edit: Wesnydy Ribeiro
* date: 16/10/2015
*/

#ifndef MIXER_H
#define MIXER_H

#include <string>
#include <iostream>
#include <sstream>
#include <fstream>
#include "logging.h"

//Secondary Video Position
#define TOP_LEFT 1
#define TOP_RIGHT 2
#define BOTTOM_RIGHT 3
#define BOTTOM_LEFT 4

//Secondary Video Size
#define SMALL 1
#define MEDIUM 2
#define LARGE 3

#define NUMTHREADS "8"

using namespace std;
using namespace util;

/** \brief Classe que implementa o mixador de vídeos.
 *
 * \headerfile mixer/src/include/mixer.h
 */
class Mixer {

public:
	/** Construtor.
	 *
	 * \param mVideo Path do vídeo principal.
	 * \param sVideo Path do vídeo secundário.
	 * \param ssVideo Tamanho do vídeo secundario.
	 * \param psVideo Posição do vídeo secundário em relação ao vídeo principal. 
	 * \param tsVideo Transparência do vídeo sencundário.
	 * \param id Identificação do cliente na base de dados.
	 * \param pathTemp Path onde serão armazenados os arquivos temporários.
	 * \param pathContents Path onde será armazenado o vídeo mixado.
	 */
	Mixer(string mVideo, string sVideo, int ssVideo, int psVideo, int tsVideo,
 		string id, string pathTemp, string pathContents);

	/** Destrutor. */
	~Mixer();

	/** Inicializa o processo de mixagem.
	 *
	 * A mixagem é feita através de uma chamada do FFMPEG.
	 */
	void initialize();

private:
	string pathMixedVideo;
	string pathTempFiles;

	string mainVideo;
	string secondaryVideo;
	string temporaryTextFile;
	string transparency;
	string userID;
	
	string heigthStr;
	string widthStr;
	string positionStr;

	double widthSVideo;
	double heigthSVideo;

	int positionSVideo;
	int sizeSVideo;
	int transpSVideo;

	/** Realiza a mixagem dos vídeos.
	 * 
	 * Chama o FFMPEG passando os parâmetros necessários
	 * para a mixagem dos vídeos.
	 */
	void mixVideos();

	/** Define o tamanho do vídeo secundário.
	 *
	 * O tamanho do vídeo secundário depende do tamanho
	 * do vídeo principal e da opção de resolução selecionada.
	 */
	void setSVSize();

	/** Define a posição do vídeo secundário.
	 *
	 * A posição do vídeo secundário depende da posição
	 * selecionada pelo usuário.
	 */
	void setSVPosition();

	/** Seta o path dos arquivos.
	 *
	 * O path dos arquivos temporários e do vídeo mixado
	 * são setados através desse método.
	 */
	void setPathOfFiles();	
};

#endif /* MIXER_H */