嵌入式专题: S5PV210 - MPEG4编码

发布者:Blissful5最新更新时间:2025-01-06 来源: cnblogs关键字:S5PV210 手机看文章 扫描二维码
随时随地手机看文章

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


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


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


#include

#include

#include

#include


#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 引用地址:嵌入式专题: S5PV210 - MPEG4编码

上一篇:基于s5pv210的uboot总结
下一篇:三星s5pv210之芯灵思Sin210与Ti Beaglebone Black之对比

推荐阅读最新更新时间:2026-02-19 11:49

德州仪器开发最快的具备 40 倍速音乐 CD 抓轨性能的MPEG4 AAC 编码器库
TI 高速编码系统解决方案新增 EVM 与编码器 2006 年 7 月 4 日,北京讯 日前,德州仪器 (TI) 宣布 AAC 编码器库的开发工作已经完成,该库采用基于 Aureus 系列音频 DSP 的高速编码(HSE)应用软件,可实现高达40倍速的 CD 抓轨性能。与此前推出的采用 ATRAC320 编码器的 20 倍速 CD 抓轨速度相比,实现了显著的性能提升。采用 32 位浮点处理技术的超高速 AAC 编码器库于Tsukuba技术中心开发完成。TI 新型 HSE 系统解决方案可用于小型车载音频设备与迷你组合音响等应用中。 快速易行的 CD 抓轨 Aureus DSP
[新品]
s5pv210编译qt
编译tslib,执行make时提示undefined reference to `rpl_malloc' 是因为config.h.in文件中有 /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc 把#undef malloc注释掉重新make即可 requires installation of untrusted packages 一、在源里面加入软件下载地址; 二、直接用“sudo apt-get install 软件包名”这个命令安装。 在出现提示的时候按y,同意安装即可。 e
[单片机]
S5PV210 移植无线wifi网卡 MT7601
一、准备工作 1、MT7601驱动下载 点击下载 2、插入usb WiFi 启动开发板linux,lsusb查看usb驱动 Bus 001 Device 003: ID 148f:7601看到的是该驱动的厂家设备信息 3、解压源码到linux下,确认USB的VID和PID,在rtusb_dev_id.c中 USB_DEVICE_ID rtusb_dev_id = { #ifdef RT6570 {USB_DEVICE(0x148f,0x6570)}, /* Ralink 6570 */ #endif /* RT6570 */ {USB_DEVICE(0x148f, 0x7650)}, /* MT7650 */ #ifdef
[单片机]
<font color='red'>S5PV210</font> 移植无线wifi网卡 MT7601
【ARM裸机s5pv210】Makefile
Linux命令行中输入 make 命令: 1、make 会在当前目录下找名字叫“Makefile”或“makefile”的文件。 2、如果找到,它会找文件中的第一个目标文件(target),并把这个文件作为最终的目标文件。 3、如果 目标文件不存在,或是 目标文件所依赖的后面的 .o 文件的文件修改时间要比 目标文件 这个文件新,那么,他就会执行后面所定义的命令来生成 edit 这个文件。 4、如果 目标文件所依赖的.o 文件也存在,那么 make 会在当前文件中找目标为.o 文件的依 赖性,如果找到则再根据那一个规则生成.o 文件。(这有点像一个堆栈的过程) 5、当然,你的 C 文件和 H 文件是存在的啦,于是 make
[单片机]
【ARM裸机s5pv210 】旧版本交叉编译工具链配置
旧版本交叉编译工具链的安装 1.cd /usr/local/ mkdir arm tar -jxvf arm-2009q3.tar.bz2 cd /usr/local/arm/arm-2009q3/bin bash mk-arm-linux-.sh sudo gedit ~/.bashrc 添加 export PATH=/usr/local/arm/arm-2009q3/bin:$PATH source ~/.bashrc 2.安装32位库 sudo apt-get update apt-get update sudo apt-get install lib32ncurses5-dev 3./usr/local/arm/arm
[单片机]
【ARM裸机s5pv210 】重定位操作
makefile final.bin: start.o led.o arm-linux-ld -Tlink.lds -o start.elf $^ //link.lds为链接脚本,指定链接地址 arm-linux-objcopy -O binary start.elf final.bin arm-linux-objdump -D start.elf start_elf.dis %.o : %.S arm-linux-gcc -o $@ $ -c -nostdlib %.o : %.c arm-linux-gcc -o $@ $ -c -nostdlib clean: rm *.o *
[单片机]
【ARM裸机s5pv210 】GPIO
GPJ0CON 寄存器共32位,每个引脚用4位控制,16进制的话正好一个数可以控制一个引脚 GPJ0DAT 寄存器共8位,每个引脚用1位控制,16进制的话2个数控制8个引脚 小实验测试: //Makefile文件 led.bin: led.o arm-linux-ld -Ttext 0x0 -o led.elf $^ arm-linux-objcopy -O binary led.elf led.bin %.o : %.S arm-linux-gcc -o $@ $ -c %.o : %.c arm-linux-gcc -o $@ $ -c clean: rm *.o *
[单片机]
【ARM裸机<font color='red'>s5pv210</font> 】GPIO
S5PV210之beep驱动从linux2.6.35.7移植到linux3.0.8
beep驱动从linux2.6.35.7内核移植到linux3.0.8,修改的部分为:   '='后面的为修改后的   .ioctl  =  .unlocked_ioctl   static int beep_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)   = static int beep_ioctl(struct file *file, unsigned int cmd, unsigned long arg)   beep_ioctl函数中struct inode *inode去掉,原因是b
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved