function __clipTrim($clip, $start, $stop, $fps)
 {
     $zero = floatval(0);
     $one = floatval(1);
     $result = array();
     // if clip is composited start is zero
     $orig_clip_start = $clip['start'];
     if ($clip['track']) {
         $start -= $orig_clip_start;
         $stop -= $orig_clip_start;
         $orig_clip_start = $zero;
     }
     $orig_clip_length = $clip['length'];
     $orig_clip_end = $orig_clip_length + $orig_clip_start;
     $clip_start = floatmax($orig_clip_start, $start);
     $clip_length = floatmin($orig_clip_end, $stop) - $clip_start;
     $orig_clip_trimstart = $clip['trimstart'];
     $clip_trimstart = $orig_clip_trimstart + ($clip_start - $orig_clip_start);
     $frame_seconds = $one / $fps;
     $clip_trimstart = floor($clip_trimstart / $frame_seconds) * $frame_seconds;
     $clip_length = floor($clip_length / $frame_seconds) * $frame_seconds;
     $media_duration = $clip['duration'];
     if (!floatgtr($media_duration, $zero)) {
         $media_duration = $orig_clip_length;
     }
     // trim may not round out well, so check it
     $clip_length = floatmin($clip_length, $media_duration - $clip_trimstart);
     if (floatgtr($clip_length, $zero)) {
         $result['trimstart'] = $clip_trimstart;
         $result['trimlength'] = $clip_length;
         $result['medialength'] = $media_duration;
     } else {
         throw new UnexpectedValueException('Could not determine trim of clip with no length: ' . $clip['id']);
     }
     return $result;
 }
function scale_switches($orig_dims, $dims, $fill)
{
    $target_w = floatval($dims[0]);
    $target_h = floatval($dims[1]);
    $vf = '';
    $scale = 'scale=' . $target_w . ':' . $target_h;
    if ($fill && $fill != 'stretch') {
        $orig_even_w = floatval($orig_dims[0]);
        $orig_dims1 = floatval($orig_dims[1]);
        $extra0 = $orig_even_w % 2;
        $extra1 = $orig_dims1 % 2;
        $orig_even_w -= $extra0;
        $orig_dims1 -= $extra1;
        $ratio_w = $target_w / $orig_even_w;
        $ratio_h = $target_h / $orig_dims1;
        if (!floatcmp($ratio_w, $ratio_h)) {
            $multiplier = $fill == 'scale' ? floatmin($ratio_w, $ratio_h) : floatmax($ratio_w, $ratio_h);
            $scaled_w = round($target_w / $multiplier);
            $scaled_h = round($target_h / $multiplier);
            if (!floatcmp($orig_even_w, $scaled_w)) {
                if (floatgtr($orig_even_w, $scaled_w)) {
                    //$a['cropleft'] = $a['cropright'] = floor((($orig_even_w - $scaled_w) / 2));
                    $vf .= 'crop=' . floor(($orig_even_w - $scaled_w) / 2) . ':0:' . $scaled_w . ':' . $scaled_h;
                } else {
                    /*$pad_x = $pad_width = floor(($scaled_w -$orig_even_w) / 2);
                    			$pad_x -= $extra0;
                    			$dims[0] -= 2 * $pad_width;
                    			$dims[0] += $extra0;
                    			$dims[1] += $extra1;
                    		*/
                    $vf .= 'pad=' . $scaled_w . ':' . $scaled_h . ':' . (floor(($scaled_w - $orig_even_w) / 2) - $extra0) . ':0';
                }
            }
            if (!floatcmp($orig_dims1, $scaled_h)) {
                if (floatgtr($orig_dims1, $scaled_h)) {
                    $vf .= 'crop=0:' . floor(($orig_dims1 - $scaled_h) / 2) . ':' . $scaled_w . ':' . $scaled_h;
                } else {
                    /*
                    $pad_y = $pad_height = floor(($scaled_h - $orig_dims1) / 2);
                    $pad_y -= $extra1;
                    $dims[1] -= 2 * $pad_height;
                    $dims[1] += $extra1;
                    $dims[0] += $extra0;
                    */
                    $vf .= 'pad=' . $scaled_w . ':' . $scaled_h . ':0:' . (floor(($scaled_h - $orig_dims1) / 2) - $extra1);
                }
            }
        }
        //$a['s'] = $dims[0] . 'x' . $dims[1];
    }
    if ($vf) {
        $vf .= ',';
    }
    $vf .= $scale;
    $a = array();
    $a['vf'] = $vf;
    return $a;
}