Skip to content
filefield_meta.module 3.68 KiB
Newer Older
 * @file
 * FileField Meta: Add Video Support to File Field.
/**
 * Implementation of hook_theme().
 */
function filefield_meta_theme() {
  return array(
    'filefield_meta_duration' => array(
      'arguments' => array('duration' => NULL),
    ),
    'filefield_meta_samplerate' => array(
      'arguments' => array('samplerate' => NULL),
    ),
    'filefield_meta_bitrate' => array(
      'arguments' => array('bitrate' => NULL),
    ),
/**
 * Implementation of hook_cron(). 
 */
function filefield_meta_cron() {
  $result = db_query('SELECT fm.fid FROM {filefield_meta} fm LEFT JOIN {files} f ON fm.fid=f.fid WHERE f.fid IS NULL');
  while ($file = db_fetch_object($result)) {
    db_query('DELETE FROM {filefield_meta} WHERE fid = %d', $file->fid);
  }
}

/**
 * Implementation of hook_views_api().
 */
function filefield_meta_views_api() {
  return array(
    'api' => 2.0,
    'path' => drupal_get_path('module', 'filefield_meta') . '/includes',
  );
}
/**
 * Implementation of filefield's hook_file_insert().
 */
  if (!empty($file->fid)) {
    filefield_meta($file);
    $record = array_merge(array('fid' => $file->fid), $file->data);
    drupal_write_record('filefield_meta', $record);
  }
/**
 * Implementation of filefield's hook_file_update().
 */
  if (!empty($file->fid)) {
    filefield_meta_file_delete($file);
    filefield_meta_file_insert($file);
  }
/**
 * Implementation of filefield's hook_file_delete().
 */
function filefield_meta_file_delete($file) {
  db_query('DELETE FROM {filefield_meta} WHERE fid = %d', $file->fid);
}
 * Adds the width, height and duration to the file's data property.
function filefield_meta(&$file) {
  $info = getid3_analyze($file->filepath);
  $file->data['width'] = $file->data['height'] = $file->data['duration'] = 0;
  if (isset($info['video']['resolution_x'])) {
    $file->data['width'] = $info['video']['resolution_x'];
    $file->data['height'] = $info['video']['resolution_y'];
Nate Lampton's avatar
Nate Lampton committed
  elseif (isset($info['video']['streams'])) {
    foreach ($info['video']['streams'] as $stream) {
      $file->data['width'] = max($file->data['width'], $stream['resolution_x']);
      $file->data['height'] = max($file->data['height'], $stream['resolution_y']);

  if (isset($info['playtime_seconds']))  {
    $file->data['duration'] = $info['playtime_seconds'];
  }

  // initialize fields. 
  $file->data['audio_format'] = $file->data['audio_channel_mode'] = $file->data['audio_bitrate_mode'] = '';
  $file->data['audio_sample_rate'] = $file->data['audio_bitrate'] = 0;
 
  if (isset($info['audio']))  { 
    $file->data['audio_format'] = $info['audio']['dataformat']; //e.g. mp3
    $file->data['audio_sample_rate'] = $info['audio']['sample_rate']; //e.g. 44100
    $file->data['audio_channel_mode'] = $info['audio']['channelmode']; // e.g. mono
    $file->data['audio_bitrate'] = $info['audio']['bitrate']; //e.g. 64000
    $file->data['audio_bitrate_mode'] = $info['audio']['bitrate_mode']; //e.g. cbr
  }
 * Convert the float duration into a pretty string.
 *
 * @param $duration
 */
function theme_filefield_meta_duration($duration) {
  $seconds = round((($duration / 60) - floor($duration / 60)) * 60);
  $minutes = floor($duration / 60);
  if ($seconds >= 60) {
    $seconds -= 60;
    $minutes++;
Nate Lampton's avatar
Nate Lampton committed
  return intval($minutes) . ':' . str_pad($seconds, 2, 0, STR_PAD_LEFT);

/**
 * Formats audio sample rate.
 */
function theme_filefield_meta_samplerate($samplerate) {
  return sprintf("%.1f kHz", $samplerate/1000);
}
 
/**
 * Formats audio bit rate.
 */
function theme_filefield_meta_bitrate($bitrate) {
  return sprintf("%d Kbps", $bitrate/1000);
}