Commit 90ada98a68ec61b61dd5865e5d1bf9283df745de

Authored by Wesnydy Ribeiro
1 parent 96c7c6e5
Exists in master and in 1 other branch devel

Criação do componente Extrator utilizando factory pattern

extrator/src/extratorException.cpp 0 → 100644
@@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
  1 +#include "extratorException.h"
  2 +
  3 +ExtratorException::ExtratorException(const string message)
  4 + : RuntimeException(message)
  5 + { /* TODO */ }
  6 +ExtratorException::ExtratorException(const char* message)
  7 + : RuntimeException(message)
  8 + { /* TODO */ }
  9 +
0 \ No newline at end of file 10 \ No newline at end of file
extrator/src/extratorFactory.cpp 0 → 100644
@@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
  1 +#include "extratorFactory.h"
  2 +
  3 +ExtratorFactory::ExtratorFactory(){
  4 + //TODO
  5 +}
  6 +
  7 +ExtratorFactory::~ExtratorFactory(){
  8 + //TODO
  9 +}
  10 +
  11 +Extrator* ExtratorFactory::getExtrator(int extrator_type){
  12 + if(extrator_type == SRT)
  13 + return new ExtratorSRT();
  14 + if(extrator_type == TXT)
  15 + return new ExtratorTXT();
  16 +}
0 \ No newline at end of file 17 \ No newline at end of file
extrator/src/extratorSRT.cpp 0 → 100644
@@ -0,0 +1,168 @@ @@ -0,0 +1,168 @@
  1 +#include "extratorSRT.h"
  2 +
  3 +ExtratorSRT::ExtratorSRT(){
  4 + listeners = new list<ListenerSRT*>();
  5 + finish = false;
  6 + seek_pos = 0;
  7 + hasNextSub = true;
  8 + DPRINTF("Done!\n");
  9 +}
  10 +
  11 +ExtratorSRT::~ExtratorSRT(){
  12 + listeners->clear();
  13 + delete listeners;
  14 + if (bff_reader) delete bff_reader;
  15 + if (file_io) delete file_io;
  16 + DDDPRINTF("ExtratorSTR finalized!\n");
  17 +}
  18 +
  19 +void ExtratorSRT::initialize(){
  20 +
  21 + file = new lavidlib::File(filePath);
  22 +
  23 + try{
  24 + file_io = new lavidlib::FileIO(file->getPath(), FileIO::MODE_READ);
  25 + }catch(Exception ex){
  26 + finish = true;
  27 + Util::Logger::Instance()->writeLog((char*) "[ERRO: extratorSRT.cpp] Arquivo de legenda não encontrado.");
  28 + throw ExtratorException("Falha ao abrir o arquivo de legenda! Verifique se o mesmo existe.\n");
  29 + }
  30 +
  31 + this->Start();
  32 +}
  33 +
  34 +
  35 +void ExtratorSRT::addListener(ListenerSRT* listener){
  36 + listeners->push_back(listener);
  37 +}
  38 +
  39 +void ExtratorSRT::notifyListeners(unsigned char* subtitle, int64_t pts) {
  40 + for(list<ListenerSRT*>::iterator it = listeners->begin(); it != listeners->end(); it++){
  41 + (*it)->notifySubtitle(subtitle, pts);
  42 + }
  43 +}
  44 +
  45 +void ExtratorSRT::notifyEndExtraction(int size) {
  46 + DDPRINTF("Extrator SRT concluiu a extração: %d legendas.\n", size);
  47 + for(list<ListenerSRT*>::iterator it = listeners->begin(); it != listeners->end(); it++){
  48 + (*it)->notifyEnd(size);
  49 + }
  50 +}
  51 +
  52 +void ExtratorSRT::setFilePath(char* path){
  53 + filePath = (char*) path;
  54 + string command = "perl -p -e \'s/\n/ /\' ";
  55 + command.append(filePath).append(" > /dev/null");
  56 + system(command.c_str());
  57 +}
  58 +
  59 +bool ExtratorSRT::isFinished(){
  60 + return finish;
  61 +}
  62 +
  63 +bool ExtratorSRT::hasNextSubtitle() {
  64 + return hasNextSub;
  65 +}
  66 +
  67 +void ExtratorSRT::Run(){
  68 + printf("\n");
  69 + DDPRINTF("[AGUARDE] Extraindo Legendas...\n");
  70 +
  71 + int sub_index = 0;
  72 + string sub_text = "";
  73 +
  74 + while(hasNextSubtitle()){
  75 + subtitle = next();
  76 + sub_text = subtitle->getSubtitleText();
  77 + notifyListeners((unsigned char*)sub_text.c_str(), calcula_pts((double) subtitle->getTimeIn()));
  78 + cout << " . ";
  79 + sub_index++;
  80 + free(subtitle);
  81 + }
  82 + printf("\n");
  83 + finish = true;
  84 + notifyEndExtraction(sub_index);
  85 +}
  86 +
  87 +Subtitle* ExtratorSRT::next() {
  88 +
  89 + if (seek_pos >= file_io->getSize())
  90 + throw ExtratorException("[ERRO: extratorSRT.cpp] Esse arquivo já foi lido.");
  91 +
  92 + file_io->seek(seek_pos);
  93 + try{
  94 + bff_reader = new BufferedReader(file_io);
  95 + }catch(Exception &ex){
  96 + throw ExtratorException("[ERRO: extratorSRT.cpp] O BufferedReader não foi inicializado.");
  97 + }
  98 +
  99 + Subtitle* sub = new Subtitle();
  100 + string line = "";
  101 + string text_sub = "";
  102 +
  103 + try {
  104 + /* ID */
  105 + int id = 0;
  106 + line = bff_reader->readLine();
  107 + seek_pos += (int64_t) line.size() + SIZE_CSCAPE;
  108 + id = atoi(line.c_str());
  109 + sub->setID(id);
  110 +
  111 + /* TimeIn and TimeOut */
  112 + int64_t t_in = 0, t_out = 0;
  113 + line = bff_reader->readLine();
  114 + seek_pos += (int64_t) line.size() + SIZE_CSCAPE;
  115 +
  116 + int target_pos = line.find(TARGET_TIME);
  117 + t_in = str_to_time(line.substr(0, target_pos));
  118 + sub->setTimeIn(t_in);
  119 + t_out = str_to_time(line.substr(target_pos + strlen(TARGET_TIME)+1, line.size()));
  120 + sub->setTimeOut(t_out);
  121 +
  122 + /* Text: read until line be empty */
  123 + while ((line = bff_reader->readLine()).size() > 0) {
  124 + text_sub += line;
  125 + text_sub.append(" ");
  126 + }
  127 + seek_pos += (int64_t) text_sub.size() + SIZE_CSCAPE;
  128 +
  129 + } catch (lavidlib::EOFException &ex) {
  130 + sub->setSubtitleText(text_sub);
  131 + seek_pos += (int64_t) text_sub.size() + SIZE_CSCAPE;
  132 + hasNextSub = false;
  133 + return sub;
  134 + }
  135 + sub->setSubtitleText(text_sub);
  136 + delete(bff_reader);
  137 + return sub;
  138 +
  139 + }
  140 +
  141 +
  142 +int64_t ExtratorSRT::str_to_time(string str_time) {
  143 +
  144 + int64_t ttime = 0;
  145 + char* tokens = new char[4]; // hh, mm, ss, ms
  146 + strcpy(tokens, (char*)str_time.c_str());
  147 +
  148 + int index = 0;
  149 + int values [4]; // hh, mm, ss, ms
  150 + char * str = strtok(tokens, ":,");
  151 + while (str != NULL) {
  152 + values[index] = atoi(str);
  153 + str = strtok(NULL, ":,");
  154 + index++;
  155 + }
  156 + delete(tokens);
  157 +
  158 + /* calculate time */
  159 + ttime = /*hour to sec*/((((values[0] * 60) * 60) +
  160 + /*min to sec*/(values[1] * 60) +/*sec*/values[2])*1000) + values[3];
  161 +
  162 + return ttime;
  163 +
  164 + }
  165 +
  166 +uint64_t ExtratorSRT::calcula_pts(double msec) {
  167 + return (uint64_t)(1000 /*pcr_base*/ + ((msec/1000) * 90000.0));
  168 +}
