]> git.sesse.net Git - vlc/blobdiff - modules/demux/ts.c
avi: don't enable debug in release builds
[vlc] / modules / demux / ts.c
index ef47f14e2e70f20caef4e61479931ced6c1dab68..4c209f2caf9f3994040ae2658e1c092080bb0bee 100644 (file)
@@ -2584,120 +2584,15 @@ static void ValidateDVBMeta( demux_t *p_demux, int i_pid )
     p_sys->b_dvb_meta = false;
 }
 
+#include "dvb-text.h"
 
-/* FIXME same than dvbsi_to_utf8 from dvb access */
 static char *EITConvertToUTF8( const unsigned char *psz_instring,
                                size_t i_length,
                                bool b_broken )
 {
-    const char *psz_encoding;
-    char psz_encbuf[sizeof( "ISO_8859-123" )];
-    size_t offset = 1;
-
-    if( i_length < 1 ) return NULL;
-    if( psz_instring[0] >= 0x20 )
-    {
-        /* According to ETSI EN 300 468 Annex A, this should be ISO6937,
-         * but some broadcasters use different charset... */
-        if( b_broken )
-           psz_encoding = "ISO_8859-1";
-        else
-           psz_encoding = "ISO_6937";
-
-        offset = 0;
-    }
-    else switch( psz_instring[0] )
-    {
-    case 0x01:
-        psz_encoding = "ISO_8859-5";
-        break;
-    case 0x02:
-        psz_encoding = "ISO_8859-6";
-        break;
-    case 0x03:
-        psz_encoding = "ISO_8859-7";
-        break;
-    case 0x04:
-        psz_encoding = "ISO_8859-8";
-        break;
-    case 0x05:
-        psz_encoding = "ISO_8859-9";
-        break;
-    case 0x06:
-        psz_encoding = "ISO_8859-10";
-        break;
-    case 0x07:
-        psz_encoding = "ISO_8859-11";
-        break;
-    case 0x08:
-        psz_encoding = "ISO_8859-12";
-        break;
-    case 0x09:
-        psz_encoding = "ISO_8859-13";
-        break;
-    case 0x0a:
-        psz_encoding = "ISO_8859-14";
-        break;
-    case 0x0b:
-        psz_encoding = "ISO_8859-15";
-        break;
-    case 0x10:
-#warning Is Latin-10 (psz_instring[2] == 16) really illegal?
-        if( i_length < 3 || psz_instring[1] != 0x00 || psz_instring[2] > 15
-         || psz_instring[2] == 0 )
-        {
-            psz_encoding = "UTF-8";
-            offset = 0;
-        }
-        else
-        {
-            sprintf( psz_encbuf, "ISO_8859-%u", psz_instring[2] );
-            psz_encoding = psz_encbuf;
-            offset = 3;
-        }
-        break;
-    case 0x11:
-#warning Is there a BOM or do we use a fixed endianess?
-        psz_encoding = "UTF-16";
-        break;
-    case 0x12:
-        psz_encoding = "KSC5601-1987";
-        break;
-    case 0x13:
-        psz_encoding = "GB2312"; /* GB-2312-1980 */
-        break;
-    case 0x14:
-        psz_encoding = "BIG-5";
-        break;
-    case 0x15:
-        psz_encoding = "UTF-8";
-        break;
-    default:
-        /* invalid */
-        psz_encoding = "UTF-8";
-        offset = 0;
-    }
-
-    psz_instring += offset;
-    i_length -= offset;
-
-    char *psz = FromCharset( psz_encoding, psz_instring, i_length );
-    if( psz == NULL )
-    {    /* Invalid character set (e.g. ISO_8859-12) */
-        psz = strndup( (const char *)psz_instring, i_length );
-        if( unlikely(psz == NULL) )
-            return NULL;
-        EnsureUTF8( psz );
-    }
-
-    /* Convert EIT-coded CR/LFs */
-    for(char *p = strstr( psz, "\xc2\x8a" ); p != NULL;
-        p = strstr( p, "\xc2\x8a" ))
-    {
-        p[0] = ' ';
-        p[1] = '\n';
-    }
-    return psz;
+    if( b_broken )
+        return FromCharset( "ISO_8859-1", psz_instring, i_length );
+    return vlc_from_EIT( psz_instring, i_length );
 }
 
 static void SDTCallBack( demux_t *p_demux, dvbpsi_sdt_t *p_sdt )