主题 : s3c6410解网络h264码流 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 23802
精华: 0
发帖: 24
金钱: 120 两
威望: 24 点
综合积分: 48 分
注册时间: 2010-06-26
最后登录: 2015-01-22
楼主  发表于: 2011-01-29 13:32

 s3c6410解网络h264码流

h264码流经网络传输的格式是 sps pps pps sei 四个包 后紧跟 10个i帧,然后循环下去。
请问各位大哥怎么用6410解码啊??
现在疑问是连续读取这14个包后送到解码器中,还是读取一个包就送到解码器?
             sps中包含有图像的分辨率等信息。

我是这样设置的 h264buf是读取14个包的数据,h264len是数据大小。
        // FrameExtractor Initialization
        pCTX = FrameExtractorInit(FRAMEX_IN_TYPE_MEM, delimiter_h264, sizeof(delimiter_h264), 1);  
        file_strm.p_start = file_strm.p_cur = (unsigned char *)h264buf;
        file_strm.p_end = (unsigned char *)(h264buf + h264len);
        FrameExtractorFirst(pCTX, &file_strm);

        //  H264 CONFIG stream extraction
        nFrameLeng = ExtractConfigStreamH264(pCTX, &file_strm, pStrmBuf, INPUT_BUFFER_SIZE, NULL);
        
        // 3. Configuring the instance with the config stream  (SsbSipH264DecodeExe)                            
        if (SsbSipH264DecodeExe(handle, nFrameLeng) != SSBSIP_H264_DEC_RET_OK) {
            printf("H.264 Decoder Configuration Failed.\n");
            return -1;
        }
但是这样的话,连续读取14个包再解码,延时也太大点吧???
请各位帮帮我啊???
该如何解码,例子是解的是文件,码流就不知道该如何解了?
级别: 新手上路
UID: 23802
精华: 0
发帖: 24
金钱: 120 两
威望: 24 点
综合积分: 48 分
注册时间: 2010-06-26
最后登录: 2015-01-22
1楼  发表于: 2011-01-29 17:02
原来是这样的!
unsigned int    pYUVBuf[2];    
        
        // FrameExtractor Initialization
        pCTX = FrameExtractorInit(FRAMEX_IN_TYPE_MEM, delimiter_h264, sizeof(delimiter_h264), 1);  
        file_strm.p_start = file_strm.p_cur = (unsigned char *)imgbuf;
        file_strm.p_end = (unsigned char *)(imgbuf + imglen);
        FrameExtractorFirst(pCTX, &file_strm);
        
    if (opt_debug)
        printf("image leng=%ld   ",(long)imglen);            
        

            // Next H.264 VIDEO stream
            nFrameLeng = NextFrameH264(pCTX, &file_strm, pStrmBuf, INPUT_BUFFER_SIZE, NULL);

            
            printf("nFrameLeng=%d \n",nFrameLeng);
              
            // 5. DECODE (SsbSipH264DecodeExe)  
            if (SsbSipH264DecodeExe(handle, nFrameLeng) != SSBSIP_H264_DEC_RET_OK)
                return -1;

            // 6. Obtaining the Output Buffer (SsbSipH264DecodeGetOutBuf)                
            SsbSipH264DecodeGetConfig(handle, H264_DEC_GETCONF_PHYADDR_FRAM_BUF, pYUVBuf);
    

    

            /* 7. Set specific ioctl - MFC output physical address */
            ctrl.id = V4L2_CID_MPEG_STREAM_PID_VIDEO;
            ctrl.value = pYUVBuf[0];    // COMPOSITE

            ret = ioctl(tvout_fp, VIDIOC_S_CTRL, &ctrl);
            if(ret < 0) {
                printf("V4L2 APPL : ioctl(VIDIOC_S_CTRL) failed\n");
                return -1;
            }
            //usleep(15000);    // 15ms delay for natural video display
            
            /* Start TV_OUT */            
            if (!tvout_status) {    // peter added                
                ret = ioctl(tvout_fp, VIDIOC_S_TVOUT_ON, NULL);    // Just once executed because of the free-run mode        
                if(ret < 0) {
                    printf("V4L2 APPL : ioctl(VIDIOC_S_TVOUT_ON) failed\n");
                    return -1;
                }
                tvout_status = 1;
            }
            

        
    return 0;    
级别: 新手上路
UID: 23802
精华: 0
发帖: 24
金钱: 120 两
威望: 24 点
综合积分: 48 分
注册时间: 2010-06-26
最后登录: 2015-01-22
2楼  发表于: 2011-01-29 17:04
前面初始化完成后 每读取一帧数据就发往上面的解码显示函数中!
tym
级别: 新手上路
UID: 41260
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
综合积分: 2 分
注册时间: 2011-03-27
最后登录: 2011-04-07
3楼  发表于: 2011-03-27 20:54
你好! 我和你遇到同样的问题, 求程序源代码! 不甚感激!! tym1988529@126.com
级别: 侠客
UID: 41129
精华: 0
发帖: 64
金钱: 320 两
威望: 64 点
综合积分: 128 分
注册时间: 2011-03-26
最后登录: 2014-08-09
4楼  发表于: 2011-04-11 14:35
请问楼主,驱动源码内核里有吗?