Probleme mit Video for Windows
-
heyho,
ich habe bei www.codeproject.com an sich genau das, was ich suche, gefunden: eine wrapper-klasse für video for windows, die mir Bildern bzw hBitmaps ein Video erstellen.
Leider habe ich damit ein Problem, und zwar wenn ich andere codecs als das in der Klasse standardmäßig eingebundene Mpeg4 nutzen möchte.
Der oberste Kommentar ist übrigens von mir.
Es geht kokret um das oben downloadbare Projekt CAviFile.zipIn deren Wrapper-Klasse wird der zu verwendende Codec mittels:
m_AviStreamInfo.fccHandler=mmioFOURCC('M','P','G','4');
gesetzt (in der Methode
HRESULT CAviFile::AppendFrameFirstTime(HBITMAP hBitmap))fccHandler ist vom Typ DWORD.
Ich liste mir jetzt in meinem Projekt alle auf dem System vorhandenen Codecs auf:
vector<DWORD> vecFccHandlers; ICINFO icinfo; HIC__ *hic; for (int i=0; ICInfo(ICTYPE_VIDEO, i, &icinfo); i++) { hic = ICOpen(icinfo.fccType, icinfo.fccHandler, ICMODE_QUERY); if (hic) { // DWORD fccHandler einlesen und in vector speichern: ICGetInfo(hic, &icinfo, sizeof(ICINFO)); vecFccHandlers.push_back(icinfo.fccHandler); } }
damit habe ich alle installierten Codecs in meinem Vector.
Ich habe eine Combobox, und wähle damit einen Index aus, und setze dann in der CAviFile-Instanz den fccHandler damit. Soweit so gut, was ich da gemacht hab klappt auch, aber die Wrapper-Klasse scheitert dann bei den meisten Codecs in der Methode "AppendFirstFrame" an der Stelle, an der die Parameter (also auch das codec) gesetzt werden:if(FAILED(AVIStreamSetFormat(m_pAviCompressedStream,0,(LPVOID)&bmpInfo,bmpInfo.bmiHeader.biSize))) { //MessageBox(NULL,"Unable to Set Format","Error",MB_OK); goto TerminateInit; }
Es funktioniert aber mit einigen Codecs normal. Z.B. dem MPG4 Codec, oder dem Microsoft YUV Codec.
Was läuft denn da falsch?
Ums noch mal zu verdeutlichen: an meinem eingebauten Code ist nichts falsch, das ist nicht die Frage, der tut nichts anderes als einen anderen codec in der Wrapperklasse zu setzen. Der Fehler muss also in der Wrapperklasse liegen!