wp/wp-includes/ID3/module.audio-video.flv.php
author ymh <ymh.work@gmail.com>
Mon, 08 Sep 2025 19:44:41 +0200
changeset 23 417f20492bf7
parent 19 3d72ae0968f4
permissions -rw-r--r--
Update Docker configuration and plugin versions - Upgrade MariaDB from 10.6 to 11 with auto-upgrade support - Add WordPress debug environment variable to FPM container - Update PHP-FPM Dockerfile base image - Update Include Mastodon Feed plugin with bug fixes and improvements - Update Portfolio plugin (v2.58) with latest translations and demo data enhancements - Remove old README.md from Mastodon Feed plugin 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
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);
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   164
						$PictureSizeEnc = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
						if ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H264) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
							// this code block contributed by: moysevichØgmail*com
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
							$AVCPacketType = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 0, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
							if ($AVCPacketType == H264_AVC_SEQUENCE_HEADER) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
								//	read AVCDecoderConfigurationRecord
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
								$configurationVersion       = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  4, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
								$AVCProfileIndication       = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  5, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
								$profile_compatibility      = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  6, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
								$lengthSizeMinusOne         = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  7, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
								$numOfSequenceParameterSets = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  8, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
								if (($numOfSequenceParameterSets & 0x1F) != 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
									//	there is at least one SequenceParameterSet
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
									//	read size of the first SequenceParameterSet
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
									//$spsSize = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 9, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
									$spsSize = getid3_lib::LittleEndian2Int(substr($FLVvideoHeader, 9, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
									//	read the first SequenceParameterSet
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   184
									$sps = $this->fread($spsSize);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
									if (strlen($sps) == $spsSize) {	//	make sure that whole SequenceParameterSet was red
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
										$spsReader = new AVCSequenceParameterSetReader($sps);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
										$spsReader->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
										$info['video']['resolution_x'] = $spsReader->getWidth();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
										$info['video']['resolution_y'] = $spsReader->getHeight();
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
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
							// end: moysevichØgmail*com
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
						} elseif ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H263) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
							$PictureSizeType = (getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 3, 2))) >> 7;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
							$PictureSizeType = $PictureSizeType & 0x0007;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
							$info['flv']['header']['videoSizeType'] = $PictureSizeType;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
							switch ($PictureSizeType) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
								case 0:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
									//$PictureSizeEnc = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 5, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
									//$PictureSizeEnc <<= 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
									//$info['video']['resolution_x'] = ($PictureSizeEnc & 0xFF00) >> 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
									//$PictureSizeEnc = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
									//$PictureSizeEnc <<= 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
									//$info['video']['resolution_y'] = ($PictureSizeEnc & 0xFF00) >> 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   209
									$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 4, 2)) >> 7;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   210
									$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 5, 2)) >> 7;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
									$info['video']['resolution_x'] = $PictureSizeEnc['x'] & 0xFF;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
									$info['video']['resolution_y'] = $PictureSizeEnc['y'] & 0xFF;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
								case 1:
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   216
									$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 4, 3)) >> 7;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   217
									$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 3)) >> 7;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
									$info['video']['resolution_x'] = $PictureSizeEnc['x'] & 0xFFFF;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
									$info['video']['resolution_y'] = $PictureSizeEnc['y'] & 0xFFFF;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
								case 2:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
									$info['video']['resolution_x'] = 352;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
									$info['video']['resolution_y'] = 288;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
								case 3:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
									$info['video']['resolution_x'] = 176;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
									$info['video']['resolution_y'] = 144;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
								case 4:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
									$info['video']['resolution_x'] = 128;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
									$info['video']['resolution_y'] = 96;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
								case 5:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
									$info['video']['resolution_x'] = 320;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
									$info['video']['resolution_y'] = 240;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
								case 6:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
									$info['video']['resolution_x'] = 160;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
									$info['video']['resolution_y'] = 120;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
								default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
									$info['video']['resolution_x'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
									$info['video']['resolution_y'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
							}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   253
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   254
						} elseif ($info['flv']['video']['videoCodec'] ==  GETID3_FLV_VIDEO_VP6FLV_ALPHA) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   255
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   256
							/* contributed by schouwerwouØgmail*com */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   257
							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
   258
								$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 2));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   259
								$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 7, 2));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   260
								$info['video']['resolution_x'] = ($PictureSizeEnc['x'] & 0xFF) << 3;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   261
								$info['video']['resolution_y'] = ($PictureSizeEnc['y'] & 0xFF) << 3;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   262
							}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   263
							/* end schouwerwouØgmail*com */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   264
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
						}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   266
						if (!empty($info['video']['resolution_x']) && !empty($info['video']['resolution_y'])) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   267
							$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
   268
						}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
				// Meta tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
				case GETID3_FLV_TAG_META:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
					if (!$found_meta) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
						$found_meta = true;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   276
						$this->fseek(-1, SEEK_CUR);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   277
						$datachunk = $this->fread($DataLength);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
						$AMFstream = new AMFStream($datachunk);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
						$reader = new AMFReader($AMFstream);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
						$eventName = $reader->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
						$info['flv']['meta'][$eventName] = $reader->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
						unset($reader);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
						$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
   285
						foreach ($copykeys as $sourcekey => $destkey) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
							if (isset($info['flv']['meta']['onMetaData'][$sourcekey])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
								switch ($sourcekey) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
									case 'width':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
									case 'height':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
										$info['video'][$destkey] = intval(round($info['flv']['meta']['onMetaData'][$sourcekey]));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
									case 'audiodatarate':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
										$info['audio'][$destkey] = getid3_lib::CastAsInt(round($info['flv']['meta']['onMetaData'][$sourcekey] * 1000));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
									case 'videodatarate':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
									case 'frame_rate':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
									default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
										$info['video'][$destkey] = $info['flv']['meta']['onMetaData'][$sourcekey];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
										break;
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
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
						if (!empty($info['flv']['meta']['onMetaData']['duration'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
							$found_valid_meta_playtime = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
					// noop
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
			}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   313
			$this->fseek($NextOffset);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
		$info['playtime_seconds'] = $Duration / 1000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
		if ($info['playtime_seconds'] > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
			$info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
		if ($info['flv']['header']['hasAudio']) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   322
			$info['audio']['codec']           =   self::audioFormatLookup($info['flv']['audio']['audioFormat']);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   323
			$info['audio']['sample_rate']     =     self::audioRateLookup($info['flv']['audio']['audioRate']);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   324
			$info['audio']['bits_per_sample'] = self::audioBitDepthLookup($info['flv']['audio']['audioSampleSize']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
			$info['audio']['channels']   =  $info['flv']['audio']['audioType'] + 1; // 0=mono,1=stereo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
			$info['audio']['lossless']   = ($info['flv']['audio']['audioFormat'] ? false : true); // 0=uncompressed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
			$info['audio']['dataformat'] = 'flv';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
		if (!empty($info['flv']['header']['hasVideo'])) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   331
			$info['video']['codec']      = self::videoCodecLookup($info['flv']['video']['videoCodec']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
			$info['video']['dataformat'] = 'flv';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
			$info['video']['lossless']   = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
		// Set information from meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
		if (!empty($info['flv']['meta']['onMetaData']['duration'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
			$info['playtime_seconds'] = $info['flv']['meta']['onMetaData']['duration'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
			$info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
		if (isset($info['flv']['meta']['onMetaData']['audiocodecid'])) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   342
			$info['audio']['codec'] = self::audioFormatLookup($info['flv']['meta']['onMetaData']['audiocodecid']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
		if (isset($info['flv']['meta']['onMetaData']['videocodecid'])) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   345
			$info['video']['codec'] = self::videoCodecLookup($info['flv']['meta']['onMetaData']['videocodecid']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   350
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   351
	 * @param int $id
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   352
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   353
	 * @return string|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   354
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   355
	public static function audioFormatLookup($id) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   356
		static $lookup = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
			0  => 'Linear PCM, platform endian',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
			1  => 'ADPCM',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
			2  => 'mp3',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
			3  => 'Linear PCM, little endian',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
			4  => 'Nellymoser 16kHz mono',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
			5  => 'Nellymoser 8kHz mono',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
			6  => 'Nellymoser',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
			7  => 'G.711A-law logarithmic PCM',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
			8  => 'G.711 mu-law logarithmic PCM',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
			9  => 'reserved',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
			10 => 'AAC',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   368
			11 => 'Speex',
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
			12 => false, // unknown?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
			13 => false, // unknown?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
			14 => 'mp3 8kHz',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
			15 => 'Device-specific sound',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
		);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   374
		return (isset($lookup[$id]) ? $lookup[$id] : false);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   377
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   378
	 * @param int $id
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   379
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   380
	 * @return int|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   381
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   382
	public static function audioRateLookup($id) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   383
		static $lookup = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
			0 =>  5500,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
			1 => 11025,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
			2 => 22050,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
			3 => 44100,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
		);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   389
		return (isset($lookup[$id]) ? $lookup[$id] : false);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   392
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   393
	 * @param int $id
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   394
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   395
	 * @return int|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   396
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   397
	public static function audioBitDepthLookup($id) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   398
		static $lookup = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
			0 =>  8,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
			1 => 16,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
		);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   402
		return (isset($lookup[$id]) ? $lookup[$id] : false);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   405
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   406
	 * @param int $id
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   407
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   408
	 * @return string|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   409
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   410
	public static function videoCodecLookup($id) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   411
		static $lookup = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
			GETID3_FLV_VIDEO_H263         => 'Sorenson H.263',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
			GETID3_FLV_VIDEO_SCREEN       => 'Screen video',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
			GETID3_FLV_VIDEO_VP6FLV       => 'On2 VP6',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
			GETID3_FLV_VIDEO_VP6FLV_ALPHA => 'On2 VP6 with alpha channel',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
			GETID3_FLV_VIDEO_SCREENV2     => 'Screen video v2',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
			GETID3_FLV_VIDEO_H264         => 'Sorenson H.264',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
		);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   419
		return (isset($lookup[$id]) ? $lookup[$id] : false);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   423
class AMFStream
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
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   426
	 * @var string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   427
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
	public $bytes;
16
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
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   431
	 * @var int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   432
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
	public $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   435
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   436
	 * @param string $bytes
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   437
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   438
	public function __construct(&$bytes) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
		$this->bytes =& $bytes;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
		$this->pos = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   443
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   444
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   445
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   446
	public function readByte() { //  8-bit
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   447
		return ord(substr($this->bytes, $this->pos++, 1));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   450
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   451
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   452
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   453
	public function readInt() { // 16-bit
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
		return ($this->readByte() << 8) + $this->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   457
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   458
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   459
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   460
	public function readLong() { // 32-bit
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
		return ($this->readByte() << 24) + ($this->readByte() << 16) + ($this->readByte() << 8) + $this->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   464
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   465
	 * @return float|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   466
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
	public function readDouble() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
		return getid3_lib::BigEndian2Float($this->read(8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   471
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   472
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   473
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
	public function readUTF() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
		$length = $this->readInt();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
		return $this->read($length);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   479
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   480
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   481
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
	public function readLongUTF() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
		$length = $this->readLong();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
		return $this->read($length);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   487
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   488
	 * @param int $length
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   489
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   490
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   491
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
	public function read($length) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
		$val = substr($this->bytes, $this->pos, $length);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
		$this->pos += $length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   498
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   499
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   500
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
	public function peekByte() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
		$val = $this->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   508
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   509
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   510
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
	public function peekInt() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
		$val = $this->readInt();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   518
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   519
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   520
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
	public function peekLong() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
		$val = $this->readLong();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   528
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   529
	 * @return float|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   530
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
	public function peekDouble() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
		$val = $this->readDouble();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   538
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   539
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   540
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
	public function peekUTF() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
		$val = $this->readUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   548
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   549
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   550
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
	public function peekLongUTF() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
		$pos = $this->pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
		$val = $this->readLongUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
		$this->pos = $pos;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
		return $val;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   559
class AMFReader
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
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   562
	* @var AMFStream
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   563
	*/
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
	public $stream;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   566
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   567
	 * @param AMFStream $stream
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   568
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   569
	public function __construct(AMFStream $stream) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   570
		$this->stream = $stream;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   573
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   574
	 * @return mixed
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   575
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
	public function readData() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
		$value = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
		$type = $this->stream->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
		switch ($type) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
			// Double
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
			case 0:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
				$value = $this->readDouble();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
			// Boolean
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
			case 1:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
				$value = $this->readBoolean();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
			// String
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
			case 2:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
				$value = $this->readString();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
			// Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
			case 3:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
				$value = $this->readObject();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
			// null
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
			case 6:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
				return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
			// Mixed array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
			case 8:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
				$value = $this->readMixedArray();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
			// Array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
			case 10:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
				$value = $this->readArray();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
			// Date
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
			case 11:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
				$value = $this->readDate();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
			// Long string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
			case 13:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
				$value = $this->readLongString();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
			// XML (handled as string)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
			case 15:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
				$value = $this->readXML();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
			// Typed object (handled as object)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
			case 16:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
				$value = $this->readTypedObject();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
			// Long string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
				$value = '(unknown or unsupported data type)';
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   639
				break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
		return $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   645
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   646
	 * @return float|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   647
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
	public function readDouble() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
		return $this->stream->readDouble();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   652
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   653
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   654
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
	public function readBoolean() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
		return $this->stream->readByte() == 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   659
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   660
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   661
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
	public function readString() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
		return $this->stream->readUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   666
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   667
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   668
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
	public function readObject() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
		// Get highest numerical index - ignored
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
//		$highestIndex = $this->stream->readLong();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
		$data = array();
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   674
		$key = null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
		while ($key = $this->stream->readUTF()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
			$data[$key] = $this->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
		// Mixed array record ends with empty string (0x00 0x00) and 0x09
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
		if (($key == '') && ($this->stream->peekByte() == 0x09)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
			// Consume byte
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
			$this->stream->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
		return $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   687
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   688
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   689
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
	public function readMixedArray() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
		// Get highest numerical index - ignored
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
		$highestIndex = $this->stream->readLong();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
		$data = array();
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   695
		$key = null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
		while ($key = $this->stream->readUTF()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
			if (is_numeric($key)) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   699
				$key = (int) $key;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
			$data[$key] = $this->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
		// Mixed array record ends with empty string (0x00 0x00) and 0x09
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
		if (($key == '') && ($this->stream->peekByte() == 0x09)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
			// Consume byte
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
			$this->stream->readByte();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
		return $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   712
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   713
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   714
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
	public function readArray() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
		$length = $this->stream->readLong();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
		$data = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
		for ($i = 0; $i < $length; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
			$data[] = $this->readData();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
		return $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   725
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   726
	 * @return float|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   727
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
	public function readDate() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
		$timestamp = $this->stream->readDouble();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
		$timezone = $this->stream->readInt();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
		return $timestamp;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   734
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   735
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   736
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
	public function readLongString() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
		return $this->stream->readLongUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   741
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   742
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   743
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
	public function readXML() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
		return $this->stream->readLongUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   748
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   749
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   750
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
	public function readTypedObject() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
		$className = $this->stream->readUTF();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
		return $this->readObject();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   757
class AVCSequenceParameterSetReader
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
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   760
	 * @var string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   761
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
	public $sps;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
	public $start = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
	public $currentBytes = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
	public $currentBits = 0;
16
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
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   768
	 * @var int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   769
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
	public $width;
16
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
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   773
	 * @var int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   774
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
	public $height;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   777
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   778
	 * @param string $sps
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   779
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   780
	public function __construct($sps) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
		$this->sps = $sps;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
	public function readData() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
		$this->skipBits(8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
		$this->skipBits(8);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   787
		$profile = $this->getBits(8);                               // read profile
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   788
		if ($profile > 0) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   789
			$this->skipBits(8);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   790
			$level_idc = $this->getBits(8);                         // level_idc
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   791
			$this->expGolombUe();                                   // seq_parameter_set_id // sps
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   792
			$this->expGolombUe();                                   // log2_max_frame_num_minus4
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   793
			$picOrderType = $this->expGolombUe();                   // pic_order_cnt_type
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   794
			if ($picOrderType == 0) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   795
				$this->expGolombUe();                               // log2_max_pic_order_cnt_lsb_minus4
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   796
			} elseif ($picOrderType == 1) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   797
				$this->skipBits(1);                                 // delta_pic_order_always_zero_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   798
				$this->expGolombSe();                               // offset_for_non_ref_pic
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   799
				$this->expGolombSe();                               // offset_for_top_to_bottom_field
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   800
				$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
   801
				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
   802
					$this->expGolombSe();                           // offset_for_ref_frame[ i ]
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
			}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   805
			$this->expGolombUe();                                   // num_ref_frames
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   806
			$this->skipBits(1);                                     // gaps_in_frame_num_value_allowed_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   807
			$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
   808
			$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
   809
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   810
			$frame_mbs_only_flag = $this->getBits(1);               // frame_mbs_only_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   811
			if ($frame_mbs_only_flag == 0) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   812
				$this->skipBits(1);                                 // mb_adaptive_frame_field_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   813
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   814
			$this->skipBits(1);                                     // direct_8x8_inference_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   815
			$frame_cropping_flag = $this->getBits(1);               // frame_cropping_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   816
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   817
			$frame_crop_left_offset   = 0;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   818
			$frame_crop_right_offset  = 0;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   819
			$frame_crop_top_offset    = 0;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   820
			$frame_crop_bottom_offset = 0;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   821
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   822
			if ($frame_cropping_flag) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   823
				$frame_crop_left_offset   = $this->expGolombUe();   // frame_crop_left_offset
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   824
				$frame_crop_right_offset  = $this->expGolombUe();   // frame_crop_right_offset
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   825
				$frame_crop_top_offset    = $this->expGolombUe();   // frame_crop_top_offset
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   826
				$frame_crop_bottom_offset = $this->expGolombUe();   // frame_crop_bottom_offset
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   827
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   828
			$this->skipBits(1);                                     // vui_parameters_present_flag
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   829
			// etc
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   830
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   831
			$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
   832
			$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
   833
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   836
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   837
	 * @param int $bits
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   838
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
	public function skipBits($bits) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
		$newBits = $this->currentBits + $bits;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
		$this->currentBytes += (int)floor($newBits / 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
		$this->currentBits = $newBits % 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   845
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   846
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   847
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
	public function getBit() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
		$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
   850
		$this->skipBits(1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
		return $result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   854
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   855
	 * @param int $bits
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   856
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   857
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   858
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
	public function getBits($bits) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
		$result = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
		for ($i = 0; $i < $bits; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
			$result = ($result << 1) + $this->getBit();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
		return $result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   867
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   868
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   869
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
	public function expGolombUe() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
		$significantBits = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
		$bit = $this->getBit();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
		while ($bit == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
			$significantBits++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
			$bit = $this->getBit();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
			if ($significantBits > 31) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
				// something is broken, this is an emergency escape to prevent infinite loops
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
				return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
		return (1 << $significantBits) + $this->getBits($significantBits) - 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   885
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   886
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   887
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
	public function expGolombSe() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
		$result = $this->expGolombUe();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
		if (($result & 0x01) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
			return -($result >> 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
			return ($result + 1) >> 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   897
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   898
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   899
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
	public function getWidth() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
		return $this->width;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   904
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   905
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   906
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
	public function getHeight() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
		return $this->height;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
	}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   910
}