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

多媒体编程

开发平台:

Visual C++

  1. /**************************************************************************************
  2.  *                                                                                    *
  3.  *                                                                                    *
  4.  **************************************************************************************/
  5. #include "InputFile.h"
  6. /*
  7.  *
  8.  *  ——读本地文件
  9.  *
  10.  */
  11. /*
  12.  * 构造器
  13.  * ------
  14.  * 
  15.  * 
  16.  *
  17.  */
  18. MediaInputFile::MediaInputFile()
  19. {
  20. this->file = NULL;
  21. }
  22. /*
  23.  * 析构器
  24.  * ------
  25.  * 
  26.  * 
  27.  *
  28.  */
  29. MediaInputFile::~MediaInputFile()
  30. {
  31. }
  32. /*
  33.  *
  34.  *  ——得到媒体项的类型
  35.  *
  36.  */
  37. media_type_t MediaInputFile::GetType()
  38. {
  39. return MEDIA_TYPE_INPUT;
  40. }
  41. /*
  42.  *
  43.  *  ——得到媒体项的类型的名称
  44.  *
  45.  */
  46. char *MediaInputFile::GetName()
  47. {
  48. return "FILE Input";
  49. }
  50. /*
  51.  * Connect:
  52.  * --------
  53.  *
  54.  *  ——不接受
  55.  *
  56.  */
  57. MP_RESULT MediaInputFile::Connect(MediaItem *item)
  58. {
  59. return MP_RESULT_ERROR;
  60. }
  61. MP_RESULT MediaInputFile::ReleaseConnections()
  62. {
  63. return MP_RESULT_ERROR;
  64. }
  65. DWORD         MediaInputFile::GetCaps()
  66. {
  67. return 0;
  68. }
  69. MP_RESULT     MediaInputFile::Configure(HINSTANCE hInstance, HWND hwnd)
  70. {
  71. return MP_RESULT_ERROR;
  72. }
  73. /*
  74.  *
  75.  *  ——打开文件
  76.  *
  77.  */
  78. MP_RESULT MediaInputFile::Open(char *url, media_input_mode_t mode) 
  79. {
  80. this->file = NULL;
  81. if(url != NULL) {
  82. switch(mode) {
  83. case INPUT_OPEN_BINARY:
  84. this->file = fopen(url, "rb");
  85. break;
  86. case INPUT_OPEN_ASCII:
  87. this->file = fopen(url, "rt");
  88. break;
  89. default:
  90. this->file = fopen(url, "rb");
  91. break;
  92. }
  93. }
  94. if(this->file == NULL) {
  95. return MP_RESULT_ERROR;
  96. }
  97. /*
  98.  * 得到文件大小
  99.  */
  100. this->Seek(0, INPUT_SEEK_END);
  101. this->size = this->Seek(0, INPUT_SEEK_CUR);
  102. this->Seek(0, INPUT_SEEK_SET);
  103. return MP_RESULT_OK;
  104. }
  105. long MediaInputFile::GetSize()
  106. {
  107. return MP_RESULT_ERROR;
  108. }
  109. long MediaInputFile::GetBufferSize()
  110. {
  111. return MP_RESULT_ERROR;
  112. }
  113. long MediaInputFile::GetBufferPosition()
  114. {
  115. return MP_RESULT_ERROR;
  116. }
  117. long MediaInputFile::GetBufferingSize()
  118. {
  119. return MP_RESULT_ERROR;
  120. }
  121. /*
  122.  *
  123.  *  ——读某些二进制数据
  124.  *
  125.  */
  126. unsigned int MediaInputFile::Read(MediaBuffer *mb, unsigned int size)
  127. {
  128. if(!mb || !this->file)
  129. return MP_RESULT_ERROR;
  130. if(size > mb->GetSize())
  131. mb->ReAlloc(size);
  132. return fread(mb->GetData(), 1, size, this->file);
  133. }
  134. /*
  135.  *
  136.  *  ——在文件中搜索
  137.  *
  138.  */
  139. unsigned int MediaInputFile::Seek(int size, media_input_seek_t method)
  140. {
  141. if(!this->file)
  142. return MP_RESULT_ERROR;
  143. switch(method) {
  144. case INPUT_SEEK_SET:
  145. return fseek(this->file, size, SEEK_SET);
  146. break;
  147. case INPUT_SEEK_CUR:
  148. if(size == 0) {
  149. return ftell(this->file);
  150. }
  151. else {
  152. return fseek(this->file, size, SEEK_CUR);
  153. }
  154. break;
  155. case INPUT_SEEK_END:
  156. return fseek(this->file, size, SEEK_END);
  157. break;
  158. }
  159. return MP_RESULT_ERROR;
  160. }
  161. /*
  162.  *
  163.  *  ——得到完整的行
  164.  *
  165.  */
  166. unsigned int MediaInputFile::GetLine(MediaBuffer *mb)
  167. {
  168. if(!this->file)
  169. return MP_RESULT_ERROR;
  170. fgets((char *) mb->GetData(), mb->GetSize(), this->file);
  171. return MP_RESULT_OK;
  172. }
  173. /*
  174.  *
  175.  *  ——文件结束则返回真
  176.  *
  177.  */
  178. BOOL MediaInputFile::EndOfFile()
  179. {
  180. if(!this->file)
  181. return TRUE;
  182. return feof(this->file);
  183. }
  184. /*
  185.  *
  186.  *  ——关闭文件
  187.  *
  188.  */
  189. MP_RESULT MediaInputFile::Close()
  190. {
  191. if(!this->file)
  192. return MP_RESULT_ERROR;
  193. fclose(this->file);
  194. return MP_RESULT_OK;
  195. }