Are you using external or internal ffmpeg ?

Laurent

Laurent Tarrisse a écrit :
> 张源 a écrit :
>   
>> 2009/7/4 Laurent Tarrisse <laur...@mbdsys.com <mailto:laur...@mbdsys.com>>
>>
>>     Do you know what palettes are supported by your webcam ?
>>
>>     Laurent
>>
>>     张源 a écrit :
>>     >
>>     >
>>     > 2009/7/2 Laurent Tarrisse <laur...@mbdsys.com
>>     <mailto:laur...@mbdsys.com> <mailto:laur...@mbdsys.com
>>     <mailto:laur...@mbdsys.com>>>
>>     >
>>     > 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 <laur...@mbdsys.com
>>     <mailto:laur...@mbdsys.com>
>>     > <mailto:laur...@mbdsys.com <mailto:laur...@mbdsys.com>>
>>     <mailto:laur...@mbdsys.com <mailto:laur...@mbdsys.com>
>>     > <mailto:laur...@mbdsys.com <mailto:laur...@mbdsys.com>>>>
>>     > >
>>     > > 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
>>     > > >> QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>
>>     > <mailto:QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>>
>>     > > <mailto:QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>
>>     > <mailto:QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>>>
>>     > > >> http://lists.qutecom.org/mailman/listinfo/qutecom-dev
>>     > > >>
>>     > > >>
>>     > > >
>>     > > > _______________________________________________
>>     > > > QuteCom-dev mailing list
>>     > > > QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>
>>     > <mailto:QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>>
>>     > <mailto:QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>
>>     > <mailto:QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>>>
>>     > > > http://lists.qutecom.org/mailman/listinfo/qutecom-dev
>>     > > >
>>     > >
>>     > > _______________________________________________
>>     > > QuteCom-dev mailing list
>>     > > QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>
>>     > <mailto:QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>>
>>     > <mailto:QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>
>>     > <mailto:QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>>>
>>     > > 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
>>     > QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>
>>     <mailto:QuteCom-dev@lists.qutecom.org
>>     <mailto:QuteCom-dev@lists.qutecom.org>>
>>     > 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
>>     QuteCom-dev@lists.qutecom.org <mailto:QuteCom-dev@lists.qutecom.org>
>>     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
> QuteCom-dev@lists.qutecom.org
> http://lists.qutecom.org/mailman/listinfo/qutecom-dev
>   

_______________________________________________
QuteCom-dev mailing list
QuteCom-dev@lists.qutecom.org
http://lists.qutecom.org/mailman/listinfo/qutecom-dev

Reply via email to