wp/wp-includes/ID3/module.audio-video.flv.php
author ymh <ymh.work@gmail.com>
Tue, 15 Dec 2020 13:49:49 +0100
changeset 16 a86126ab1dd4
parent 7 cf61fcea0001
child 19 3d72ae0968f4
permissions -rw-r--r--
update enmi-conf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
/// getID3() by James Heinrich <info@getid3.org>               //
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     4
//  available at https://github.com/JamesHeinrich/getID3       //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     5
//            or https://www.getid3.org                        //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     6
//            or http://getid3.sourceforge.net                 //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     7
//  see readme.txt for more details                            //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     8
/////////////////////////////////////////////////////////////////
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     9
//                                                             //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    10
// module.audio-video.flv.php                                  //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    11
// module for analyzing Shockwave Flash Video files            //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    12
// dependencies: NONE                                          //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    13
//                                                             //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    14
/////////////////////////////////////////////////////////////////
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
//  FLV module by Seth Kaufman <sethØwhirl-i-gig*com>          //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
//  * version 0.1 (26 June 2005)                               //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
//  * version 0.1.1 (15 July 2005)                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
//  minor modifications by James Heinrich <info@getid3.org>    //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
//  * version 0.2 (22 February 2006)                           //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
//  Support for On2 VP6 codec and meta information             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
//    by Steve Webster <steve.websterØfeaturecreep*com>        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
//  * version 0.3 (15 June 2006)                               //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
//  Modified to not read entire file into memory               //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
//    by James Heinrich <info@getid3.org>                      //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
//  * version 0.4 (07 December 2007)                           //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
//  Bugfixes for incorrectly parsed FLV dimensions             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
//    and incorrect parsing of onMetaTag                       //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
//    by Evgeny Moysevich <moysevichØgmail*com>                //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
//  * version 0.5 (21 May 2009)                                //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
//  Fixed parsing of audio tags and added additional codec     //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
//    details. The duration is now read from onMetaTag (if     //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
//    exists), rather than parsing whole file                  //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
//    by Nigel Barnes <ngbarnesØhotmail*com>                   //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
//  * version 0.6 (24 May 2009)                                //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
//  Better parsing of files with h264 video                    //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
//    by Evgeny Moysevich <moysevichØgmail*com>                //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
//  * version 0.6.1 (30 May 2011)                              //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
//    prevent infinite loops in expGolombUe()                  //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
//                                                             //
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    49
//  * version 0.7.0 (16 Jul 2013)                              //
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    50
//  handle GETID3_FLV_VIDEO_VP6FLV_ALPHA                       //
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    51
//  improved AVCSequenceParameterSetReader::readData()         //
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    52
//    by Xander Schouwerwou <schouwerwouØgmail*com>            //
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
//                                                            ///
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    56
if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    57
	exit;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    58
}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    59
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
define('GETID3_FLV_TAG_AUDIO',          8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
define('GETID3_FLV_TAG_VIDEO',          9);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
define('GETID3_FLV_TAG_META',          18);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
define('GETID3_FLV_VIDEO_H263',         2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
define('GETID3_FLV_VIDEO_SCREEN',       3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
define('GETID3_FLV_VIDEO_VP6FLV',       4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
define('GETID3_FLV_VIDEO_VP6FLV_ALPHA', 5);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
define('GETID3_FLV_VIDEO_SCREENV2',     6);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
define('GETID3_FLV_VIDEO_H264',         7);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
define('H264_AVC_SEQUENCE_HEADER',          0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
define('H264_PROFILE_BASELINE',            66);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
define('H264_PROFILE_MAIN',                77);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
define('H264_PROFILE_EXTENDED',            88);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
define('H264_PROFILE_HIGH',               100);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
define('H264_PROFILE_HIGH10',             110);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
define('H264_PROFILE_HIGH422',            122);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
define('H264_PROFILE_HIGH444',            144);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
define('H264_PROFILE_HIGH444_PREDICTIVE', 244);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    81
class getid3_flv extends getid3_handler
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    82
{
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    83
	const magic = 'FLV';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    84
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    85
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    86
	 * Break out of the loop if too many frames have been scanned; only scan this
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    87
	 * many if meta frame does not contain useful duration.
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    88
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    89
	 * @var int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    90
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    91
	public $max_frames = 100000;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    93
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    94
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    95
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
	public function Analyze() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    99
		$this->fseek($info['avdataoffset']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
		$FLVdataLength = $info['avdataend'] - $info['avdataoffset'];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   102
		$FLVheader = $this->fread(5);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
		$info['fileformat'] = 'flv';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
		$info['flv']['header']['signature'] =                           substr($FLVheader, 0, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
		$info['flv']['header']['version']   = getid3_lib::BigEndian2Int(substr($FLVheader, 3, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		$TypeFlags                          = getid3_lib::BigEndian2Int(substr($FLVheader, 4, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   109
		if ($info['flv']['header']['signature'] != self::magic) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   110
			$this->error('Expecting "'.getid3_lib::PrintHexBytes(self::magic).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($info['flv']['header']['signature']).'"');
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   111
			unset($info['flv'], $info['fileformat']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		$info['flv']['header']['hasAudio'] = (bool) ($TypeFlags & 0x04);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
		$info['flv']['header']['hasVideo'] = (bool) ($TypeFlags & 0x01);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   118
		$FrameSizeDataLength = getid3_lib::BigEndian2Int($this->fread(4));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		$FLVheaderFrameLength = 9;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
		if ($FrameSizeDataLength > $FLVheaderFrameLength) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   121
			$this->fseek($FrameSizeDataLength - $FLVheaderFrameLength, SEEK_CUR);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
		$Duration = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
		$found_video = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
		$found_audio = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
		$found_meta  = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
		$found_valid_meta_playtime = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
		$tagParseCount = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
		$info['flv']['framecount'] = array('total'=>0, 'audio'=>0, 'video'=>0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
		$flv_framecount = &$info['flv']['framecount'];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   131
		while ((($this->ftell() + 16) < $info['avdataend']) && (($tagParseCount++ <= $this->max_frames) || !$found_valid_meta_playtime))  {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   132
			$ThisTagHeader = $this->fread(16);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
			$PreviousTagLength = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  0, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
			$TagType           = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  4, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
			$DataLength        = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  5, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
			$Timestamp         = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  8, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
			$LastHeaderByte    = getid3_lib::BigEndian2Int(substr($ThisTagHeader, 15, 1));
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   139
			$NextOffset = $this->ftell() - 1 + $DataLength;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
			if ($Timestamp > $Duration) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
				$Duration = $Timestamp;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			$flv_framecount['total']++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
			switch ($TagType) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
				case GETID3_FLV_TAG_AUDIO:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
					$flv_framecount['audio']++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
					if (!$found_audio) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
						$found_audio = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
						$info['flv']['audio']['audioFormat']     = ($LastHeaderByte >> 4) & 0x0F;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
						$info['flv']['audio']['audioRate']       = ($LastHeaderByte >> 2) & 0x03;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
						$info['flv']['audio']['audioSampleSize'] = ($LastHeaderByte >> 1) & 0x01;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
						$info['flv']['audio']['audioType']       =  $LastHeaderByte       & 0x01;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
				case GETID3_FLV_TAG_VIDEO:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
					$flv_framecount['video']++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
					if (!$found_video) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
						$found_video = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
						$info['flv']['video']['videoCodec'] = $LastHeaderByte & 0x07;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   163
						$FLVvideoHeader = $this->fread(11);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
						if ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H264) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
							// this code block contributed by: moysevichØgmail*com
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
							$AVCPacketType = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 0, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
							if ($AVCPacketType == H264_AVC_SEQUENCE_HEADER) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
								//	read AVCDecoderConfigurationRecord
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
								$configurationVersion       = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  4, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
								$AVCProfileIndication       = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  5, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
								$profile_compatibility      = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  6, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
								$lengthSizeMinusOne         = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  7, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
								$numOfSequenceParameterSets = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  8, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
								if (($numOfSequenceParameterSets & 0x1F) != 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
									//	there is at least one SequenceParameterSet
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
									//	read size of the first SequenceParameterSet
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
									//$spsSize = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 9, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
									$spsSize = getid3_lib::LittleEndian2Int(substr($FLVvideoHeader, 9, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
									//	read the first SequenceParameterSet
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   183
									$sps = $this->fread($spsSize);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
									if (strlen($sps) == $spsSize) {	//	make sure that whole SequenceParameterSet was red
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
										$spsReader = new AVCSequenceParameterSetReader($sps);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
										$spsReader->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
										$info['video']['resolution_x'] = $spsReader->getWidth();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
										$info['video']['resolution_y'] = $spsReader->getHeight();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
							// end: moysevichØgmail*com
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
						} elseif ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H263) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
							$PictureSizeType = (getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 3, 2))) >> 7;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
							$PictureSizeType = $PictureSizeType & 0x0007;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
							$info['flv']['header']['videoSizeType'] = $PictureSizeType;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
							switch ($PictureSizeType) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
								case 0:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
									//$PictureSizeEnc = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 5, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
									//$PictureSizeEnc <<= 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
									//$info['video']['resolution_x'] = ($PictureSizeEnc & 0xFF00) >> 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
									//$PictureSizeEnc = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
									//$PictureSizeEnc <<= 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
									//$info['video']['resolution_y'] = ($PictureSizeEnc & 0xFF00) >> 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   208
									$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 4, 2)) >> 7;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   209
									$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 5, 2)) >> 7;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
									$info['video']['resolution_x'] = $PictureSizeEnc['x'] & 0xFF;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
									$info['video']['resolution_y'] = $PictureSizeEnc['y'] & 0xFF;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
								case 1:
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   215
									$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 4, 3)) >> 7;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   216
									$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 3)) >> 7;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
									$info['video']['resolution_x'] = $PictureSizeEnc['x'] & 0xFFFF;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
									$info['video']['resolution_y'] = $PictureSizeEnc['y'] & 0xFFFF;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
								case 2:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
									$info['video']['resolution_x'] = 352;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
									$info['video']['resolution_y'] = 288;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
								case 3:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
									$info['video']['resolution_x'] = 176;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
									$info['video']['resolution_y'] = 144;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
								case 4:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
									$info['video']['resolution_x'] = 128;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
									$info['video']['resolution_y'] = 96;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
								case 5:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
									$info['video']['resolution_x'] = 320;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
									$info['video']['resolution_y'] = 240;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
								case 6:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
									$info['video']['resolution_x'] = 160;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
									$info['video']['resolution_y'] = 120;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
								default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
									$info['video']['resolution_x'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
									$info['video']['resolution_y'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
							}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   252
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   253
						} elseif ($info['flv']['video']['videoCodec'] ==  GETID3_FLV_VIDEO_VP6FLV_ALPHA) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   254
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   255
							/* contributed by schouwerwouØgmail*com */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   256
							if (!isset($info['video']['resolution_x'])) { // only when meta data isn't set
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   257
								$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 2));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   258
								$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 7, 2));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   259
								$info['video']['resolution_x'] = ($PictureSizeEnc['x'] & 0xFF) << 3;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   260
								$info['video']['resolution_y'] = ($PictureSizeEnc['y'] & 0xFF) << 3;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   261
							}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   262
							/* end schouwerwouØgmail*com */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   263
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
						}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   265
						if (!empty($info['video']['resolution_x']) && !empty($info['video']['resolution_y'])) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   266
							$info['video']['pixel_aspect_ratio'] = $info['video']['resolution_x'] / $info['video']['resolution_y'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   267
						}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
				// Meta tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
				case GETID3_FLV_TAG_META:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
					if (!$found_meta) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
						$found_meta = true;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   275
						$this->fseek(-1, SEEK_CUR);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   276
						$datachunk = $this->fread($DataLength);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
						$AMFstream = new AMFStream($datachunk);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
						$reader = new AMFReader($AMFstream);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
						$eventName = $reader->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
						$info['flv']['meta'][$eventName] = $reader->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
						unset($reader);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
						$copykeys = array('framerate'=>'frame_rate', 'width'=>'resolution_x', 'height'=>'resolution_y', 'audiodatarate'=>'bitrate', 'videodatarate'=>'bitrate');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
						foreach ($copykeys as $sourcekey => $destkey) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
							if (isset($info['flv']['meta']['onMetaData'][$sourcekey])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
								switch ($sourcekey) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
									case 'width':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
									case 'height':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
										$info['video'][$destkey] = intval(round($info['flv']['meta']['onMetaData'][$sourcekey]));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
									case 'audiodatarate':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
										$info['audio'][$destkey] = getid3_lib::CastAsInt(round($info['flv']['meta']['onMetaData'][$sourcekey] * 1000));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
									case 'videodatarate':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
									case 'frame_rate':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
									default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
										$info['video'][$destkey] = $info['flv']['meta']['onMetaData'][$sourcekey];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
						if (!empty($info['flv']['meta']['onMetaData']['duration'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
							$found_valid_meta_playtime = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
					// noop
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
			}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   312
			$this->fseek($NextOffset);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
		$info['playtime_seconds'] = $Duration / 1000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
		if ($info['playtime_seconds'] > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
			$info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
		if ($info['flv']['header']['hasAudio']) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   321
			$info['audio']['codec']           =   self::audioFormatLookup($info['flv']['audio']['audioFormat']);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   322
			$info['audio']['sample_rate']     =     self::audioRateLookup($info['flv']['audio']['audioRate']);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   323
			$info['audio']['bits_per_sample'] = self::audioBitDepthLookup($info['flv']['audio']['audioSampleSize']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
			$info['audio']['channels']   =  $info['flv']['audio']['audioType'] + 1; // 0=mono,1=stereo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
			$info['audio']['lossless']   = ($info['flv']['audio']['audioFormat'] ? false : true); // 0=uncompressed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
			$info['audio']['dataformat'] = 'flv';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
		if (!empty($info['flv']['header']['hasVideo'])) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   330
			$info['video']['codec']      = self::videoCodecLookup($info['flv']['video']['videoCodec']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
			$info['video']['dataformat'] = 'flv';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
			$info['video']['lossless']   = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
		// Set information from meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
		if (!empty($info['flv']['meta']['onMetaData']['duration'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
			$info['playtime_seconds'] = $info['flv']['meta']['onMetaData']['duration'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
			$info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
		if (isset($info['flv']['meta']['onMetaData']['audiocodecid'])) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   341
			$info['audio']['codec'] = self::audioFormatLookup($info['flv']['meta']['onMetaData']['audiocodecid']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
		if (isset($info['flv']['meta']['onMetaData']['videocodecid'])) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   344
			$info['video']['codec'] = self::videoCodecLookup($info['flv']['meta']['onMetaData']['videocodecid']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   349
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   350
	 * @param int $id
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   351
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   352
	 * @return string|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   353
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   354
	public static function audioFormatLookup($id) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   355
		static $lookup = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
			0  => 'Linear PCM, platform endian',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
			1  => 'ADPCM',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
			2  => 'mp3',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
			3  => 'Linear PCM, little endian',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
			4  => 'Nellymoser 16kHz mono',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
			5  => 'Nellymoser 8kHz mono',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
			6  => 'Nellymoser',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
			7  => 'G.711A-law logarithmic PCM',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
			8  => 'G.711 mu-law logarithmic PCM',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
			9  => 'reserved',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
			10 => 'AAC',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   367
			11 => 'Speex',
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
			12 => false, // unknown?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
			13 => false, // unknown?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
			14 => 'mp3 8kHz',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
			15 => 'Device-specific sound',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
		);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   373
		return (isset($lookup[$id]) ? $lookup[$id] : false);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   376
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   377
	 * @param int $id
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   378
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   379
	 * @return int|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   380
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   381
	public static function audioRateLookup($id) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   382
		static $lookup = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
			0 =>  5500,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
			1 => 11025,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
			2 => 22050,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
			3 => 44100,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
		);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   388
		return (isset($lookup[$id]) ? $lookup[$id] : false);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   391
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   392
	 * @param int $id
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   393
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   394
	 * @return int|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   395
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   396
	public static function audioBitDepthLookup($id) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   397
		static $lookup = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
			0 =>  8,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
			1 => 16,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
		);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   401
		return (isset($lookup[$id]) ? $lookup[$id] : false);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   404
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   405
	 * @param int $id
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   406
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   407
	 * @return string|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   408
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   409
	public static function videoCodecLookup($id) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   410
		static $lookup = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
			GETID3_FLV_VIDEO_H263         => 'Sorenson H.263',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
			GETID3_FLV_VIDEO_SCREEN       => 'Screen video',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
			GETID3_FLV_VIDEO_VP6FLV       => 'On2 VP6',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
			GETID3_FLV_VIDEO_VP6FLV_ALPHA => 'On2 VP6 with alpha channel',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
			GETID3_FLV_VIDEO_SCREENV2     => 'Screen video v2',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
			GETID3_FLV_VIDEO_H264         => 'Sorenson H.264',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
		);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   418
		return (isset($lookup[$id]) ? $lookup[$id] : false);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   422
class AMFStream
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   423
{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   424
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   425
	 * @var string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   426
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
	public $bytes;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   428
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   429
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   430
	 * @var int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   431
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
	public $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   434
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   435
	 * @param string $bytes
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   436
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   437
	public function __construct(&$bytes) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
		$this->bytes =& $bytes;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
		$this->pos = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   442
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   443
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   444
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   445
	public function readByte() { //  8-bit
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   446
		return ord(substr($this->bytes, $this->pos++, 1));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   449
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   450
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   451
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   452
	public function readInt() { // 16-bit
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
		return ($this->readByte() << 8) + $this->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   456
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   457
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   458
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   459
	public function readLong() { // 32-bit
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
		return ($this->readByte() << 24) + ($this->readByte() << 16) + ($this->readByte() << 8) + $this->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   463
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   464
	 * @return float|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   465
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
	public function readDouble() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
		return getid3_lib::BigEndian2Float($this->read(8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   470
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   471
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   472
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
	public function readUTF() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
		$length = $this->readInt();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
		return $this->read($length);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   478
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   479
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   480
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
	public function readLongUTF() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
		$length = $this->readLong();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
		return $this->read($length);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   486
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   487
	 * @param int $length
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   488
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   489
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   490
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
	public function read($length) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
		$val = substr($this->bytes, $this->pos, $length);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
		$this->pos += $length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   497
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   498
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   499
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
	public function peekByte() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
		$val = $this->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   507
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   508
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   509
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
	public function peekInt() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
		$val = $this->readInt();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   517
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   518
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   519
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
	public function peekLong() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
		$val = $this->readLong();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   527
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   528
	 * @return float|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   529
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
	public function peekDouble() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
		$val = $this->readDouble();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   537
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   538
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   539
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
	public function peekUTF() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
		$val = $this->readUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   547
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   548
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   549
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
	public function peekLongUTF() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
		$val = $this->readLongUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   558
class AMFReader
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   559
{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   560
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   561
	* @var AMFStream
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   562
	*/
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
	public $stream;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   565
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   566
	 * @param AMFStream $stream
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   567
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   568
	public function __construct(AMFStream $stream) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   569
		$this->stream = $stream;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   572
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   573
	 * @return mixed
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   574
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
	public function readData() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
		$value = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
		$type = $this->stream->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
		switch ($type) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
			// Double
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
			case 0:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
				$value = $this->readDouble();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
			// Boolean
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
			case 1:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
				$value = $this->readBoolean();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
			// String
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
			case 2:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
				$value = $this->readString();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
			// Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
			case 3:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
				$value = $this->readObject();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
			// null
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
			case 6:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
				return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
			// Mixed array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
			case 8:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
				$value = $this->readMixedArray();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
			// Array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
			case 10:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
				$value = $this->readArray();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
			// Date
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
			case 11:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
				$value = $this->readDate();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
			// Long string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
			case 13:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
				$value = $this->readLongString();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
			// XML (handled as string)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
			case 15:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
				$value = $this->readXML();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
			// Typed object (handled as object)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
			case 16:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
				$value = $this->readTypedObject();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
			// Long string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
				$value = '(unknown or unsupported data type)';
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   638
				break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
		return $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   644
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   645
	 * @return float|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   646
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
	public function readDouble() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
		return $this->stream->readDouble();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   651
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   652
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   653
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
	public function readBoolean() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
		return $this->stream->readByte() == 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   658
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   659
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   660
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
	public function readString() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
		return $this->stream->readUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   665
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   666
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   667
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
	public function readObject() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
		// Get highest numerical index - ignored
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
//		$highestIndex = $this->stream->readLong();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
		$data = array();
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   673
		$key = null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
		while ($key = $this->stream->readUTF()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
			$data[$key] = $this->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
		// Mixed array record ends with empty string (0x00 0x00) and 0x09
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
		if (($key == '') && ($this->stream->peekByte() == 0x09)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
			// Consume byte
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
			$this->stream->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
		return $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   686
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   687
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   688
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
	public function readMixedArray() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
		// Get highest numerical index - ignored
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
		$highestIndex = $this->stream->readLong();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
		$data = array();
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   694
		$key = null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
		while ($key = $this->stream->readUTF()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
			if (is_numeric($key)) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   698
				$key = (int) $key;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
			$data[$key] = $this->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
		// Mixed array record ends with empty string (0x00 0x00) and 0x09
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
		if (($key == '') && ($this->stream->peekByte() == 0x09)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
			// Consume byte
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
			$this->stream->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
		return $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   711
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   712
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   713
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
	public function readArray() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
		$length = $this->stream->readLong();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
		$data = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
		for ($i = 0; $i < $length; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
			$data[] = $this->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
		return $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   724
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   725
	 * @return float|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   726
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
	public function readDate() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
		$timestamp = $this->stream->readDouble();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
		$timezone = $this->stream->readInt();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
		return $timestamp;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   733
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   734
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   735
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
	public function readLongString() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
		return $this->stream->readLongUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   740
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   741
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   742
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
	public function readXML() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
		return $this->stream->readLongUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   747
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   748
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   749
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
	public function readTypedObject() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
		$className = $this->stream->readUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
		return $this->readObject();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   756
class AVCSequenceParameterSetReader
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   757
{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   758
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   759
	 * @var string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   760
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
	public $sps;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
	public $start = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
	public $currentBytes = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
	public $currentBits = 0;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   765
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   766
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   767
	 * @var int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   768
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
	public $width;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   770
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   771
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   772
	 * @var int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   773
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
	public $height;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   776
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   777
	 * @param string $sps
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   778
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   779
	public function __construct($sps) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
		$this->sps = $sps;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
	public function readData() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
		$this->skipBits(8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
		$this->skipBits(8);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   786
		$profile = $this->getBits(8);                               // read profile
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   787
		if ($profile > 0) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   788
			$this->skipBits(8);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   789
			$level_idc = $this->getBits(8);                         // level_idc
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   790
			$this->expGolombUe();                                   // seq_parameter_set_id // sps
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   791
			$this->expGolombUe();                                   // log2_max_frame_num_minus4
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   792
			$picOrderType = $this->expGolombUe();                   // pic_order_cnt_type
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   793
			if ($picOrderType == 0) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   794
				$this->expGolombUe();                               // log2_max_pic_order_cnt_lsb_minus4
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   795
			} elseif ($picOrderType == 1) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   796
				$this->skipBits(1);                                 // delta_pic_order_always_zero_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   797
				$this->expGolombSe();                               // offset_for_non_ref_pic
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   798
				$this->expGolombSe();                               // offset_for_top_to_bottom_field
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   799
				$num_ref_frames_in_pic_order_cnt_cycle = $this->expGolombUe(); // num_ref_frames_in_pic_order_cnt_cycle
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   800
				for ($i = 0; $i < $num_ref_frames_in_pic_order_cnt_cycle; $i++) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   801
					$this->expGolombSe();                           // offset_for_ref_frame[ i ]
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
			}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   804
			$this->expGolombUe();                                   // num_ref_frames
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   805
			$this->skipBits(1);                                     // gaps_in_frame_num_value_allowed_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   806
			$pic_width_in_mbs_minus1 = $this->expGolombUe();        // pic_width_in_mbs_minus1
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   807
			$pic_height_in_map_units_minus1 = $this->expGolombUe(); // pic_height_in_map_units_minus1
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   808
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   809
			$frame_mbs_only_flag = $this->getBits(1);               // frame_mbs_only_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   810
			if ($frame_mbs_only_flag == 0) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   811
				$this->skipBits(1);                                 // mb_adaptive_frame_field_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   812
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   813
			$this->skipBits(1);                                     // direct_8x8_inference_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   814
			$frame_cropping_flag = $this->getBits(1);               // frame_cropping_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   815
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   816
			$frame_crop_left_offset   = 0;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   817
			$frame_crop_right_offset  = 0;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   818
			$frame_crop_top_offset    = 0;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   819
			$frame_crop_bottom_offset = 0;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   820
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   821
			if ($frame_cropping_flag) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   822
				$frame_crop_left_offset   = $this->expGolombUe();   // frame_crop_left_offset
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   823
				$frame_crop_right_offset  = $this->expGolombUe();   // frame_crop_right_offset
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   824
				$frame_crop_top_offset    = $this->expGolombUe();   // frame_crop_top_offset
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   825
				$frame_crop_bottom_offset = $this->expGolombUe();   // frame_crop_bottom_offset
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   826
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   827
			$this->skipBits(1);                                     // vui_parameters_present_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   828
			// etc
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   829
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   830
			$this->width  = (($pic_width_in_mbs_minus1 + 1) * 16) - ($frame_crop_left_offset * 2) - ($frame_crop_right_offset * 2);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   831
			$this->height = ((2 - $frame_mbs_only_flag) * ($pic_height_in_map_units_minus1 + 1) * 16) - ($frame_crop_top_offset * 2) - ($frame_crop_bottom_offset * 2);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   835
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   836
	 * @param int $bits
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   837
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
	public function skipBits($bits) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
		$newBits = $this->currentBits + $bits;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
		$this->currentBytes += (int)floor($newBits / 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
		$this->currentBits = $newBits % 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   844
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   845
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   846
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
	public function getBit() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
		$result = (getid3_lib::BigEndian2Int(substr($this->sps, $this->currentBytes, 1)) >> (7 - $this->currentBits)) & 0x01;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
		$this->skipBits(1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
		return $result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   853
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   854
	 * @param int $bits
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   855
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   856
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   857
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
	public function getBits($bits) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
		$result = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
		for ($i = 0; $i < $bits; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
			$result = ($result << 1) + $this->getBit();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
		return $result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   866
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   867
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   868
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
	public function expGolombUe() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
		$significantBits = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
		$bit = $this->getBit();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
		while ($bit == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
			$significantBits++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
			$bit = $this->getBit();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
			if ($significantBits > 31) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
				// something is broken, this is an emergency escape to prevent infinite loops
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
				return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
		return (1 << $significantBits) + $this->getBits($significantBits) - 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   884
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   885
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   886
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
	public function expGolombSe() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
		$result = $this->expGolombUe();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
		if (($result & 0x01) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
			return -($result >> 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
			return ($result + 1) >> 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   896
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   897
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   898
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
	public function getWidth() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
		return $this->width;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   903
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   904
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   905
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
	public function getHeight() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
		return $this->height;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
	}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   909
}