extrator/src/extratorTXT.cpp 0 → 100644
@@ -0,0 +1,93 @@ @@ -0,0 +1,93 @@
  1 +/***************************************************************************
  2 + * Universidade Federal da Paraíba *
  3 + * Copyright (C) 2014 by Laboratório de Aplicações de Vídeo Digital *
  4 + * *
  5 + * Centro de Informática - UFPB - Campus I *
  6 + * João Pessoa - PB - Brasil *
  7 + * *
  8 + * Author: Erickson Silva (erickson.silva@lavid.ufpb.br) *
  9 + * *
  10 + **************************************************************************/
  11 +
  12 +#include "extratorTXT.h"
  13 +
  14 +ExtratorTXT::ExtratorTXT(){
  15 + listeners = new list<ListenerTXT*>();
  16 + finish = false;
  17 + DPRINTF("Done!\n");
  18 +}
  19 +
  20 +ExtratorTXT::~ExtratorTXT(){
  21 + listeners->clear();
  22 + delete listeners;
  23 + delete file;
  24 + delete file_io;
  25 + delete bff_reader;
  26 + DDDPRINTF("ExtratorTXT finalized!\n");
  27 +}
  28 +
  29 +void ExtratorTXT::initialize(){
  30 + file = new lavidlib::File(filePath);
  31 + try{
  32 + file_io = new lavidlib::FileIO(file->getPath(), FileIO::MODE_READ);
  33 + bff_reader = new BufferedReader(file_io);
  34 + }catch(Exception &ex){
  35 + finish = true;
  36 + Util::Logger::Instance()->writeLog((char*) "[ERRO: extratorTXT.cpp] Arquivo de texto não encontrado.");
  37 + throw ExtratorException("Falha ao abrir o arquivo de texto! Verifique se o mesmo existe.");
  38 + }
  39 + this->Start();
  40 +}
  41 +
  42 +void ExtratorTXT::addListener(ListenerTXT* listener){
  43 + listeners->push_back(listener);
  44 +}
  45 +
  46 +void ExtratorTXT::notifyListeners(unsigned char* line) {
  47 + for(list<ListenerTXT*>::iterator it = listeners->begin(); it != listeners->end(); it++){
  48 + (*it)->notifyLine(line);
  49 + }
  50 +}
  51 +
  52 +void ExtratorTXT::notifyEndExtraction(int size) {
  53 + DDPRINTF("ExtratorTXT concluiu a extração: %d linhas.\n", size);
  54 + for(list<ListenerTXT*>::iterator it = listeners->begin(); it != listeners->end(); it++){
  55 + (*it)->notifyEnd(size);
  56 + }
  57 +}
  58 +
  59 +void ExtratorTXT::setFilePath(char* path){
  60 + filePath = (char*) path;
  61 +}
  62 +
  63 +bool ExtratorTXT::isFinished(){
  64 + return finish;
  65 +}
  66 +
  67 +void ExtratorTXT::Run(){
  68 +
  69 + DDPRINTF("[AGUARDE] Extraindo Texto...\n")
  70 +
  71 + int line_index = 0;
  72 + bool hasNext = true;
  73 + string line;
  74 +
  75 + while (hasNext) {
  76 + try{
  77 + line = bff_reader->readLine();
  78 + if (line.length() > 0){
  79 + notifyListeners((unsigned char*) line.c_str());
  80 + cout << " . ";
  81 + line_index++;
  82 + }
  83 + }catch (EOFException &ex){
  84 + hasNext = false;
  85 + }catch (...){
  86 + Util::Logger::Instance()->writeLog((char*) "[ERRO: extratorTXT.cpp] Erro durante a leitura do arquivo de texto.");
  87 + throw ExtratorException("Falha desconhecida na leitura do arquivo. Tente novamente.");
  88 + }
  89 + }
  90 + printf("\n");
  91 + finish = true;
  92 + notifyEndExtraction(line_index);
  93 +}
extrator/src/include/extrator.h 0 → 100644
@@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
  1 +#ifndef EXTRATOR_H
  2 +#define EXTRATOR_H
  3 +
  4 +#include <lavidlib/io/File.h>
  5 +#include <lavidlib/io/FileIO.h>
  6 +#include <lavidlib/io/BufferedReader.h>
  7 +#include <lavidlib/io/IOException.h>
  8 +#include <lavidlib/io/EOFException.h>
  9 +
  10 +using namespace lavidlib;
  11 +
  12 +class Extrator {
  13 +
  14 +protected:
  15 + char* filePath;
  16 + bool finish;
  17 +
  18 + File* file;
  19 + FileIO* file_io;
  20 + BufferedReader* bff_reader;
  21 +
  22 +public:
  23 + virtual void notifyEndExtraction(int size) = 0;
  24 + virtual void setFilePath(char* path) = 0;
  25 + virtual void initialize() = 0;
  26 + virtual bool isFinished() = 0;
  27 +};
  28 +
  29 +#endif /* EXTRATOR_H */
0 \ No newline at end of file 30 \ No newline at end of file
extrator/src/include/extratorException.h 0 → 100644
@@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
  1 +#ifndef EXTRATOREXCEPTION_H
  2 +#define EXTRATOREXCEPTION_H
  3 +
  4 +#include <lavidlib/base/RuntimeException.h>
  5 +
  6 +using namespace lavidlib;
  7 +using namespace std;
  8 +
  9 +class ExtratorException : public RuntimeException {
  10 +public:
  11 + /**
  12 + * Construtor da classe.
  13 + * Cria uma nova exceção com uma mensagem detalhada.
  14 + * @param message A mensagem em forma de um objeto string.
  15 + */
  16 + ExtratorException(const string message);
  17 +
  18 + /**
  19 + * Construtor da classe.
  20 + * Cria uma nova exceção com uma mensagem detalhada.
  21 + * @param message A mensagem em forma de um array de caracteres.
  22 + */
  23 + ExtratorException(const char* message);
  24 +};
  25 +
  26 +#endif /* EXTRATOREXCEPTION_H */
0 \ No newline at end of file 27 \ No newline at end of file
extrator/src/include/extratorFactory.h 0 → 100644
@@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
  1 +#ifndef EXTRATORFACTORY_H
  2 +#define EXTRATORFACTORY_H
  3 +
  4 +#include "extrator.h"
  5 +#include "extratorSRT.h"
  6 +#include "extratorTXT.h"
  7 +
  8 +#define SRT 1
  9 +#define TXT 2
  10 +
  11 +class ExtratorFactory{
  12 +
  13 +public:
  14 + ExtratorFactory();
  15 + ~ExtratorFactory();
  16 +
  17 + Extrator* getExtrator(int extrator_type);
  18 +
  19 +};
  20 +
  21 +#endif /* EXTRATORFACTORY_H */
