张源 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

Reply via email to