InputFile.cpp
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:4k
- /**************************************************************************************
- * *
- * *
- **************************************************************************************/
- #include "InputFile.h"
- /*
- *
- * ——读本地文件
- *
- */
- /*
- * 构造器
- * ------
- *
- *
- *
- */
- MediaInputFile::MediaInputFile()
- {
- this->file = NULL;
- }
- /*
- * 析构器
- * ------
- *
- *
- *
- */
- MediaInputFile::~MediaInputFile()
- {
- }
- /*
- *
- * ——得到媒体项的类型
- *
- */
- media_type_t MediaInputFile::GetType()
- {
- return MEDIA_TYPE_INPUT;
- }
- /*
- *
- * ——得到媒体项的类型的名称
- *
- */
- char *MediaInputFile::GetName()
- {
- return "FILE Input";
- }
- /*
- * Connect:
- * --------
- *
- * ——不接受
- *
- */
- MP_RESULT MediaInputFile::Connect(MediaItem *item)
- {
- return MP_RESULT_ERROR;
- }
- MP_RESULT MediaInputFile::ReleaseConnections()
- {
- return MP_RESULT_ERROR;
- }
- DWORD MediaInputFile::GetCaps()
- {
- return 0;
- }
- MP_RESULT MediaInputFile::Configure(HINSTANCE hInstance, HWND hwnd)
- {
- return MP_RESULT_ERROR;
- }
- /*
- *
- * ——打开文件
- *
- */
- MP_RESULT MediaInputFile::Open(char *url, media_input_mode_t mode)
- {
- this->file = NULL;
- if(url != NULL) {
- switch(mode) {
- case INPUT_OPEN_BINARY:
- this->file = fopen(url, "rb");
- break;
- case INPUT_OPEN_ASCII:
- this->file = fopen(url, "rt");
- break;
- default:
-
- this->file = fopen(url, "rb");
- break;
- }
- }
- if(this->file == NULL) {
- return MP_RESULT_ERROR;
- }
- /*
- * 得到文件大小
- */
- this->Seek(0, INPUT_SEEK_END);
- this->size = this->Seek(0, INPUT_SEEK_CUR);
- this->Seek(0, INPUT_SEEK_SET);
- return MP_RESULT_OK;
- }
- long MediaInputFile::GetSize()
- {
- return MP_RESULT_ERROR;
- }
- long MediaInputFile::GetBufferSize()
- {
- return MP_RESULT_ERROR;
- }
- long MediaInputFile::GetBufferPosition()
- {
- return MP_RESULT_ERROR;
- }
- long MediaInputFile::GetBufferingSize()
- {
- return MP_RESULT_ERROR;
- }
- /*
- *
- * ——读某些二进制数据
- *
- */
- unsigned int MediaInputFile::Read(MediaBuffer *mb, unsigned int size)
- {
- if(!mb || !this->file)
- return MP_RESULT_ERROR;
- if(size > mb->GetSize())
- mb->ReAlloc(size);
- return fread(mb->GetData(), 1, size, this->file);
- }
- /*
- *
- * ——在文件中搜索
- *
- */
- unsigned int MediaInputFile::Seek(int size, media_input_seek_t method)
- {
- if(!this->file)
- return MP_RESULT_ERROR;
- switch(method) {
- case INPUT_SEEK_SET:
- return fseek(this->file, size, SEEK_SET);
- break;
-
- case INPUT_SEEK_CUR:
- if(size == 0) {
- return ftell(this->file);
- }
- else {
- return fseek(this->file, size, SEEK_CUR);
- }
- break;
- case INPUT_SEEK_END:
- return fseek(this->file, size, SEEK_END);
- break;
- }
- return MP_RESULT_ERROR;
- }
- /*
- *
- * ——得到完整的行
- *
- */
- unsigned int MediaInputFile::GetLine(MediaBuffer *mb)
- {
- if(!this->file)
- return MP_RESULT_ERROR;
- fgets((char *) mb->GetData(), mb->GetSize(), this->file);
- return MP_RESULT_OK;
- }
- /*
- *
- * ——文件结束则返回真
- *
- */
- BOOL MediaInputFile::EndOfFile()
- {
- if(!this->file)
- return TRUE;
- return feof(this->file);
- }
- /*
- *
- * ——关闭文件
- *
- */
- MP_RESULT MediaInputFile::Close()
- {
- if(!this->file)
- return MP_RESULT_ERROR;
- fclose(this->file);
- return MP_RESULT_OK;
- }