What is the result with this patch ?
Laurent
Laurent Tarrisse a écrit :
> 张源 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
>
diff -r 88ae1e6d0e25 libs/pixertool/src/ffmpeg/ffmpeg-pixertool.c
--- a/libs/pixertool/src/ffmpeg/ffmpeg-pixertool.c Sat May 16 03:50:06
2009 +0200
+++ b/libs/pixertool/src/ffmpeg/ffmpeg-pixertool.c Sun Jul 05 08:31:51
2009 +0200
@@ -53,7 +53,7 @@
case PIX_FMT_RGB565:
palette = PIX_OSI_RGB565;
break;
- case PIX_FMT_RGBA:
+ case PIX_FMT_RGBA32:
palette = PIX_OSI_RGBA32;
break;
case PIX_FMT_YUV420P:
@@ -62,7 +62,7 @@
case PIX_FMT_YUV422P:
palette = PIX_OSI_YUV422P;
break;
- case PIX_FMT_YUYV422:
+ case PIX_FMT_YUV422:
palette = PIX_OSI_YUY2;
break;
case PIX_FMT_YUV444P:
@@ -98,7 +98,7 @@
case PIX_OSI_ARGB32:
case PIX_OSI_RGB32:
case PIX_OSI_RGBA32:
- palette = PIX_FMT_RGBA;
+ palette = PIX_FMT_RGBA32;
break;
case PIX_OSI_YUV420P:
palette = PIX_FMT_YUV420P;
@@ -112,7 +112,7 @@
case PIX_OSI_YUV422:
case PIX_OSI_YUYV:
case PIX_OSI_YUY2:
- palette = PIX_FMT_YUYV422;
+ palette = PIX_FMT_YUV422;
break;
/* DOES not compile on MacOS X with current version of fink/ffmpeg (11/9/2006)
case PIX_OSI_UYVY:
_______________________________________________
QuteCom-dev mailing list
[email protected]
http://lists.qutecom.org/mailman/listinfo/qutecom-dev