[Mplayer-cvslog] CVS: main/libmpdemux asf_mmst_streaming.c,1.13,1.14

Attila Kinali CVS attila at mplayerhq.hu
Sat Nov 1 15:44:03 CET 2003


Update of /cvsroot/mplayer/main/libmpdemux
In directory mail:/var/tmp.root/cvs-serv1164

Modified Files:
	asf_mmst_streaming.c 
Log Message:
  Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
  stream with multibyte characters in the url.

  There is a bug in string_utf16() of libmpdemux/asf_mmst_streaming.c:
  the url encoding code is written for single-byte character only. It
  just fill a zero byte between every two adjacent bytes of the url
  string. This is wrong when the url string contains multi-byte
  characters.

  My patch is in the attachment, and has been tested working. It uses
  iconv() to convert the url's encoding to utf-16 correctly. So can this
  patch be accepted and commit into CVS?

patch by Wang WenRui <wangwr at mail.ustc.edu.cn>


Index: asf_mmst_streaming.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/asf_mmst_streaming.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- asf_mmst_streaming.c	22 Oct 2003 17:30:13 -0000	1.13
+++ asf_mmst_streaming.c	1 Nov 2003 14:43:28 -0000	1.14
@@ -22,6 +22,12 @@
 #include <winsock2.h>
 #endif
 
+#ifdef USE_ICONV
+#include <locale.h>
+#include <langinfo.h>
+#include <iconv.h>
+#endif
+
 #include "url.h"
 #include "asf.h"
 
@@ -103,6 +109,38 @@
   }
 }
 
+#ifdef USE_ICONV
+static iconv_t url_conv;
+
+static void string_utf16_open() {
+    setlocale(LC_CTYPE, "");
+    url_conv = iconv_open("UTF-16LE",nl_langinfo(CODESET));
+}
+
+static void string_utf16_close() {
+
+    iconv_close(url_conv);
+}
+
+static void string_utf16(char *dest, char *src, int len) {
+    size_t len1, len2;
+    char *ip, *op;
+
+    memset(dest, 0, 1000);
+    len1 = len; len2 = 1000;
+    ip = src; op = dest;
+
+    iconv(url_conv, &ip, &len1, &op, &len2);
+}
+
+#else
+
+static void string_utf16_open() {
+}
+
+static void string_utf16_close() {
+}
+
 static void string_utf16(char *dest, char *src, int len) 
 {
   int i;
@@ -116,6 +154,7 @@
   dest[i*2] = 0;
   dest[i*2+1] = 0;
 }
+#endif
 
 static void get_answer (int s) 
 {
@@ -462,6 +501,9 @@
   * cmd 1 0x01 
   * */
 
+  /* prepare for the url encoding conversion */
+  string_utf16_open();
+
   snprintf (str, 1023, "\034\003NSPlayer/7.0.0.1956; {33715801-BAB3-9D85-24E9-03B90328270A}; Host: %s", url1->hostname);
   string_utf16 (data, str, strlen(str));
 // send_command(s, commandno ....)
@@ -556,6 +598,8 @@
 
   packet_length1 = packet_length;
   printf("mmst packet_length = %d\n",packet_length);
+
+  string_utf16_close();
 
   return 0;
 }



More information about the MPlayer-cvslog mailing list