[cvs] / dshow / src / CXvidDecoder.cpp Repository:
ViewVC logotype

Diff of /dshow/src/CXvidDecoder.cpp

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

revision 1.2.2.2, Thu Nov 7 10:34:14 2002 UTC revision 1.3, Mon Oct 28 11:32:50 2002 UTC
# Line 290  Line 290 
290    
291  /* get list of supported output colorspaces */  /* get list of supported output colorspaces */
292    
 #define ENABLE_IYUV  
 #define ENABLE_YV12  
 #define ENABLE_YUY2  
 #define ENABLE_UYVY  
 #define ENABLE_YVYU  
 #define ENABLE_RGB32  
 #define ENABLE_RGB24  
 #define ENABLE_RGB565  
 #define ENABLE_RGB555  
   
293  HRESULT CXvidDecoder::GetMediaType(int iPosition, CMediaType *mtOut)  HRESULT CXvidDecoder::GetMediaType(int iPosition, CMediaType *mtOut)
294  {  {
295          DEBUG("GetMediaType");          DEBUG("GetMediaType");
# Line 329  Line 319 
319          switch(iPosition)          switch(iPosition)
320          {          {
321          case 0 :          case 0 :
 #ifdef ENABLE_IYUV  
322                  vih->bmiHeader.biCompression = MEDIASUBTYPE_IYUV.Data1;                  vih->bmiHeader.biCompression = MEDIASUBTYPE_IYUV.Data1;
323                  vih->bmiHeader.biBitCount = 12;                  vih->bmiHeader.biBitCount = 12;
324                  mtOut->SetSubtype(&MEDIASUBTYPE_IYUV);                  mtOut->SetSubtype(&MEDIASUBTYPE_IYUV);
325                  break;                  break;
 #endif  
326    
327          case 1:          case 1:
 #ifdef ENABLE_YV12  
328                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YV12.Data1;                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YV12.Data1;
329                  vih->bmiHeader.biBitCount = 12;                  vih->bmiHeader.biBitCount = 12;
330                  mtOut->SetSubtype(&MEDIASUBTYPE_YV12);                  mtOut->SetSubtype(&MEDIASUBTYPE_YV12);
331                  break;                  break;
 #endif  
332    
333          case 2:          case 2:
 #ifdef ENABLE_YUY2  
334                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YUY2.Data1;                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YUY2.Data1;
335                  vih->bmiHeader.biBitCount = 16;                  vih->bmiHeader.biBitCount = 16;
336                  mtOut->SetSubtype(&MEDIASUBTYPE_YUY2);                  mtOut->SetSubtype(&MEDIASUBTYPE_YUY2);
337                  break;                  break;
 #endif  
338    
339          case 3:          case 3:
 #ifdef ENABLE_YVYU  
340                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YVYU.Data1;                  vih->bmiHeader.biCompression = MEDIASUBTYPE_YVYU.Data1;
341                  vih->bmiHeader.biBitCount = 16;                  vih->bmiHeader.biBitCount = 16;
342                  mtOut->SetSubtype(&MEDIASUBTYPE_YVYU);                  mtOut->SetSubtype(&MEDIASUBTYPE_YVYU);
343                  break;                  break;
 #endif  
344    
345          case 4:          case 4:
 #ifdef ENABLE_UYVY  
346                  vih->bmiHeader.biCompression = MEDIASUBTYPE_UYVY.Data1;                  vih->bmiHeader.biCompression = MEDIASUBTYPE_UYVY.Data1;
347                  vih->bmiHeader.biBitCount = 16;                  vih->bmiHeader.biBitCount = 16;
348                  mtOut->SetSubtype(&MEDIASUBTYPE_UYVY);                  mtOut->SetSubtype(&MEDIASUBTYPE_UYVY);
349                  break;                  break;
 #endif  
350    
351          case 5:          case 5:
 #ifdef ENABLE_RGB32  
352                  vih->bmiHeader.biCompression = BI_RGB;                  vih->bmiHeader.biCompression = BI_RGB;
353                  vih->bmiHeader.biBitCount = 32;                  vih->bmiHeader.biBitCount = 32;
354                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB32);                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB32);
355                  break;                  break;
 #endif  
356    
357          case 6:          case 6:
 #ifdef ENABLE_RGB24  
358                  vih->bmiHeader.biCompression = BI_RGB;                  vih->bmiHeader.biCompression = BI_RGB;
359                  vih->bmiHeader.biBitCount = 24;                  vih->bmiHeader.biBitCount = 24;
360                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB24);                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB24);
361                  break;                  break;
 #endif  
362    
363          case 7:          case 7:
 #ifdef ENABLE_RGB565  
364                  vih->bmiHeader.biCompression = BI_RGB;                  vih->bmiHeader.biCompression = BI_RGB;
365                  vih->bmiHeader.biBitCount = 16;                  vih->bmiHeader.biBitCount = 16;
366                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB565);                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB555);
367                  break;                  break;
 #endif  
