#include <stdio.h>
extern "C"
{
#include <libavformat/avformat.h>
};
AVStream *add_stream(AVFormatContext *oc, AVCodec **codec, enum AVCodecID codec_id);
void open_video(AVFormatContext *oc, AVCodec *codec, AVStream *st);
int CreateMp4(const char* filename);
void WriteVideo(void* data, int nLen);
void CloseMp4();
#include"ffmpeg_mp4.h"
int ptsInc = 0;
int waitkey = 1;;
int STREAM_FRAME_RATE = 25;
AVFormatContext* m_pOc;
int vi;
bool isIdrFrame2(uint8_t* buf, int len){
switch (buf[0] & 0x1f){
case 7: // SPS
return true;
case 8: // PPS
return true;
case 5:
return true;
case 1:
return false;
default:
return false;
break;
}
return false;
}
bool isIdrFrame1(uint8_t* buf, int size){
//主要是解析idr前面的sps pps
// static bool found = false;
// if(found){ return true;}
int last = 0;
for (int i = 2; i <= size; ++i){
if (i == size) {
if (last) {
bool ret = isIdrFrame2(buf+last ,i - last);
if (ret) {
//found = true;
return true;
}
}
} else if (buf[i - 2]== 0x00 && buf[i - 1]== 0x00 && buf[i] == 0x01) {
if (last) {
int size = i - last - 3;
if (buf[i - 3]) ++size;