主题 : 6410 从yuv到h264 硬编码 问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 38945
精华: 0
发帖: 41
金钱: 205 两
威望: 41 点
综合积分: 82 分
注册时间: 2011-03-03
最后登录: 2015-09-06
楼主  发表于: 2011-10-29 14:01

 6410 从yuv到h264 硬编码 问题

我使用yuv文件是三星的原资料文件test_320_240.yuv
转化出来的格式是这样的  




部分代码

in_fd=open("test.yuv",O_RDONLY);
    out_fd=open("out_test_264", O_RDWR | O_CREAT | O_TRUNC, 0644);
    if ( (in_fd < 0) || (out_fd < 0) )
    {
        printf("input/output file open error\n");

    }
    fstat(in_fd, &s);
    file_size = s.st_size;
    in_addr = (char *)mmap(0, file_size, PROT_READ, MAP_SHARED, in_fd, 0);
    if (in_addr == NULL)
    {
        printf("input file memory mapping failed\n");

    }
    frame_size    = (320 * 240 )*2 ;
    frame_count    = file_size / frame_size;
   // frame_count=10;
    printf("file_size : %d, frame_size : %d, frame count : %d\n", file_size, frame_size, frame_count);
    handle = SsbSipH264EncodeInit(320, 240, 1, 1, 1); (这里的参数我试过很多次了)
    if (handle == NULL)
    {
        printf( "Test_Encoder", "SsbSipH264EncodeInit Failed\n");
    }

// Setting multiple slices
    // This setting must be called before SsbSipH264EncodeExe()
    slices[0] = 0;    // 0 for single, 1 for multiple
    slices[1] = 4;    // count of slices
    SsbSipH264EncodeSetConfig(handle, H264_ENC_SETCONF_NUM_SLICES, slices);
    ret = SsbSipH264EncodeExe(handle);

    p_inbuf = (unsigned char*)SsbSipH264EncodeGetInBuf(handle, 0);
    backup_frame_cnt = frame_count;

    while (frame_count>0)
    {
        printf("frame count : %d\n", frame_count);

        // copy YUV data into input buffer
        memcpy(p_inbuf, in_addr, frame_size);
        in_addr += frame_size;

        ret = SsbSipH264EncodeExe(handle);
        if (frame_count == backup_frame_cnt)
        {
            SsbSipH264EncodeGetConfig(handle, H264_ENC_GETCONF_HEADER_SIZE, &hdr_size);
            printf("Header Size : %d\n", hdr_size);
        }
        p_outbuf = (unsigned char*)SsbSipH264EncodeGetOutBuf(handle, &size);
      
            write(out_fd, p_outbuf, size);
            
        
        frame_count--;
    }

输出结果:
file_size : 153600, frame_size : 153600, frame count : 1
num slices[0] = 0
num slices[1] = 4
frame count : 1
Header Size : 20


有空的帮我看下 我的错误再哪里
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2011-10-29 15:49
我们已经提供了jpeg编码和视频编码的例子,见最新光盘
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 新手上路
UID: 38945
精华: 0
发帖: 41
金钱: 205 两
威望: 41 点
综合积分: 82 分
注册时间: 2011-03-03
最后登录: 2015-09-06
2楼  发表于: 2011-10-29 23:49
就算是用官方的例子,也是出现这个问题。希望也有这问题的朋友留个言。解码是没问题的。
级别: 新手上路
UID: 38945
精华: 0
发帖: 41
金钱: 205 两
威望: 41 点
综合积分: 82 分
注册时间: 2011-03-03
最后登录: 2015-09-06
3楼  发表于: 2011-10-30 12:12
问题解决了 无驱摄像头提取到的数据是yuv422格式的 硬编码需要的格式是420的  将422格式转换为yuv420 然后再硬编码 就可以了.

我用快播直接播放h264文件的时候 图片特别快.是不是正常现象啊?
级别: 新手上路
UID: 43631
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2011-04-18
最后登录: 2012-07-04
4楼  发表于: 2011-11-23 21:15
楼主,怎么从yuv422转换成yuv420的,谢谢
级别: 新手上路
UID: 71606
精华: 0
发帖: 30
金钱: 150 两
威望: 30 点
综合积分: 60 分
注册时间: 2012-06-07
最后登录: 2012-06-28
5楼  发表于: 2012-06-13 18:13
楼主。。可否交流下。。我正在做这个项目。我的qq124381541