主题 : 有没有6410在wince下作视频压缩为H264的人啊?附问题源码!! 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 68172
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2012-04-19
最后登录: 2013-04-07
楼主  发表于: 2012-11-18 22:47

 有没有6410在wince下作视频压缩为H264的人啊?附问题源码!!

现在在做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;
}


级别: 新手上路
UID: 68172
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2012-04-19
最后登录: 2013-04-07
1楼  发表于: 2012-11-19 11:16
自己先顶一下!!还望指点!!!
级别: 新手上路
UID: 68172
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2012-04-19
最后登录: 2013-04-07
2楼  发表于: 2012-11-20 22:06
怎么没有人指点??再顶!!