[svn] / branches / dev-api-3 / dshow / src / CXvidDecoder.cpp Repository:
ViewVC logotype

Diff of /branches/dev-api-3/dshow/src/CXvidDecoder.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 392, Wed Sep 4 18:44:41 2002 UTC revision 632, Thu Nov 7 10:34:14 2002 UTC
# Line 290  Line 290 
290    
291  /* get list of supported output colorspaces */  /* get list of supported output colorspaces */
292    
293    #define ENABLE_IYUV
294    #define ENABLE_YV12
295    #define ENABLE_YUY2
296    #define ENABLE_UYVY
297    #define ENABLE_YVYU
298    #define ENABLE_RGB32
299    #define ENABLE_RGB24
300    #define ENABLE_RGB565
301    #define ENABLE_RGB555
302    
303  HRESULT CXvidDecoder::GetMediaType(int iPosition, CMediaType *mtOut)  HRESULT CXvidDecoder::GetMediaType(int iPosition, CMediaType *mtOut)
304  {  {
305          DEBUG("GetMediaType");          DEBUG("GetMediaType");
# Line 319  Line 329 
329          switch(iPosition)          switch(iPosition)
330          {          {
331          case 0  :          case 0  :
332    #ifdef ENABLE_IYUV
333                    vih->bmiHeader.biCompression = MEDIASUBTYPE_IYUV.Data1;
334                    vih->bmiHeader.biBitCount = 12;
335                    mtOut->SetSubtype(&MEDIASUBTYPE_IYUV);
336                    break;
337    #endif
338    
339            case 1:
340    #ifdef ENABLE_YV12
341                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YV12.Data1;                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YV12.Data1;
342                  vih->bmiHeader.biBitCount = 12;                  vih->bmiHeader.biBitCount = 12;
343                  mtOut->SetSubtype(&MEDIASUBTYPE_YV12);                  mtOut->SetSubtype(&MEDIASUBTYPE_YV12);
344                  break;                  break;
345    #endif
346    
347          case 1:          case 2:
348    #ifdef ENABLE_YUY2
349                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YUY2.Data1;                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YUY2.Data1;
350                  vih->bmiHeader.biBitCount = 16;                  vih->bmiHeader.biBitCount = 16;
351                  mtOut->SetSubtype(&MEDIASUBTYPE_YUY2);                  mtOut->SetSubtype(&MEDIASUBTYPE_YUY2);
352                  break;                  break;
353    #endif
354    
355          case 2:          case 3:
356    #ifdef ENABLE_YVYU
357                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YVYU.Data1;                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YVYU.Data1;
358                  vih->bmiHeader.biBitCount = 16;                  vih->bmiHeader.biBitCount = 16;
359                  mtOut->SetSubtype(&MEDIASUBTYPE_YVYU);                  mtOut->SetSubtype(&MEDIASUBTYPE_YVYU);
360                  break;                  break;
361    #endif
362    
363          case 3:          case 4:
364    #ifdef ENABLE_UYVY
365                  vih->bmiHeader.biCompression = MEDIASUBTYPE_UYVY.Data1;                  vih->bmiHeader.biCompression = MEDIASUBTYPE_UYVY.Data1;
366                  vih->bmiHeader.biBitCount = 16;                  vih->bmiHeader.biBitCount = 16;
367                  mtOut->SetSubtype(&MEDIASUBTYPE_UYVY);                  mtOut->SetSubtype(&MEDIASUBTYPE_UYVY);
368                  break;                  break;
369    #endif
370    
371          case 4:          case 5:
372    #ifdef ENABLE_RGB32
373                  vih->bmiHeader.biCompression = BI_RGB;                  vih->bmiHeader.biCompression = BI_RGB;
374                  vih->bmiHeader.biBitCount = 32;                  vih->bmiHeader.biBitCount = 32;
375                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB32);                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB32);
376                  break;                  break;
377    #endif
378    
379          case 5:          case 6:
380    #ifdef ENABLE_RGB24
381                  vih->bmiHeader.biCompression = BI_RGB;                  vih->bmiHeader.biCompression = BI_RGB;
382                  vih->bmiHeader.biBitCount = 24;                  vih->bmiHeader.biBitCount = 24;
383                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB24);                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB24);
384                  break;                  break;
385    #endif
386    
387          case 6:          case 7:
388    #ifdef ENABLE_RGB565
389                  vih->bmiHeader.biCompression = BI_RGB;                  vih->bmiHeader.biCompression = BI_RGB;
390                  vih->bmiHeader.biBitCount = 16;                  vih->bmiHeader.biBitCount = 16;
391                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB555);                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB565);
392                  break;                  break;
393    #endif
394    
395          case 7:          case 8:
396    #ifdef ENABLE_RGB555
397                  vih->bmiHeader.biCompression = BI_RGB;                  vih->bmiHeader.biCompression = BI_RGB;
398                  vih->bmiHeader.biBitCount = 16;                  vih->bmiHeader.biBitCount = 16;
399                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB565);                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB555);
400                  break;                  break;
401    #endif
402    
403          default :          default :
404                  return VFW_S_NO_MORE_ITEMS;                  return VFW_S_NO_MORE_ITEMS;
# Line 385  Line 419 
419    
420  HRESULT CXvidDecoder::ChangeColorspace(GUID subtype, GUID formattype, void * format)  HRESULT CXvidDecoder::ChangeColorspace(GUID subtype, GUID formattype, void * format)
421  {  {
422          if (subtype == MEDIASUBTYPE_YV12)          int rgb_flip;
423    
424            if (formattype == FORMAT_VideoInfo)
425            {
426                    VIDEOINFOHEADER * vih = (VIDEOINFOHEADER * )format;
427                    //m_frame.stride = vih->bmiHeader.biWidth;
428                    // dev-api-3:
429                    m_frame.stride = (((vih->bmiHeader.biWidth * vih->bmiHeader.biBitCount) + 31) & ~31) >> 3;
430                    rgb_flip = (vih->bmiHeader.biHeight < 0 ? 0 : XVID_CSP_VFLIP);
431            }
432            else if (formattype == FORMAT_VideoInfo2)
433            {
434                    VIDEOINFOHEADER2 * vih2 = (VIDEOINFOHEADER2 * )format;
435                    //m_frame.stride = vih2->bmiHeader.biWidth;
436                    // dev-api-3:
437                    m_frame.stride = (((vih2->bmiHeader.biWidth * vih2->bmiHeader.biBitCount) + 31) & ~31) >> 3;
438                    rgb_flip = (vih2->bmiHeader.biHeight < 0 ? 0 : XVID_CSP_VFLIP);
439            }
440            else
441            {
442                    return S_FALSE;
443            }
444    
445            if (subtype == MEDIASUBTYPE_IYUV)
446            {
447                    DEBUG("IYUV");
448                    m_frame.colorspace = XVID_CSP_I420;
449            }
450            else if (subtype == MEDIASUBTYPE_YV12)
451          {          {
452                  DEBUG("YV12");                  DEBUG("YV12");
453                  m_frame.colorspace = XVID_CSP_YV12;                  m_frame.colorspace = XVID_CSP_YV12;
# Line 408  Line 470 
470          else if (subtype == MEDIASUBTYPE_RGB32)          else if (subtype == MEDIASUBTYPE_RGB32)
471          {          {
472                  DEBUG("RGB32");                  DEBUG("RGB32");
473                  m_frame.colorspace = XVID_CSP_VFLIP | XVID_CSP_RGB32;                  m_frame.colorspace = rgb_flip | XVID_CSP_RGB32;
474          }          }
475          else if (subtype == MEDIASUBTYPE_RGB24)          else if (subtype == MEDIASUBTYPE_RGB24)
476          {          {
477                  DEBUG("RGB24");                  DEBUG("RGB24");
478                  m_frame.colorspace = XVID_CSP_VFLIP | XVID_CSP_RGB24;                  m_frame.colorspace = rgb_flip | XVID_CSP_RGB24;
479          }          }
480          else if (subtype == MEDIASUBTYPE_RGB555)          else if (subtype == MEDIASUBTYPE_RGB555)
481          {          {
482                  DEBUG("RGB555");                  DEBUG("RGB555");
483                  m_frame.colorspace = XVID_CSP_VFLIP | XVID_CSP_RGB555;                  m_frame.colorspace = rgb_flip | XVID_CSP_RGB555;
484          }          }
485          else if (subtype == MEDIASUBTYPE_RGB565)          else if (subtype == MEDIASUBTYPE_RGB565)
486          {          {
487                  DEBUG("RGB565");                  DEBUG("RGB565");
488                  m_frame.colorspace = XVID_CSP_VFLIP | XVID_CSP_RGB565;                  m_frame.colorspace = rgb_flip | XVID_CSP_RGB565;
489          }          }
490          else if (subtype == GUID_NULL)          else if (subtype == GUID_NULL)
491          {          {
# Line 434  Line 496 
496                  return S_FALSE;                  return S_FALSE;
497          }          }
498    
   
         if (formattype == FORMAT_VideoInfo)  
         {  
                 VIDEOINFOHEADER * vih = (VIDEOINFOHEADER * )format;  
                 m_frame.stride = vih->bmiHeader.biWidth;  
         }  
         else if (formattype == FORMAT_VideoInfo2)  
         {  
                 VIDEOINFOHEADER2 * vih2 = (VIDEOINFOHEADER2 * )format;  
                 m_frame.stride = vih2->bmiHeader.biWidth;  
         }  
         else  
         {  
                 return S_FALSE;  
         }  
   
499          return S_OK;          return S_OK;
500    
501  }  }

Legend:
Removed from v.392  
changed lines
  Added in v.632

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4