368    
369          case 8:          case 8:
 #ifdef ENABLE_RGB555  
370                  vih->bmiHeader.biCompression = BI_RGB;                  vih->bmiHeader.biCompression = BI_RGB;
371                  vih->bmiHeader.biBitCount = 16;                  vih->bmiHeader.biBitCount = 16;
372                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB555);                  mtOut->SetSubtype(&MEDIASUBTYPE_RGB565);
373                  break;                  break;
 #endif  
374    
375          default :          default :
376                  return VFW_S_NO_MORE_ITEMS;                  return VFW_S_NO_MORE_ITEMS;
# Line 419  Line 391 
391    
392  HRESULT CXvidDecoder::ChangeColorspace(GUID subtype, GUID formattype, void * format)  HRESULT CXvidDecoder::ChangeColorspace(GUID subtype, GUID formattype, void * format)
393  {  {
         int rgb_flip;  
   
         if (formattype == FORMAT_VideoInfo)  
         {  
                 VIDEOINFOHEADER * vih = (VIDEOINFOHEADER * )format;  
                 //m_frame.stride = vih->bmiHeader.biWidth;  
                 // dev-api-3:  
                 m_frame.stride = (((vih->bmiHeader.biWidth * vih->bmiHeader.biBitCount) + 31) & ~31) >> 3;  
                 rgb_flip = (vih->bmiHeader.biHeight < 0 ? 0 : XVID_CSP_VFLIP);  
         }  
         else if (formattype == FORMAT_VideoInfo2)  
         {  
                 VIDEOINFOHEADER2 * vih2 = (VIDEOINFOHEADER2 * )format;  
                 //m_frame.stride = vih2->bmiHeader.biWidth;  
                 // dev-api-3:  
                 m_frame.stride = (((vih2->bmiHeader.biWidth * vih2->bmiHeader.biBitCount) + 31) & ~31) >> 3;  
                 rgb_flip = (vih2->bmiHeader.biHeight < 0 ? 0 : XVID_CSP_VFLIP);  
         }  
         else  
         {  
                 return S_FALSE;  
         }  
   
394          if (subtype == MEDIASUBTYPE_IYUV)          if (subtype == MEDIASUBTYPE_IYUV)
395          {          {
396                  DEBUG("IYUV");                  DEBUG("IYUV");
# Line 470  Line 419 
419          else if (subtype == MEDIASUBTYPE_RGB32)          else if (subtype == MEDIASUBTYPE_RGB32)
420          {          {
421                  DEBUG("RGB32");                  DEBUG("RGB32");
422                  m_frame.colorspace = rgb_flip | XVID_CSP_RGB32;                  m_frame.colorspace = XVID_CSP_VFLIP | XVID_CSP_RGB32;
423          }          }
424          else if (subtype == MEDIASUBTYPE_RGB24)          else if (subtype == MEDIASUBTYPE_RGB24)
425          {          {
426                  DEBUG("RGB24");                  DEBUG("RGB24");
427                  m_frame.colorspace = rgb_flip | XVID_CSP_RGB24;                  m_frame.colorspace = XVID_CSP_VFLIP | XVID_CSP_RGB24;
428          }          }
429          else if (subtype == MEDIASUBTYPE_RGB555)          else if (subtype == MEDIASUBTYPE_RGB555)
430          {          {
431                  DEBUG("RGB555");                  DEBUG("RGB555");
432                  m_frame.colorspace = rgb_flip | XVID_CSP_RGB555;                  m_frame.colorspace = XVID_CSP_VFLIP | XVID_CSP_RGB555;
433          }          }
434          else if (subtype == MEDIASUBTYPE_RGB565)          else if (subtype == MEDIASUBTYPE_RGB565)
435          {          {
436                  DEBUG("RGB565");                  DEBUG("RGB565");
437                  m_frame.colorspace = rgb_flip | XVID_CSP_RGB565;                  m_frame.colorspace = XVID_CSP_VFLIP | XVID_CSP_RGB565;
438          }          }
439          else if (subtype == GUID_NULL)          else if (subtype == GUID_NULL)
440          {          {
# Line 496  Line 445 
445                  return S_FALSE;                  return S_FALSE;
446          }          }
447    
448    
449            if (formattype == FORMAT_VideoInfo)
450            {
451                    VIDEOINFOHEADER * vih = (VIDEOINFOHEADER * )format;
452                    m_frame.stride = vih->bmiHeader.biWidth;
453            }
454            else if (formattype == FORMAT_VideoInfo2)
455            {
456                    VIDEOINFOHEADER2 * vih2 = (VIDEOINFOHEADER2 * )format;
457                    m_frame.stride = vih2->bmiHeader.biWidth;
458            }
459            else
460            {
461                    return S_FALSE;
462            }
463    
464          return S_OK;          return S_OK;
465    
466  }  }

Legend:
Removed from v.1.2.2.2  
changed lines
  Added in v.1.3

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