summaryrefslogtreecommitdiffstats
path: root/vobsub.c
diff options
context:
space:
mode:
authoraurel <aurel@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-11-01 13:56:11 +0000
committeraurel <aurel@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-11-01 13:56:11 +0000
commitbce49a37d49013607cd3f140d12d2f1784bb4315 (patch)
treeb24698ff4fa6076e906f855969da65d4b2b4d3db /vobsub.c
parentb64af5543cafecac4654eafaf90bb953d5128ac7 (diff)
downloadmpv-bce49a37d49013607cd3f140d12d2f1784bb4315.tar.bz2
mpv-bce49a37d49013607cd3f140d12d2f1784bb4315.tar.xz
vobsub: move extradata out of vobsub_t struct
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27874 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'vobsub.c')
-rw-r--r--vobsub.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/vobsub.c b/vobsub.c
index 85ca0a30c2..96d80516be 100644
--- a/vobsub.c
+++ b/vobsub.c
@@ -595,8 +595,6 @@ packet_queue_insert(packet_queue_t *queue)
**********************************************************************/
typedef struct {
- unsigned char *extradata;
- unsigned int extradata_len;
unsigned int palette[16];
int delay;
unsigned int have_palette;
@@ -844,7 +842,8 @@ vobsub_set_lang(const char *line)
}
static int
-vobsub_parse_one_line(vobsub_t *vob, rar_stream_t *fd)
+vobsub_parse_one_line(vobsub_t *vob, rar_stream_t *fd,
+ unsigned char **extradata, unsigned int *extradata_len)
{
ssize_t line_size;
int res = -1;
@@ -853,14 +852,14 @@ vobsub_parse_one_line(vobsub_t *vob, rar_stream_t *fd)
do {
line_size = vobsub_getline(&line, &line_reserve, fd);
if (line_size < 0 || line_size > 1000000 ||
- vob->extradata_len+line_size > 10000000) {
+ *extradata_len+line_size > 10000000) {
break;
}
- vob->extradata = realloc(vob->extradata, vob->extradata_len+line_size+1);
- memcpy(vob->extradata+vob->extradata_len, line, line_size);
- vob->extradata_len += line_size;
- vob->extradata[vob->extradata_len] = 0;
+ *extradata = realloc(*extradata, *extradata_len+line_size+1);
+ memcpy(*extradata+*extradata_len, line, line_size);
+ *extradata_len += line_size;
+ (*extradata)[*extradata_len] = 0;
if (*line == 0 || *line == '\r' || *line == '\n' || *line == '#')
continue;
@@ -960,6 +959,8 @@ vobsub_parse_ifo(void* this, const char *const name, unsigned int *palette, unsi
void *
vobsub_open(const char *const name,const char *const ifo,const int force,void** spu)
{
+ unsigned char *extradata = NULL;
+ unsigned int extradata_len = 0;
vobsub_t *vob = calloc(1, sizeof(vobsub_t));
if(spu)
*spu = NULL;
@@ -991,14 +992,14 @@ vobsub_open(const char *const name,const char *const ifo,const int force,void**
return NULL;
}
} else {
- while (vobsub_parse_one_line(vob, fd) >= 0)
+ while (vobsub_parse_one_line(vob, fd, &extradata, &extradata_len) >= 0)
/* NOOP */ ;
rar_close(fd);
}
if (spu)
- *spu = spudec_new_scaled(vob->palette, vob->orig_frame_width, vob->orig_frame_height, vob->extradata, vob->extradata_len);
- if (vob->extradata)
- free(vob->extradata);
+ *spu = spudec_new_scaled(vob->palette, vob->orig_frame_width, vob->orig_frame_height, extradata, extradata_len);
+ if (extradata)
+ free(extradata);
/* read the indexed mpeg_stream */
strcpy(buf, name);