⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediaclasses.h

📁 播放器源码
💻 H
字号:
/**************************************************************************************
 *                                                                                    *
 * This application contains code from OpenDivX and is released as a "Larger Work"    *
 * under that license. Consistant with that license, this application is released     *
 * under the GNU General Public License.                                              *
 *                                                                                    *
 * The OpenDivX license can be found at: http://www.projectmayo.com/opendivx/docs.php *
 * The GPL can be found at: http://www.gnu.org/copyleft/gpl.html                      *
 *                                                                                    *
 * Copyright (c) 2001 - Project Mayo                                                  *
 *                                                                                    *
 * Authors: Damien Chavarria                                                          *
 *          DivX Advanced Research Center <darc at projectmayo.com>                   *
 *                                                                                    *
 **************************************************************************************/

#ifndef _MEDIA_CLASSES_H
#define _MEDIA_CLASSES_H

#include <windows.h>

/*
 * basic types used 
 * everywhere
 */

#include "MediaBuffer.h"
#include "Error.h"

/* 
 * Media type for 
 * identifying items
 */

typedef enum {

		MEDIA_TYPE_INPUT,
		MEDIA_TYPE_DECAPS,
		MEDIA_TYPE_VIDEO_DECODER,
		MEDIA_TYPE_AUDIO_DECODER,
		MEDIA_TYPE_VIDEO_BUFFER,
		MEDIA_TYPE_VIDEO_RENDERER,
		MEDIA_TYPE_AUDIO_RENDERER,
		MEDIA_TYPE_SUBTITLER,

} media_type_t;

/* 
 * Capabilities types
 *
 */

#define MEDIA_CAPS_CAN_CONFIGURE 0x00000001
#define MEDIA_CAPS_BUFFERIZE     0x00000002

/*
 * Types for Input Media 
 *
 */

/*
 * File mode enum
 */

typedef enum {

		INPUT_OPEN_ASCII,	
		INPUT_OPEN_BINARY

} media_input_mode_t;

/*
 * Seek Enum
 */

typedef enum {

		INPUT_SEEK_SET,
		INPUT_SEEK_CUR,
		INPUT_SEEK_END

} media_input_seek_t;

/*
 * Video Mode Enum
 */

typedef enum {
	
		VIDEO_MODE_NONE,
		VIDEO_MODE_RGB8,
		VIDEO_MODE_RGB16,
		VIDEO_MODE_RGB24,
		VIDEO_MODE_RGB32,
		VIDEO_MODE_YUV9,
		VIDEO_MODE_YUV12,
		VIDEO_MODE_YUY2,
		VIDEO_MODE_UYVY,

} media_video_mode_t;

/*
 * Virtual Classes to describe
 * the different Media Nodes,
 * Buffers, and Streams used by
 * the Playa...
 *
 */

class MediaItem {

private:

	media_type_t  type;
	char         *name;


public:

	/*
	 * Basic Info Functions
	 */

	virtual media_type_t  GetType() = 0;
	virtual char         *GetName() = 0;

	/*
	 * The Attach() method that will 
	 * be used to connect MediaItems
	 */

	virtual MP_RESULT     Connect(MediaItem *item) = 0;
	virtual MP_RESULT     ReleaseConnections()     = 0;

	/*
	 * Function to get CAPS
	 * and configure items...
	 *
	 */

	virtual DWORD         GetCaps()                                 = 0;
	virtual MP_RESULT     Configure(HINSTANCE hInstance, HWND hwnd) = 0;
};

/*
 * MediaItemInput:
 * ---------------
 *
 * - Input Media Item
 *
 */

class MediaItemInput : public MediaItem {

public:

	virtual MP_RESULT    Open(char *url, media_input_mode_t mode)  = 0;

	virtual long         GetSize()                                 = 0;
	virtual long         GetBufferSize()                           = 0;
	virtual long         GetBufferPosition()                       = 0;
	virtual long         GetBufferingSize()                        = 0;

	virtual unsigned int Read(MediaBuffer *mb, unsigned int size)  = 0;
	virtual unsigned int Seek(int size, media_input_seek_t method) = 0;
	virtual unsigned int GetLine(MediaBuffer *mb)                  = 0;
	
	virtual BOOL         EndOfFile()                               = 0;
	virtual MP_RESULT    Close()                                   = 0;
};

/*
 * MediaItemDecaps:
 * ----------------
 *
 * - Decaps streams
 *
 */

class MediaItemDecaps : public MediaItem {

public:

	virtual unsigned int      GetNumberOfVideoStreams()                                                 = 0;
	virtual unsigned int      GetNumberOfAudioStreams()                                                 = 0;

	virtual unsigned int      GetVideoWidth(unsigned int StreamId)                                      = 0;
	virtual unsigned int      GetVideoHeight(unsigned int StreamId)                                     = 0;
	virtual double            GetVideoFrameRate(unsigned int StreamId)                                  = 0;
	virtual char             *GetVideoCompression(unsigned int StreamId)                                = 0;
	virtual BITMAPINFOHEADER *GetVideoHeader(unsigned int StreamId)                                     = 0;

	virtual unsigned long     GetCurrentVideoFrame(unsigned int StreamId)                               = 0;
	virtual unsigned long     GetTotalVideoFrames(unsigned int StreamId)                                = 0;
	virtual unsigned long     GetTotalVideoTime(unsigned int StreamId)                                  = 0;
	
	virtual unsigned int      GetAudioBits(unsigned int StreamId)                                       = 0;
	virtual unsigned int      GetAudioChannels(unsigned int StreamId)                                   = 0;
	virtual unsigned int      GetAudioFrequency(unsigned int StreamId)                                  = 0;
	virtual WAVEFORMATEX     *GetAudioFormat(unsigned int StreamId)                                     = 0;

