www.pudn.com > MyPlayerbylqh.rar > InputFile.cpp


/************************************************************************************** 
 *                                                                                    * 
 *                                                                                    * 
 **************************************************************************************/ 
 
#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; 
}