本文来自:
http://blog.chinaunix.net/uid-23093301-id-86406.html
#ifndef __DECODER_H_INCLUDE
#define __DECODER_H_INCLUDE
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include "avcodec.h"
#include "libavutil/mathematics.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "libavcodec/avcodec.h"
#ifdef __cplusplus
}
#endif /* __cplusplus */
#include
#include
#include
#include
using namespace std;
#define DEF_FRAME_SIZE 10844*5
typedef struct TFrameNode
{
AVPacket pkt;
void*
buff[DEF_FRAME_SIZE];
int size;
}TFrameNode;
class CDecoder
{
public:
CDecoder();
~CDecoder();
void push_frame(void* img,int size);
AVPacket* pop_frame();
void try_show(AVFrame* picture,int width=320,int height=240);
char* readall_file(const string& file,int & size);
private:
AVFrame * do_alloc_picture(int pix_fmt, int width, int height);
private:
char filename [256];
vector m_frame_que;
int cur_process_pos;
int cur_append_pos;
int num_has_append;
TFrameNode
m_convert_buff;
private:
//////////////////////// for thread safe
pthread_cond_t
m_pthread_cond;
pthread_mutex_t
m_mutex;
};
#endif