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"); |
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_RGB555 |
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_RGB555); |
392 |
break; |
break; |
393 |
|
#endif |
394 |
|
|
395 |
case 7: |
case 8: |
396 |
|
#ifdef ENABLE_RGB565 |
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_RGB565); |
400 |
break; |
break; |
401 |
|
#endif |
402 |
|
|
403 |
default : |
default : |
404 |
return VFW_S_NO_MORE_ITEMS; |
return VFW_S_NO_MORE_ITEMS; |
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) |
if (subtype == MEDIASUBTYPE_IYUV) |
423 |
|
{ |
424 |
|
DEBUG("IYUV"); |
425 |
|
m_frame.colorspace = XVID_CSP_I420; |
426 |
|
} |
427 |
|
else if (subtype == MEDIASUBTYPE_YV12) |
428 |
{ |
{ |
429 |
DEBUG("YV12"); |
DEBUG("YV12"); |
430 |
m_frame.colorspace = XVID_CSP_YV12; |
m_frame.colorspace = XVID_CSP_YV12; |
478 |
{ |
{ |
479 |
VIDEOINFOHEADER * vih = (VIDEOINFOHEADER * )format; |
VIDEOINFOHEADER * vih = (VIDEOINFOHEADER * )format; |
480 |
m_frame.stride = vih->bmiHeader.biWidth; |
m_frame.stride = vih->bmiHeader.biWidth; |
481 |
|
// dev-api-3: m_frame.stride = (((vih->bmiHeader.biWidth * vih->bmiHeader.biBitCount) + 31) & ~31) >> 3; |
482 |
} |
} |
483 |
else if (formattype == FORMAT_VideoInfo2) |
else if (formattype == FORMAT_VideoInfo2) |
484 |
{ |
{ |
485 |
VIDEOINFOHEADER2 * vih2 = (VIDEOINFOHEADER2 * )format; |
VIDEOINFOHEADER2 * vih2 = (VIDEOINFOHEADER2 * )format; |
486 |
m_frame.stride = vih2->bmiHeader.biWidth; |
m_frame.stride = vih2->bmiHeader.biWidth; |
487 |
|
// dev-api-3: m_frame.stride = (((vih2->bmiHeader.biWidth * vih2->bmiHeader.biBitCount) + 31) & ~31) >> 3; |
488 |
} |
} |
489 |
else |
else |
490 |
{ |
{ |