annotate TOOLS/subrip.c @ 19619:a83e5b8d2e63

Patch from Karolina Lindqvist <karolina.lindqvist@kramnet.se> "There is a bug in the zoran -vo zr driver, that makes the output garbled always. It also probably affects the zrmjpeg filter. This patch takes care of the problem." Patch tested and OK. And 10l to me, because this bug probably has existed for a looong time.
author rik
date Fri, 01 Sep 2006 18:49:40 +0000
parents 06e4c7737aa7
children 0334e714d3fa
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>
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
17 #include <unistd.h>
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
18 #include <sys/types.h>
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
19 #include <sys/wait.h>
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
20 #include "libvo/video_out.h"
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
21 #include "vobsub.h"
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
22 #include "spudec.h"
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
23
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
24 /* 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
25 typedef struct packet_t packet_t;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
26 struct packet_t {
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
27 unsigned char *packet;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
28 unsigned int palette[4];
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
29 unsigned int alpha[4];
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
30 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
31 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
32 processed (for RLE decoding) for
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
33 even and odd lines */
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
34 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
35 unsigned int start_col, end_col;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
36 unsigned int start_row, end_row;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
37 unsigned int width, height, stride;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
38 unsigned int start_pts, end_pts;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
39 packet_t *next;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
40 };
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
41 typedef struct {
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
42 packet_t *queue_head;
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
43 packet_t *queue_tail;
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
44 unsigned int global_palette[16];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
45 unsigned int orig_frame_width, orig_frame_height;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
46 unsigned char* packet;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
47 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
48 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
49 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
50 unsigned int packet_pts; /* PTS for this packet */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
51 unsigned int palette[4];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
52 unsigned int alpha[4];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
53 unsigned int cuspal[4];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
54 unsigned int custom;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
55 unsigned int now_pts;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
56 unsigned int start_pts, end_pts;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
57 unsigned int start_col, end_col;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
58 unsigned int start_row, end_row;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
59 unsigned int width, height, stride;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
60 size_t image_size; /* Size of the image buffer */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
61 unsigned char *image; /* Grayscale value */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
62 unsigned char *aimage; /* Alpha value */
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
63 unsigned int scaled_frame_width, scaled_frame_height;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
64 unsigned int scaled_start_col, scaled_start_row;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
65 unsigned int scaled_width, scaled_height, scaled_stride;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
66 size_t scaled_image_size;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
67 unsigned char *scaled_image;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
68 unsigned char *scaled_aimage;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
69 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
70 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
71 vo_functions_t *hw_spu;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
72 int spu_changed;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
73 } spudec_handle_t;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
74
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
75 int use_gui;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
76 int gtkMessageBox;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
77 int verbose=1;
16297
c6e8ef454266 compile fix, vobsub.c needs identify variable.
reimar
parents: 10306
diff changeset
78 int identify=0;
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
79 int vobsub_id=0;
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
80 int sub_pos=0;
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
81
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
82 static spudec_handle_t *spudec;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
83 static FILE *fsub = NULL;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
84 static unsigned int sub_idx = 0;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
85
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
86 static void
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
87 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
88 {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
89 FILE *file;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
90 int temp, h, m, s, ms;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
91 int c, bol;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
92 file = fopen(fname, "r");
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
93 if (file == NULL) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
94 perror("fopen failed");
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
95 return;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
96 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
97 temp = start;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
98 temp /= 90;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
99 h = temp / 3600000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
100 temp %= 3600000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
101 m = temp / 60000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
102 temp %= 60000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
103 s = temp / 1000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
104 temp %= 1000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
105 ms = temp;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
106 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
107 temp = end;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
108 temp /= 90;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
109 h = temp / 3600000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
110 temp %= 3600000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
111 m = temp / 60000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
112 temp %= 60000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
113 s = temp / 1000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
114 temp %= 1000;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
115 ms = temp;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
116 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
117 bol = 1;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
118 while ((c = getc(file)) != EOF) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
119 if (bol) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
120 if (!isspace(c)) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
121 putc(c, fsub);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
122 bol=0;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
123 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
124 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
125 else if (!bol) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
126 putc(c, fsub);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
127 bol = c == '\n';
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
128 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
129 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
130 putc('\n', fsub);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
131 fflush(fsub);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
132 fclose(file);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
133 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
134
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
135 static void
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
136 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
137 {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
138 int x, y;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
139 fprintf(f,
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
140 "P5\n"
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
141 "%d %d\n"
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
142 "255\n",
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
143 w, h);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
144 for (y = 0; y < h; ++y) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
145 for (x = 0; x < w; ++x) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
146 int res;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
147 if (srca[x])
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
148 res = src[x] * (256 - srca[x]);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
149 else
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
150 res = 0;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
151 res = (65535 - res) >> 8;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
152 putc(res&0xff, f);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
153
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
154 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
155 src += stride;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
156 srca += stride;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
157 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
158 putc('\n', f);
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
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
161 static void
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
162 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
163 {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
164 FILE *f;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
165 char buf[128];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
166 char cmd[512];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
167 int cmdres;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
168 const char *const tmpfname = tmpnam(NULL);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
169 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
170 f = fopen(buf, "w");
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
171 output_pgm(f, w, h, src, srca, stride);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
172 fclose(f);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
173 /* 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
174 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
175 cmdres = system(cmd);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
176 if (cmdres < 0) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
177 perror("system failed");
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
178 exit(EXIT_FAILURE);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
179 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
180 else if (cmdres) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
181 fprintf(stderr, GOCR_PROGRAM" returned %d\n", cmdres);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
182 exit(cmdres);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
183 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
184 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
185 unlink(buf);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
186 unlink(tmpfname);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
187 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
188
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
189 void
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
190 fast_memcpy(void *a, void *b, int s)
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
191 { //FIXME
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
192 memcpy(a, b, s);
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
193 }
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
194
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
195 int
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
196 main(int argc, char **argv)
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
197 {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
198 const char *vobsubname, *subripname;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
199 void *vobsub;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
200 void *packet;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
201 int packet_len;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
202 #ifdef BAD
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
203 unsigned int prev_pts;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
204 #endif
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
205 unsigned int pts100;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
206
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
207 if (argc < 2 || 4 < argc) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
208 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
209 exit(EXIT_FAILURE);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
210 }
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
211 vobsubname = argv[1];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
212 subripname = NULL;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
213 fsub = stdout;
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
214 if (argc >= 3)
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
215 vobsub_id = atoi(argv[2]);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
216 if (argc >= 4) {
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
217 subripname = argv[3];
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
218 fsub = fopen(subripname, "w");
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
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
221 vobsub = vobsub_open(vobsubname, NULL, 0, &spudec);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
222 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
223 spudec_assemble(spudec, packet, packet_len, pts100);
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
224 if (spudec->queue_head) {
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
225 spudec_heartbeat(spudec, spudec->queue_head->start_pts);
6830
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
226 if (spudec_changed(spudec))
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
227 spudec_draw(spudec, draw_alpha);
10306
b7464c68bef3 Fixed: sync structs with spudec.c, implement fast_memcpy
kmkaplan
parents: 6830
diff changeset
228 }
6830
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
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
231 if (vobsub)
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
232 vobsub_close(vobsub);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
233 exit(EXIT_SUCCESS);
032137fe69a5 Transform Vobsub subtitles into Subrip text subtitles using GOCR/JOCR.
kmkaplan
parents:
diff changeset
234 }