summaryrefslogtreecommitdiffstats
path: root/subreader.c
diff options
context:
space:
mode:
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-06-02 13:00:38 +0000
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-06-02 13:00:38 +0000
commit2f1b117313ffdde7f399c3c92a006ce385151b41 (patch)
tree1656baa23297bf19bae6720bb343acb3b55a3135 /subreader.c
parentefb42f1aaa721e5aeaa7b9cbf755125ed9d559a7 (diff)
downloadmpv-2f1b117313ffdde7f399c3c92a006ce385151b41.tar.bz2
mpv-2f1b117313ffdde7f399c3c92a006ce385151b41.tar.xz
Revert r23443, it breaks compilation without libass.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23449 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'subreader.c')
-rw-r--r--subreader.c46
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);