张源 a écrit : > > > 2009/7/5 张源 <[email protected] <mailto:[email protected]>> > > > > 2009/7/5 Laurent Tarrisse <[email protected] > <mailto:[email protected]>> > > Are you using external or internal ffmpeg ? > > Laurent > > Laurent Tarrisse a écrit : > > 张源 a écrit : > > > >> 2009/7/4 Laurent Tarrisse <[email protected] > <mailto:[email protected]> <mailto:[email protected] > <mailto:[email protected]>>> > >> > >> Do you know what palettes are supported by your webcam ? > >> > >> Laurent > >> > >> 张源 a écrit : > >> > > >> > > >> > 2009/7/2 Laurent Tarrisse <[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] <mailto:[email protected]>> > <mailto:[email protected] <mailto:[email protected]> > >> <mailto:[email protected] <mailto:[email protected]>>>> > >> > > >> > Can you make a small test : > >> > > >> > nmake webcam-test-visu-c > >> > > >> > ... > >> > > >> > launch webcam-test-visu-c.exe > >> > > >> > Is it the same result ? > >> > > >> > Laurent > >> > > >> > 张源 a écrit : > >> > > > >> > > > >> > > 2009/7/1 Laurent Tarrisse <[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] <mailto:[email protected]>> > >> > <mailto:[email protected] <mailto:[email protected]> > <mailto:[email protected] <mailto:[email protected]>>> > >> <mailto:[email protected] <mailto:[email protected]> > <mailto:[email protected] <mailto:[email protected]>> > >> > <mailto:[email protected] <mailto:[email protected]> > <mailto:[email protected] <mailto:[email protected]>>>>> > >> > > > >> > > Laurent Tarrisse a écrit : > >> > > > 张源 a écrit : > >> > > > > >> > > >> I have built qutecom-2-2-3faed9597730(debug),with vs > 2005 on > >> > > windows > >> > > >> xp Chinese simplified but there are some problems with > >> > Qutecom when > >> > > >> making a webcam preview or a video call . > >> > > >> > >> > > >> The problems are as follows: when entering Video > settings ,then > >> > > click > >> > > >> Webcam Preview button ,after a while ,the Label on > the right > >> > > side just > >> > > >> shows a gray rectangle. The Video call is also just > shows a > >> gray > >> > > >> rectangle,and after a while it crashed . > >> > > >> Webcam Preview.png (/image/png/) 5K > >> > > >> > >> > > > >> > > >> > <?ui=2&ik=ab85a7e087&view=att&th=1223455e9356b51f&attid=0.1&disp=attd> > >> > > >> The piximage has been sucessfully catched by > WebcamDriver. > >> > > >> I found the problem may lie in this code section: > >> > > >> pixertool.cpp > >> > > >> > >> > > >> *...* > >> > > >> pixerrorcode* pix_convert*(int flags, piximage * > img_dst, > >> > > piximage * > >> > > >> img_src) { > >> > > >> *...* > >> > > >> if (*img_convert*(&avp_target, pix_fmt_target, > >> > > >> &avp_tmp_target, pix_fmt_source, > >> > > >> img_dst->width, img_dst->height) *== -1*) { > >> > > >> av_free(buf_tmp_target); > >> > > >> return PIX_NOK; > >> > > >> } > >> > > >> * ...* > >> > > >> } > >> > > >> > >> > > > Can you give me img_src->palette and img_src->dst ? > >> > > > > >> > > Oups, > >> > > > >> > > it is img_src->palette and img_dst->palette. > >> > > > >> > > Laurent > >> > > >> *...* > >> > > >> when calling * pix_convert*() ,the function > *img_convert()* > >> > allways > >> > > >> return -1 which means the image conversion fails. > >> > > >> > >> > > >> Has anyone face the same problem ,please help me > >> > > >> > >> > > >> > >> > > > >> > > >> > > ------------------------------------------------------------------------ > >> > > >> > >> > > >> > >> > > > >> > > >> > > ------------------------------------------------------------------------ > >> > > >> > >> > > >> _______________________________________________ > >> > > >> QuteCom-dev mailing list > >> > > >> [email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>> > >> > <mailto:[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>>> > >> > > <mailto:[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>> > >> > <mailto:[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>>>> > >> > > >> http://lists.qutecom.org/mailman/listinfo/qutecom-dev > >> > > >> > >> > > >> > >> > > > > >> > > > _______________________________________________ > >> > > > QuteCom-dev mailing list > >> > > > [email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>> > >> > <mailto:[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>>> > >> > <mailto:[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>> > >> > <mailto:[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>>>> > >> > > > http://lists.qutecom.org/mailman/listinfo/qutecom-dev > >> > > > > >> > > > >> > > _______________________________________________ > >> > > QuteCom-dev mailing list > >> > > [email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>> > >> > <mailto:[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>>> > >> > <mailto:[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>> > >> > <mailto:[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>>>> > >> > > http://lists.qutecom.org/mailman/listinfo/qutecom-dev > >> > > > >> > > > >> > > Thank you ! > >> > > the functions are called as follows:1――>2――>3 > >> > > *1 *void QtVideoSettings::frameCapturedEventHandler > >> (IWebcamDriver * > >> > > sender, piximage * image) {//重要函数 > >> > > > >> > > * ...* > >> > > QSize qs(_ui->webcamPreviewLabel->width(), > >> > > _ui->webcamPreviewLabel->height()); > >> > > QImage tmpRgbImage(qs, QImage::Format_RGB32); > >> > > *QtVideoQt::convertPixImageToQImage(image, qs, > &tmpRgbImage);* > >> > > QPixmap tmp = QPixmap::fromImage(tmpRgbImage); > >> > > * ...* > >> > > > >> > > } > >> > > *2 * void QtVideoQt::convertPixImageToQImage(piximage* > pixImage, > >> > const > >> > > QSize& size, QImage* image) { > >> > > * ...* > >> > > piximage resizedPixImage; > >> > > resizedPixImage.palette = PIX_OSI_RGB32; > >> > > resizedPixImage.width = image->width(); > >> > > resizedPixImage.height = image->height(); > >> > > resizedPixImage.data = image->bits(); > >> > > > >> > > * pix_convert(PIX_NO_FLAG, &resizedPixImage, pixImage); > >> > > * //测试// > >> > > } > >> > > > >> > > * so the img_dst->palette == PIX_OSI_RGB32 > img_src->palette == > >> > > PIX_OSI_YUV420P* > >> > > *3* pixerrorcode pix_convert(int flags, piximage * img_dst, > >> > piximage * > >> > > img_src) { > >> > > > >> > > * ...* > >> > > enum PixelFormat pix_fmt_source > >> > > =(PixelFormat)pix_ffmpeg_from_pix_osi(img_src->palette); > >> > > enum PixelFormat pix_fmt_target = > >> > > (PixelFormat)pix_ffmpeg_from_pix_osi(img_dst->palette); > >> > > > >> > > > >> > > *...* > >> > > > >> > > > >> > > #ifndef HAVE_SWSCALE > >> > > //TODO optimize this part but will need the preparation of > >> contexts > >> > > ImgReSampleContext * resample_context = > >> > > img_resample_init(img_dst->width, img_dst->height, > >> > > img_src->width, img_src->height); > >> > > > >> > > if (!resample_context) { > >> > > return PIX_NOK; > >> > > } > >> > > > >> > > AVPicture avp_tmp_target; > >> > > > >> > > //we need to prepare a tmp buffer > >> > > uint8_t * buf_tmp_target = (uint8_t > >> > > *)av_malloc(avpicture_get_size(pix_fmt_source, > img_dst->width, > >> > > img_dst->height) * sizeof(uint8_t)); > >> > > avpicture_fill(&avp_tmp_target, buf_tmp_target, > pix_fmt_source, > >> > > img_dst->width, img_dst->height); > >> > > // > >> > > > >> > > //do the resampling > >> > > img_resample(resample_context, &avp_tmp_target, > &avp_source); > >> > > img_resample_close(resample_context); > >> > > // > >> > > > >> > > //do the conversion > >> > > if (*img_convert*(&avp_target, pix_fmt_target, > >> > > &avp_tmp_target, pix_fmt_source, > >> > > img_dst->width, img_dst->height) == -1) { > >> > > av_free(buf_tmp_target); > >> > > return PIX_NOK;//转换没有成功 > >> > > } > >> > > * ...* > >> > > } > >> > > *img_dst->palette : PIX_OSI_RGB32* > >> > > * img_src->palette : PIX_OSI_YUV420P* > >> > > pix_fmt_target : *PIX_FMT_BGR32* > >> > > pix_fmt_source : *PIX_FMT_YUV420P* > >> > > img_convert()is a function in ffmpeg library,so the > problems > >> > might be > >> > > in parameters passed into it .It involves encoding and > decoding > >> > which > >> > > I totally don't know how to deal with . > >> > > Thanks again ! > >> > > > >> > > > >> > > >> > _______________________________________________ > >> > QuteCom-dev mailing list > >> > [email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>> > >> <mailto:[email protected] > <mailto:[email protected]> > >> <mailto:[email protected] > <mailto:[email protected]>>> > >> > http://lists.qutecom.org/mailman/listinfo/qutecom-dev > >> > > >> > > >> > > >> > Thank you Laurent > >> > I have made a small test with webcam-test-visu-c.exe. the > >> results are > >> > as follows: > >> > * <error>15:32:03 [Common] > DirectXWebcamDriver::setCaps:failed caps > >> > request:(19,15,320,240) > >> > > >> > Using width:320 ,height:240 FPS:15 > >> > **Starting capture... > >> > I am called!! > >> > frame _captured > >> > ..... > >> > > >> > * > >> > * * > >> > setCaps error.png (/image/png/) 7K > >> > > >> > <?ui=2&ik=ab85a7e087&view=att&th=1223a64d4bdb3ee5&attid=0.2&disp=attd> > >> > webcam widget.png (/image/png/) 5K > >> > > >> > <?ui=2&ik=ab85a7e087&view=att&th=1223a64d4bdb3ee5&attid=0.1&disp=attd> > >> > The picture still coulid not show on the webcam widget > >> > The execution results show below: > >> > > >> > DirectXWebcamDriver .cpp > >> > * ...* > >> > ** > >> > WebcamErrorCode DirectXWebcamDriver::setDevice(const > std::string & > >> > deviceName) { > >> > > >> > //TODO: test if a webcam is already open > >> > //TODO: refactor the COM initialization phase to avoid > >> > //multiple initalisations and better handle unitialization > >> > //cf trac ticket #1008 > >> > // We really need to refactor that point > >> > // I leave this line here just because the phapi thread > >> > // must call this function (one time). We must move this > >> elsewhere ... > >> > CoInitialize(NULL); > >> > //// > >> > _pGraph.CoCreateInstance(CLSID_FilterGraph); > >> > if (!_pGraph) { > >> > LOG_ERROR("failed to create Graph builder"); > >> > return WEBCAM_NOK; > >> > } > >> > _pBuild.CoCreateInstance(CLSID_CaptureGraphBuilder2); > >> > if (!_pBuild) { > >> > LOG_ERROR("failed to create Capture Graph builder"); > >> > return WEBCAM_NOK; > >> > } > >> > _pBuild->SetFiltergraph(_pGraph); > >> > //Create the Sample Grabber > >> > HRESULT hr = CoCreateInstance(CLSID_SampleGrabber, NULL, > >> > CLSCTX_INPROC_SERVER, IID_IBaseFilter, > (void**)&(_pGrabberF)); > >> > if (hr != S_OK) { > >> > LOG_ERROR("failed to create COM instance"); > >> > return WEBCAM_NOK; > >> > } > >> > //Add the filter to the graph > >> > hr = (_pGraph)->AddFilter(_pGrabberF, L"Sample Grabber"); > >> > if (hr != S_OK) { > >> > LOG_ERROR("failed to add filter"); > >> > return WEBCAM_NOK; > >> > } > >> > //Query the Sample Grabber for the ISampleGrabber interface. > >> > _pGrabberF->QueryInterface(IID_ISampleGrabber, > (void**)&_pGrabber); > >> > hr = _pGrabber->SetBufferSamples(FALSE); > >> > hr = _pGrabber->SetOneShot(FALSE); > >> > //Set the Sample Grabber callback > >> > //0: SampleCB (the buffer is the original buffer, not a copy) > >> > //1: BufferCB (the buffer is a copy of the original buffer) > >> > if (_pGrabber->SetCallback(this, 0) != S_OK) { > >> > LOG_ERROR("failed to assign callback"); > >> > return WEBCAM_NOK; > >> > } > >> > CComBSTR bstrName(deviceName.c_str()); > >> > hr = FindMyCaptureDevice(&_pCap, bstrName); > >> > if ((hr != S_OK) || !_pCap) { > >> > return WEBCAM_NOK; > >> > } > >> > //initialize IAMStreamConfig > >> > _iam = GetIAMStreamConfig(_pCap); > >> > if (!_iam) { > >> > return WEBCAM_NOK; > >> > } > >> > //add the capture filter to the graph > >> > hr = (_pGraph)->AddFilter(_pCap, L""); > >> > if (hr != S_OK) { > >> > LOG_ERROR("failed to add filter"); > >> > return WEBCAM_NOK; > >> > } > >> > //Add a null renderer filter > >> > hr = CoCreateInstance(CLSID_NullRenderer, NULL, > >> > CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&_pNull); > >> > hr = (_pGraph)->AddFilter(_pNull, L"NullRender"); > >> > _pBuild->RenderStream(&PIN_CATEGORY_CAPTURE, NULL, _pCap, > NULL, > >> > _pGrabberF); > >> > //try to assign some palette until the webcam supports it > >> > if (*setCaps*(PIX_OSI_YUV420P, _cachedFPS, 176, 144) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_YUV420P, _cachedFPS, 160, 120) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_I420, _cachedFPS, 176, 144) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_I420, _cachedFPS, 160, 120) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_RGB32, _cachedFPS, 176, 144) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_RGB32, _cachedFPS, 160, 120) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_RGB24, _cachedFPS, 176, 144) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_RGB24, _cachedFPS, 160, 120) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_YUV422, _cachedFPS, 176, 144) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_YUV422, _cachedFPS, 160, 120) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_RGB565, _cachedFPS, 176, 144) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_RGB565, _cachedFPS, 160, 120) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_RGB555, _cachedFPS, 176, 144) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_RGB555, _cachedFPS, 160, 120) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_YUY2, _cachedFPS, 176, 144) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_YUY2, _cachedFPS, 160, 120) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_UYVY, _cachedFPS, 176, 144) != > WEBCAM_OK) { > >> > if (*setCaps*(PIX_OSI_UYVY, _cachedFPS, 160, 120) != > WEBCAM_OK) { > >> > }}}}}}}}}}}}}}}}}} > >> > ** > >> > *all of the 18 "if(setCaps(...)!=WEBCAM_OK)" above are > executed > >> > .That's to say all the 18 " setCaps() " return WEBCAM_NOK;* > >> > ** > >> > ** > >> > *readCaps();* > >> > if (getPalette() == PIX_OSI_UNSUPPORTED) { > >> > return WEBCAM_NOK; > >> > } > >> > _isOpen = true; > >> > return WEBCAM_OK; > >> > > >> > } > >> > WebcamErrorCode DirectXWebcamDriver::setCaps(pixosi palette, > >> unsigned > >> > fps, unsigned resolutionWidth, unsigned resolutionHeight) { > >> > _cachedFPS = fps; > >> > > >> > if (!isOpen()) { > >> > return WEBCAM_NOK; > >> > } > >> > > >> > if (!_pCap) { > >> > LOG_FATAL("webcam not initialized"); > >> > } > >> > if (!_iam) { > >> > LOG_FATAL("webcam not initialized"); > >> > } > >> > > >> > int iCount, iSize; > >> > HRESULT hr = _iam->GetNumberOfCapabilities(&iCount, &iSize); > >> > > >> > VIDEO_STREAM_CONFIG_CAPS scc; > >> > if (sizeof(scc) != iSize) { > >> > LOG_ERROR("wrong config structure"); > >> > return WEBCAM_NOK; > >> > } > >> > > >> > for (int i = 0; i < iCount; i++) { > >> > AM_MEDIA_TYPE * pmt = NULL; > >> > hr = _iam->GetStreamCaps(i, &pmt, reinterpret_cast<BYTE > *>(&scc)); > >> > if (hr == S_OK) { > >> > pixosi wc_palette = pix_directx_to_pix_osi(pmt->subtype); > >> > if (wc_palette != palette) { > >> > hr = E_FAIL; > >> > continue; > >> > } > >> > VIDEOINFOHEADER * pvi = (VIDEOINFOHEADER *) pmt->pbFormat; > >> > pvi->bmiHeader.biWidth = resolutionWidth; > >> > pvi->bmiHeader.biHeight = resolutionHeight; > >> > pvi->AvgTimePerFrame = (LONGLONG) (10000000. / (double)fps); > >> > hr = _iam->SetFormat(pmt); > >> > if (hr != S_OK) { > >> > hr = E_FAIL; > >> > continue; > >> > } else { > >> > LOG_DEBUG("assigned caps : (" > >> > + String::fromNumber(palette) > >> > + "," + String::fromNumber(fps) > >> > + "," + String::fromNumber(resolutionWidth) > >> > + "," + String::fromNumber(resolutionHeight) > >> > + ")"); > >> > break; > >> > } > >> > } > >> > } > >> > > >> > readCaps(); > >> > > >> > if (hr == S_OK) { > >> > return WEBCAM_OK; > >> > } > >> > > >> > *LOG_ERROR("failed caps request: (" > >> > + String::fromNumber(palette) > >> > + "," + String::fromNumber(fps) > >> > + "," + String::fromNumber(resolutionWidth) > >> > + "," + String::fromNumber(resolutionHeight) > >> > + ")");* > >> > > >> > *error occured , I am trying to figure out which function > >> > (DirectXWebcamDriver::setResolution() or > >> > DirectXWebcamDriver::setPalette() or others)calling setCaps() > >> results > >> > in this error * > >> > > >> > > >> > return WEBCAM_NOK; > >> > } > >> > void DirectXWebcamDriver::*readCaps*() { > >> > > >> > VIDEOINFOHEADER * pvi; > >> > pixosi palette; > >> > AM_MEDIA_TYPE * pmt = NULL; > >> > HRESULT hr = _iam->GetFormat(&pmt); > >> > if (pmt->formattype == FORMAT_VideoInfo) { > >> > pvi = (VIDEOINFOHEADER *) pmt->pbFormat; > >> > palette = pix_directx_to_pix_osi(pmt->subtype); > >> > } > >> > _cachedPalette = palette; > >> > _cachedWidth = pvi->bmiHeader.biWidth; > >> > _cachedHeight = pvi->bmiHeader.biHeight; > >> > > >> > > >> > } > >> > > >> > > >> > > >> > > ------------------------------------------------------------------------ > >> > > >> > > >> > > >> > > ------------------------------------------------------------------------ > >> > > >> > >> _______________________________________________ > >> QuteCom-dev mailing list > >> [email protected] > <mailto:[email protected]> > <mailto:[email protected] > <mailto:[email protected]>> > >> http://lists.qutecom.org/mailman/listinfo/qutecom-dev > >> > >> > >> > >> > >> > >> Thank you very much > >> > >> > >> /********************************** > >> webcam/DirectXWebcamDriver.cpp******************************/ > >> > >> WebcamErrorCode DirectXWebcamDriver::setCaps(pixosi > palette, unsigned > >> fps, unsigned resolutionWidth, unsigned resolutionHeight) { > >> * ...* > >> if (sizeof(scc) != iSize) { > >> LOG_ERROR("wrong config structure"); > >> return WEBCAM_NOK; > >> } > >> > >> for (int i = 0; i < iCount; i++) { > >> AM_MEDIA_TYPE * pmt = NULL; > >> hr = _iam->GetStreamCaps(i, *&pmt*, reinterpret_cast<BYTE > >> *>(&scc));//i 为 6 时 > >> if (hr == S_OK) { > >> pixosi wc_palette =* pix_directx_to_pix_osi*(pmt->subtype); > >> if (wc_palette != palette) { > >> hr = E_FAIL; > >> continue; > >> } > >> ... > >> } > >> > >> > >> > > /**********************************pixertool/directx-pixertool.h***************************************/ > >> > >> pixosi *pix_directx_to_pix_os**i*(GUID *pix*) { > >> register unsigned i; > >> pixosi palette = PIX_OSI_UNSUPPORTED; > >> > >> for (i = 0; i < sizeof(_ms_table) / sizeof(pixms_pixosi); > i++) { > >> if (memcmp(&_ms_table[i].pix_ms, &pix, sizeof(GUID)) == 0) { > >> palette = _ms_table[i].pix_osi; > >> break; > >> } > >> } > >> return *palette*; > >> } > >> > >> > >> I have debug the *pix_directx_to_pix_osi*(GUID pix) many > times,and > >> found my > >> webcam only supports the following two palettes : > >> *1,{ MEDIASUBTYPE_RGB24, PIX_OSI_RGB24 }* > >> ( *21* in enum pixosi) > >> *2,{ OUR_MEDIASUBTYPE_I420, PIX_OSI_YUV420P }* > >> ( *0 * in enum* *pixosi) > >> > >> This can be used to expalain the error : > >> > >>> I have made a small test with webcam-test-visu-c.exe. the > results are > >>> as follows: > >>> * <error>15:32:03 [Common] DirectXWebcamDriver::setCaps: > >>> > >> failed caps > >> > >>> request:(*19*,15,320,240) > >>> > >> My webcam* does't support { MEDIASUBTYPE_RGB32, > PIX_OSI_RGB32 }* > >> (*19* in enum pixosi) > >> *,resulting image conversion failure:* > >> > >> > >> void QtVideoQt::convertPixImageToQImage(piximage* pixImage, > const > >> QSize& size, QImage* image) { > >> Q_ASSERT(image); > >> > >> if (image->size() != size || image->format() !=* > QImage::Format_RGB32*) { > >> *image = QImage(size, QImage::*Format_RGB32*); > >> } > >> > >> > >> resizedPixImage.palette = *PIX_OSI_RGB32*; //* error!, my > webcam > >> dosen't support * > >> > > Ok you're webcam doesn't support PIX_OSI_RGB32* > > *But here you're webcam is not engaged : > > I mean, convertPixImageToQImage will convert pixImage to > QImage without > > access to webcam driver ... > > If you're pixImage format is not PIX_OSI_RGB32 it will be > converted with > > ffmpeg* > > * > > > >> resizedPixImage.width = image->width(); > >> resizedPixImage.height = image->height(); > >> resizedPixImage.data = image->bits(); > >> > >> *pix_convert*(PIX_NO_FLAG, &resizedPixImage, pixImage); > >> //测试// > >> > >> > >> } > >> pixertool.cpp > >> > >> * ...* > >> pixerrorcode* pix_convert*(int flags, piximage * img_dst, > piximage * > >> img_src) { > >> *...* > >> if (*img_convert*(&avp_target, pix_fmt_target, > >> &avp_tmp_target, pix_fmt_source, > >> img_dst->width, img_dst->height) *== -1*) { > >> av_free(buf_tmp_target); > >> return PIX_NOK; // *img _convert () failure*, *always > return PIX_NOK* > >> } > >> * ...* > >> } > >> * ...* > >> > >> > >> > >> > >> > >> > >> I have just changed "resizedPixImage.palette = > PIX_OSI_RGB*32" * to* > >> *resizedPixImage.palette = PIX_OSI_RGB*24 > >> and now ,the video can show on the Label widget ,However, > the picture > >> showed on the label is not clear and overlapped *Webcam > Preview.png > >> (/image/png/) 39K > >> > > <http://?ui=2&ik=ab85a7e087&view=att&th=122461d06b4f0e4c&attid=0.1&disp=attd> > >> > >> > >> Clearly ,the problem resulted from the following conflicts > :GUI shows > >> QImage(size, QImage::*Format_RGB32*) while the converted > picture is > >> RGB*24*, it conflicts .My Qt library version is 4.3.2,amd > Qt don't > >> support QImage::Format_RGB888 until version 4.4 > >> > > I think there is something wrong with format value of > piximage in > > convertPixImageToQImage() > > Can you verify that pixImage->palette in > convertPixImageToQImage() is > > equal to PIX_OSI_RGB24 ?* > > * > > > >> what makes me puzzled is that: I have downloaded Qutecom > release > >> version on my computer ,installed it ,and the Qutecom > workeds well, > >> the video workes well,everything is ok.but when i compiled > the source > >> code ,the debug version faced the problem mentioned previously. > >> > >> It makes me puzzled . My webcam dosen't support *PIX_OSI_RGB32: > >> * > >> * Is it due to my DirectX library or windows server > platform SDK?* > >> * > >> Does QImage::Format_RGB888 equal to RGB24? if true, I would > rather > >> compile a higher Qt version to make Qt support > QImage::Format_ RGB24 > >> Would you please give me some other guidance *, *thanks > again! * > >> > >> > >> > >> > >> > > ------------------------------------------------------------------------ > >> > >> > > > > _______________________________________________ > > QuteCom-dev mailing list > > [email protected] > <mailto:[email protected]> > > http://lists.qutecom.org/mailman/listinfo/qutecom-dev > > > > _______________________________________________ > QuteCom-dev mailing list > [email protected] > <mailto:[email protected]> > http://lists.qutecom.org/mailman/listinfo/qutecom-dev > > > > I think "convertPixImageToQImage will convert pixImage to QImage > without > access to webcam driver ..." is true ,but i have no other > explanations > i use ffmpeg in qutecom project > > > What is the difference between external or internal ffmpeg ?I don't > know this concept .I din't change any thing with ffmpeg in qutecom > project > If you have changed nothing : you are using internal ffmpeg. I'm preparing a patch for you it will ready in few minutes ...
Laurent _______________________________________________ QuteCom-dev mailing list [email protected] http://lists.qutecom.org/mailman/listinfo/qutecom-dev
