VideoDecoder.cpp
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:3k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /**************************************************************************************
  2.  *                                                                                    *
  3.  *                                                                                    *
  4.  **************************************************************************************/
  5. #include "VideoDecoder.h"
  6. /*
  7.  * 视频解码器加封装器
  8.  *
  9.  */
  10. MediaVideoDecoder::MediaVideoDecoder()
  11. {
  12. this->decoder       = NULL;
  13. this->decoreDecoder = new MediaVideoDecoderDecore();
  14. this->vfwDecoder    = new MediaVideoDecoderVFW();
  15. }
  16. MediaVideoDecoder::~MediaVideoDecoder()
  17. {
  18. delete this->decoreDecoder;
  19. delete this->vfwDecoder;
  20. }
  21. /*
  22.  * 媒体项方法
  23.  */
  24. media_type_t  MediaVideoDecoder::GetType()
  25. {
  26. return MEDIA_TYPE_VIDEO_DECODER;
  27. }
  28. char         *MediaVideoDecoder::GetName()
  29. {
  30. if(this->decoder)
  31. return this->decoder->GetName();
  32. return "Video Decoder Wrapper";
  33. }
  34. MP_RESULT     MediaVideoDecoder::Connect(MediaItem *item)
  35. {
  36. /*
  37.  * 解码器
  38.  */
  39. if(this->decoreDecoder->Connect(item) == MP_RESULT_OK) {
  40. this->decoder = this->decoreDecoder;
  41. return MP_RESULT_OK;
  42. }
  43. /*
  44.  * VFW(Video for Windows)解码器
  45.  */
  46. if(this->vfwDecoder->Connect(item) == MP_RESULT_OK) {
  47. this->decoder = this->vfwDecoder;
  48. return MP_RESULT_OK;
  49. }
  50. return MP_RESULT_ERROR;
  51. }
  52. MP_RESULT     MediaVideoDecoder::ReleaseConnections()
  53. {
  54. /*
  55.  * 清除
  56.  */
  57. if(this->decoder) {
  58. this->decoder->ReleaseConnections();
  59. this->decoder = NULL;
  60. }
  61. return MP_RESULT_OK;
  62. }
  63. DWORD         MediaVideoDecoder::GetCaps()
  64. {
  65. if(this->decoder)
  66. return this->decoder->GetCaps();
  67. return 0;
  68. }
  69. MP_RESULT     MediaVideoDecoder::Configure(HINSTANCE hInstance, HWND hwnd)
  70. {
  71. if(this->decoder)
  72. return this->decoder->Configure(hInstance, hwnd);
  73. return MP_RESULT_ERROR;
  74. }
  75. /*
  76.  * 视频解码器方法
  77.  *
  78.  */
  79. unsigned int MediaVideoDecoder::GetFrameSize() 
  80. {
  81. if(this->decoder)
  82. return this->decoder->GetFrameSize();
  83. return 0;
  84. }
  85. media_video_mode_t MediaVideoDecoder::GetVideoMode() 
  86. {
  87. if(this->decoder)
  88. return this->decoder->GetVideoMode();
  89. return VIDEO_MODE_NONE;
  90. }
  91. BOOL MediaVideoDecoder::GetInvertFlag()
  92. {
  93. if(this->decoder)
  94. return this->decoder->GetInvertFlag();
  95. return FALSE;
  96. }
  97. MP_RESULT          MediaVideoDecoder::SetVideoMode(media_video_mode_t mode)
  98. {
  99. if(this->decoder)
  100. return this->decoder->SetVideoMode(mode);
  101. return MP_RESULT_ERROR;
  102. }
  103. MP_RESULT          MediaVideoDecoder::SetQuality(DWORD quality)
  104. {
  105. if(this->decoder)
  106. return this->decoder->SetQuality(quality);
  107. return MP_RESULT_ERROR;
  108. }
  109. DWORD          MediaVideoDecoder::GetQuality()
  110. {
  111. if(this->decoder)
  112. return this->decoder->GetQuality();
  113. return 0;
  114. }
  115. MP_RESULT          MediaVideoDecoder::Decompress(MediaBuffer *mb_out, unsigned int stride)
  116. {
  117. if(this->decoder)
  118. return this->decoder->Decompress(mb_out, stride);
  119. return MP_RESULT_ERROR;
  120. }
  121. MP_RESULT          MediaVideoDecoder::Drop(MediaBuffer *mb_out, unsigned int stride)
  122. {
  123. if(this->decoder)
  124. return this->decoder->Drop(mb_out, stride);
  125. return MP_RESULT_ERROR;
  126. }