	virtual unsigned int      GetNextVideoFrameSize(unsigned int StreamId)                              = 0;
	virtual unsigned int      ReadVideoFrame(unsigned int StreamId, MediaBuffer *mb)                    = 0;

	virtual unsigned int      ReadAudioData(unsigned int StreamId, char *buffer, unsigned int bytes)    = 0;
	virtual MP_RESULT         UpdateForSize()                                                           = 0;

	virtual MP_RESULT		  SeekAudio(unsigned int StreamId, long bytes)                              = 0;
	virtual MP_RESULT         SeekVideo(unsigned int StreamId, long frame)                              = 0;
	virtual MP_RESULT         ReSeekAudio(unsigned int StreamId)                                        = 0;

	virtual MP_RESULT         Seek(unsigned int videoStreamId, unsigned int audioStreamId, int percent) = 0;
	virtual MP_RESULT         Rewind(unsigned int videoStreamId, unsigned int audioStreamId)            = 0;

	virtual MP_RESULT         SeekNextKeyFrame(unsigned int StreamId)                                   = 0;
	virtual MP_RESULT         SeekPreviousKeyFrame(unsigned int StreamId)                               = 0;
};

/*
 * MediaItemVideoDecoder:
 * --------------------
 *
 * - Decode Video from Stream
 *
 *
 */

class MediaItemVideoDecoder : public MediaItem {

public:

	virtual unsigned int       GetFrameSize()                        = 0;

	virtual media_video_mode_t GetVideoMode()                        = 0;
	virtual BOOL               GetInvertFlag()                       = 0;
	virtual MP_RESULT          SetVideoMode(media_video_mode_t mode) = 0;

	virtual MP_RESULT          SetQuality(DWORD quality)             = 0;
	virtual DWORD              GetQuality()                          = 0;

	virtual MP_RESULT          Decompress(MediaBuffer *mb_out, unsigned int stride)       = 0;
	virtual MP_RESULT          Drop(MediaBuffer *mb_out, unsigned int stride)             = 0;
};

/*
 * MediaItemVideoBuffer
 * --------------------
 *
 * - Bufferize decoded images
 *
 */

class MediaItemVideoBuffer : public MediaItem {

public:

	virtual MP_RESULT    StartBuffering(unsigned int stride) = 0;
	virtual MP_RESULT    StopBuffering()  = 0;

	virtual MediaBuffer *GetOneFrame()    = 0;
	virtual MediaBuffer *GetLastFrame()   = 0;
	virtual MP_RESULT    DropOneFrame()   = 0;
};

/*
 * MediaItemVideoRenderer:
 * ----------------------- 
 *
 * - Renders video on the screen
 *
 */

class MediaItemVideoRenderer : public MediaItem {

public:

	virtual MP_RESULT Init(HWND hwnd, unsigned int width, unsigned int height)                                = 0;
	virtual MP_RESULT InitFullscreen(HWND hwnd, unsigned int width, unsigned int height)                      = 0;

	virtual media_video_mode_t GetVideoMode()                                                                 = 0;
	virtual RECT              *GetFullscreenRects()                                                           = 0; 
  
	virtual MP_RESULT Draw(MediaBuffer *buffer, RECT *rect, int frameNumber, int invertFlag)                  = 0;
	virtual MP_RESULT DrawFullscreen(MediaBuffer *buffer, int frameNumber, int invertFlag, int desktopMode)   = 0;

	virtual MP_RESULT Stop()                                                                                  = 0;

	virtual MP_RESULT Close()                                                                                 = 0;
};

/*
 * Type for subtitles
 * transfer...
 *
 */

typedef struct _subtitles_t {

	char *subtitlesText[4];
	DWORD nbSubtitles;

} subtitles_t;

/* 
 * MediaItemSubtitler
 * ------------------
 *
 * - Readssubtitles
 *
 */

class MediaItemSubtitler : public MediaItem {

public:

	virtual MP_RESULT    Open(char *lpFilename)                  = 0;
	virtual subtitles_t *GetSubtitles(DWORD frameNumber)         = 0;
	virtual MP_RESULT    Close()                                 = 0;
};

/*
 * MediaItemAudioDecoder:
 * ----------------------
 *
 * - Decodes audio to a buffer
 *
 */

class MediaItemAudioDecoder : public MediaItem {

public:

	virtual WAVEFORMATEX *GetAudioFormat()                                   = 0;
	virtual MP_RESULT     EmptyAudioBuffer()                                 = 0;

	virtual unsigned int  Decompress(void *buffer, unsigned int size) = 0;

};

/*
 * MediaItemAudioRenderer:
 * -----------------------
 *
 * - Renderer audio to system soundcard
 *
 */

/* 
 * Audio Callback
 */

typedef unsigned int (*MediaAudioCallback)(void *lpData, void *buffer, unsigned int size);


class MediaItemAudioRenderer : public MediaItem {

public:

	virtual MP_RESULT     Open(HWND hwnd, WAVEFORMATEX *inFormat)                = 0;

	virtual MP_RESULT     SetCallback(void *lpData, MediaAudioCallback callback) = 0;
	virtual MP_RESULT     SetVolume(unsigned int volume)                         = 0;

	virtual unsigned long GetAudioTime()                                         = 0;
	virtual MP_RESULT     Bufferize()                                            = 0;

	virtual MP_RESULT     Start()                                                = 0;
	virtual MP_RESULT     Pause()                                                = 0;
	virtual MP_RESULT     Stop()                                                 = 0;

	virtual MP_RESULT     Close()                                                = 0;
};


#endif // MEDIA_CLASSES_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -