読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

動画データ解析ツールを作成する(5) - QuickTime SDKを使って動画ファイルのDimensionを取得する

C/C++ 画像処理

今まで紹介したQuickTime APIを使用して、動画ファイルのDimension(Videoの表示サイズ)を取得するためのサンプルコードは、下記のとおりになります。

出来る限りエラー処理を省いて、短く書いたつもりなのですが長くなってしまった・・・

#include <stdio.h>
#include <QTML.h>
#include <Movies.h>

int main(void)
{
  //! QuickTime Media Layerの初期化
  if (InitializeQTML(0L) != 0) return 1;

  //! Movie Toolboxの初期化
  if (EnterMovies() != 0) return 1;

  //! WindowsネイティブパスをFSSpecへ変換
  FSSpec fsspec;
  NativePathNameToFSSpec("c:\\060604_1600~01.3G2", &fsspec, 0L);

  //! 動画ファイルを開く
  short refNum;
  OpenMovieFile(&fsspec, &refNum, fsRdPerm);

  //! Movie作業領域を確保
  Movie theMovie;
  short movieRefId;
  NewMovieFromFile(&theMovie, refNum, &movieRefId, 0, newMovieActive, 0);
  if(theMovie != 0) {

    //! Movieのトラック数を取得
    int trackNum = GetMovieTrackCount(theMovie);
    
    //! ビデオトラックを取得
    Track videoTrack;
    for(int i=0; i<=trackNum; i++) {
    	videoTrack = GetMovieIndTrackType(theMovie, i, VideoMediaType, movieTrackMediaType);
    	if(videoTrack) break;
    }

    //! 表示サイズを取得
    Fixed width,height;
    GetTrackDimensions(videoTrack, &width, &height);

    printf("width:%d height:%d\n", FixRound(width), FixRound(height));

    //! Movie作業領域を解放
    DisposeMovie(theMovie);
  }

  //! 動画ファイルを閉じる
  CloseMovieFile(refNum);

  //! Movie Toolboxの終了処理
  ExitMovies();

  //! QuickTime Media Layerの終了処理
  TerminateQTML();

  return 0;
}