VFW (Video for Windows)를 사용하여 라이브 카메라 이미지의 XVID 동영상을 기록하는 응용 프로그램을 작성했습니다. 카메라가 컬러로 설정되어 있으면 제대로 작동합니다. 내가 & w 모드 (즉, 8 비트 그레이 스케일)로 전환하면 AVIStreamSetFormat 함수는 AVIERR_BADFORMAT를 반환합니다. 내 코드에서vfw를 통한 XVID 코덱 : 그레이 스케일 8 비트 비디오 생성 실패
발췌 :
BITMAPINFO *bmi = image->bitmapInfo();
AVISTREAMINFO info;
::ZeroMemory(&info,sizeof(AVISTREAMINFO));
info.fccType = streamtypeVIDEO;
info.dwScale = 1000;
info.dwRate = int(framesPerSecond * 1000);
info.dwSuggestedBufferSize = image->bufferSize();
SetRect(&info.rcFrame, 0, 0, image->width(), image->height());
AVICOMPRESSOPTIONS options;
::ZeroMemory(&options, sizeof(options))
options.fccType = streamtypeVIDEO;
options.fccHandler = mmioFOURCC('X','V','I','D');
options.dwFlags = AVICOMPRESSF_VALID | AVICOMPRESSF_KEYFRAMES;
info.fccHandler = options.fccHandler;
AVIFileCreateStream(pfile, &pavi, &info);
options.dwKeyFrameEvery = 1;
options.dwQuality = -1;
options.dwInterleaveEvery = 0;
HRESULT result = AVIMakeCompressedStream(&pcompressed, pavi, &options, NULL);
size_t bmisize = bmi->bmiHeader.biSize + bmi->bmiHeader.biClrUsed*sizeof(RGBQUAD);
result = AVIStreamSetFormat(pcompressed, 0, &bmi->bmiHeader, bmisize);
위에서 언급 한 바와 같이,이 코드는 8 비트 인덱스 DIB의 24 비트 DIB의 작동,하지만. 8 비트 DIB는 문제없이 표시 될 수 있습니다.
아이디어가 있으십니까?
환호 헨드릭