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

#ifndef MIXER_H
#define	MIXER_H

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

//SL Video Position
#define TOP_LEFT 1
#define TOP_RIGHT 2
#define BOTTOM_RIGHT 3
#define BOTTOM_LEFT 4
//SL Video Size
#define SMALL 1
#define MEDIUM 2
#define LARGE 3
//SL Video Width
#define SMALL_HEIGHT 324		//0,3*1080 se fosse full hd
#define MEDIUM_HEIGHT 432		//0,4*1080
#define LARGE_HEIGHT 540		//0.5*1080

#define MAX_SIZE_PATH 256

using namespace std;
using namespace util;

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

    /** Construtor.
     *
     * \param mainVideo O vídeo principal.
     * \param secondaryVideo O vídeo secundário. 
     */
    Mixer(string,string);

    /** Construtor */
    Mixer();

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

    /** Ajusta o FPS do vídeo principal para 45 se preciso. */
    void adjustVideosFps();

    /** Realiza a Mixagem do vídeo original com o vídeo de LIBRAS. */
    void mixVideos();

    /** Seta o tamanho do vídeo de LIBRAS. */
    void setSize(int);

    /** Seta o path do vídeo principal. */
    void setMainVideo(string);

    /** Retorna o path do vídeo principal.
     *
     * \return Path do vídeo principal.
     */
    string getMainVideo();

    /** Seta o path do vídeo secundario. */
    void setSecondaryVideo(string);

    /** Retorna o path do vídeo secundário.
     *
     * \return Path do vídeo secundário.
     */
    string getSecondaryVideo();

    /** Seta a posição do vídeo secundário em relação ao vídeo principal. */
    void setPositionSecondaryVideo(int);

    /** Retorna a posição do vídeo secundário em relação ao vídeo principal.
     *
     * \return A posição do vídeo.
     */
    int getPositionSecondaryVideo();

    /** Seta a transparência do vídeo secundário. */
    void setTransparency(int);

    /** Retorna a Transparência do vídeo secundário.
     *
     * \return A transparência do vídeo.
     */
    int getTransparency();

    /** seta o número de threads utilizadas na mixagem. */
    void setNumThreads(string);

    /** Retorna o número de threads utilizadas na mixagem.
     *
     * \return O número de threads.
     */
    string getNumThreads();

    /** Inicializa o processo de mixagem.
     *
     * \param mainVideo O vídeo princial.
     * \param slVideo O vídeo secundário.
     */
    void initialize(string mainVideo, string slVideo, int, int, int, char*, char*, char*);

    /** Seta o path do vídeo mixado */
    void setPathFinal();

private:

    struct fpsAndLine {
      string line;
      double fps;
      string possibleProgramID;
    };

    void readFileFPS(fpsAndLine [], int *);
    void convertMainVideoFPS(fpsAndLine [], int *);
    void convertSecondaryVideoFPS(double);

    string mainVideo, secondaryVideo, temporaryTextFile, numThreads, pathFinal, user_id, nameOfMainVideo;
    char* contents;
    char* uploads;
    int positionSecondaryVideo;
    double widthSecondaryVideo, heightSecondaryVideo;
    int transparency;    
};

#endif	/* MIXER_H */