[Mplayer-cvslog] CVS: main cfg-mplayer.h,1.84,1.85 configure,1.178,1.179 subreader.c,1.26,1.27
Adam Tla/lka
atlka at mplayer.dev.hu
Wed Oct 10 15:08:04 CEST 2001
Update of /cvsroot/mplayer/main
In directory mplayer:/var/tmp.root/cvs-serv19702
Modified Files:
cfg-mplayer.h configure subreader.c
Log Message:
modifications to use iconv(3) function to recode text of subs (autodetect)
added option -subcp <cpname> # for example cp1250, latin2 etc.
Index: cfg-mplayer.h
===================================================================
RCS file: /cvsroot/mplayer/main/cfg-mplayer.h,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -r1.84 -r1.85
--- cfg-mplayer.h 3 Oct 2001 14:41:39 -0000 1.84
+++ cfg-mplayer.h 10 Oct 2001 13:07:42 -0000 1.85
@@ -37,6 +37,9 @@
#ifdef USE_SUB
extern int sub_unicode;
extern int sub_utf8;
+#ifdef USE_ICONV
+extern char *sub_cp;
+#endif
#endif
#ifdef USE_OSD
@@ -119,6 +122,9 @@
{"encode", &encode_name, CONF_TYPE_STRING, 0, 0, 0},
#ifdef USE_SUB
{"sub", &sub_name, CONF_TYPE_STRING, 0, 0, 0},
+#ifdef USE_ICONV
+ {"subcp", &sub_cp, CONF_TYPE_STRING, 0, 0, 0},
+#endif
{"subdelay", &sub_delay, CONF_TYPE_FLOAT, 0, 0.0, 10.0},
{"subfps", &sub_fps, CONF_TYPE_FLOAT, 0, 0.0, 10.0},
{"noautosub", &sub_auto, CONF_TYPE_FLAG, 0, 1, 0},
Index: configure
===================================================================
RCS file: /cvsroot/mplayer/main/configure,v
retrieving revision 1.178
retrieving revision 1.179
diff -u -r1.178 -r1.179
--- configure 10 Oct 2001 01:48:54 -0000 1.178
+++ configure 10 Oct 2001 13:07:42 -0000 1.179
@@ -160,6 +160,7 @@
--enable-xmmp use XMMP audio drivers
--enable-lirc enable LIRC (remote control) support
+ --disable-iconv do not use iconv(3) function [autodetect]
--disable-ossaudio disable OSS sound support [autodetect]
--disable-alsa disable alsa sound support [autodetect]
--disable-esd disable esd sound support [autodetect]
@@ -903,6 +904,42 @@
fi
cat > $TMPC << EOF
+#include <stdio.h>
+#include <unistd.h>
+#include <iconv.h>
+
+#define INBUFSIZE 1024
+#define OUTBUFSIZE 4096
+
+char inbuffer[INBUFSIZE];
+char outbuffer[OUTBUFSIZE];
+
+main()
+{ ssize_t numread;
+ iconv_t icdsc;
+ char *tocode="UTF-8";
+ char *fromcode="cp1250";
+ if ((icdsc = iconv_open (tocode, fromcode)) != (iconv_t)(-1)){
+ while ((numread = read (0, inbuffer, INBUFSIZE))){
+ char *iptr=inbuffer;
+ char *optr=outbuffer;
+ size_t inleft=numread;
+ size_t outleft=OUTBUFSIZE;
+ if (iconv (icdsc,
+ (const char **)&iptr, &inleft, &optr, &outleft)
+ !=(size_t)(-1)){
+ write (1, outbuffer, OUTBUFSIZE - outleft);
+ }
+ }
+ if (iconv_close (icdsc) == -1) ;
+ }
+}
+
+EOF
+_iconv=yes
+$_cc $TMPC -o $TMPO -lm > /dev/null 2>&1 || \
+ { _iconv=no ; echo "iconv(3) function not detected!" ;}
+cat > $TMPC << EOF
#include <GL/gl.h>
int main( void ) { return 0; }
EOF
@@ -1216,6 +1253,9 @@
--enable-fbdev)
_fbdev=yes
;;
+ --enable-iconv)
+ _iconv=yes
+ ;;
--enable-mlib)
_mlib=yes
;;
@@ -1326,6 +1366,9 @@
--disable-fbdev)
_fbdev=no
;;
+ --disable-iconv)
+ _iconv=no
+ ;;
--disable-termcap)
_termcap=no
;;
@@ -1585,6 +1628,7 @@
echo "Checking for OggVorbis support ... $_vorbis"
echo "Checking for Win32 DLL support ... $_win32dll"
echo "Checking for DirectShow ... $_dshow"
+echo "Checking for iconv function ... $_iconv"
# check if compiler supports C++ and C++-libs are installed correctly
if [ $_win32dll = yes -a $_dshow = yes ] ; then
@@ -1844,6 +1888,12 @@
_xmmpaudio='#undef USE_XMMP_AUDIO'
fi
+if [ "$_iconv" = "yes" ]; then
+_iconv='#define USE_ICONV'
+else
+_iconv='#undef USE_ICONV'
+fi
+
if [ "$_lirc" = "yes" ]; then
_lircdefs='#define HAVE_LIRC'
_lirclibs='-llirc_client'
@@ -2278,6 +2328,9 @@
If you have kernel Oops, player hangups, or just no audio, you should
try to recompile MPlayer with this option disabled! */
$_select
+
+/* define this to use iconv(3) function to codepage conversions */
+$_iconv
/* XMMP support: (test code) */
$_xmmpaudio
Index: subreader.c
===================================================================
RCS file: /cvsroot/mplayer/main/subreader.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- subreader.c 9 Oct 2001 00:36:55 -0000 1.26
+++ subreader.c 10 Oct 2001 13:07:42 -0000 1.27
@@ -12,10 +12,15 @@
#include <string.h>
#include <ctype.h>
+#include "config.h"
#include "subreader.h"
#define ERR (void *)-1
+#ifdef USE_ICONV
+#include <iconv.h>
+char *sub_cp=NULL;
+#endif
int sub_uses_time=0;
int sub_errs=0;
@@ -399,7 +404,73 @@
return -1; // too many bad lines
}
+
+extern int sub_utf8;
+#ifdef USE_ICONV
+static iconv_t icdsc;
+
+void subcp_open (void)
+{
+ char *tocp = "UTF-8";
+ icdsc = (iconv_t)(-1);
+ if (sub_cp){
+ if ((icdsc = iconv_open (tocp, sub_cp)) != (iconv_t)(-1)){
+ printf ("SUB: opened iconv descriptor.\n");
+ sub_utf8 = 2;
+ } else
+ printf ("SUB: error opening iconv descriptor.\n");
+ }
+}
+
+void subcp_close (void)
+{
+ if (icdsc != (iconv_t)(-1)){
+ (void) iconv_close (icdsc);
+ printf ("SUB: closed iconv descriptor.\n");
+ }
+}
+
+#define ICBUFFSIZE 512
+static char icbuffer[ICBUFFSIZE];
+
+subtitle* subcp_recode (subtitle *sub)
+{
+ int l=sub->lines;
+ size_t ileft, oleft, otlen;
+ char *op, *ip, *ot;
+
+ while (l){
+ op = icbuffer;
+ ip = sub->text[--l];
+ ileft = strlen(ip);
+ oleft = ICBUFFSIZE - 1;
+
+ if (iconv(icdsc, (const char **) &ip, &ileft,
+ &op, &oleft) == (size_t)(-1)) {
+ printf ("SUB: error recoding line.\n");
+ l++;
+ break;
+ }
+ if (!(ot = (char *)malloc(op - icbuffer + 1))){
+ printf ("SUB: error allocating mem.\n");
+ l++;
+ break;
+ }
+ *op='\0' ;
+ strcpy (ot, icbuffer);
+ free (sub->text[l]);
+ sub->text[l] = ot;
+ }
+ if (l){
+ for (l = sub->lines; l;)
+ free (sub->text[--l]);
+ return ERR;
+ }
+ return sub;
+}
+
+#endif
subtitle* sub_read_file (char *filename) {
FILE *fd;
@@ -425,6 +496,10 @@
rewind (fd);
+#ifdef USE_ICONV
+ subcp_open();
+#endif
+
sub_num=0;n_max=32;
first=(subtitle *)malloc(n_max*sizeof(subtitle));
if(!first) return NULL;
@@ -437,11 +512,18 @@
}
sub=func[sub_format](fd,&first[sub_num]);
if(!sub) break; // EOF
+#ifdef USE_ICONV
+ if ((sub!=ERR) && (sub_utf8 & 2)) sub=subcp_recode(sub);
+#endif
if(sub==ERR) ++sub_errs; else ++sub_num; // Error vs. Valid
}
fclose(fd);
+#ifdef USE_ICONV
+ subcp_close();
+#endif
+
// printf ("SUB: Subtitle format %s time.\n", sub_uses_time?"uses":"doesn't use");
printf ("SUB: Read %i subtitles", sub_num);
if (sub_errs) printf (", %i bad line(s).\n", sub_errs);
@@ -465,7 +547,6 @@
char * sub_filename(char* path, char * fname )
{
- extern int sub_utf8;
char * sub_name1;
char * sub_name2;
char * aviptr1, * aviptr2, * tmp;
@@ -509,7 +590,11 @@
for(j=0;j<=1;j++){
char* sub_name=j?sub_name1:sub_name2;
+#ifdef USE_ICONV
+ for ( i=(sub_cp?2:0);i<(sizeof(sub_exts)/sizeof(char*));i++ ) {
+#else
for ( i=0;i<(sizeof(sub_exts)/sizeof(char*));i++ ) {
+#endif
strcpy(j?aviptr1:aviptr2,sub_exts[i]);
// printf("trying: '%s'\n",sub_name);
if((f=fopen( sub_name,"rt" ))) {
More information about the MPlayer-cvslog
mailing list