2
libavcodecを使用して、HBitmapをビデオストリームに変換したいと思います。 は、私が使用して私のHBITMAPを取得:ビットマップをビデオに保存する(libavcodec ffmpeg)
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC, nScreenWidth, nScreenHeight);
SelectObject(hCaptureDC,hCaptureBitmap);
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY);
をそして、私は(私が使用しているコーデックによって必要とされる)、YUVに変換したいと思います。そのために私は次のものを使用します:
SwsContext *fooContext = sws_getContext(c->width,c->height,PIX_FMT_BGR32, c->width,c->height,PIX_FMT_YUV420P,SWS_FAST_BILINEAR,NULL,NULL,NULL);
uint8_t *movie_dib_bits = reinterpret_cast<uint8_t *>(bm.bmBits) + bm.bmWidthBytes * (bm.bmHeight - 1);
int dibrowbytes = -bm.bmWidthBytes;
uint8_t* data_out[1];
int stride_out[1];
data_out[0] = movie_dib_bits;
stride_out[0] = dibrowbytes;
sws_scale(fooContext,data_out,stride_out,0,c->height,picture->data,picture->linesize);
しかし、これはまったく動作しません。なぜでしょうか?あるいは私はそれをどうやって変えることができますか?
ありがとうございました!