我想说不台的平台,如tiny210和x210。它们的头文件是有稍微区别的。

我这个是x210下的代码。但都须要注意的是NV12T与NV12的问题,默认要求输入的图片是NV12T,经过调整之后,能够同意用NV12。

即便如此。NV12格式的图片也不好拿到啊。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> #include "../mfc/SsbSipMfcApi.h"
#include "../mfc/MfcConvert.h"
#include "../mm/MMClock.h" int test_enc_mpeg4()
{
MMClock clock;
clock.Adjust(1000); SSBSIP_MFC_ERROR_CODE ret = MFC_RET_OK; // 打开
unsigned int buf_type = CACHE;
void* handle = SsbSipMfcEncOpen();
if(handle == NULL)
{
printf("failed to open mfc device!\n");
return -1;
}
printf("== SsbSipMfcDecOpen OK \n"); int img_width = 640;
int img_height = 480; // 初始化
SSBSIP_MFC_ENC_MPEG4_PARAM param;
memset(¶m, 0, sizeof(param));
param.codecType = MPEG4_ENC;
param.SourceWidth = img_width;
param.SourceHeight = img_height;
param.FrameMap = NV12_LINEAR; // 使用linear param.IDRPeriod = 20; // 能够大于3吗?
param.SliceMode = 0;
param.SliceArgument = 1;
param.RandomIntraMBRefresh = 0; // ? // 不使用frame based rate control
param.EnableFRMRateControl = 1;
param.TimeIncreamentRes = 1000;
param.VopTimeIncreament = 40;
param.Bitrate = 4000000; param.FrameQp = 1;
param.FrameQp_P = 1;
param.FrameQp_B = 1;
param.QSCodeMax = 45;
param.QSCodeMin = 20;
param.CBRPeriodRf = 2; // 不使用自己定义padding
param.PadControlOn = 0;
param.LumaPadVal = 0;
param.CbPadVal = 0;
param.CrPadVal = 0; param.ProfileIDC = 66;
param.LevelIDC = 22;
param.NumberBFrames = 0;
param.DisableQpelME = 0; if(SsbSipMfcEncInit(handle, ¶m) != MFC_RET_OK)
{
printf("failed to init encoder !\n");
return -1;
} /* 得到输入缓冲区地址 */
SSBSIP_MFC_ENC_INPUT_INFO inbuf;
if(SsbSipMfcEncGetInBuf (handle, &inbuf) != MFC_RET_OK)
{
printf("failed to get in buf !\n");
return 0;
} printf("in buf: Y (addr=%08X, size=%d), CbCr (addr=%08X, size=%d) \n"
, inbuf.YVirAddr, inbuf.YSize
, inbuf.CVirAddr, inbuf.CSize
); /* 得到header */
SSBSIP_MFC_ENC_OUTPUT_INFO outbuf;
ret = SsbSipMfcEncGetOutBuf (handle, &outbuf);
if(ret != MFC_RET_OK)
{
printf("failed to get output (%d) \n", ret);
return -1;
}
printf("saving header: %d bytes \n", outbuf.headerSize);
if(1)
{
FILE* fp = fopen("a00.mpeg4", "wb");
fwrite(outbuf.StrmVirAddr, 1, outbuf.headerSize, fp);
fclose(fp);
} int y_size = img_width * img_height;
int c_size = y_size / 2; /* 读取图像 */
FILE* fp = fopen("k00.nv12", "rb");
int n1 = fread(inbuf.YVirAddr, 1, y_size, fp);
int n2 = fread(inbuf.CVirAddr, 1, c_size, fp);
printf("read bytes: n1=%d, n2=%d \n", n1, n2); int count = 0;
while(count ++ < 3)
{
printf("... times: %d , now %d ...\n", count, (int) clock.PtsTime()); /* 编码 */
ret = SsbSipMfcEncExe(handle);
if(ret != MFC_RET_OK)
{
printf("failed encoding (%d) \n", ret);
return -1;
} /* 输出结果 */
SSBSIP_MFC_ENC_OUTPUT_INFO outbuf;
ret = SsbSipMfcEncGetOutBuf (handle, &outbuf);
if(ret != MFC_RET_OK)
{
printf("failed to get output (%d) \n", ret);
return -1;
} printf("output: frame type=%d, size=%d, header size=%d \n"
, outbuf.frameType
, outbuf.dataSize
, outbuf.headerSize); /* 保存成文件*/
char filename[128];
sprintf(filename, "a%02d.mpeg4", count); FILE* fp = fopen(filename, "wb");
fwrite(outbuf.StrmVirAddr, 1, outbuf.dataSize, fp);
fclose(fp); } SsbSipMfcEncClose(handle); return 0;
}

