现在在做6410在wince下的视频压缩,压缩为H264格式,但是总是出现错误。源码如下:还望大家多多指点!!
#include <Windows.h>
#include <stdio.h>
//#include <sys\stat.h>
//#include <io.h>
#include "FrameExtractor.h"
#include "H264Frames.h"
#include "SsbSipH264Decode.h"
#include "SsbSipH264Encode.h"
#include "SsbSipMfcDecode.h"
#include "SsbSipVC1Decode.h"
#include "VC1Frames.h"
/***************************入口函数****************************************/
int _tmain(int argc,_TCHAR* argv[])
{
//获取输入的视频数据
char *PInputfile = NULL;
FILE *fp_in = NULL;
FILE *fp_out = NULL;
PInputfile = "\\Storage Card\\input_qvga.yuv";
fp_in=fopen(PInputfile,"rb");
if (fp_in==NULL)
{
printf("InputFile is not found!\n");
}
else
printf("InputFile open succeed!\n");
//创建编码存储文件
fp_out = fopen("OUTPUT.h264","wb");
if (fp_out==NULL)
{
printf("Creat outputfile fail!\n");
}
else
printf("Name of encode file is OUTPUT.264.\n");
int width = 320; //视频宽
int hight = 240; //视频高
int frame_rate = 15;//帧率
int bitrate = 1000;//帧率
int gop_num = 30;//
//初始化编码
void *handle = NULL;
handle = SsbSipH264EncodeInit(width , hight, frame_rate, bitrate, gop_num);
int num_silces = 1;
SsbSipH264EncodeSetConfig(handle,H264_ENC_SETCONF_NUM_SLICES,&num_silces);
if (SsbSipH264EncodeExe(handle)==SSBSIP_H264_ENC_RET_OK)
{
printf("Init succeed!\n");
}
else
printf("Init fail!\n");
//获取输入的数据地址
unsigned char *p_inbuf,*p_outbuf;
int i;
int ret=0;
int frame_count=100;
int hdr_size=0;
long size=0;
int nWriteSize=0;
p_inbuf=(unsigned char *)SsbSipH264EncodeGetInBuf(handle,0);
for (i=0;i<frame_count;i++)
{
printf("Now is %d frame!\n",i);
//拷贝yuv数据到buffer中
if((fread(p_inbuf,1,(width*hight*3)>>1,fp_in))!=((width*hight*3)>>1))
printf("Copy date error!\n");
do
{
ret = SsbSipH264EncodeExe(handle) ;
if(ret == SSBSIP_H264_ENC_RET_OK)
break;
else
{
if(ret == -1004)
{
printf("[APP] MFC Sleeping -> Wait!!! .\r\n");
Sleep(1000);
}
else
break;
}
}while(1);
if (ret != SSBSIP_H264_ENC_RET_OK)
{
printf("H264 Encoder Failed! :: ret=%d \r\n", ret);
// break;
}
p_outbuf=(unsigned char *)SsbSipH264EncodeGetOutBuf(handle,&size);
printf("Output Buf is 0x%x ,size=%d\n",p_outbuf,size);
if(i<frame_count)
{
nWriteSize=fwrite(p_outbuf,1,size,fp_out);
if (nWriteSize!=size)
{
printf("fwrite error size=%d\n",nWriteSize);
// break;
}
}
printf("Encode succeed!\n");
}
SsbSipH264EncodeDeInit(handle);
printf("Deinit!\n");
fclose(fp_in);
fclose(fp_out);
return 0;
}