385 |
#endif |
#endif |
386 |
|
|
387 |
case 7: |
case 7: |
388 |
#ifdef ENABLE_RGB555 |
#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 |
#endif |
394 |
|
|
395 |
case 8: |
case 8: |
396 |
#ifdef ENABLE_RGB565 |
#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 |
#endif |
402 |
|
|
419 |
|
|
420 |
HRESULT CXvidDecoder::ChangeColorspace(GUID subtype, GUID formattype, void * format) |
HRESULT CXvidDecoder::ChangeColorspace(GUID subtype, GUID formattype, void * format) |
421 |
{ |
{ |
422 |
|
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) |
if (subtype == MEDIASUBTYPE_IYUV) |
446 |
{ |
{ |
447 |
DEBUG("IYUV"); |
DEBUG("IYUV"); |
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 |
{ |
{ |
496 |
return S_FALSE; |
return S_FALSE; |
497 |
} |
} |
498 |
|
|
|
|
|
|
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; |
|
|
} |
|
|
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; |
|
|
} |
|
|
else |
|
|
{ |
|
|
return S_FALSE; |
|
|
} |
|
|
|
|
499 |
return S_OK; |
return S_OK; |
500 |
|
|
501 |
} |
} |