Ejemplo n.º 1
0
int main(int argc, char **argv) {

  if (argc != 3) {
    usage(argv[0]);
    return 127;
  }

  char* fin_name = argv[1];
  char* fout_name = argv[2];

  // Make sure we have an input and output file
  if (fin_name == NULL || fout_name == NULL) {
    usage(argv[0]);
    return 127;
  }

  // Open the input and output files
  srt_file* fin = srt_open_read(fin_name);
  if (fin == NULL) {
    fprintf(stderr, "Error opening input file %s: %s\n", fin_name, strerror(errno));
    return 1;
  }
    

  srt_file* fout = srt_open_write(fout_name);
  if (fout == NULL) {
    fprintf(stderr, "Error opening output file %s: %s\n", fout_name, strerror(errno));
    return 1;
  }

  
  sub_text sub;
  sub.text = NULL;
  sub.buf_len = 0;
  int error = srt_read(fin, &sub);
  fout->delimiter = fin->delimiter;
  int id = 1;
  while (!error) {
    sub.id = id++;
    if ((error = srt_write(fout, &sub))) break;
    error = srt_read(fin, &sub);
  }

  srt_close(fin);
  srt_close(fout);
  if (sub.text != NULL) {
    free(sub.text);
  }

  if (error != SRT_EOF) {
    fprintf(stderr, "Error at input line %u: %s\n", fin->line_no, srt_strerror(error));
    return 2;
  }

  return 0;
}
Ejemplo n.º 2
0
static int decsrtWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
                       hb_buffer_t ** buf_out )
{
    hb_work_private_t * pv = w->private_data;
    hb_buffer_t * in = *buf_in;
    hb_buffer_t * out = NULL;

    out = srt_read( pv );
    if( out )
    {
        hb_srt_to_ssa(out, ++pv->line);

        /*
         * Keep a buffer in our input fifo so that we get run.
         */
        hb_fifo_push( w->fifo_in, in);
        *buf_in = NULL;
        *buf_out = out;
    } else {
        *buf_out = NULL;
        return HB_WORK_OK;
    }

    return HB_WORK_OK;
}
Ejemplo n.º 3
0
static int decsrtWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
                       hb_buffer_t ** buf_out )
{
    hb_work_private_t * pv = w->private_data;
    hb_buffer_t * out = NULL;

    if (pv->job->reader_pts_offset == AV_NOPTS_VALUE)
    {
        // We need to wait for reader to initialize it's pts offset so that
        // we know where to start reading SRTs.
        *buf_out = NULL;
        return HB_WORK_OK;
    }
    if (pv->start_time == AV_NOPTS_VALUE)
    {
        pv->start_time = pv->job->reader_pts_offset;
        if (pv->job->pts_to_stop > 0)
        {
            pv->stop_time = pv->job->pts_to_start + pv->job->pts_to_stop;
        }
    }
    out = srt_read( pv );
    if (out != NULL)
    {
        hb_srt_to_ssa(out, ++pv->line);
        *buf_out = out;
        return HB_WORK_OK;
    } else {
        *buf_out = hb_buffer_eof_init();
        return HB_WORK_DONE;
    }
}