From 188d7498b854233ac5f329fa342b16cbe1087d62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Sat, 22 Dec 2007 23:39:35 +0100 Subject: Move all the SubPicture decoders together in the spu_dec directory. Remove superfluous xine_ prefixes from source files. --HG-- rename : src/libspucc/cc_decoder.c => src/spu_dec/cc_decoder.c rename : src/libspucc/cc_decoder.h => src/spu_dec/cc_decoder.h rename : src/libspucmml/xine_cmml_decoder.c => src/spu_dec/cmml_decoder.c rename : src/libspudec/nav_read.c => src/spu_dec/nav_read.c rename : src/libspudec/xine_spu_decoder.c => src/spu_dec/spu_decoder.c rename : src/libspudec/spudec.c => src/spu_dec/spudec.c rename : src/libspudec/spudec.h => src/spu_dec/spudec.h rename : src/libspudvb/xine_spudvb_decoder.c => src/spu_dec/spudvb_decoder.c rename : src/libsputext/xine_sputext_decoder.c => src/spu_dec/sputext_decoder.c rename : src/libsputext/demux_sputext.c => src/spu_dec/sputext_demuxer.c rename : src/libspucc/xine_cc_decoder.c => src/spu_dec/xine_cc_decoder.c --- src/libsputext/Makefile.am | 12 - src/libsputext/demux_sputext.c | 1489 --------------------------------- src/libsputext/xine_sputext_decoder.c | 992 ---------------------- 3 files changed, 2493 deletions(-) delete mode 100644 src/libsputext/Makefile.am delete mode 100644 src/libsputext/demux_sputext.c delete mode 100644 src/libsputext/xine_sputext_decoder.c (limited to 'src/libsputext') diff --git a/src/libsputext/Makefile.am b/src/libsputext/Makefile.am deleted file mode 100644 index 14c6f2323..000000000 --- a/src/libsputext/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -include $(top_srcdir)/misc/Makefile.common - -AM_CFLAGS = $(DEFAULT_OCFLAGS) $(VISIBILITY_FLAG) -AM_LDFLAGS = $(xineplug_ldflags) - -xineplug_LTLIBRARIES = xineplug_decode_sputext.la xineplug_dmx_sputext.la - -xineplug_dmx_sputext_la_SOURCES = demux_sputext.c -xineplug_dmx_sputext_la_LIBADD = $(XINE_LIB) $(LTLIBINTL) - -xineplug_decode_sputext_la_SOURCES = xine_sputext_decoder.c -xineplug_decode_sputext_la_LIBADD = $(XINE_LIB) $(LTLIBINTL) diff --git a/src/libsputext/demux_sputext.c b/src/libsputext/demux_sputext.c deleted file mode 100644 index 270894f50..000000000 --- a/src/libsputext/demux_sputext.c +++ /dev/null @@ -1,1489 +0,0 @@ -/* - * Copyright (C) 2000-2003 the xine project - * - * This file is part of xine, a free video player. - * - * xine is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * xine is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * code based on old libsputext/xine_decoder.c - * - * code based on mplayer module: - * - * Subtitle reader with format autodetection - * - * Written by laaz - * Some code cleanup & realloc() by A'rpi/ESP-team - * dunnowhat sub format by szabi - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#define LOG_MODULE "demux_sputext" -#define LOG_VERBOSE -/* -#define LOG -*/ - -#include -#include -#include - -#define ERR (void *)-1 -#define SUB_MAX_TEXT 5 -#define SUB_BUFSIZE 1024 -#define LINE_LEN 1000 -#define LINE_LEN_QUOT "1000" - -/* - * Demuxer typedefs - */ - -typedef struct { - - int lines; - - long start; /* csecs */ - long end; /* csecs */ - - char *text[SUB_MAX_TEXT]; - -} subtitle_t; - - -typedef struct { - - demux_plugin_t demux_plugin; - xine_stream_t *stream; - input_plugin_t *input; - - int status; - - char buf[SUB_BUFSIZE]; - off_t buflen; - - float mpsub_position; - - int uses_time; - int errs; - subtitle_t *subtitles; - int num; /* number of subtitle structs */ - int cur; /* current subtitle */ - int format; /* constants see below */ - char next_line[SUB_BUFSIZE]; /* a buffer for next line read from file */ - -} demux_sputext_t; - -typedef struct demux_sputext_class_s { - - demux_class_t demux_class; - - int max_timeout; /* default timeout of hidding subtitles */ - -} demux_sputext_class_t; - -/* - * Demuxer code start - */ - -#define FORMAT_UNKNOWN -1 -#define FORMAT_MICRODVD 0 -#define FORMAT_SUBRIP 1 -#define FORMAT_SUBVIEWER 2 -#define FORMAT_SAMI 3 -#define FORMAT_VPLAYER 4 -#define FORMAT_RT 5 -#define FORMAT_SSA 6 /* Sub Station Alpha */ -#define FORMAT_PJS 7 -#define FORMAT_MPSUB 8 -#define FORMAT_AQTITLE 9 -#define FORMAT_JACOBSUB 10 -#define FORMAT_SUBVIEWER2 11 -#define FORMAT_SUBRIP09 12 -#define FORMAT_MPL2 13 /*Mplayer sub 2 ?*/ - -static int eol(char p) { - return (p=='\r' || p=='\n' || p=='\0'); -} - -static inline void trail_space(char *s) { - int i; - while (isspace(*s)) { - char *copy = s; - do { - copy[0] = copy[1]; - copy++; - } while(*copy); - } - i = strlen(s) - 1; - while (i > 0 && isspace(s[i])) - s[i--] = '\0'; -} - -/* - * Reimplementation of fgets() using the input->read() method. - */ -static char *read_line_from_input(demux_sputext_t *this, char *line, off_t len) { - off_t nread = 0; - char *s; - int linelen; - - if ((len - this->buflen) > 512) { - if((nread = this->input->read(this->input, - &this->buf[this->buflen], len - this->buflen)) < 0) { - xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "read failed.\n"); - return NULL; - } - } - - this->buflen += nread; - this->buf[this->buflen] = '\0'; - - s = strchr(this->buf, '\n'); - - if (line && (s || this->buflen)) { - - linelen = s ? (s - this->buf) + 1 : this->buflen; - - memcpy(line, this->buf, linelen); - line[linelen] = '\0'; - - memmove(this->buf, &this->buf[linelen], SUB_BUFSIZE - linelen); - this->buflen -= linelen; - - return line; - } - - return NULL; -} - - -static subtitle_t *sub_read_line_sami(demux_sputext_t *this, subtitle_t *current) { - - static char line[LINE_LEN + 1]; - static char *s = NULL; - char text[LINE_LEN + 1], *p, *q; - int state; - - p = NULL; - current->lines = current->start = 0; - current->end = -1; - state = 0; - - /* read the first line */ - if (!s) - if (!(s = read_line_from_input(this, line, LINE_LEN))) return 0; - - do { - switch (state) { - - case 0: /* find "START=" */ - s = strstr (s, "Start="); - if (s) { - current->start = strtol (s + 6, &s, 0) / 10; - state = 1; continue; - } - break; - - case 1: /* find "" */ - if ((s = strchr (s, '>'))) { s++; state = 3; p = text; continue; } - break; - - case 3: /* get all text until '<' appears */ - if (*s == '\0') { break; } - else if (*s == '<') { state = 4; } - else if (!strncasecmp (s, " ", 6)) { *p++ = ' '; s += 6; } - else if (*s == '\r') { s++; } - else if (!strncasecmp (s, "
", 4) || *s == '\n') { - *p = '\0'; p = text; trail_space (text); - if (text[0] != '\0') - current->text[current->lines++] = strdup (text); - if (*s == '\n') s++; else s += 4; - } - else *p++ = *s++; - continue; - - case 4: /* get current->end or skip */ - q = strstr (s, "Start="); - if (q) { - current->end = strtol (q + 6, &q, 0) / 10 - 1; - *p = '\0'; trail_space (text); - if (text[0] != '\0') - current->text[current->lines++] = strdup (text); - if (current->lines > 0) { state = 99; break; } - state = 0; continue; - } - s = strchr (s, '>'); - if (s) { s++; state = 3; continue; } - break; - } - - /* read next line */ - if (state != 99 && !(s = read_line_from_input (this, line, LINE_LEN))) - return 0; - - } while (state != 99); - - return current; -} - - -static char *sub_readtext(char *source, char **dest) { - int len=0; - char *p=source; - - while ( !eol(*p) && *p!= '|' ) { - p++,len++; - } - - *dest= (char *)xine_xmalloc (len+1); - if (!dest) - return ERR; - - strncpy(*dest, source, len); - (*dest)[len]=0; - - while (*p=='\r' || *p=='\n' || *p=='|') - p++; - - if (*p) return p; /* not-last text field */ - else return NULL; /* last text field */ -} - -static subtitle_t *sub_read_line_microdvd(demux_sputext_t *this, subtitle_t *current) { - - char line[LINE_LEN + 1]; - char line2[LINE_LEN + 1]; - char *p, *next; - int i; - - memset (current, 0, sizeof(subtitle_t)); - - current->end=-1; - do { - if (!read_line_from_input (this, line, LINE_LEN)) return NULL; - } while ((sscanf (line, "{%ld}{}%" LINE_LEN_QUOT "[^\r\n]", &(current->start), line2) !=2) && - (sscanf (line, "{%ld}{%ld}%" LINE_LEN_QUOT "[^\r\n]", &(current->start), &(current->end),line2) !=3) - ); - - p=line2; - - next=p, i=0; - while ((next =sub_readtext (next, &(current->text[i])))) { - if (current->text[i]==ERR) return ERR; - i++; - if (i>=SUB_MAX_TEXT) { - xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, "Too many lines in a subtitle\n"); - current->lines=i; - return current; - } - } - current->lines= ++i; - - return current; -} - -static subtitle_t *sub_read_line_subviewer(demux_sputext_t *this, subtitle_t *current) { - - char line[LINE_LEN + 1]; - int a1,a2,a3,a4,b1,b2,b3,b4; - char *p=NULL, *q=NULL; - int len; - - memset (current, 0, sizeof(subtitle_t)); - - while (1) { - if (!read_line_from_input(this, line, LINE_LEN)) return NULL; - if (sscanf (line, "%d:%d:%d.%d,%d:%d:%d.%d",&a1,&a2,&a3,&a4,&b1,&b2,&b3,&b4) < 8) { - if (sscanf (line, "%d:%d:%d,%d,%d:%d:%d,%d",&a1,&a2,&a3,&a4,&b1,&b2,&b3,&b4) < 8) - continue; - } - current->start = a1*360000+a2*6000+a3*100+a4; - current->end = b1*360000+b2*6000+b3*100+b4; - - if (!read_line_from_input(this, line, LINE_LEN)) - return NULL; - - p=q=line; - for (current->lines=1; current->lines <= SUB_MAX_TEXT; current->lines++) { - for (q=p,len=0; *p && *p!='\r' && *p!='\n' && *p!='|' && strncasecmp(p,"[br]",4); p++,len++); - current->text[current->lines-1]=(char *)xine_xmalloc (len+1); - if (!current->text[current->lines-1]) return ERR; - strncpy (current->text[current->lines-1], q, len); - current->text[current->lines-1][len]='\0'; - if (!*p || *p=='\r' || *p=='\n') break; - if (*p=='[') while (*p++!=']'); - if (*p=='|') p++; - } - if (current->lines > SUB_MAX_TEXT) current->lines = SUB_MAX_TEXT; - break; - } - return current; -} - -static subtitle_t *sub_read_line_subrip(demux_sputext_t *this,subtitle_t *current) { - char line[LINE_LEN + 1]; - int a1,a2,a3,a4,b1,b2,b3,b4; - int i,end_sub; - - memset(current,0,sizeof(subtitle_t)); - do { - if(!read_line_from_input(this,line,LINE_LEN)) - return NULL; - i = sscanf(line,"%d:%d:%d%*[,.]%d --> %d:%d:%d%*[,.]%d",&a1,&a2,&a3,&a4,&b1,&b2,&b3,&b4); - } while(i < 8); - current->start = a1*360000+a2*6000+a3*100+a4/10; - current->end = b1*360000+b2*6000+b3*100+b4/10; - i=0; - end_sub=0; - do { - char *p; /* pointer to the curently read char */ - char temp_line[SUB_BUFSIZE]; /* subtitle line that will be transfered to current->text[i] */ - int temp_index; /* ... and its index wich 'points' to the first EMPTY place -> last read char is at temp_index-1 if temp_index>0 */ - temp_line[SUB_BUFSIZE-1]='\0'; /* just in case... */ - if(!read_line_from_input(this,line,LINE_LEN)) { - if(i) - break; /* if something was read, transmit it */ - else - return NULL; /* if not, repport EOF */ - } - for(temp_index=0,p=line;*p!='\0' && !end_sub && temp_index0) { - if(temp_index==SUB_BUFSIZE) - xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, "Too many characters in a subtitle line\n"); - if(temp_line[temp_index-1]=='\0' || temp_index==SUB_BUFSIZE) { - if(temp_index>1) { /* more than 1 char (including '\0') -> that is a valid one */ - current->text[i]=(char *)xine_xmalloc(temp_index); - if(!current->text[i]) - return ERR; - strncpy(current->text[i],temp_line,temp_index); /* temp_index<=SUB_BUFSIZE is always true here */ - i++; - temp_index=0; - } else - end_sub=1; - } - } - } - } while(i=SUB_MAX_TEXT) - xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, "Too many lines in a subtitle\n"); - current->lines=i; - return current; -} - -static subtitle_t *sub_read_line_vplayer(demux_sputext_t *this,subtitle_t *current) { - char line[LINE_LEN + 1]; - int a1,a2,a3,b1,b2,b3; - char *p=NULL, *next, *p2; - int i; - - memset (current, 0, sizeof(subtitle_t)); - - while (!current->text[0]) { - if( this->next_line[0] == '\0' ) { /* if the buffer is empty.... */ - if( !read_line_from_input(this, line, LINE_LEN) ) return NULL; - } else { - /* ... get the current line from buffer. */ - strncpy( line, this->next_line, LINE_LEN); - line[LINE_LEN] = '\0'; /* I'm scared. This makes me feel better. */ - this->next_line[0] = '\0'; /* mark the buffer as empty. */ - } - /* Initialize buffer with next line */ - if( ! read_line_from_input( this, this->next_line, LINE_LEN) ) { - this->next_line[0] = '\0'; - return NULL; - } - if( (sscanf( line, "%d:%d:%d:", &a1, &a2, &a3) < 3) || - (sscanf( this->next_line, "%d:%d:%d:", &b1, &b2, &b3) < 3) ) - continue; - current->start = a1*360000+a2*6000+a3*100; - current->end = b1*360000+b2*6000+b3*100; - if ((current->end - current->start) > LINE_LEN) - current->end = current->start + LINE_LEN; /* not too long though. */ - /* teraz czas na wkopiowanie stringu */ - p=line; - /* finds the body of the subtitle_t */ - for (i=0; i<3; i++){ - p2=strchr( p, ':'); - if( p2 == NULL ) break; - p=p2+1; - } - - next=p; - i=0; - while( (next = sub_readtext( next, &(current->text[i]))) ) { - if (current->text[i]==ERR) - return ERR; - i++; - if (i>=SUB_MAX_TEXT) { - xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, "Too many lines in a subtitle\n"); - current->lines=i; - return current; - } - } - current->lines=++i; - } - return current; -} - -static subtitle_t *sub_read_line_rt(demux_sputext_t *this,subtitle_t *current) { - /* - * TODO: This format uses quite rich (sub/super)set of xhtml - * I couldn't check it since DTD is not included. - * WARNING: full XML parses can be required for proper parsing - */ - char line[LINE_LEN + 1]; - int a1,a2,a3,a4,b1,b2,b3,b4; - char *p=NULL,*next=NULL; - int i,len,plen; - - memset (current, 0, sizeof(subtitle_t)); - - while (!current->text[0]) { - if (!read_line_from_input(this, line, LINE_LEN)) return NULL; - /* - * TODO: it seems that format of time is not easily determined, it may be 1:12, 1:12.0 or 0:1:12.0 - * to describe the same moment in time. Maybe there are even more formats in use. - */ - if ((len=sscanf (line, "