annotate TOOLS/subrip.c @ 24678:9aab9d7b51f0

Fix missing subtitles after seeking back Subtitle packets that had been demuxed but whose start time had not yet been reached were left in the demuxer stream after seeking. When using the default (non-libass) subtitle rendering this could block subtitles from appearing as long as the playback position stayed below the original one before seek. External subtitle files were not affected. Fixed by making seek code free all packets from the subtitle stream.
author uau
date Thu, 04 Oct 2007 02:35:34 +0000
parents d0991c8e2fee
children e82ecde2cbd4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18863
06e4c7737aa7 postproc --> libswscale
diego
parents: 16297
diff changeset
1 /* -*- compile-command: "gcc -g -Wall -I.. -o subrip subrip.c ../vobsub.o ../spudec.o ../mp_msg.o ../unrarlib.o ../libswscale/swscale.o ../libswscale/rgb2rgb.o ../libswscale/yuv2rgb.o ../libmpcodecs/img_format.o -lm" -*- */
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
2 /*
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
3 * Use with CVS JOCR/GOCR.
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
4 *
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
5 * You will have to change 'vobsub_id' value if you want another subtitle than number 0.
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
6 *
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
7 * HINT: you can view the subtitle that is being decoded with "display subtitle-*.pgm"
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
8 *
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
9 */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
10
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
11 /* Make sure this accesses the CVS version of JOCR/GOCR */
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
12 #define GOCR_PROGRAM "gocr"
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
13
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
14 #include <ctype.h>
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
15 #include <stdio.h>
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
16 #include <stdlib.h>
23657
d7ae37864b03 Fix implicit declaration of function warnings.
diego
parents: 22628
diff changeset
17 #include <string.h>
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
18 #include <unistd.h>
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
19 #include <sys/types.h>
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
20 #include <sys/wait.h>
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
21 #include "libvo/video_out.h"
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
22 #include "vobsub.h"
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
23 #include "spudec.h"
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
24
23989
214c4a4a26ee Add a dummy guiMessageBox so it still compiles when MPlayer was configured with
reimar
parents: 23657
diff changeset
25 void guiMessageBox(int level, char * str) {};
214c4a4a26ee Add a dummy guiMessageBox so it still compiles when MPlayer was configured with
reimar
parents: 23657
diff changeset
26
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
27 /* XXX Kludge ahead, this MUST be the same as the definitions found in ../spudec.c */
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
28 typedef struct packet_t packet_t;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
29 struct packet_t {
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
30 unsigned char *packet;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
31 unsigned int palette[4];
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
32 unsigned int alpha[4];
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
33 unsigned int control_start; /* index of start of control data */
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
34 unsigned int current_nibble[2]; /* next data nibble (4 bits) to be
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
35 processed (for RLE decoding) for
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
36 even and odd lines */
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
37 int deinterlace_oddness; /* 0 or 1, index into current_nibble */
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
38 unsigned int start_col, end_col;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
39 unsigned int start_row, end_row;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
40 unsigned int width, height, stride;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
41 unsigned int start_pts, end_pts;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
42 packet_t *next;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
43 };
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
44 typedef struct {
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
45 packet_t *queue_head;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
46 packet_t *queue_tail;
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
47 unsigned int global_palette[16];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
48 unsigned int orig_frame_width, orig_frame_height;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
49 unsigned char* packet;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
50 size_t packet_reserve; /* size of the memory pointed to by packet */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
51 unsigned int packet_offset; /* end of the currently assembled fragment */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
52 unsigned int packet_size; /* size of the packet once all fragments are assembled */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
53 unsigned int packet_pts; /* PTS for this packet */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
54 unsigned int palette[4];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
55 unsigned int alpha[4];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
56 unsigned int cuspal[4];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
57 unsigned int custom;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
58 unsigned int now_pts;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
59 unsigned int start_pts, end_pts;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
60 unsigned int start_col, end_col;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
61 unsigned int start_row, end_row;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
62 unsigned int width, height, stride;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
63 size_t image_size; /* Size of the image buffer */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
64 unsigned char *image; /* Grayscale value */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
65 unsigned char *aimage; /* Alpha value */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
66 unsigned int scaled_frame_width, scaled_frame_height;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
67 unsigned int scaled_start_col, scaled_start_row;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
68 unsigned int scaled_width, scaled_height, scaled_stride;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
69 size_t scaled_image_size;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
70 unsigned char *scaled_image;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
71 unsigned char *scaled_aimage;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
72 int auto_palette; /* 1 if we lack a palette and must use an heuristic. */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
73 int font_start_level; /* Darkest value used for the computed font */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
74 vo_functions_t *hw_spu;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
75 int spu_changed;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
76 } spudec_handle_t;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
77
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
78 int use_gui;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
79 int gtkMessageBox;
16297
c6e8ef454266 compile fix, vobsub.c needs identify variable.
reimar
parents: 10306
diff changeset
80 int identify=0;
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
81 int vobsub_id=0;
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
82 int sub_pos=0;
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
83
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
84 static spudec_handle_t *spudec;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
85 static FILE *fsub = NULL;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
86 static unsigned int sub_idx = 0;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
87
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
88 static void
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
89 process_gocr_output(const char *const fname, unsigned int start, unsigned int end)
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
90 {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
91 FILE *file;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
92 int temp, h, m, s, ms;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
93 int c, bol;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
94 file = fopen(fname, "r");
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
95 if (file == NULL) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
96 perror("fopen failed");
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
97 return;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
98 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
99 temp = start;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
100 temp /= 90;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
101 h = temp / 3600000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
102 temp %= 3600000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
103 m = temp / 60000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
104 temp %= 60000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
105 s = temp / 1000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
106 temp %= 1000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
107 ms = temp;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
108 fprintf(fsub, "%d\n%02d:%02d:%02d,%03d --> ", ++sub_idx, h, m, s, ms);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
109 temp = end;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
110 temp /= 90;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
111 h = temp / 3600000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
112 temp %= 3600000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
113 m = temp / 60000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
114 temp %= 60000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
115 s = temp / 1000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
116 temp %= 1000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
117 ms = temp;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
118 fprintf(fsub, "%02d:%02d:%02d,%03d\n", h, m, s, ms);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
119 bol = 1;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
120 while ((c = getc(file)) != EOF) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
121 if (bol) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
122 if (!isspace(c)) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
123 putc(c, fsub);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
124 bol=0;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
125 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
126 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
127 else if (!bol) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
128 putc(c, fsub);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
129 bol = c == '\n';
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
130 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
131 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
132 putc('\n', fsub);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
133 fflush(fsub);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
134 fclose(file);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
135 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
136
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
137 static void
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
138 output_pgm(FILE *f, int w, int h, unsigned char *src, unsigned char *srca, int stride)
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
139 {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
140 int x, y;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
141 fprintf(f,
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
142 "P5\n"
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
143 "%d %d\n"
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
144 "255\n",
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
145 w, h);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
146 for (y = 0; y < h; ++y) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
147 for (x = 0; x < w; ++x) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
148 int res;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
149 if (srca[x])
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
150 res = src[x] * (256 - srca[x]);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
151 else
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
152 res = 0;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
153 res = (65535 - res) >> 8;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
154 putc(res&0xff, f);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
155
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
156 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
157 src += stride;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
158 srca += stride;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
159 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
160 putc('\n', f);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
161 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
162
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
163 static void
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
164 draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride)
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
165 {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
166 FILE *f;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
167 char buf[128];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
168 char cmd[512];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
169 int cmdres;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
170 const char *const tmpfname = tmpnam(NULL);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
171 sprintf(buf, "subtitle-%d-%d.pgm", spudec->start_pts / 90, spudec->end_pts / 90);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
172 f = fopen(buf, "w");
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
173 output_pgm(f, w, h, src, srca, stride);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
174 fclose(f);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
175 /* see <URL:http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/subtitleripper/subtitleripper/src/README.gocr?rev=HEAD&content-type=text/vnd.viewcvs-markup> */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
176 sprintf(cmd, GOCR_PROGRAM" -v 1 -s 7 -d 0 -m 130 -m 256 -m 32 -i %s -o %s", buf, tmpfname);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
177 cmdres = system(cmd);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
178 if (cmdres < 0) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
179 perror("system failed");
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
180 exit(EXIT_FAILURE);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
181 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
182 else if (cmdres) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
183 fprintf(stderr, GOCR_PROGRAM" returned %d\n", cmdres);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
184 exit(cmdres);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
185 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
186 process_gocr_output(tmpfname, spudec->start_pts, spudec->end_pts);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
187 unlink(buf);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
188 unlink(tmpfname);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
189 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
190
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
191 void
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
192 fast_memcpy(void *a, void *b, int s)
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
193 { //FIXME
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
194 memcpy(a, b, s);
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
195 }
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
196
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
197 int
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
198 main(int argc, char **argv)
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
199 {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
200 const char *vobsubname, *subripname;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
201 void *vobsub;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
202 void *packet;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
203 int packet_len;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
204 unsigned int pts100;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
205
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
206 if (argc < 2 || 4 < argc) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
207 fprintf(stderr, "Usage: %s <vobsub basename> [<subid> [<output filename>] ]\n", argv[0]);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
208 exit(EXIT_FAILURE);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
209 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
210 vobsubname = argv[1];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
211 subripname = NULL;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
212 fsub = stdout;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
213 if (argc >= 3)
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
214 vobsub_id = atoi(argv[2]);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
215 if (argc >= 4) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
216 subripname = argv[3];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
217 fsub = fopen(subripname, "w");
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
218 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
219
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
220 vobsub = vobsub_open(vobsubname, NULL, 0, &spudec);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
221 while ((packet_len=vobsub_get_next_packet(vobsub, &packet, &pts100)) >= 0) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
222 spudec_assemble(spudec, packet, packet_len, pts100);
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
223 if (spudec->queue_head) {
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
224 spudec_heartbeat(spudec, spudec->queue_head->start_pts);
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
225 if (spudec_changed(spudec))
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
226 spudec_draw(spudec, draw_alpha);
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
227 }
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
228 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
229
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
230 if (vobsub)
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
231 vobsub_close(vobsub);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
232 exit(EXIT_SUCCESS);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
233 }