ARDeskTop上で動画再生

OpenCVの動画再生関数cvCaptureFromFileを使用してARDeskTop上で動画を再生してみた。とは言え、dandelion氏の協力なくしてはすんなりコーディングはできなかったであろう(本当にありがとうございます)。
CAnimeManagerクラスから動画再生用にCCVVideoManagerクラスを派生させて処理する。同期を取るために何フレームかは飛ばしたり、何もしなかったりする。
OpenCVのみなのでまだ音は出ない。


int CCVVideoManager::Animate(void)
{
	if(!capture) return(1);
	if(!CAnimeManager::Animate()) return(1);
	if(elapsedTimeMS * fps < counter) return(1);

	IplImage* image;
	int n = elapsedTimeMS * fps - counter + 1;

	for(int i = 0; i < n; i++) {
		image = cvQueryFrame(capture);
		if(!image) {
			Stop();
			return(0);
		}
	}

	counter += n;

	if(!frame) frame = cvCreateImage(cvSize(image->width / 3, image->height / 3), IPL_DEPTH_8U, 3);
	cvResize(image, frame, CV_INTER_CUBIC);
	((CCVPicture*) component)->SetTexture(image);

	return(0);
}


bool CCVVideoManager::OpenVideoFile(wchar_t* pFileName, double size)
{
	char cFileName[256];

	setlocale(LC_ALL, "ja");
	wcstombs(cFileName, pFileName, 256);

	capture = cvCaptureFromFile(cFileName);
	if(!capture) {
		return(false);
	}

	fps = (float) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);

	animetionTimeMS	= 1000.0f;
	Play();
	Animate();

	return(true);
}

ただOpenVideoFile関数内でPlayとAnimate関数入れておかないとうまく実行できない。