0 \ No newline at end of file 22 \ No newline at end of file
extrator/src/include/extratorSRT.h 0 → 100644
@@ -0,0 +1,66 @@ @@ -0,0 +1,66 @@
  1 +/*
  2 + * File: extratorSRT.h
  3 + * Author: leonardo
  4 + *
  5 + * Created on 17 de Fevereiro de 2012, 17:51
  6 + */
  7 +#ifndef EXTRATORSRT_H
  8 +#define EXTRATORSRT_H
  9 +
  10 +#include <list>
  11 +#include <string.h>
  12 +#include <stdlib.h>
  13 +#include <fstream>
  14 +#include <stdio.h>
  15 +#include "jthread.h"
  16 +#include "dprintf.h"
  17 +#include "logger.h"
  18 +#include "extrator.h"
  19 +#include "subtitle.h"
  20 +#include "listenerSRT.h"
  21 +#include "extratorException.h"
  22 +
  23 +#define SIZE_CSCAPE 1
  24 +#define TARGET_TIME "-->"
  25 +//#define MAX_LINE 1024
  26 +
  27 +using namespace jthread;
  28 +using namespace std;
  29 +using namespace sndesc;
  30 +
  31 +/** Classe que modela ExtratorSRT.
  32 +* Instâncias do tipo ExtratorSRT são modelados
  33 +* a partir desta classe, esses objetos são
  34 +* responsáveis por extrair o conteudo de arquivos
  35 +* com a extensão SubRipText(SRT).
  36 +*/
  37 +class ExtratorSRT: public Extrator, public Thread {
  38 +
  39 +public:
  40 + ExtratorSRT();
  41 + ~ExtratorSRT();
  42 +
  43 + void addListener(ListenerSRT* listener);
  44 + void notifyListeners(unsigned char* subtitle, int64_t pts);
  45 + void notifyEndExtraction(int size);
  46 +
  47 + void setFilePath(char* path);
  48 + void initialize();
  49 + bool isFinished();
  50 +
  51 + Subtitle* next();
  52 + bool hasNextSubtitle();
  53 + void Run();
  54 +
  55 +private:
  56 + list<ListenerSRT*> *listeners;
  57 +
  58 + Subtitle *subtitle;
  59 + int64_t seek_pos;
  60 + bool hasNextSub;
  61 +
  62 + uint64_t calcula_pts(double msec);
  63 + int64_t str_to_time(std::string str_time);
  64 +};
  65 +
  66 +#endif /* EXTRATORSRT_H */
0 \ No newline at end of file 67 \ No newline at end of file
extrator/src/include/extratorTXT.h 0 → 100644
@@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
  1 +/***************************************************************************
  2 + * Universidade Federal da Paraíba *
  3 + * Copyright (C) 2014 by Laboratório de Aplicações de Vídeo Digital *
  4 + * *
  5 + * Centro de Informática - UFPB - Campus I *
  6 + * João Pessoa - PB - Brasil *
  7 + * *
  8 + * Author: Erickson Silva (erickson.silva@lavid.ufpb.br) *
  9 + * *
  10 + **************************************************************************/
  11 +
  12 +#ifndef EXTRATORTXT_H
  13 +#define EXTRATORTXT_H
  14 +
  15 +#include <list>
  16 +#include "jthread.h"
  17 +#include "dprintf.h"
  18 +#include "logger.h"
  19 +#include "extrator.h"
  20 +#include "listenerTXT.h"
  21 +#include "extratorException.h"
  22 +
  23 +using namespace jthread;
  24 +using namespace std;
  25 +
  26 +/**
  27 +* Classe que modela o ExtratorTXT.
  28 +* O ExtratorTXT extrai o conteúdo
  29 +* de um arquivo txt.
  30 +*/
  31 +class ExtratorTXT: public Extrator, public Thread {
  32 +
  33 +public:
  34 + ExtratorTXT();
  35 + ~ExtratorTXT();
  36 +
  37 + void addListener(ListenerTXT* listener);
  38 + void notifyListeners(unsigned char* line);
  39 + void notifyEndExtraction(int size);
  40 +
  41 + void setFilePath(char* path);
  42 + void initialize();
  43 + bool isFinished();
  44 +
  45 + void Run();
  46 +
  47 +private:
  48 + list<ListenerTXT*> *listeners;
  49 +};
  50 +
  51 +#endif /* EXTRATORTXT_H */
  52 +
extrator/src/include/listenerSRT.h 0 → 100644
@@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
  1 +#ifndef LISTENERSRT_H
  2 +#define LISTENERSRT_H
  3 +
  4 +#include <stdint.h>
  5 +
  6 +class ListenerSRT{
  7 +
  8 +public:
  9 + virtual void notifySubtitle(unsigned char* subtitle, int64_t pts) = 0;
  10 + virtual void notifyEnd(int sub_size) = 0;
  11 +};
  12 +
  13 +#endif /* LISTENEREXTRATOR_H */
0 \ No newline at end of file 14 \ No newline at end of file
extrator/src/include/listenerTXT.h 0 → 100644
@@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
  1 +#ifndef LISTENERTXT_H
  2 +#define LISTENERTXT_H
  3 +
  4 +#include <stdint.h>
  5 +
  6 +class ListenerTXT {
  7 +public:
  8 + virtual void notifyLine(unsigned char* line) = 0;
  9 + virtual void notifyEnd(int line_size) = 0;
  10 +};
  11 +
  12 +
  13 +#endif /* LISTENERTXT_H */
0 \ No newline at end of file 14 \ No newline at end of file
extrator/src/include/subtitle.h 0 → 100644
@@ -0,0 +1,138 @@ @@ -0,0 +1,138 @@
  1 +/***************************************************************************
  2 + * Universidade Federal da Paraíba *
  3 + * Copyright (C) 2013 by Laboratório de Aplicações de Vídeo Digital *
  4 + * *
  5 + * Centro de Informática - UFPB - Campus I *
  6 + * João Pessoa - PB - Brasil *
  7 + * *
  8 + * Author: Leonardo de Araújo Domingues (leonardo.araujo@lavid.ufpb.br) *
  9 + * Date: Qui Out 24 22:26:35 BRT 2013 *
  10 + * *
  11 + **************************************************************************/
  12 +
  13 + #ifndef SUBTITLE_H
  14 + #define SUBTITLE_H
  15 +
  16 + #include <string>
  17 + #include <stdint.h>
  18 + #include <stdio.h>
  19 +
  20 + #define MAX_FIELD 64
  21 +
  22 + using namespace std;
  23 +
  24 + namespace sndesc {
  25 +
  26 + /**
  27 + * Classe que modela legendas.
  28 + * Objetos com informações de legendas
  29 + * são implementados através desta classe.
  30 + */
  31 + class Subtitle {
  32 +
  33 + public:
  34 + /**
  35 + * Construtor da classe.
  36 + * Cria uma nova instância da classe para
  37 + * representar uma legenda, as variáveis
  38 + * iniciam com valores default.
  39 + */
  40 + Subtitle();
  41 +
  42 + /**
  43 + * Construtor da clasee.
  44 + * Cria uma nova instância da classe para a representar uma legenda,
  45 + * as variáveis iniciam com valores passados por parametros.
  46 + * @param _id O numero da legenda.
  47 + * @param _sub_text O texto da legenda.
  48 + * @param _timein O tempo de inicio da legenda.
  49 + * @param _timeout O tempo de termino da legenda.
  50 + */
  51 + Subtitle(int _id, string _sub_text, int64_t _timein, int64_t _timeout);
  52 +
  53 + /**
  54 + * Destrutor da classe.
  55 + * Desaloca todo espaço de armazenamento atribuído
  56 + * para a instância do Subtitle.
  57 + */
  58 + ~Subtitle();
  59 +
  60 + /**
  61 + * Seta o id da legenda.
  62 + * @param _id O numero da legenda.
  63 + */
  64 + void setID(int _id);
  65 +
  66 + /**
  67 + * Seta o texto da legenda.
  68 + * @param _subtext O texto da legenda.
  69 + */
  70 + void setSubtitleText(std::string _subtext);
  71 +
  72 + /**
  73 + * Seta o tempo de inicio da legenda.
  74 + * @param _timein O tempo de entrada da legenda.
  75 + */
  76 + void setTimeIn(int64_t _timein);
  77 +
  78 + /**
  79 + * Seta o tempo de termino da legenda.
  80 + * @param _timeout O tempo de saida da legenda.
  81 + */
  82 + void setTimeOut(int64_t _timeout);
  83 +
  84 + /**
  85 + * Obtém o texto da legenda.
  86 + * @return O texto da legenda.
  87 + */
  88 + std::string getSubtitleText();
  89 +
  90 + /**
  91 + * Obtém o tempo de inicio da legenda.
  92 + * @return O tempo de inicio.
  93 + */
  94 + int64_t getTimeIn();
  95 +
  96 + /**
  97 + * Obtém o tempo de termino da legenda.
  98 + * @return O tempo de saida.
  99 + */
  100 + int64_t getTimeOut();
  101 +
  102 + /**
  103 + * Obtém o id da legenda.
  104 + * @return O numero da legenda.
  105 + */
  106 + int getID();
  107 +
  108 + /**
  109 + * Converte os dados de uma legenda em uma string.
  110 + * @return Uma string com a representação da legenda.
  111 + */
  112 + string toString();
  113 +
  114 + private:
  115 + /**
  116 + * O numero da legenda.
  117 + */
  118 + int id;
  119 +
  120 + /**
  121 + * O texto da legenda.
  122 + */
  123 + string subtitle_text;
  124 +
  125 + /**
  126 + * O tempo de entrada da legenda.
  127 + */
  128 + int64_t time_in;
  129 +
  130 + /**
  131 + * O tempo de saida da legenda.
  132 + */
  133 + int64_t time_out;
  134 +
  135 + };
  136 +}
  137 +
  138 +#endif /* SUBTITLE_H */
