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関数入れておかないとうまく実行できない。