嵌入式专题: S5PV210 - MPEG4编码的更多相关文章

  1. 嵌入式 视频编码(H264)

    这几天在编写视频录制模块,所以,闲暇之余,又粗粗的整理了一下,主要是API,以备不时之用    摄像头获取的模拟信号通过经芯片处理(我们使用的是CX25825),将模拟信号转成数字信号,产生标准的IT ...

  2. 嵌入式 视频编码(H264)hi3518

    这几天在编写视频录制模块,所以,闲暇之余,又粗粗的整理了一下,主要是API,以备不时之用    摄像头获取的模拟信号通过经芯片处理(我们使用的是CX25825),将模拟信号转成数字信号,产生标准的IT ...

  3. 【DSP开发】德州仪器达芬奇五年之路七宗罪,嵌入式处理器架构之争决战2012

    芯片是产业链上游重要的一个环节,一颗小小的芯片具有极高的技术含量和价值,半导体行业每年都会有一个各大厂商营业额的排名,除去2009年,常年盘踞在前三名位置的分别是英特尔,三星半导体和德州仪器,英特尔凭 ...

  4. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放 license收费等 ...

  5. (转)MPEG4码流简单分析

    把MPEG4码流的分析和它的I,P,B Frame的判定方法在这里简要记录一下吧,供日后的翻看和大家的参考.   测试解码器测试了很久,由于需要将H264和MPEG4的码流进行分析和判断,并逐帧输入解 ...

  6. 基于哈夫曼编码的压缩解压程序(C 语言)

    这个程序是研一上学期的课程大作业.当时,跨专业的我只有一点 C 语言和数据结构基础,为此,我查阅了不少资料,再加上自己的思考和分析,实现后不断调试.测试和完善,耗时一周左右,在 2012/11/19 ...

  7. 集显也能硬件编码:Intel SDK && 各种音视频编解码学习详解

    http://blog.sina.com.cn/s/blog_4155bb1d0100soq9.html INTEL MEDIA SDK是INTEL推出的基于其内建显示核心的编解码技术,我们在播放高清 ...

  8. 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...

  9. 基于Linux的视频传输系统(上大学时參加的一个大赛的论文)

    文件夹 1原创性声明----------------------------------------------------3 2 摘要-------------------------------- ...

随机推荐

  1. 【转】蘑菇街面试经历(已拿到offer)

    最近正好接到了蘑菇街的面试通知,顿时很欣喜,还在等通知,不知结果如何. 首先安排了一次电话面试,大体内容时现在工作的一个状态,主要负责的项目功能,模块,以及架构例如,高并发网站优化,负载均衡等等,还会 ...

  2. Android AIDL实例解析

    AIDL这项技术在我们的开发中一般来说并不是很常用,虽然自己也使用新浪微博的SSO登录,其原理就是使用AIDL,但是自己一直没有动手完整的写过AIDL的例子,所以就有了这篇简单的文章. AIDL(An ...

  3. [置顶] kubernetes--Init Container

    概念 Init Container就是做初始化工作的容器.可以有一个或多个,如果有多个,这些 Init Container 按照定义的顺序依次执行,只有所有的InitContainer 执行完后,主容 ...

  4. LNMP第一部分环境搭建

    1. MySQL安装(同LAMP里面的安装方法)2.  php安装wget  http://cn2.php.net/distributions/php-5.4.37.tar.bz2tar jxf ph ...

  5. log4j教程 11、日志记录到文件

    要写日志信息到一个文件中,必须使用org.apache.log4j.FileAppender.有以下FileAppender的配置参数: FileAppender配置: 属性 描述 immediate ...

  6. web-inf文件夹的使用

    web-inf文件夹在正常情况下系统是不允许外界直接访问的,访问里面的文件就会出现404错误,但是系统可以自身进行访问,所有要使系统去访问的话就需要使用拦截控制器去接受外界命令,由控制器来转发访问请求 ...

  7. git学习——查看提交历史

    git log可以查看提交历史: 用-p选项展开显示每次提交的内容差异,用-2则仅显示最近两次的更新:git log -p -2 在-p选项后面使用--word-diff选项进行单词层面的对比.这其中 ...

  8. mysql kill process解决死锁

    mysql使用myisam的时候锁表比较多,尤其有慢查询的时候,造成死锁.这时需要手动kill掉locked的process.使他释放. (以前我都是重起服务)..惭愧啊.. 演示:(id 7是我用p ...

  9. <<= 什么意思?|=什么意思?

    <<= 什么意思?|=什么意思?   x <<= 2; // x = x << 2; y |= 8; // y = y | 8;   这些都是被缩写了!位运算-- ...

  10. react-native 常用组件的用法(一)

    1.View组件 View是一个支持Flexbox布局.样式.一些触摸处理.和一些无障碍功能的容器,并且它可以放到其它的视图里,也可以有任意多个任意类型的子视图. View的设计初衷是和StyleSh ...