2012-05-18 7 views
0

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는 문제없이 표시 될 수 있습니다.

아이디어가 있으십니까?

환호 헨드릭

답변

0

는 좀 더 많은 연구를 수행하고 불행하게도 8 비트 그레이 스케일 소스가 지원되지 않습니다 그것은 매우 명확 것을 만드는 xvidcore 소스 코드를 들여다했습니다. vfw/src/codec.c의 get_colorspace() 함수는 RGB 및 YUV 모드 만 인식합니다.

소스를 연구하지는 않았지만 상황은 아마도 divx 코덱과 동일 할 것입니다.

답변은 다음과 같습니다. 다른 코덱을 선택하거나 컬러 비디오로 제한하십시오.