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

📄 decapsavi.h

📁 <VC++视频音频开发>一书的光盘资料。
💻 H
字号:
/**************************************************************************************
 *                                                                                    *
 *                                                                                    *
 **************************************************************************************/

#ifndef DECAPS_AVI_H
#define DECAPS_AVI_H



#include "MediaClasses.h"
#include "mmreg.h"
#include <stdio.h>

#define AVI_MAX_LEN 2000000000
#define HEADERBYTES 2048
#define PAD_EVEN(x) ( ((x)+1) & ~1 )
#define AVIIF_KEYFRAME	0x00000010L



typedef struct
{
  long pos;
  long len;
  long flags;

} video_index_entry;

typedef struct
{
   long pos;
   long len;
   long tot;

} audio_index_entry;



class MediaDecapsAVI : public MediaItemDecaps {

public:

	BITMAPINFOHEADER   bitmapinfoheader;
	MPEGLAYER3WAVEFORMAT waveformatex;
    long               width;             
    long               height;            
    double             fps;               
    char               compressor[8];     
    long               video_strn;        
    long               video_frames;      
    char               video_tag[4];      
    long               video_pos;         
    long               a_fmt;             
    long               a_chans;           
    long               a_rate;            
    long               a_bits;            
    long               audio_strn;        
    long               audio_bytes;       
    long               audio_chunks;      
    char               audio_tag[4];      
    long               audio_posc;        
    long               audio_posb;        
    long               pos;               
    long               n_idx;             
    long               max_idx;           
    char               (*idx)[16]; 
    video_index_entry *video_index;
    audio_index_entry *audio_index;
    long               last_pos;          
    long               last_len;          
    int                must_use_index;    
    long               movi_start;

	HANDLE             hIOMutex;
	MediaItemInput    *input;

	int  IsAVI();
	int  FillHeader(int getIndex);
	int  ReFillIndex();
	int  AddIndexEntry(char *tag, 
		 	           long flags, 
	 		           long pos, 
	 		           long len);
	BOOL isKeyframe(long frame);
	int  SampleSize();

public:

	MediaDecapsAVI();
	~MediaDecapsAVI();


	media_type_t  GetType();
	char         *GetName();
	
	MP_RESULT     Connect(MediaItem *item);
	MP_RESULT     ReleaseConnections();

	DWORD         GetCaps();
	MP_RESULT     Configure(HINSTANCE hInstance, HWND hwnd);



	unsigned int  GetNumberOfVideoStreams();
	unsigned int  GetNumberOfAudioStreams();

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

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

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

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

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

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

	MP_RESULT     SeekNextKeyFrame(unsigned int StreamId);
	MP_RESULT     SeekPreviousKeyFrame(unsigned int StreamId);
};

#endif 

⌨️ 快捷键说明

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