diff options
| -rw-r--r-- | src/mov_encoder_thread.cc | 26 | ||||
| -rw-r--r-- | src/mov_encoder_thread.h | 9 | 
2 files changed, 30 insertions, 5 deletions
| diff --git a/src/mov_encoder_thread.cc b/src/mov_encoder_thread.cc index da83744..be86377 100644 --- a/src/mov_encoder_thread.cc +++ b/src/mov_encoder_thread.cc @@ -31,8 +31,10 @@  /*   * $Log$ - * Revision 1.4  2005/05/17 19:16:26  deva + * Revision 1.5  2005/05/19 10:55:49  deva + * Test for block encoding of length strlen("IPIPP").   * + * Revision 1.4  2005/05/17 19:16:26  deva   * Made new mpeg writer work, with proper file permissions.   *   * Revision 1.3  2005/05/17 15:13:15  deva @@ -43,12 +45,12 @@   *   * Revision 1.1  2005/05/17 14:30:56  deva   * Added code, preparing threaded encoding. - *   */  #include <config.h>  #include "mov_encoder_thread.h"  #include <errno.h> +#include "miav_config.h"  MovEncoderThread::MovEncoderThread(const char *filename)  { @@ -56,7 +58,7 @@ MovEncoderThread::MovEncoderThread(const char *filename)                O_CREAT | O_WRONLY, //| O_LARGEFILE                S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);    if(file == -1) { -    fprintf(stderr, "File not opened %s\n", strerror(errno)); +    fprintf(stderr, "Could not open file for writing: %s\n", strerror(errno));      return;    }    threads = 4; @@ -64,6 +66,12 @@ MovEncoderThread::MovEncoderThread(const char *filename)    for(int cnt = 0; cnt < threads; cnt++) {      encs.push_back(new MovEncoder());    } + +  int current_encoder = 0; +  int current_frame = 0; + +  int num_frames_in_block = config->readString("frame_sequence")->length(); +  fprintf(stderr, "Frame sequence length [%d]\n", num_frames_in_block); fflush(stderr);  }  MovEncoderThread::~MovEncoderThread() @@ -78,10 +86,18 @@ void MovEncoderThread::encode(Frame* frame)  {    if(file == -1) return; -  Frame *enc_frame = encs[0]->encode(frame); +  Frame *enc_frame = encs[current_encoder]->encode(frame);    //  fprintf(stderr, "[%d]", enc_frame->size); fflush(stderr);    int i = write(file, enc_frame->data, enc_frame->size);    if(i == -1) perror("Write failed");    delete enc_frame; -   + +  // Switch frame +  current_frame++; +  if(current_frame >= num_frames_in_block) { +    // Switch encoder +    current_frame = 0; +    current_encoder++; +    if(current_encoder >= threads) current_encoder = 0; +  }  } diff --git a/src/mov_encoder_thread.h b/src/mov_encoder_thread.h index 8b7cd72..1e91b58 100644 --- a/src/mov_encoder_thread.h +++ b/src/mov_encoder_thread.h @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.3  2005/05/19 10:55:49  deva + * Test for block encoding of length strlen("IPIPP"). + *   * Revision 1.2  2005/05/17 15:12:51  deva   * Fixed file rights (All read on files and directories, and all execute on directories).   * @@ -64,6 +67,12 @@ public:    void encode(Frame* frame);  private: +  // Used for encoder switching +  int current_encoder; +  int current_frame; + +  int num_frames_in_block; +    int threads;    int file;    vector<MovEncoder*> encs; | 
