Make WordPress Core


Ignore:
Timestamp:
07/13/2013 12:37:36 AM (13 years ago)
Author:
nacin
Message:

ID3 1.9.7.

props wonderboymusic.
fixes #24737.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/ID3/module.audio-video.quicktime.php

    r23766 r24696  
    1111// module for analyzing Quicktime and MP3-in-MP4 files         //
    1212// dependencies: module.audio.mp3.php                          //
     13// dependencies: module.tag.id3v2.php                          //
    1314//                                                            ///
    1415/////////////////////////////////////////////////////////////////
    1516
    1617getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.mp3.php', __FILE__, true);
     18getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true); // needed for ISO 639-2 language code lookup
    1719
    1820class getid3_quicktime extends getid3_handler
     
    171173        $info = &$this->getid3->info;
    172174
    173         $atom_parent = array_pop($atomHierarchy);
     175        //$atom_parent = array_pop($atomHierarchy);
     176        $atom_parent = end($atomHierarchy); // http://www.getid3.org/phpBB3/viewtopic.php?t=1717
    174177        array_push($atomHierarchy, $atomname);
    175178        $atom_structure['hierarchy'] = implode(' ', $atomHierarchy);
     
    367370                            $boxsmalltype =                           substr($atom_data, $atomoffset + 2, 2);
    368371                            $boxsmalldata =                           substr($atom_data, $atomoffset + 4, $boxsmallsize);
     372                            if ($boxsmallsize <= 1) {
     373                                $info['warning'][] = 'Invalid QuickTime atom smallbox size "'.$boxsmallsize.'" in atom "'.$atomname.'" at offset: '.($atom_structure['offset'] + $atomoffset);
     374                                $atom_structure['data'] = null;
     375                                $atomoffset = strlen($atom_data);
     376                                break;
     377                            }
    369378                            switch ($boxsmalltype) {
    370379                                case "\x10\xB5":
     
    658667
    659668                        case "\x00\x00\x00\x00":
    660                             // audio atom
     669                            // audio tracks
    661670                            $atom_structure['sample_description_table'][$i]['audio_channels']       =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'],  8,  2));
    662671                            $atom_structure['sample_description_table'][$i]['audio_bit_depth']      =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 10,  2));
     
    665674                            $atom_structure['sample_description_table'][$i]['audio_sample_rate']    = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 16,  4));
    666675
     676                            // video tracks
     677                            // http://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap3/qtff3.html
     678                            $atom_structure['sample_description_table'][$i]['temporal_quality'] =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'],  8,  4));
     679                            $atom_structure['sample_description_table'][$i]['spatial_quality']  =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 12,  4));
     680                            $atom_structure['sample_description_table'][$i]['width']            =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 16,  2));
     681                            $atom_structure['sample_description_table'][$i]['height']           =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 18,  2));
     682                            $atom_structure['sample_description_table'][$i]['resolution_x']     = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 24,  4));
     683                            $atom_structure['sample_description_table'][$i]['resolution_y']     = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 28,  4));
     684                            $atom_structure['sample_description_table'][$i]['data_size']        =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 32,  4));
     685                            $atom_structure['sample_description_table'][$i]['frame_count']      =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 36,  2));
     686                            $atom_structure['sample_description_table'][$i]['compressor_name']  =                             substr($atom_structure['sample_description_table'][$i]['data'], 38,  4);
     687                            $atom_structure['sample_description_table'][$i]['pixel_depth']      =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 42,  2));
     688                            $atom_structure['sample_description_table'][$i]['color_table_id']   =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 44,  2));
     689
    667690                            switch ($atom_structure['sample_description_table'][$i]['data_format']) {
     691                                case '2vuY':
    668692                                case 'avc1':
     693                                case 'cvid':
     694                                case 'dvc ':
     695                                case 'dvcp':
     696                                case 'gif ':
     697                                case 'h263':
     698                                case 'jpeg':
     699                                case 'kpcd':
     700                                case 'mjpa':
     701                                case 'mjpb':
    669702                                case 'mp4v':
     703                                case 'png ':
     704                                case 'raw ':
     705                                case 'rle ':
     706                                case 'rpza':
     707                                case 'smc ':
     708                                case 'SVQ1':
     709                                case 'SVQ3':
     710                                case 'tiff':
     711                                case 'v210':
     712                                case 'v216':
     713                                case 'v308':
     714                                case 'v408':
     715                                case 'v410':
     716                                case 'yuv2':
    670717                                    $info['fileformat'] = 'mp4';
    671718                                    $info['video']['fourcc'] = $atom_structure['sample_description_table'][$i]['data_format'];
    672                                     //$info['warning'][] = 'This version of getID3() ['.$this->getid3->version().'] does not fully support MPEG-4 audio/video streams'; // 2011-02-18: why am I warning about this again? What's not supported?
     719// http://www.getid3.org/phpBB3/viewtopic.php?t=1550
     720//if ((!empty($atom_structure['sample_description_table'][$i]['width']) && !empty($atom_structure['sample_description_table'][$i]['width'])) && (empty($info['video']['resolution_x']) || empty($info['video']['resolution_y']) || (number_format($info['video']['resolution_x'], 6) != number_format(round($info['video']['resolution_x']), 6)) || (number_format($info['video']['resolution_y'], 6) != number_format(round($info['video']['resolution_y']), 6)))) { // ugly check for floating point numbers
     721if (!empty($atom_structure['sample_description_table'][$i]['width']) && !empty($atom_structure['sample_description_table'][$i]['height'])) {
     722    // assume that values stored here are more important than values stored in [tkhd] atom
     723    $info['video']['resolution_x'] = $atom_structure['sample_description_table'][$i]['width'];
     724    $info['video']['resolution_y'] = $atom_structure['sample_description_table'][$i]['height'];
     725    $info['quicktime']['video']['resolution_x'] = $info['video']['resolution_x'];
     726    $info['quicktime']['video']['resolution_y'] = $info['video']['resolution_y'];
     727}
    673728                                    break;
    674729
     
    11221177                $atom_structure['volume']              =   getid3_lib::FixedPoint8_8(substr($atom_data, 36, 2));
    11231178                $atom_structure['reserved3']           =   getid3_lib::BigEndian2Int(substr($atom_data, 38, 2));
     1179// http://developer.apple.com/library/mac/#documentation/QuickTime/RM/MovieBasics/MTEditing/K-Chapter/11MatrixFunctions.html
     1180// http://developer.apple.com/library/mac/#documentation/QuickTime/qtff/QTFFChap4/qtff4.html#//apple_ref/doc/uid/TP40000939-CH206-18737
    11241181                $atom_structure['matrix_a']            = getid3_lib::FixedPoint16_16(substr($atom_data, 40, 4));
    11251182                $atom_structure['matrix_b']            = getid3_lib::FixedPoint16_16(substr($atom_data, 44, 4));
    1126                 $atom_structure['matrix_u']            = getid3_lib::FixedPoint16_16(substr($atom_data, 48, 4));
     1183                $atom_structure['matrix_u']            =  getid3_lib::FixedPoint2_30(substr($atom_data, 48, 4));
    11271184                $atom_structure['matrix_c']            = getid3_lib::FixedPoint16_16(substr($atom_data, 52, 4));
    11281185                $atom_structure['matrix_d']            = getid3_lib::FixedPoint16_16(substr($atom_data, 56, 4));
    1129                 $atom_structure['matrix_v']            = getid3_lib::FixedPoint16_16(substr($atom_data, 60, 4));
    1130                 $atom_structure['matrix_x']            =  getid3_lib::FixedPoint2_30(substr($atom_data, 64, 4));
    1131                 $atom_structure['matrix_y']            =  getid3_lib::FixedPoint2_30(substr($atom_data, 68, 4));
     1186                $atom_structure['matrix_v']            =  getid3_lib::FixedPoint2_30(substr($atom_data, 60, 4));
     1187                $atom_structure['matrix_x']            = getid3_lib::FixedPoint16_16(substr($atom_data, 64, 4));
     1188                $atom_structure['matrix_y']            = getid3_lib::FixedPoint16_16(substr($atom_data, 68, 4));
    11321189                $atom_structure['matrix_w']            =  getid3_lib::FixedPoint2_30(substr($atom_data, 72, 4));
    11331190                $atom_structure['width']               = getid3_lib::FixedPoint16_16(substr($atom_data, 76, 4));
    11341191                $atom_structure['height']              = getid3_lib::FixedPoint16_16(substr($atom_data, 80, 4));
    1135 
    11361192                $atom_structure['flags']['enabled']    = (bool) ($atom_structure['flags_raw'] & 0x0001);
    11371193                $atom_structure['flags']['in_movie']   = (bool) ($atom_structure['flags_raw'] & 0x0002);
     
    13871443
    13881444    public function QuicktimeLanguageLookup($languageid) {
     1445        // http://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap4/qtff4.html#//apple_ref/doc/uid/TP40000939-CH206-34353
    13891446        static $QuicktimeLanguageLookup = array();
    13901447        if (empty($QuicktimeLanguageLookup)) {
    1391             $QuicktimeLanguageLookup[0]   = 'English';
    1392             $QuicktimeLanguageLookup[1]   = 'French';
    1393             $QuicktimeLanguageLookup[2]   = 'German';
    1394             $QuicktimeLanguageLookup[3]   = 'Italian';
    1395             $QuicktimeLanguageLookup[4]   = 'Dutch';
    1396             $QuicktimeLanguageLookup[5]   = 'Swedish';
    1397             $QuicktimeLanguageLookup[6]   = 'Spanish';
    1398             $QuicktimeLanguageLookup[7]   = 'Danish';
    1399             $QuicktimeLanguageLookup[8]   = 'Portuguese';
    1400             $QuicktimeLanguageLookup[9]   = 'Norwegian';
    1401             $QuicktimeLanguageLookup[10]  = 'Hebrew';
    1402             $QuicktimeLanguageLookup[11]  = 'Japanese';
    1403             $QuicktimeLanguageLookup[12]  = 'Arabic';
    1404             $QuicktimeLanguageLookup[13]  = 'Finnish';
    1405             $QuicktimeLanguageLookup[14]  = 'Greek';
    1406             $QuicktimeLanguageLookup[15]  = 'Icelandic';
    1407             $QuicktimeLanguageLookup[16]  = 'Maltese';
    1408             $QuicktimeLanguageLookup[17]  = 'Turkish';
    1409             $QuicktimeLanguageLookup[18]  = 'Croatian';
    1410             $QuicktimeLanguageLookup[19]  = 'Chinese (Traditional)';
    1411             $QuicktimeLanguageLookup[20]  = 'Urdu';
    1412             $QuicktimeLanguageLookup[21]  = 'Hindi';
    1413             $QuicktimeLanguageLookup[22]  = 'Thai';
    1414             $QuicktimeLanguageLookup[23]  = 'Korean';
    1415             $QuicktimeLanguageLookup[24]  = 'Lithuanian';
    1416             $QuicktimeLanguageLookup[25]  = 'Polish';
    1417             $QuicktimeLanguageLookup[26]  = 'Hungarian';
    1418             $QuicktimeLanguageLookup[27]  = 'Estonian';
    1419             $QuicktimeLanguageLookup[28]  = 'Lettish';
    1420             $QuicktimeLanguageLookup[28]  = 'Latvian';
    1421             $QuicktimeLanguageLookup[29]  = 'Saamisk';
    1422             $QuicktimeLanguageLookup[29]  = 'Lappish';
    1423             $QuicktimeLanguageLookup[30]  = 'Faeroese';
    1424             $QuicktimeLanguageLookup[31]  = 'Farsi';
    1425             $QuicktimeLanguageLookup[31]  = 'Persian';
    1426             $QuicktimeLanguageLookup[32]  = 'Russian';
    1427             $QuicktimeLanguageLookup[33]  = 'Chinese (Simplified)';
    1428             $QuicktimeLanguageLookup[34]  = 'Flemish';
    1429             $QuicktimeLanguageLookup[35]  = 'Irish';
    1430             $QuicktimeLanguageLookup[36]  = 'Albanian';
    1431             $QuicktimeLanguageLookup[37]  = 'Romanian';
    1432             $QuicktimeLanguageLookup[38]  = 'Czech';
    1433             $QuicktimeLanguageLookup[39]  = 'Slovak';
    1434             $QuicktimeLanguageLookup[40]  = 'Slovenian';
    1435             $QuicktimeLanguageLookup[41]  = 'Yiddish';
    1436             $QuicktimeLanguageLookup[42]  = 'Serbian';
    1437             $QuicktimeLanguageLookup[43]  = 'Macedonian';
    1438             $QuicktimeLanguageLookup[44]  = 'Bulgarian';
    1439             $QuicktimeLanguageLookup[45]  = 'Ukrainian';
    1440             $QuicktimeLanguageLookup[46]  = 'Byelorussian';
    1441             $QuicktimeLanguageLookup[47]  = 'Uzbek';
    1442             $QuicktimeLanguageLookup[48]  = 'Kazakh';
    1443             $QuicktimeLanguageLookup[49]  = 'Azerbaijani';
    1444             $QuicktimeLanguageLookup[50]  = 'AzerbaijanAr';
    1445             $QuicktimeLanguageLookup[51]  = 'Armenian';
    1446             $QuicktimeLanguageLookup[52]  = 'Georgian';
    1447             $QuicktimeLanguageLookup[53]  = 'Moldavian';
    1448             $QuicktimeLanguageLookup[54]  = 'Kirghiz';
    1449             $QuicktimeLanguageLookup[55]  = 'Tajiki';
    1450             $QuicktimeLanguageLookup[56]  = 'Turkmen';
    1451             $QuicktimeLanguageLookup[57]  = 'Mongolian';
    1452             $QuicktimeLanguageLookup[58]  = 'MongolianCyr';
    1453             $QuicktimeLanguageLookup[59]  = 'Pashto';
    1454             $QuicktimeLanguageLookup[60]  = 'Kurdish';
    1455             $QuicktimeLanguageLookup[61]  = 'Kashmiri';
    1456             $QuicktimeLanguageLookup[62]  = 'Sindhi';
    1457             $QuicktimeLanguageLookup[63]  = 'Tibetan';
    1458             $QuicktimeLanguageLookup[64]  = 'Nepali';
    1459             $QuicktimeLanguageLookup[65]  = 'Sanskrit';
    1460             $QuicktimeLanguageLookup[66]  = 'Marathi';
    1461             $QuicktimeLanguageLookup[67]  = 'Bengali';
    1462             $QuicktimeLanguageLookup[68]  = 'Assamese';
    1463             $QuicktimeLanguageLookup[69]  = 'Gujarati';
    1464             $QuicktimeLanguageLookup[70]  = 'Punjabi';
    1465             $QuicktimeLanguageLookup[71]  = 'Oriya';
    1466             $QuicktimeLanguageLookup[72]  = 'Malayalam';
    1467             $QuicktimeLanguageLookup[73]  = 'Kannada';
    1468             $QuicktimeLanguageLookup[74]  = 'Tamil';
    1469             $QuicktimeLanguageLookup[75]  = 'Telugu';
    1470             $QuicktimeLanguageLookup[76]  = 'Sinhalese';
    1471             $QuicktimeLanguageLookup[77]  = 'Burmese';
    1472             $QuicktimeLanguageLookup[78]  = 'Khmer';
    1473             $QuicktimeLanguageLookup[79]  = 'Lao';
    1474             $QuicktimeLanguageLookup[80]  = 'Vietnamese';
    1475             $QuicktimeLanguageLookup[81]  = 'Indonesian';
    1476             $QuicktimeLanguageLookup[82]  = 'Tagalog';
    1477             $QuicktimeLanguageLookup[83]  = 'MalayRoman';
    1478             $QuicktimeLanguageLookup[84]  = 'MalayArabic';
    1479             $QuicktimeLanguageLookup[85]  = 'Amharic';
    1480             $QuicktimeLanguageLookup[86]  = 'Tigrinya';
    1481             $QuicktimeLanguageLookup[87]  = 'Galla';
    1482             $QuicktimeLanguageLookup[87]  = 'Oromo';
    1483             $QuicktimeLanguageLookup[88]  = 'Somali';
    1484             $QuicktimeLanguageLookup[89]  = 'Swahili';
    1485             $QuicktimeLanguageLookup[90]  = 'Ruanda';
    1486             $QuicktimeLanguageLookup[91]  = 'Rundi';
    1487             $QuicktimeLanguageLookup[92]  = 'Chewa';
    1488             $QuicktimeLanguageLookup[93]  = 'Malagasy';
    1489             $QuicktimeLanguageLookup[94]  = 'Esperanto';
    1490             $QuicktimeLanguageLookup[128] = 'Welsh';
    1491             $QuicktimeLanguageLookup[129] = 'Basque';
    1492             $QuicktimeLanguageLookup[130] = 'Catalan';
    1493             $QuicktimeLanguageLookup[131] = 'Latin';
    1494             $QuicktimeLanguageLookup[132] = 'Quechua';
    1495             $QuicktimeLanguageLookup[133] = 'Guarani';
    1496             $QuicktimeLanguageLookup[134] = 'Aymara';
    1497             $QuicktimeLanguageLookup[135] = 'Tatar';
    1498             $QuicktimeLanguageLookup[136] = 'Uighur';
    1499             $QuicktimeLanguageLookup[137] = 'Dzongkha';
    1500             $QuicktimeLanguageLookup[138] = 'JavaneseRom';
     1448            $QuicktimeLanguageLookup[0]     = 'English';
     1449            $QuicktimeLanguageLookup[1]     = 'French';
     1450            $QuicktimeLanguageLookup[2]     = 'German';
     1451            $QuicktimeLanguageLookup[3]     = 'Italian';
     1452            $QuicktimeLanguageLookup[4]     = 'Dutch';
     1453            $QuicktimeLanguageLookup[5]     = 'Swedish';
     1454            $QuicktimeLanguageLookup[6]     = 'Spanish';
     1455            $QuicktimeLanguageLookup[7]     = 'Danish';
     1456            $QuicktimeLanguageLookup[8]     = 'Portuguese';
     1457            $QuicktimeLanguageLookup[9]     = 'Norwegian';
     1458            $QuicktimeLanguageLookup[10]    = 'Hebrew';
     1459            $QuicktimeLanguageLookup[11]    = 'Japanese';
     1460            $QuicktimeLanguageLookup[12]    = 'Arabic';
     1461            $QuicktimeLanguageLookup[13]    = 'Finnish';
     1462            $QuicktimeLanguageLookup[14]    = 'Greek';
     1463            $QuicktimeLanguageLookup[15]    = 'Icelandic';
     1464            $QuicktimeLanguageLookup[16]    = 'Maltese';
     1465            $QuicktimeLanguageLookup[17]    = 'Turkish';
     1466            $QuicktimeLanguageLookup[18]    = 'Croatian';
     1467            $QuicktimeLanguageLookup[19]    = 'Chinese (Traditional)';
     1468            $QuicktimeLanguageLookup[20]    = 'Urdu';
     1469            $QuicktimeLanguageLookup[21]    = 'Hindi';
     1470            $QuicktimeLanguageLookup[22]    = 'Thai';
     1471            $QuicktimeLanguageLookup[23]    = 'Korean';
     1472            $QuicktimeLanguageLookup[24]    = 'Lithuanian';
     1473            $QuicktimeLanguageLookup[25]    = 'Polish';
     1474            $QuicktimeLanguageLookup[26]    = 'Hungarian';
     1475            $QuicktimeLanguageLookup[27]    = 'Estonian';
     1476            $QuicktimeLanguageLookup[28]    = 'Lettish';
     1477            $QuicktimeLanguageLookup[28]    = 'Latvian';
     1478            $QuicktimeLanguageLookup[29]    = 'Saamisk';
     1479            $QuicktimeLanguageLookup[29]    = 'Lappish';
     1480            $QuicktimeLanguageLookup[30]    = 'Faeroese';
     1481            $QuicktimeLanguageLookup[31]    = 'Farsi';
     1482            $QuicktimeLanguageLookup[31]    = 'Persian';
     1483            $QuicktimeLanguageLookup[32]    = 'Russian';
     1484            $QuicktimeLanguageLookup[33]    = 'Chinese (Simplified)';
     1485            $QuicktimeLanguageLookup[34]    = 'Flemish';
     1486            $QuicktimeLanguageLookup[35]    = 'Irish';
     1487            $QuicktimeLanguageLookup[36]    = 'Albanian';
     1488            $QuicktimeLanguageLookup[37]    = 'Romanian';
     1489            $QuicktimeLanguageLookup[38]    = 'Czech';
     1490            $QuicktimeLanguageLookup[39]    = 'Slovak';
     1491            $QuicktimeLanguageLookup[40]    = 'Slovenian';
     1492            $QuicktimeLanguageLookup[41]    = 'Yiddish';
     1493            $QuicktimeLanguageLookup[42]    = 'Serbian';
     1494            $QuicktimeLanguageLookup[43]    = 'Macedonian';
     1495            $QuicktimeLanguageLookup[44]    = 'Bulgarian';
     1496            $QuicktimeLanguageLookup[45]    = 'Ukrainian';
     1497            $QuicktimeLanguageLookup[46]    = 'Byelorussian';
     1498            $QuicktimeLanguageLookup[47]    = 'Uzbek';
     1499            $QuicktimeLanguageLookup[48]    = 'Kazakh';
     1500            $QuicktimeLanguageLookup[49]    = 'Azerbaijani';
     1501            $QuicktimeLanguageLookup[50]    = 'AzerbaijanAr';
     1502            $QuicktimeLanguageLookup[51]    = 'Armenian';
     1503            $QuicktimeLanguageLookup[52]    = 'Georgian';
     1504            $QuicktimeLanguageLookup[53]    = 'Moldavian';
     1505            $QuicktimeLanguageLookup[54]    = 'Kirghiz';
     1506            $QuicktimeLanguageLookup[55]    = 'Tajiki';
     1507            $QuicktimeLanguageLookup[56]    = 'Turkmen';
     1508            $QuicktimeLanguageLookup[57]    = 'Mongolian';
     1509            $QuicktimeLanguageLookup[58]    = 'MongolianCyr';
     1510            $QuicktimeLanguageLookup[59]    = 'Pashto';
     1511            $QuicktimeLanguageLookup[60]    = 'Kurdish';
     1512            $QuicktimeLanguageLookup[61]    = 'Kashmiri';
     1513            $QuicktimeLanguageLookup[62]    = 'Sindhi';
     1514            $QuicktimeLanguageLookup[63]    = 'Tibetan';
     1515            $QuicktimeLanguageLookup[64]    = 'Nepali';
     1516            $QuicktimeLanguageLookup[65]    = 'Sanskrit';
     1517            $QuicktimeLanguageLookup[66]    = 'Marathi';
     1518            $QuicktimeLanguageLookup[67]    = 'Bengali';
     1519            $QuicktimeLanguageLookup[68]    = 'Assamese';
     1520            $QuicktimeLanguageLookup[69]    = 'Gujarati';
     1521            $QuicktimeLanguageLookup[70]    = 'Punjabi';
     1522            $QuicktimeLanguageLookup[71]    = 'Oriya';
     1523            $QuicktimeLanguageLookup[72]    = 'Malayalam';
     1524            $QuicktimeLanguageLookup[73]    = 'Kannada';
     1525            $QuicktimeLanguageLookup[74]    = 'Tamil';
     1526            $QuicktimeLanguageLookup[75]    = 'Telugu';
     1527            $QuicktimeLanguageLookup[76]    = 'Sinhalese';
     1528            $QuicktimeLanguageLookup[77]    = 'Burmese';
     1529            $QuicktimeLanguageLookup[78]    = 'Khmer';
     1530            $QuicktimeLanguageLookup[79]    = 'Lao';
     1531            $QuicktimeLanguageLookup[80]    = 'Vietnamese';
     1532            $QuicktimeLanguageLookup[81]    = 'Indonesian';
     1533            $QuicktimeLanguageLookup[82]    = 'Tagalog';
     1534            $QuicktimeLanguageLookup[83]    = 'MalayRoman';
     1535            $QuicktimeLanguageLookup[84]    = 'MalayArabic';
     1536            $QuicktimeLanguageLookup[85]    = 'Amharic';
     1537            $QuicktimeLanguageLookup[86]    = 'Tigrinya';
     1538            $QuicktimeLanguageLookup[87]    = 'Galla';
     1539            $QuicktimeLanguageLookup[87]    = 'Oromo';
     1540            $QuicktimeLanguageLookup[88]    = 'Somali';
     1541            $QuicktimeLanguageLookup[89]    = 'Swahili';
     1542            $QuicktimeLanguageLookup[90]    = 'Ruanda';
     1543            $QuicktimeLanguageLookup[91]    = 'Rundi';
     1544            $QuicktimeLanguageLookup[92]    = 'Chewa';
     1545            $QuicktimeLanguageLookup[93]    = 'Malagasy';
     1546            $QuicktimeLanguageLookup[94]    = 'Esperanto';
     1547            $QuicktimeLanguageLookup[128]   = 'Welsh';
     1548            $QuicktimeLanguageLookup[129]   = 'Basque';
     1549            $QuicktimeLanguageLookup[130]   = 'Catalan';
     1550            $QuicktimeLanguageLookup[131]   = 'Latin';
     1551            $QuicktimeLanguageLookup[132]   = 'Quechua';
     1552            $QuicktimeLanguageLookup[133]   = 'Guarani';
     1553            $QuicktimeLanguageLookup[134]   = 'Aymara';
     1554            $QuicktimeLanguageLookup[135]   = 'Tatar';
     1555            $QuicktimeLanguageLookup[136]   = 'Uighur';
     1556            $QuicktimeLanguageLookup[137]   = 'Dzongkha';
     1557            $QuicktimeLanguageLookup[138]   = 'JavaneseRom';
     1558            $QuicktimeLanguageLookup[32767] = 'Unspecified';
     1559        }
     1560        if (($languageid > 138) && ($languageid < 32767)) {
     1561            /*
     1562            ISO Language Codes - http://www.loc.gov/standards/iso639-2/php/code_list.php
     1563            Because the language codes specified by ISO 639-2/T are three characters long, they must be packed to fit into a 16-bit field.
     1564            The packing algorithm must map each of the three characters, which are always lowercase, into a 5-bit integer and then concatenate
     1565            these integers into the least significant 15 bits of a 16-bit integer, leaving the 16-bit integer's most significant bit set to zero.
     1566
     1567            One algorithm for performing this packing is to treat each ISO character as a 16-bit integer. Subtract 0x60 from the first character
     1568            and multiply by 2^10 (0x400), subtract 0x60 from the second character and multiply by 2^5 (0x20), subtract 0x60 from the third character,
     1569            and add the three 16-bit values. This will result in a single 16-bit value with the three codes correctly packed into the 15 least
     1570            significant bits and the most significant bit set to zero.
     1571            */
     1572            $iso_language_id  = '';
     1573            $iso_language_id .= chr((($languageid & 0x7C00) >> 10) + 0x60);
     1574            $iso_language_id .= chr((($languageid & 0x03E0) >>  5) + 0x60);
     1575            $iso_language_id .= chr((($languageid & 0x001F) >>  0) + 0x60);
     1576            $QuicktimeLanguageLookup[$languageid] = getid3_id3v2::LanguageLookup($iso_language_id);
    15011577        }
    15021578        return (isset($QuicktimeLanguageLookup[$languageid]) ? $QuicktimeLanguageLookup[$languageid] : 'invalid');
Note: See TracChangeset for help on using the changeset viewer.