diff options
| author | Heshan Wanigasooriya <heshanmw@gmail.com> | 2010-12-05 12:52:20 +0000 | 
|---|---|---|
| committer | Heshan Wanigasooriya <heshanmw@gmail.com> | 2010-12-05 12:52:20 +0000 | 
| commit | 973537f36c8f33473a00190aa64fc30b82d94c04 (patch) | |
| tree | 2c2f99a3bd254b145453fab186fdc824d34a260f /includes/conversion.inc | |
| parent | 07e453e2ff2f66017eb49cc0374aa1531805a043 (diff) | |
| download | video-973537f36c8f33473a00190aa64fc30b82d94c04.tar.gz video-973537f36c8f33473a00190aa64fc30b82d94c04.tar.bz2  | |
Removing all files
Diffstat (limited to 'includes/conversion.inc')
| -rw-r--r-- | includes/conversion.inc | 262 | 
1 files changed, 0 insertions, 262 deletions
diff --git a/includes/conversion.inc b/includes/conversion.inc deleted file mode 100644 index 4f66bfa..0000000 --- a/includes/conversion.inc +++ /dev/null @@ -1,262 +0,0 @@ -<?php -//$Id$ -/* - * @file - * Class file to handle video conversion using ffmpeg. - * - */ -define('VIDEO_RENDERING_PENDING', 1); -define('VIDEO_RENDERING_ACTIVE', 5); -define('VIDEO_RENDERING_COMPLETE', 10); -define('VIDEO_RENDERING_FAILED', 20); - -class video_conversion { - -  /** -   * Our main function to call when converting queued up jobs. -   */ -  public function run_queue() { -    if ($videos = $this->select_queue()) { -      foreach ($videos as $video) { -        $this->process($video); -      } -    } -  } - -  /** -   * Select videos from our queue -   * -   * @return -   *   An array containing all the videos to be proccessed. -   */ -  private function select_queue() { -    $total_videos = variable_get('video_ffmpeg_instances', 5); -    $videos = array(); -    $result = db_query_range('SELECT f.*, vf.vid, vf.nid, vf.dimensions, vf.status as video_status FROM {video_files} vf LEFT JOIN {files} f ON vf.fid = f.fid WHERE vf.status = %d AND f.status = %d ORDER BY f.timestamp', -    VIDEO_RENDERING_PENDING, FILE_STATUS_PERMANENT, 0, $total_videos); - -    while ($row = db_fetch_object($result)) { -      $videos[] = $row; -    } -    return $videos; -  } - -  /** -   * Process the video through ffmpeg. -   * -   * @param $video -   *   This can either be the file object or the file id (fid) -   * -   * @return -   *   TRUE of FALSE if video was converted successfully. -   */ -  public function process($video) { -    if (is_object($video) && isset($video->fid)) { -      $return = $this->render($video); -    } -    else { -      $video_object = $this->load_video($video); -      $return = $this->render($video_object); -    } -    return $return; -  } - -  private function render($video) { -    if (!is_object($video)) { -      watchdog('video_conversion', 'Video object is not present', array(), WATCHDOG_ERROR); -      return FALSE; -    } -    // Make sure this video is pending or do nothing. -    if($video->video_status == VIDEO_RENDERING_PENDING) { -      // This will update our current video status to active. -      $this->change_status($video->vid, VIDEO_RENDERING_ACTIVE); -      // Get the converted file object -      //we are going to move our video to an "original" folder -      //we are going to transcode the video to the "converted" folder -      $pathinfo = pathinfo($video->filepath); -      $original = $pathinfo['dirname'] .'/original'; -      $converted = $pathinfo['dirname'] .'/converted'; - -      if (!field_file_check_directory($original, FILE_CREATE_DIRECTORY)) { -        watchdog('video_transcoder', 'Video conversion failed.  Could not create the directory: '.$orginal, array(), WATCHDOG_ERROR); -        return false; -      } -      if (!field_file_check_directory($converted, FILE_CREATE_DIRECTORY)) { -        watchdog('video_transcoder', 'Video conversion failed.  Could not create the directory: '.$converted, array(), WATCHDOG_ERROR); -        return false; -      } - -      $original = $original .'/'. $video->filename; -      //lets move our video and then convert it. -      if(file_move($video, $original)) { -        //update our filename after the move to maintain filename uniqueness. -        $converted = $converted .'/'. pathinfo($video->filepath, PATHINFO_FILENAME) .'.'. $this->video_extension(); -        // Update our filepath since we moved it -        $update = drupal_write_record('files', $video, 'fid'); -        //call our transcoder -        $command_output = $this->convert_video($video, $converted); -        //lets check to make sure our file exists, if not error out -        if(!file_exists($converted) || !filesize($converted)) { -          watchdog('video_conversion', 'Video conversion failed.  FFMPEG reported the following output: '.$command_output, array(), WATCHDOG_ERROR); -          $this->change_status($video->vid, VIDEO_RENDERING_FAILED); -          return FALSE; -        } -        // Setup our converted video object -        $video_info = pathinfo($converted); -        //update our converted video -        $video->converted = new stdClass(); -        $video->converted->vid = $video->vid; -        $video->converted->filename = $video_info['basename']; -        $video->converted->filepath = $converted; -        $video->converted->filemime = file_get_mimetype($converted); -        $video->converted->filesize = filesize($converted); -        $video->converted->status = VIDEO_RENDERING_COMPLETE; -        $video->converted->completed = REQUEST_TIME; -        //clear our cache so our video path is updated. -        cache_clear_all('*', 'cache_content', true); -        // Update our video_files table with the converted video information. -        $result = db_query("UPDATE {video_files} SET filename='%s', filepath='%s', filemime='%s', filesize=%d, status=%d, completed=%d WHERE vid=%d", -        $video->converted->filename, $video->converted->filepath, $video->converted->filemime, $video->converted->filesize, $video->converted->status, $video->converted->completed, $video->converted->vid); - -        // Update our node id to published.  We do not do a node_load as it causes editing problems when saving. -        db_query("UPDATE {node} SET status=%d WHERE nid=%d", 1, $video->nid); -        watchdog('video_conversion', 'Successfully converted %orig to %dest', array('%orig' => $video->filepath, '%dest' => $video->converted->filepath), WATCHDOG_INFO); -        return TRUE; -      } -      else { -        watchdog('video_conversion', 'Cound not move the video to the original folder.', array(), WATCHDOG_ERROR); -        $this->change_status($video->vid, VIDEO_RENDERING_FAILED); -        return FALSE; -      } -    } -    return NULL; -  } - -  /** -   * Calls the transcoder class to convert the video. -   * -   * @param $job -   *   Video object to be transcoded -   * -   * @return -   *   TRUE or FALSE -   */ -  private function convert_video($video, $converted) { -    //get our dimensions and pass them along. -    $dimensions = $this->dimensions($video); -    module_load_include('inc', 'video', '/includes/transcoder'); -    $transcoder = new video_transcoder; -    return $transcoder->convert_video($video, $converted, $dimensions); -  } - -  private function video_extension() { -    module_load_include('inc', 'video', '/includes/transcoder'); -    $transcoder = new video_transcoder; -    return $transcoder->video_converted_extension(); -  } - -  /* -   * Function determines the dimensions you want and compares with the actual wxh of the video. -   * -   * If they are not exact or the aspect ratio does not match, we then figure out how much padding -   * we should add.  We will either add a black bar on the top/bottom or on the left/right. -   * -   * @TODO I need to look more at this function.  I don't really like the guess work here.  Need to implement -   * a better way to check the end WxH.  Maybe compare the final resolution to our defaults?  I don't think -   * that just checking to make sure the final number is even is accurate enough. -   */ -  public function dimensions($video) { -    //lets setup our dimensions.  Make sure our aspect ratio matches the dimensions to be used, if not lets add black bars. -    $aspect_ratio = _video_aspect_ratio($video->filepath); -    $ratio = $aspect_ratio['ratio']; -    $width = $aspect_ratio ['width']; -    $height = $aspect_ratio['height']; - -    $wxh = explode('x', $video->dimensions); -    $output_width = $wxh[0]; -    $output_height = $wxh[1]; -    $output_ratio = number_format($output_width / $output_height, 4); - -    if($output_ratio != $ratio && $width && $height) { -      $options = array(); -      // Figure out our black bar padding. -      if ($ratio < $output_width / $output_height) { -        $end_width = $output_height * $ratio; -        $end_height = $output_height; -      } -      else { -        $end_height = $output_width / $ratio; -        $end_width = $output_width; -      } - -      // We need to get back to an even resolution and maybe compare with our defaults? -      // @TODO Make this more exact on actual video dimensions instead of making sure the wxh are even numbers - -      if ($end_width == $output_width) { -        // We need to pad the top/bottom of the video -        $padding = round($output_height - $end_height); -        $pad1 = $pad2 = floor($padding / 2); -        if ($pad1 %2 !== 0) { -          $pad1++; -          $pad2--; -        } -        $options[] = '-padtop '. $pad1; -        $options[] = '-padbottom '. $pad2; -      } -      else { -        // We are padding the left/right of the video. -        $padding = round($output_width - $end_width); -        $pad1 = $pad2 = floor($padding / 2);  //@todo does padding need to be an even number? -        if ($pad1 %2 !== 0) { -          $pad1++; -          $pad2--; -        } -        $options[] = '-padleft '. $pad1; -        $options[] = '-padright '. $pad2; -      } - -      $end_width = round($end_width) %2 !==0 ? round($end_width) + 1 : round($end_width); -      $end_height = round($end_height) %2 !==0 ? round($end_height) + 1 : round($end_height); -      //add our size to the beginning to make sure it hits our -s -      array_unshift($options, $end_width .'x'. $end_height); -      return implode(' ', $options); -    } -    else { -      return $video->dimensions; -    } -  } - -  /** -   * Load a file based on the file id ($fid) -   * -   * @param $fid -   *   Integer of the file id to be loaded. -   */ -  public function load_video($fid) { -    $result = db_query('SELECT f.*, vf.vid, vf.nid, vf.dimensions, vf.status as video_status FROM {video_files} vf LEFT JOIN {files} f ON vf.fid = f.fid WHERE f.fid=vf.fid AND f.fid = %d', $fid); -    return db_fetch_object($result); -  } - -  /** -   * Load a converted video based on the file id ($fid) -   * -   * @todo: Need to figure something out here for multiple files (HTML 5) -   * @param $fid -   *   Integer of the file id to be loaded. -   */ -  public function load_converted_video($fid) { -    $result = db_query('SELECT * FROM {video_files} WHERE fid = %d', $fid); -    return db_fetch_object($result); -  } - -  /** -   * Change the status of the file. -   * -   * @param (int) $vid -   * @param (int) $status -   */ -  public function change_status($vid, $status) { -    $result = db_query('UPDATE {video_files} SET status = %d WHERE vid = %d ', $status, $vid); -  } -} -?>
\ No newline at end of file  | 