extrator/src/subtitle.cpp 0 → 100644
@@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
  1 +/***************************************************************************
  2 + * Universidade Federal da Paraíba *
  3 + * Copyright (C) 2013 by Laboratório de Aplicações de Vídeo Digital *
  4 + * *
  5 + * Centro de Informática - UFPB - Campus I *
  6 + * João Pessoa - PB - Brasil *
  7 + * *
  8 + * Author: Leonardo de Araújo Domingues (leonardo.araujo@lavid.ufpb.br) *
  9 + * Date: Qui Out 24 22:31:50 BRT 2013 *
  10 + * *
  11 + **************************************************************************/
  12 +
  13 + #include "subtitle.h"
  14 +
  15 + namespace sndesc {
  16 +
  17 + Subtitle::Subtitle() {
  18 + //TODO: default parameters!
  19 + }
  20 +
  21 + Subtitle::Subtitle (int _id, string _sub_text,
  22 + int64_t _timein, int64_t _timeout) {
  23 +
  24 + int id = _id;
  25 + subtitle_text = _sub_text;
  26 + time_in = _timein;
  27 + time_out = _timeout;
  28 +
  29 + }
  30 +
  31 + Subtitle::~Subtitle() {
  32 + //TODO: delete objects and free memory
  33 + }
  34 +
  35 + void Subtitle::setID(int _id) {
  36 + id = _id;
  37 + }
  38 +
  39 + int Subtitle::getID() {
  40 + return id;
  41 + }
  42 +
  43 + void Subtitle::setSubtitleText(string _subtext) {
  44 + subtitle_text = _subtext;
  45 + }
  46 +
  47 + void Subtitle::setTimeIn(int64_t _timein) {
  48 + time_in = _timein;
  49 + }
  50 +
  51 + void Subtitle::setTimeOut(int64_t _timeout) {
  52 + time_out = _timeout;
  53 + }
  54 +
  55 + std::string Subtitle::getSubtitleText() {
  56 + return subtitle_text;
  57 + }
  58 +
  59 + int64_t Subtitle::getTimeIn() {
  60 + return time_in;
  61 + }
  62 +
  63 + int64_t Subtitle::getTimeOut() {
  64 + return time_out;
  65 + }
  66 +
  67 + string Subtitle::toString() {
  68 +
  69 + string subtitle_str;
  70 + char buffer [MAX_FIELD];
  71 + sprintf(buffer, "%d", id);
  72 + subtitle_str.append("\n{id: ").append((string)buffer);
  73 + sprintf(buffer, "%ld", time_in);
  74 + subtitle_str.append(", time_in: ").append((string)buffer);
  75 + sprintf(buffer, "%ld", time_out);
  76 + subtitle_str.append(", time_out: ").append((string)buffer);
  77 + subtitle_str.append(", text: ").append(subtitle_text).append("}\n");
  78 +
  79 + return subtitle_str;
  80 + }
  81 +
  82 + }
