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; }
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; }
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; } }