Changeset 4363

Show
Ignore:
Timestamp:
01/24/09 10:44:20 (5 years ago)
Author:
douglask
Message:

Corrected invocation of YUV conversion routines.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • vic/branches/mpeg4/video/grabber-win32DS.cpp

    r4360 r4363  
    589589   debug_msg("DirectShowGrabber::setsize: %dx%d\n", width_, height_); 
    590590 
    591    set_size_cif(width_, height_); 
     591   switch (cformat_) { 
     592       case CF_CIF: 
     593           set_size_cif(width_, height_); 
     594           break; 
     595       case CF_420: 
     596           set_size_420(width_, height_); 
     597           break; 
     598       case CF_422: 
     599           set_size_cif(width_, height_); 
     600           break; 
     601   } 
     602 
    592603   allocref(); 
    593604} 
     
    625636       packedUYVY422_to_planarYUYV420((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_); 
    626637     else if (have_YUY2_) 
    627        planarYUYV422_to_planarYUYV420((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_); 
     638       packedYUYV422_to_planarYUYV420((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_); 
    628639     break; 
    629640 
     
    634645       packedUYVY422_to_planarYUYV422((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_); 
    635646     else if (have_YUY2_) 
    636        planarYUYV420_to_planarYUYV422((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_); 
     647       packedYUYV422_to_planarYUYV422((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_); 
    637648     break; 
    638649   } 
     
    802813   // The alternative output of iSize is AUDIO_STREAM_CONFIG_CAPS, btw. 
    803814   if ( iSize == sizeof(VIDEO_STREAM_CONFIG_CAPS) ) { 
    804  
     815      GUID mediasubtype = MEDIASUBTYPE_NULL; 
     816 
     817      switch (cformat_) { 
     818      case CF_420: 
     819      case CF_CIF: 
     820          if (have_I420_) 
     821              mediasubtype = MEDIASUBTYPE_I420; // Planar YUV 420 
     822          else if (have_UYVY_) 
     823              mediasubtype = MEDIASUBTYPE_UYVY; // Packed YUV 420 
     824          else if (have_YUY2_) 
     825              mediasubtype = MEDIASUBTYPE_YUY2; // Packed YUV 420 
     826        break; 
     827 
     828      case CF_422: 
     829          if (have_I420_) 
     830              mediasubtype = MEDIASUBTYPE_I420; // Planar YUV 420 
     831          else if (have_UYVY_) 
     832              mediasubtype = MEDIASUBTYPE_UYVY; // Packed YUV 420 
     833          else if (have_YUY2_) 
     834              mediasubtype = MEDIASUBTYPE_YUY2; // Packed YUV 420 
     835          break; 
     836      } 
    805837      for (int iFormat = 0; iFormat < iCount; iFormat++) { 
    806838         hr = pConfig->GetStreamCaps(iFormat, &pmtConfig, (BYTE *)&scc); 
     
    809841         if( SUCCEEDED(hr) ) { 
    810842            if ((pmtConfig->majortype  == MEDIATYPE_Video)            && 
    811                   //(pmtConfig->subtype    == MEDIASUBTYPE_RGB24)       && 
    812                   (pmtConfig->subtype    == MEDIASUBTYPE_I420)       && 
     843                  (pmtConfig->subtype == mediasubtype || mediasubtype == MEDIASUBTYPE_NULL) && 
    813844                  (pmtConfig->formattype == FORMAT_VideoInfo)         && 
    814845                  (pmtConfig->cbFormat   >= sizeof (VIDEOINFOHEADER)) &&