0 \ No newline at end of file 83 \ No newline at end of file
extratorSRT/src/extratorSRT.cpp
@@ -1,173 +0,0 @@ @@ -1,173 +0,0 @@
1 -  
2 -#include "extratorSRT.h"  
3 -  
4 -  
5 -ExtratorSRT::ExtratorSRT(){  
6 - listeners = new list<ListenerSRT*>();  
7 - finish = false;  
8 - seek_pos = 0;  
9 - hasNextSub = true;  
10 - DPRINTF("Done!\n");  
11 -}  
12 -  
13 -ExtratorSRT::~ExtratorSRT(){  
14 - listeners->clear();  
15 - delete listeners;  
16 - if (bff_reader) delete bff_reader;  
17 - if (file_io) delete file_io;  
18 - DDDPRINTF("Extractor STR finalized!\n");  
19 -}  
20 -  
21 -void ExtratorSRT::initialize(){  
22 -  
23 - file = new lavidlib::File(filepath);  
24 -  
25 - try{  
26 - file_io = new lavidlib::FileIO(file->getPath(), FileIO::MODE_READ);  
27 - }catch(Exception ex){  
28 - finish = true;  
29 - Util::Logger::Instance()->writeLog((char*) "[ERRO: extratorSRT.cpp] Arquivo de legenda não encontrado.");  
30 - throw ExtratorSrtException("Falha ao abrir o arquivo de legenda! Verifique se o mesmo existe.\n");  
31 - }  
32 -  
33 - this->Start();  
34 -}  
35 -  
36 -  
37 -void ExtratorSRT::addListener(ListenerSRT* listener){  
38 - listeners->push_back(listener);  
39 -}  
40 -  
41 -void ExtratorSRT::notifyListeners(unsigned char* subtitle, int64_t pts) {  
42 - for(list<ListenerSRT*>::iterator it = listeners->begin(); it != listeners->end(); it++){  
43 - (*it)->notifySubtitle(subtitle, pts);  
44 - }  
45 -}  
46 -  
47 -void ExtratorSRT::notifyEndExtraction(int sub_size) {  
48 - DDPRINTF("Extrator SRT concluiu a extração: %d legendas.\n", sub_size);  
49 - for(list<ListenerSRT*>::iterator it = listeners->begin(); it != listeners->end(); it++){  
50 - (*it)->notifyEnd(sub_size);  
51 - }  
52 -}  
53 -  
54 -void ExtratorSRT::setFilePath(char* path){  
55 - filepath = (char*) path;  
56 - string command = "perl -p -e \'s/\n/ /\' ";  
57 - command.append(filepath).append(" > /dev/null");  
58 - system(command.c_str());  
59 -}  
60 -  
61 -bool ExtratorSRT::isFinished(){  
62 - return finish;  
63 -}  
64 -  
65 -bool ExtratorSRT::hasNextSubtitle() {  
66 - return hasNextSub;  
67 -}  
68 -  
69 -void ExtratorSRT::Run(){  
70 - printf("\n");  
71 - DDPRINTF("[AGUARDE] Extraindo SRT...\n");  
72 -  
73 - int sub_index = 0;  
74 - string sub_text = "";  
75 -  
76 - while(hasNextSubtitle()){  
77 - subtitle = next();  
78 - sub_text = subtitle->getSubtitleText();  
79 - notifyListeners((unsigned char*)sub_text.c_str(), calcula_pts((double) subtitle->getTimeIn()));  
80 - cout << " . ";  
81 - sub_index++;  
82 - free(subtitle);  
83 - }  
84 - printf("\n");  
85 - finish = true;  
86 - notifyEndExtraction(sub_index);  
87 -}  
88 -  
89 -Subtitle* ExtratorSRT::next() {  
90 -  
91 - if (seek_pos >= file_io->getSize())  
92 - throw ExtratorSrtException("[ERRO: extratorSRT.cpp] Esse arquivo já foi lido.");  
93 -  
94 - file_io->seek(seek_pos);  
95 - try{  
96 - bff_reader = new BufferedReader(file_io);  
97 - }catch(Exception &ex){  
98 - throw ExtratorSrtException("[ERRO: extratorSRT.cpp] O BufferedReader não foi inicializado.");  
99 - }  
100 -  
101 - Subtitle* sub = new Subtitle();  
102 - std::string line = "";  
103 - std::string text_sub = "";  
104 -  
105 - try {  
106 - /* ID */  
107 - int id = 0;  
108 - line = bff_reader->readLine();  
109 - seek_pos += (int64_t) line.size() + SIZE_CSCAPE;  
110 - id = atoi(line.c_str());  
111 - sub->setID(id);  
112 -  
113 - /* TimeIn and TimeOut */  
114 - int64_t t_in = 0, t_out = 0;  
115 - line = bff_reader->readLine();  
116 - seek_pos += (int64_t) line.size() + SIZE_CSCAPE;  
117 -  
118 - int target_pos = line.find(TARGET_TIME);  
119 - t_in = str_to_time(line.substr(0, target_pos));  
120 - sub->setTimeIn(t_in);  
121 - t_out = str_to_time(line.substr(target_pos + strlen(TARGET_TIME)+1, line.size()));  
122 - sub->setTimeOut(t_out);  
123 -  
124 - /* Text: read until line be empty */  
125 - while ((line = bff_reader->readLine()).size() > 0) {  
126 - text_sub += line;  
127 - text_sub.append(" ");  
128 - }  
129 - seek_pos += (int64_t) text_sub.size() + SIZE_CSCAPE;  
130 -  
131 - } catch (lavidlib::EOFException &ex) {  
132 - sub->setSubtitleText(text_sub);  
133 - sub->setStatusOfReady(true);  
134 - //delete(bff_reader);  
135 - seek_pos += (int64_t) text_sub.size() + SIZE_CSCAPE;  
136 - hasNextSub = false;  
137 - return sub;  
138 - }  
139 - sub->setSubtitleText(text_sub);  
140 - sub->setStatusOfReady(true);  
141 - delete(bff_reader);  
142 - return sub;  
143 -  
144 - }  
145 -  
146 -  
147 -int64_t ExtratorSRT::str_to_time(std::string str_time) {  
148 -  
149 - int64_t ttime = 0;  
150 - char* tokens = new char[4]; // hh, mm, ss, ms  
151 - strcpy(tokens, (char*)str_time.c_str());  
152 -  
153 - int index = 0;  
154 - int values [4]; // hh, mm, ss, ms  
155 - char * str = strtok(tokens, ":,");  
156 - while (str != NULL) {  
157 - values[index] = atoi(str);  
158 - str = strtok(NULL, ":,");  
159 - index++;  
160 - }  
161 - delete(tokens);  
162 -  
163 - /* calculate time */  
164 - ttime = /*hour to sec*/((((values[0] * 60) * 60) +  
165 - /*min to sec*/(values[1] * 60) +/*sec*/values[2])*1000) + values[3];  
166 -  
167 - return ttime;  
168 -  
169 - }  
170 -  
171 -uint64_t ExtratorSRT::calcula_pts(double msec) {  
172 - return (uint64_t)(1000 /*pcr_base*/ + ((msec/1000) * 90000.0));  
173 -}  
174 \ No newline at end of file 0 \ No newline at end of file
extratorSRT/src/extratorSRT_exception.cpp
@@ -1,22 +0,0 @@ @@ -1,22 +0,0 @@
1 -/***************************************************************************  
2 - * Universidade Federal da Paraíba *  
3 - * Copyright (C) 2014 by Laboratório de Aplicações de Vídeo Digital *  
4 - * *  
5 - * Centro de Informática - UFPB - Campus I *  
6 - * João Pessoa - PB - Brasil *  
7 - * *  
8 - * Author: Erickson Silva (erickson.silva@lavid.ufpb.br) *  
9 - * *  
10 - **************************************************************************/  
11 -  
12 -  
13 -  
14 - #include "extratorSRT_exception.h"  
15 -  
16 - ExtratorSrtException::ExtratorSrtException(const std::string message)  
17 - : RuntimeException(message)  
18 - { /* TODO */ }  
19 - ExtratorSrtException::ExtratorSrtException(const char* message)  
20 - : RuntimeException(message)  
21 - { /* TODO */ }  
22 -  
23 \ No newline at end of file 0 \ No newline at end of file
extratorSRT/src/include/extratorSRT.h
@@ -1,74 +0,0 @@ @@ -1,74 +0,0 @@
1 -/*  
2 - * File: extratorSRT.h  
3 - * Author: leonardo  
4 - *  
5 - * Created on 17 de Fevereiro de 2012, 17:51  
6 - */  
7 -  
8 -#ifndef EXTRATORSRT_H  
9 -#define EXTRATORSRT_H  
10 -  
11 -#include <string.h>  
12 -#include <stdlib.h>  
13 -#include <fstream>  
14 -#include <stdio.h>  
15 -#include <list>  
16 -#include <lavidlib/io/File.h>  
17 -#include <lavidlib/io/FileIO.h>  
18 -#include <lavidlib/io/BufferedReader.h>  
19 -#include <lavidlib/io/IOException.h>  
20 -#include <lavidlib/io/EOFException.h>  
21 -#include "jthread.h"  
22 -#include "dprintf.h"  
23 -#include "logger.h"  
24 -#include "subtitle.h"  
25 -#include "listenerSRT.h"  
26 -#include "extratorSRT_exception.h"  
27 -  
28 -#define SIZE_CSCAPE 1  
29 -#define TARGET_TIME "-->"  
30 -//#define MAX_LINE 1024  
31 -  
32 -using namespace jthread;  
33 -using namespace std;  
34 -using namespace sndesc;  
35 -  
36 -class ExtratorSRT: public Thread {  
37 -  
38 -public:  
39 -  
40 - ExtratorSRT();  
41 - ~ExtratorSRT();  
42 -  
43 - void addListener(ListenerSRT* listener);  
44 - void notifyListeners(unsigned char* subtitle, int64_t pts);  
45 - void notifyEndExtraction(int sub_size);  
46 -  
47 - bool hasNextSubtitle();  
48 - void setFilePath(char* path);  
49 - bool isFinished();  
50 - void initialize();  
51 - void Run();  
52 -  
53 - Subtitle* next();  
54 -  
55 -private:  
56 -  
57 - list<ListenerSRT*> *listeners;  
58 - char *filepath;  
59 - bool finish;  
60 - File *file;  
61 - FileIO *file_io;  
62 - BufferedReader *bff_reader;  
63 - Subtitle *subtitle;  
64 -  
65 - int64_t seek_pos;  
66 - bool hasNextSub;  
67 -  
68 - uint64_t calcula_pts(double msec);  
69 - int64_t str_to_time(std::string str_time);  
70 -  
71 -};  
72 -  
73 -#endif /* EXTRATORSRT_H */  
74 -  
extratorSRT/src/include/extratorSRT_exception.h
@@ -1,26 +0,0 @@ @@ -1,26 +0,0 @@
1 -/***************************************************************************  
2 - * Universidade Federal da Paraíba *  
3 - * Copyright (C) 2014 by Laboratório de Aplicações de Vídeo Digital *  
4 - * *  
5 - * Centro de Informática - UFPB - Campus I *  
6 - * João Pessoa - PB - Brasil *  
7 - * *  
8 - * Author: Erickson Silva (erickson.silva@lavid.ufpb.br) *  
9 - * *  
10 - **************************************************************************/  
11 -  
12 -#ifndef EXTRATORSRTEXCEPTION_H  
13 -#define EXTRATORSRTEXCEPTION_H  
14 -  
15 -#include <lavidlib/base/RuntimeException.h>  
16 -  
17 -using namespace lavidlib;  
18 -  
19 - class ExtratorSrtException : public RuntimeException {  
20 - public:  
21 - ExtratorSrtException(const std::string message);  
22 - ExtratorSrtException(const char* message);  
23 - };  
24 -  
25 -  
26 -#endif /* EXTRATORSRTEXCEPTION_H */  
27 \ No newline at end of file 0 \ No newline at end of file
extratorSRT/src/include/listenerSRT.h
@@ -1,21 +0,0 @@ @@ -1,21 +0,0 @@
1 -/*  
2 - * File: listenerSRT.h  
3 - * Author: leonardo  
4 - *  
5 - * Created on 17 de Fevereiro de 2012, 18:01  
6 - */  
7 -  
8 -#ifndef LISTENERSRT_H  
9 -#define LISTENERSRT_H  
10 -  
11 -#include <stdint.h>  
12 -  
13 -class ListenerSRT {  
14 -  
15 -public:  
16 - virtual void notifySubtitle(unsigned char* subtitle, int64_t pts) = 0;  
17 - virtual void notifyEnd(int sub_size) = 0;  
18 -};  
19 -  
20 -#endif /* LISTENERSRT_H */  
21 -  
extratorSRT/src/include/subtitle.h
@@ -1,53 +0,0 @@ @@ -1,53 +0,0 @@
1 -/***************************************************************************  
2 - * Universidade Federal da Paraíba *  
3 - * Copyright (C) 2013 by Laboratório de Aplicações de Vídeo Digital *  
4 - * *  
5 - * Centro de Informática - UFPB - Campus I *  
6 - * João Pessoa - PB - Brasil *  
7 - * *  
8 - * Author: Leonardo de Araújo Domingues (leonardo.araujo@lavid.ufpb.br) *  
9 - * Date: Qui Out 24 22:26:35 BRT 2013 *  
10 - * *  
11 - **************************************************************************/  
12 -  
13 - #ifndef SUBTITLE_H  
14 - #define SUBTITLE_H  
15 -  
16 - #include <string>  
17 - #include <stdint.h>  
18 - #include <stdio.h>  
19 -  
20 - #define MAX_FIELD 64  
21 -  
22 - namespace sndesc {  
23 -  
24 - class Subtitle {  
25 -  
26 - public:  
27 - Subtitle();  
28 - Subtitle(int _id, std::string _sub_text, int64_t _timein, int64_t _timeout);  
29 - ~Subtitle();  
30 - void setID(int _id);  
31 - void setSubtitleText(std::string _subtext);  
32 - void setTimeIn(int64_t _timein);  
33 - void setTimeOut(int64_t _timeout);  
34 - std::string getSubtitleText();  
35 - int64_t getTimeIn();  
36 - int64_t getTimeOut();  
37 - int getID();  
38 - void setStatusOfReady(bool status);  
39 - bool isReady();  
40 - std::string toString();  
41 -  
42 - private:  
43 - int id;  
44 - std::string subtitle_text;  
45 - int64_t time_in;  
46 - int64_t time_out;  
47 - bool ready;  
48 -  
49 - };  
50 -  
51 -}  
52 -  
53 -#endif // SUBTITLE_H  
extratorSRT/src/subtitle.cpp
@@ -1,92 +0,0 @@ @@ -1,92 +0,0 @@
1 -/***************************************************************************  
2 - * Universidade Federal da Paraíba *  
3 - * Copyright (C) 2013 by Laboratório de Aplicações de Vídeo Digital *  
4 - * *  
5 - * Centro de Informática - UFPB - Campus I *  
6 - * João Pessoa - PB - Brasil *  
7 - * *  
8 - * Author: Leonardo de Araújo Domingues (leonardo.araujo@lavid.ufpb.br) *  
9 - * Date: Qui Out 24 22:31:50 BRT 2013 *  
10 - * *  
11 - **************************************************************************/  
12 -  
13 - #include "subtitle.h"  
14 -  
15 - namespace sndesc {  
16 -  
17 - Subtitle::Subtitle() {  
18 - //TODO: default parameters!  
19 - }  
20 -  
21 - Subtitle::Subtitle (int _id, std::string _sub_text,  
22 - int64_t _timein, int64_t _timeout) {  
23 -  
24 - int id = _id;  
25 - subtitle_text = _sub_text;  
26 - time_in = _timein;  
27 - time_out = _timeout;  
28 - ready = true;  
29 -  
30 - }  
31 -  
32 - Subtitle::~Subtitle() {  
33 - //TODO: delete objects and free memory  
34 - }  
35 -  
36 - void Subtitle::setID(int _id) {  
37 - id = _id;  
38 - }  
39 -  
40 - int Subtitle::getID() {  
41 - return id;  
42 - }  
43 -  
44 - void Subtitle::setSubtitleText(std::string _subtext) {  
45 - subtitle_text = _subtext;  
46 - }  
47 -  
48 - void Subtitle::setTimeIn(int64_t _timein) {  
49 - time_in = _timein;  
50 - }  
51 -  
52 - void Subtitle::setTimeOut(int64_t _timeout) {  
53 - time_out = _timeout;  
54 - }  
55 -  
56 - std::string Subtitle::getSubtitleText() {  
57 - return subtitle_text;  
58 - }  
59 -  
60 - int64_t Subtitle::getTimeIn() {  
61 - return time_in;  
62 - }  
63 -  
64 - int64_t Subtitle::getTimeOut() {  
65 - return time_out;  
66 - }  
67 -  
68 - void Subtitle::setStatusOfReady(bool status) {  
69 - ready = status;  
70 - }  
71 -  
72 - bool Subtitle::isReady() {  
73 - return ready;  
74 - }  
75 -  
76 - std::string Subtitle::toString() {  
77 -  
78 - std::string subtitle_str;  
79 - char buffer [MAX_FIELD];  
80 - sprintf(buffer, "%d", id);  
81 - subtitle_str.append("\n{id: ").append((std::string)buffer);  
82 - sprintf(buffer, "%ld", time_in);  
83 - subtitle_str.append(", time_in: ").append((std::string)buffer);  
84 - sprintf(buffer, "%ld", time_out);  
85 - subtitle_str.append(", time_out: ").append((std::string)buffer);  
86 - subtitle_str.append(", text: ").append(subtitle_text).append("}\n");  
87 -  
88 - return subtitle_str;  
89 -  
90 - }  
91 -  
92 - }  
93 \ No newline at end of file 0 \ No newline at end of file
extratorTXT/src/extratorTXT.cpp
@@ -1,93 +0,0 @@ @@ -1,93 +0,0 @@
1 -/***************************************************************************  
2 - * Universidade Federal da Paraíba *  
3 - * Copyright (C) 2014 by Laboratório de Aplicações de Vídeo Digital *  
4 - * *  
5 - * Centro de Informática - UFPB - Campus I *  
6 - * João Pessoa - PB - Brasil *  
7 - * *  
8 - * Author: Erickson Silva (erickson.silva@lavid.ufpb.br) *  
9 - * *  
10 - **************************************************************************/  
11 -  
12 -#include "extratorTXT.h"  
13 -  
14 -ExtratorTXT::ExtratorTXT(){  
15 - listeners = new list<ListenerTXT*>();  
16 - finish = false;  
17 - DPRINTF("Done!\n");  
18 -}  
19 -  
20 -ExtratorTXT::~ExtratorTXT(){  
21 - listeners->clear();  
22 - delete listeners;  
23 - delete file;  
24 - delete file_io;  
25 - delete bff_reader;  
26 - DDDPRINTF("Extractor TXT finalized!\n");  
27 -}  
28 -  
29 -void ExtratorTXT::initialize(){  
30 - file = new lavidlib::File(filepath);  
31 - try{  
32 - file_io = new lavidlib::FileIO(file->getPath(), FileIO::MODE_READ);  
33 - bff_reader = new BufferedReader(file_io);  
34 - }catch(Exception &ex){  
35 - finish = true;  
36 - Util::Logger::Instance()->writeLog((char*) "[ERRO: extratorTXT.cpp] Arquivo de texto não encontrado.");  
37 - throw ExtratorTxtException("Falha ao abrir o arquivo de texto! Verifique se o mesmo existe.");  
38 - }  
39 - this->Start();  
40 -}  
41 -  
42 -void ExtratorTXT::addListener(ListenerTXT* listener){  
43 - listeners->push_back(listener);  
44 -}  
45 -  
46 -void ExtratorTXT::notifyListeners(unsigned char* line) {  
47 - for(list<ListenerTXT*>::iterator it = listeners->begin(); it != listeners->end(); it++){  
48 - (*it)->notifyLine(line);  
49 - }  
50 -}  
51 -  
52 -void ExtratorTXT::notifyEndExtraction(int line_size) {  
53 - DDPRINTF("ExtratorTXT concluiu a extração: %d linhas.\n", line_size);  
54 - for(list<ListenerTXT*>::iterator it = listeners->begin(); it != listeners->end(); it++){  
55 - (*it)->notifyEnd(line_size);  
56 - }  
57 -}  
58 -  
59 -void ExtratorTXT::setFilePath(char* path){  
60 - filepath = (char*) path;  
61 -}  
62 -  
63 -bool ExtratorTXT::isFinished(){  
64 - return finish;  
65 -}  
66 -  
67 -void ExtratorTXT::Run(){  
68 -  
69 - DDPRINTF("[AGUARDE] Extraindo Texto...\n")  
70 -  
71 - int line_index = 0;  
72 - bool hasNext = true;  
73 - string line;  
74 -  
75 - while (hasNext) {  
76 - try{  
77 - line = bff_reader->readLine();  
78 - if (line.length() > 0){  
79 - notifyListeners((unsigned char*) line.c_str());  
80 - cout << " . ";  
81 - line_index++;  
82 - }  
83 - }catch (EOFException &ex){  
84 - hasNext = false;  
85 - }catch (...){  
86 - Util::Logger::Instance()->writeLog((char*) "[ERRO: extratorTXT.cpp] Erro durante a leitura do arquivo de texto.");  
87 - throw ExtratorTxtException("Falha desconhecida na leitura do arquivo. Tente novamente.");  
88 - }  
89 - }  
90 - printf("\n");  
91 - finish = true;  
92 - notifyEndExtraction(line_index);  
93 -}  
extratorTXT/src/extratorTXT_exception.cpp
@@ -1,22 +0,0 @@ @@ -1,22 +0,0 @@
1 -/***************************************************************************  
2 - * Universidade Federal da Paraíba *  
3 - * Copyright (C) 2014 by Laboratório de Aplicações de Vídeo Digital *  
4 - * *  
5 - * Centro de Informática - UFPB - Campus I *  
6 - * João Pessoa - PB - Brasil *  
7 - * *  
8 - * Author: Erickson Silva (erickson.silva@lavid.ufpb.br) *  
9 - * *  
10 - **************************************************************************/  
11 -  
12 -  
13 -  
14 - #include "extratorTXT_exception.h"  
15 -  
16 - ExtratorTxtException::ExtratorTxtException(const std::string message)  
17 - : RuntimeException(message)  
18 - { /* TODO */ }  
19 - ExtratorTxtException::ExtratorTxtException(const char* message)  
20 - : RuntimeException(message)  
21 - { /* TODO */ }  
22 -  
23 \ No newline at end of file 0 \ No newline at end of file
extratorTXT/src/include/extratorTXT.h
@@ -1,55 +0,0 @@ @@ -1,55 +0,0 @@
1 -/***************************************************************************  
2 - * Universidade Federal da Paraíba *  
3 - * Copyright (C) 2014 by Laboratório de Aplicações de Vídeo Digital *  
4 - * *  
5 - * Centro de Informática - UFPB - Campus I *  
6 - * João Pessoa - PB - Brasil *  
7 - * *  
8 - * Author: Erickson Silva (erickson.silva@lavid.ufpb.br) *  
9 - * *  
10 - **************************************************************************/  
11 -  
12 -#ifndef EXTRATORTXT_H  
13 -#define EXTRATORTXT_H  
14 -  
15 -#include "listenerTXT.h"  
16 -#include "jthread.h"  
17 -#include "dprintf.h"  
18 -#include "logger.h"  
19 -#include "extratorTXT_exception.h"  
20 -#include <list>  
21 -#include <lavidlib/io/File.h>  
22 -#include <lavidlib/io/FileIO.h>  
23 -#include <lavidlib/io/BufferedReader.h>  
24 -#include <lavidlib/io/IOException.h>  
25 -  
26 -using namespace jthread;  
27 -using namespace std;  
28 -  
29 -class ExtratorTXT: public Thread {  
30 -  
31 -public:  
32 -  
33 - ExtratorTXT();  
34 - ~ExtratorTXT();  
35 -  
36 - void addListener(ListenerTXT* listener);  
37 - void notifyListeners(unsigned char* line);  
38 - void notifyEndExtraction(int line_size);  
39 -  
40 - void setFilePath(char* path);  
41 - bool isFinished();  
42 - void initialize();  
43 - void Run();  
44 -  
45 -private:  
46 - list<ListenerTXT*> *listeners;  
47 - char* filepath;  
48 - bool finish;  
49 - File *file;  
50 - FileIO *file_io;  
51 - BufferedReader *bff_reader;  
52 -};  
53 -  
54 -#endif /* EXTRATORTXT_H */  
55 -  
extratorTXT/src/include/extratorTXT_exception.h
@@ -1,27 +0,0 @@ @@ -1,27 +0,0 @@
1 -/***************************************************************************  
2 - * Universidade Federal da Paraíba *  
3 - * Copyright (C) 2014 by Laboratório de Aplicações de Vídeo Digital *  
4 - * *  
5 - * Centro de Informática - UFPB - Campus I *  
6 - * João Pessoa - PB - Brasil *  
7 - * *  
8 - * Author: Erickson Silva (erickson.silva@lavid.ufpb.br) *  
9 - * *  
10 - **************************************************************************/  
11 -  
12 - #ifndef EXTRATORTXTEXCEPTION_H  
13 - #define EXTRATORTXTEXCEPTION_H  
14 -  
15 - #include <lavidlib/base/RuntimeException.h>  
16 -  
17 - using namespace lavidlib;  
18 -  
19 -  
20 - class ExtratorTxtException : public RuntimeException {  
21 - public:  
22 - ExtratorTxtException(const std::string message);  
23 - ExtratorTxtException(const char* message);  
24 - };  
25 -  
26 -  
27 - #endif /* EXTRATORTXTEXCEPTION_H */  
28 \ No newline at end of file 0 \ No newline at end of file
extratorTXT/src/include/listenerTXT.h
@@ -1,25 +0,0 @@ @@ -1,25 +0,0 @@
1 -/***************************************************************************  
2 - * Universidade Federal da Paraíba *  
3 - * Copyright (C) 2014 by Laboratório de Aplicações de Vídeo Digital *  
4 - * *  
5 - * Centro de Informática - UFPB - Campus I *  
6 - * João Pessoa - PB - Brasil *  
7 - * *  
8 - * Author: Erickson Silva (erickson.silva@lavid.ufpb.br) *  
9 - * *  
10 - **************************************************************************/  
11 -  
12 -#ifndef LISTENERTXT_H  
13 -#define LISTENERTXT_H  
14 -  
15 -#include <stdint.h>  
16 -  
17 -class ListenerTXT {  
18 -  
19 -public:  
20 - virtual void notifyLine(unsigned char* line) = 0;  
21 - virtual void notifyEnd(int line_size) = 0;  
22 -};  
23 -  
24 -#endif /* LISTENERTXT_H */  
25 -  
servico/src/include/serviceWindowGenerationFromSRT.h
@@ -4,12 +4,14 @@ @@ -4,12 +4,14 @@
4 #include "serviceWindowGeneration.h" 4 #include "serviceWindowGeneration.h"
5 #include <pthread.h> 5 #include <pthread.h>
6 #include "inputFile.h" 6 #include "inputFile.h"
7 -#include "extratorSRT.h" 7 +#include "extratorFactory.h"
8 #include "listenerSRT.h" 8 #include "listenerSRT.h"
9 #include "stdint.h" 9 #include "stdint.h"
10 #include <vector> 10 #include <vector>
11 #include "jthread.h" 11 #include "jthread.h"
12 12
  13 +#define SRT 1
  14 +
