Klawischnigg: FLV - Abmessungen und Aspect Ratio

Beitrag lesen

Hi there,

ich hab mir das vor längerer Zeit in Quick&Dirtymodus geschrieben, bitte keine Kommentare bzgl. wie man das Coding hätte anders oder besser machen können, anyway, es funktioniert einfach...

  
  
function getFlvRatio($f)  
{  
	if (! file_exists($f))  
	{  
		return false;  
	}  
	$fh=fopen($f,'r');  
	$header=fread($fh,2048);  
	$w=strpos($header,'width');  
	if ($w !== false)  
	{  
		$wString=substr($header,$w+7,4);  
		$width=chr_num(dechex(ord(substr($wString,0,1))),2).chr_num(dechex(ord(substr($wString,1,1))),2);  
		$h=strpos($header,'height');  
		$hString=substr($header,$h+8,4);  
		$height=chr_num(dechex(ord(substr($hString,0,1))),2).chr_num(dechex(ord(substr($hString,1,1))),2);  
		$wExp=hexdec(substr(chr_num(dec2hex(ord(substr($wString,0,1))),2),0,1))+1;  
		$wFaktor=pow(2,$wExp - 8);  
		$wA= pow(2,$wExp);  
		$wB= hexdec(substr($width,1,2)) * $wFaktor;  
		$hExp=hexdec(substr(chr_num(dec2hex(ord(substr($hString,0,1))),2),0,1))+1;  
		$hFaktor=pow(2,$hExp - 8);  
		$hA= pow(2,$hExp);  
		$hB= hexdec(substr($height,1,2)) * $hFaktor;  
		$flvD[0]=$wA+$wB;  
		$flvD[1]=$hA+$hB;  
		$flvD[2]=(($hA+$hB) != 0)?($wA+$wB)/($hA+$hB):0;  
	}  
	else  
	{  
		$flvD[0]=-1;  
		$flvD[1]=-1;  
		$flvD[2]=-1;  
		  
	}  
	return $flvD;  
  
// dazu noch 3 kleine Funktionen, die ich aus Faulheit gern verwende:  
  
  
function dec2hex($_dec)  
{  
	$_hex=dechex($_dec);  
	if (strlen($_hex) < 2)  
	{  
		$_hex="0".$_hex;  
	}  
	return $_hex;	  
}  
  
function chr_num($v,$hm){  
	$lv=len($v);  
	return repl("0",$hm-$lv).$v;  
}  
function repl($_char,$_howmany){  
	$_tmpstr="";  
	for ($_i = 1;$_i <=$_howmany;$_i++){  
		$_tmpstr=$_tmpstr.$_char;  
	}  
	return $_tmpstr;  
}  
  

Rückgabe ist ein Array, [0]=width, [1]=height, [2]= ratio

kann man sicher optimieren, war mir aber wurscht, ich verwend' das seit einigen Jahren, hat bis jetzt immer funktionert...