2010-06-08 8 views
0

J'ai ce que je soupçonne d'être un problème de logique avec un algorithme que j'utilise pour travailler avec le timecode vidéo en PHP. Toute aide est appréciée.Erreur de calcul du code temporel de l'allumeur PHP + Code

L'objectif

Eh bien, fondamentalement, je veux travailler avec timecode et effectuer des calculs

Pour ceux qui ne connaissent timecode il ressemble à ce

01:10:58: 12 ou HH: MM: SS: FF 'AKA' HEURES: MINUTES: SECONDES: CADRES

J'ai utilisé le script de HERE pour m'aider à travailler avec ce format.

Le problème

Maintenant, je peux dire simplement que ce script fonctionne !!! Les calculs de timecode (dans ce cas, les ajouts) sont effectués correctement. Cependant ce script jette sans cesse les erreurs suivantes, mais produit encore la sortie correcte quand je tente de faire le calcul suivant

00: 01: 26: 00 + 00: 02: 00: 12

les erreurs de ce calcul sont présentés ci-dessous

Une erreur PHP a été rencontré

gravité: Avis

Message: Undefined index: clé

Nom du fichier: personnel/tools.php

Numéro de ligne: 169

Une erreur PHP a été rencontré

Gravité: Avis

Message: Indéfini index: clé

Nom de fichier: staff/tools.php

Numéro de ligne: 169

Numéro de ligne 169 est dans la parseInput() fonction

// feed it into the tc array 
$i=0; 
foreach ($tc AS $key=>$value) { 
    if (is_numeric($array["$i"])) { 
     $tc["$key"]= $array["$i"]; 
     if ($tc["$key"] < 10 && $tc["$key"] > 0 && strlen($tc['key'])==1) $tc["$key"]= "0".$tc["$key"]; 
     } 
    $i++; 
    } 

return $tc; 

Maintenant, je dois aussi mentionner que le nombre de fois l'erreur ci-dessus est jeté dépend sur ce que je calcule

00: 00: 00: 00 + 00: 00: 00: 00

renvoie aucune erreur.

01: 01: 01: 01 + 02: 02: 02: 02

produit 8 des erreurs ci-dessus.


À titre de référence, voici le code dans son intégralité

function add_cue_sheet_clips_process() 
{ 

$sheetID = $_POST['sheet_id']; 
$clipName = $_POST['clip_name']; 
$tcIn = $_POST['tc_in']; 
$tcOut = $_POST['tc_out']; 

// string $input 
// returns an associative array of hours, minutes, seconds, and frames 
// 
function parseInput ($input) { 
// timecode should look something like hh:mm:ss;ff 
// allowed separators are : ; . , 
// values may be single or double digits 
// hours are least-significant -- 5.4 == 00:00:05;04 
$tc= array("frames"=>"00", "seconds"=>"00", "minutes"=>"00", "hours"=>"00"); 
$punct= array(":", ";", ".", ","); 

// too big? too small? 
$input= trim($input); 
if (strlen($input)>11 || $input=="") { 
    // invalid input, too long -- bzzt 
    return $tc; 
    } 

// normalize punctuation 
$input= str_replace($punct, ":", $input); 

// blow it up and reverse it so frames come first 
$array= explode(":", $input); 
$array= array_reverse($array); 

// feed it into the tc array 
$i=0; 
foreach ($tc AS $key=>$value) { 
    if (is_numeric($array["$i"])) { 
     $tc["$key"]= $array["$i"]; 
     if ($tc["$key"] < 10 && $tc["$key"] > 0 && strlen($tc['key'])==1) $tc["$key"]= "0".$tc["$key"]; 
     } 
    $i++; 
    } 

return $tc; 
} 

// array $tc 
// returns a float number of seconds 
// 
function tcToSec($tc) { 
    $wholeseconds= ($tc['hours']*3600) + ($tc['minutes'] * 60) + ($tc['seconds']); 
    $partseconds= ($tc['frames']/25); 
    $seconds= $wholeseconds + $partseconds; 
    return $seconds; 
    } 

// float $seconds 
// bool $subtract 
// returns a timecode array 
// 
function secToTc ($seconds=0, $subtract=0) { 
    $tc= array("frames"=>"00", "seconds"=>"00", "minutes"=>"00", "hours"=>"00"); 

    $partseconds= fmod($seconds, 1); 
    $wholeseconds= $seconds - $partseconds; 

    // frames 
    if ($subtract==1) $tc['frames']= floor($partseconds * 25); 
    else $tc['frames']= floor($partseconds * 25); 

    // hours 
    $tc['hours']= floor($wholeseconds/3600); 
    $minsec= ($wholeseconds - ($tc['hours'] * 3600)); 

    // minutes 
    $tc['minutes']= floor($minsec/60); 

    // seconds 
    $tc['seconds']= ($minsec - ($tc['minutes'] * 60)); 

    // padding 
    foreach ($tc AS $key=>$value) { 
     if ($value > 0 && $value < 10) $tc["$key"]= "0".$value; 
     if ($value=="0") $tc["$key"]= "00"; 
     } 
    return $tc; 
    } 

// array $tc 
// returns string of well-formed timecode 
// 
function tcToString (&$tc) { 
    return $tc['hours'].":".$tc['minutes'].":".$tc['seconds'].";".$tc['frames']; 
    } 


$timecodeIN = parseInput($tcIn); 
$timecodeOUT = parseInput($tcOut); 

// normalized inputs... 
$tc1 = tcToString($timecodeIN); 
$tc2 = tcToString($timecodeOUT); 

// get seconds 
$seconds1 = tcToSec($timecodeIN); 
$seconds2 = tcToSec($timecodeOUT); 

$result = $seconds1 + $seconds2; 

$timecode3 = secToTc($result, 0); 
$timecodeDUR = tcToString($timecode3); 

$clipArray = array('clip_name' => $clipName, 'tc_in' => $tcIn, 'tc_out' => $tcOut, 'tc_duration' => $timecodeDUR); 

$this->db->insert('tools_cue_sheets_clips', $clipArray); 

redirect('staff/tools/add_cue_sheet_clips/'.$sheetID); 
} 

J'espère que cette information est assez pour quelqu'un pour me aider au-dessus de cela, je serais extrêmement reconnaissant .

Merci,

Tim

Répondre

1

L'AVIS Les erreurs sont généralement mineures, Heres un exemple

if($unamedVaraible){/.../} //Notince: undefined variable 

if(isset($unamedVaraible)){/..../} //no error as its checking correctly for the purpose 

vous fait

error_reporting(E_ALL^E_NOTICE); ///Show all errors but E_NOTICE 

vous pourrez supress ces erreurs .

Vous trouverez la fonction error_reporting() située en haut de votre fichier index.php principal.

+0

Merci beaucoup :) – Tim