diff options
author | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-06-02 13:00:38 +0000 |
---|---|---|
committer | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-06-02 13:00:38 +0000 |
commit | 2f1b117313ffdde7f399c3c92a006ce385151b41 (patch) | |
tree | 1656baa23297bf19bae6720bb343acb3b55a3135 | |
parent | efb42f1aaa721e5aeaa7b9cbf755125ed9d559a7 (diff) |
Revert r23443, it breaks compilation without libass.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23449 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | subreader.c | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/subreader.c b/subreader.c index 3ac2d929e7..8bd5419d17 100644 --- a/subreader.c +++ b/subreader.c @@ -19,7 +19,6 @@ #include "mp_msg.h" #include "subreader.h" #include "stream/stream.h" -#include "libass/ass.h" #ifdef HAVE_ENCA #include <enca.h> @@ -1337,8 +1336,6 @@ void* guess_cp(stream_t *st, char *preferred_language, char *fallback) sub_data* sub_read_file (char *filename, float fps) { stream_t* fd; - unsigned char* subfile_buf; - size_t subfile_size; int n_max, n_first, i, j, sub_first, sub_orig; subtitle *first, *second, *sub, *return_sub; sub_data *subt_data; @@ -1363,15 +1360,8 @@ sub_data* sub_read_file (char *filename, float fps) { struct subreader *srp; if(filename==NULL) return NULL; //qnx segfault - i = 0; - subfile_buf = read_file_recode(filename, sub_cp, &subfile_size); - if (!subfile_buf) return 0; - fd = new_memory_stream(subfile_buf, subfile_size); - if (!fd) { - free(subfile_buf); - return 0; - } + fd=open_stream (filename, NULL, &i); if (!fd) return NULL; sub_format=sub_autodetect (fd, &uses_time); mpsub_multiplier = (uses_time ? 100.0 : 1.0); @@ -1382,14 +1372,30 @@ sub_data* sub_read_file (char *filename, float fps) { stream_reset(fd); stream_seek(fd,0); +#ifdef USE_ICONV sub_utf8_prev=sub_utf8; - sub_utf8 = 1; + { + int l,k; + k = -1; + if ((l=strlen(filename))>4){ + char *exts[] = {".utf", ".utf8", ".utf-8" }; + for (k=3;--k>=0;) + if (l >= strlen(exts[k]) && !strcasecmp(filename+(l - strlen(exts[k])), exts[k])){ + sub_utf8 = 1; + break; + } + } + if (k<0) subcp_open(fd); + } +#endif sub_num=0;n_max=32; first=malloc(n_max*sizeof(subtitle)); if(!first){ - sub_utf8 = sub_utf8_prev; - free(subfile_buf); +#ifdef USE_ICONV + subcp_close(); + sub_utf8=sub_utf8_prev; +#endif return NULL; } @@ -1410,13 +1416,18 @@ sub_data* sub_read_file (char *filename, float fps) { memset(sub, '\0', sizeof(subtitle)); sub=srp->read(fd,sub); if(!sub) break; // EOF +#ifdef USE_ICONV + if ((sub!=ERR) && (sub_utf8 & 2)) sub=subcp_recode(sub); +#endif #ifdef USE_FRIBIDI if (sub!=ERR) sub=sub_fribidi(sub,sub_utf8); #endif if ( sub == ERR ) { +#ifdef USE_ICONV + subcp_close(); +#endif if ( first ) free(first); - free(subfile_buf); return NULL; } // Apply any post processing that needs recoding first @@ -1465,7 +1476,10 @@ sub_data* sub_read_file (char *filename, float fps) { } free_stream(fd); - free(subfile_buf); + +#ifdef USE_ICONV + subcp_close(); +#endif // printf ("SUB: Subtitle format %s time.\n", uses_time?"uses":"doesn't use"); mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Read %i subtitles", sub_num); |