13 using namespace std; 15 using namespace std;
14 using namespace jthread; 16 using namespace jthread;
15 using namespace Util; 17 using namespace Util;
@@ -18,6 +20,7 @@ class ServiceWindowGenerationFromSRT : public ServiceWindowGeneration, public Li @@ -18,6 +20,7 @@ class ServiceWindowGenerationFromSRT : public ServiceWindowGeneration, public Li
18 20
19 private: 21 private:
20 pthread_mutex_t *mutex_serviceSRT; 22 pthread_mutex_t *mutex_serviceSRT;
  23 + ExtratorFactory *extrator_factory;
21 ExtratorSRT * extratorSRT; 24 ExtratorSRT * extratorSRT;
22 char* path_srt; 25 char* path_srt;
23 bool finish; 26 bool finish;
servico/src/include/serviceWindowGenerationFromText.h
@@ -2,16 +2,17 @@ @@ -2,16 +2,17 @@
2 #define _SERVICEWINDOWGENERATIONFROMTEXT_H 2 #define _SERVICEWINDOWGENERATIONFROMTEXT_H
3 3
4 #include "serviceWindowGeneration.h" 4 #include "serviceWindowGeneration.h"
5 -#include "extratorTXT.h" 5 +#include "extratorFactory.h"
6 #include "listenerTXT.h" 6 #include "listenerTXT.h"
7 7
8 - 8 +#define TXT 2
9 /*FIXME: está restrito a 2K bytes de texto */ 9 /*FIXME: está restrito a 2K bytes de texto */
10 #define MAX_TEXT_SIZE 2048 10 #define MAX_TEXT_SIZE 2048
11 11
12 class ServiceWindowGenerationFromText : public ServiceWindowGeneration, public ListenerTXT, public Thread { 12 class ServiceWindowGenerationFromText : public ServiceWindowGeneration, public ListenerTXT, public Thread {
13 13
14 private: 14 private:
  15 + ExtratorFactory *extrator_factory;
15 ExtratorTXT * extratorTXT; 16 ExtratorTXT * extratorTXT;
16 bool finish; 17 bool finish;
17 18
servico/src/serviceWindowGenerationFromSRT.cpp
@@ -4,7 +4,8 @@ @@ -4,7 +4,8 @@
4 //Construtor Service 2 4 //Construtor Service 2
5 ServiceWindowGenerationFromSRT::ServiceWindowGenerationFromSRT( 5 ServiceWindowGenerationFromSRT::ServiceWindowGenerationFromSRT(
6 char* path_video, char* path_srt, int sublanguage, int position, int size, int transparency, char* id, int serviceType) { 6 char* path_video, char* path_srt, int sublanguage, int position, int size, int transparency, char* id, int serviceType) {
7 - setPathInput(path_video); 7 + extrator_factory = new ExtratorFactory();
  8 + setPathInput(path_video);
8 setPathSRT(path_srt); 9 setPathSRT(path_srt);
9 setPosition(position); 10 setPosition(position);
10 setSize(size); 11 setSize(size);
@@ -18,7 +19,8 @@ ServiceWindowGenerationFromSRT::ServiceWindowGenerationFromSRT( @@ -18,7 +19,8 @@ ServiceWindowGenerationFromSRT::ServiceWindowGenerationFromSRT(
18 19
19 //Construtor Service 5 20 //Construtor Service 5
20 ServiceWindowGenerationFromSRT::ServiceWindowGenerationFromSRT(char* path_srt, int transparency, char* id, int serviceType){ 21 ServiceWindowGenerationFromSRT::ServiceWindowGenerationFromSRT(char* path_srt, int transparency, char* id, int serviceType){
21 - setPathInput(path_srt); 22 + extrator_factory = new ExtratorFactory();
  23 + setPathInput(path_srt);
22 setTransparency(transparency); 24 setTransparency(transparency);
23 setServiceType(serviceType); 25 setServiceType(serviceType);
24 setUserId(id); 26 setUserId(id);
@@ -67,7 +69,7 @@ void ServiceWindowGenerationFromSRT::initialize() { @@ -67,7 +69,7 @@ void ServiceWindowGenerationFromSRT::initialize() {
67 69
68 if(serviceType == 2){ 70 if(serviceType == 2){
69 71
70 - extratorSRT = new ExtratorSRT(); 72 + extratorSRT = (ExtratorSRT*)extrator_factory->getExtrator(SRT);
71 extratorSRT->addListener(this); 73 extratorSRT->addListener(this);
72 extratorSRT->setFilePath((char*) path_srt); 74 extratorSRT->setFilePath((char*) path_srt);
73 75
@@ -75,18 +77,16 @@ void ServiceWindowGenerationFromSRT::initialize() { @@ -75,18 +77,16 @@ void ServiceWindowGenerationFromSRT::initialize() {
75 77
76 try{ 78 try{
77 extratorSRT->initialize(); 79 extratorSRT->initialize();
78 - }catch(ExtratorSrtException ex){ 80 + }catch(ExtratorException ex){
79 throw ServiceException(ex.getMessage()); 81 throw ServiceException(ex.getMessage());
80 - }catch(InputException ex){  
81 - throw ServiceException(ex.getMessage());  
82 - } 82 + }
83 this->Start(); 83 this->Start();
84 84
85 } else{ 85 } else{
86 /*Este serviço utiliza apenas o arquivo de legendas (SRT) como entrada, 86 /*Este serviço utiliza apenas o arquivo de legendas (SRT) como entrada,
87 portanto, não é preciso monitorar as informações do PCR a partir do 87 portanto, não é preciso monitorar as informações do PCR a partir do
88 objeto InputFile().*/ 88 objeto InputFile().*/
89 - extratorSRT = new ExtratorSRT(); 89 + extratorSRT = (ExtratorSRT*)extrator_factory->getExtrator(SRT);
90 extratorSRT->addListener(this); 90 extratorSRT->addListener(this);
91 extratorSRT->setFilePath((char*) path_input); 91 extratorSRT->setFilePath((char*) path_input);
92 92
@@ -94,7 +94,7 @@ void ServiceWindowGenerationFromSRT::initialize() { @@ -94,7 +94,7 @@ void ServiceWindowGenerationFromSRT::initialize() {
94 94
95 try{ 95 try{
96 extratorSRT->initialize(); 96 extratorSRT->initialize();
97 - }catch(ExtratorSrtException ex){ 97 + }catch(ExtratorException ex){
98 throw ServiceException(ex.getMessage()); 98 throw ServiceException(ex.getMessage());
99 } 99 }
100 this->Start(); 100 this->Start();
servico/src/serviceWindowGenerationFromText.cpp
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 ServiceWindowGenerationFromText::ServiceWindowGenerationFromText ( 3 ServiceWindowGenerationFromText::ServiceWindowGenerationFromText (
4 char* path_file, char* username, int transp, int serviceType, char* client_type) { 4 char* path_file, char* username, int transp, int serviceType, char* client_type) {
5 5
  6 + extrator_factory = new ExtratorFactory();
6 setPathInput(path_file); 7 setPathInput(path_file);
7 setClientType(client_type); 8 setClientType(client_type);
8 setUserId(username); 9 setUserId(username);
@@ -33,7 +34,7 @@ bool ServiceWindowGenerationFromText::isFinished() { @@ -33,7 +34,7 @@ bool ServiceWindowGenerationFromText::isFinished() {
33 void ServiceWindowGenerationFromText::initialize() { 34 void ServiceWindowGenerationFromText::initialize() {
34 DDPRINTF("Service Text Initialize.\n"); 35 DDPRINTF("Service Text Initialize.\n");
35 36
36 - extratorTXT = new ExtratorTXT(); 37 + extratorTXT = (ExtratorTXT*) extrator_factory->getExtrator(TXT);
37 extratorTXT->addListener(this); 38 extratorTXT->addListener(this);
38 extratorTXT->setFilePath(getPathInput()); 39 extratorTXT->setFilePath(getPathInput());
39 40
@@ -41,7 +42,7 @@ void ServiceWindowGenerationFromText::initialize() { @@ -41,7 +42,7 @@ void ServiceWindowGenerationFromText::initialize() {
41 42
42 try{ 43 try{
43 extratorTXT->initialize(); 44 extratorTXT->initialize();
44 - }catch(ExtratorTxtException ex){ 45 + }catch(ExtratorException ex){
45 throw ServiceException(ex.getMessage()); 46 throw ServiceException(ex.getMessage());
46 } 47 }
47 this->Start(); 48 this->Start();