- sudo dnf install librockchip_mpp-devel
复制代码
- https://github.com/rockchip-linux/mpp
- 或 https://github.com/HermanChen/mpp
复制代码
- cd build/linux/aarch64
复制代码
- ./make-Makefiles.bash
复制代码
- ret = mpp_create(&ctx, &mpi);
- if (MPP_OK != ret) {
- mpp_err("mpp_create failed\n");
- goto MPP_TEST_OUT;
- }
复制代码
- mpi_cmd = MPP_DEC_SET_PARSER_SPLIT_MODE;
- param = &need_split;
- ret = mpi->control(ctx, mpi_cmd, param);
- if (MPP_OK != ret) {
- mpp_err("mpi->control failed\n");
- goto MPP_TEST_OUT;
- }
复制代码
- ret = mpp_init(ctx, MPP_CTX_DEC, MppCodingType::MPP_VIDEO_CodingAVC);
- if (MPP_OK != ret) {
- mpp_err("mpp_init failed\n");
- goto MPP_TEST_OUT;
- }
复制代码
- mPrepCfg.change = MPP_ENC_PREP_CFG_CHANGE_INPUT | MPP_ENC_PREP_CFG_CHANGE_FORMAT;
- mPrepCfg.width = mWidth;
- mPrepCfg.height = mHeight;
- mPrepCfg.hor_stride = mHStride;
- mPrepCfg.ver_stride = mVStride;
- mPrepCfg.format = mFrameFormat;
- int ret = mMppApi->control(mMppCtx, MPP_ENC_SET_PREP_CFG, &mPrepCfg);
复制代码
- mRcCfg.change = MPP_ENC_RC_CFG_CHANGE_ALL;
- /*
- * rc_mode - rate control mode
- * Mpp balances quality and bit rate by the mode index
- * Mpp provide 5 level of balance mode of quality and bit rate
- * 1 - only quality mode: only quality parameter takes effect
- * 2 - more quality mode: quality parameter takes more effect
- * 3 - balance mode : balance quality and bitrate 50 to 50
- * 4 - more bitrate mode: bitrate parameter takes more effect
- * 5 - only bitrate mode: only bitrate parameter takes effect
- */
- if (mIsCBR) {
- mRcCfg.rc_mode = (MppEncRcMode) MPP_ENC_RC_MODE_CBR;
- } else {
- mRcCfg.rc_mode = (MppEncRcMode) MPP_ENC_RC_MODE_VBR;
- }
- /*
- * quality - quality parameter
- * mpp does not give the direct parameter in different protocol.
- * mpp provide total 5 quality level 1 ~ 5
- * 0 - auto
- * 1 - worst
- * 2 - worse
- * 3 - medium
- * 4 - better
- * 5 - best
- */
- if (mQuality > 4) {
- mRcCfg.quality = (MppEncRcQuality)MPP_ENC_RC_QUALITY_BEST;
- } else {
- mRcCfg.quality = (MppEncRcQuality)mQuality;
- }
- int bps = mBps;
- switch (mRcCfg.rc_mode) {
- case MPP_ENC_RC_MODE_CBR:
- // constant bitrate has very small bps range of 1/16 bps
- mRcCfg.bps_target = bps;
- mRcCfg.bps_max = bps * 17 / 16;
- mRcCfg.bps_min = bps * 15 / 16;
- break;
- case MPP_ENC_RC_MODE_VBR:
- // variable bitrate has large bps range
- mRcCfg.bps_target = bps;
- mRcCfg.bps_max = bps * 3 / 2;
- mRcCfg.bps_min = bps * 1 / 2;
- break;
- default:
- abort();
- }
- /* fix input / output frame rate */
- mRcCfg.fps_in_flex = 0;
- mRcCfg.fps_in_num = mFps;
- mRcCfg.fps_in_denorm = 1;
- mRcCfg.fps_out_flex = 0;
- mRcCfg.fps_out_num = mFps;
- mRcCfg.fps_out_denorm = 1;
- mRcCfg.gop = mIInterval; /* i frame interval */
- mRcCfg.skip_cnt = 0;
- int ret = mMppApi->control(mMppCtx, MPP_ENC_SET_RC_CFG, &mRcCfg);
复制代码
- mCodecCfg.h264.change = MPP_ENC_H264_CFG_CHANGE_PROFILE |
- MPP_ENC_H264_CFG_CHANGE_ENTROPY |
- MPP_ENC_H264_CFG_CHANGE_TRANS_8x8 |
- MPP_ENC_H264_CFG_CHANGE_QP_LIMIT;
- /*
- * H.264 profile_idc parameter
- * 66 - Baseline profile
- * 77 - Main profile
- * 100 - High profile
- */
- mCodecCfg.h264.profile = 100;
- /*
- * H.264 level_idc parameter
- * 10 / 11 / 12 / 13 - qcif@15fps / cif@7.5fps / cif@15fps / cif@30fps
- * 20 / 21 / 22 - cif@30fps / half-D1@@25fps / D1@12.5fps
- * 30 / 31 / 32 - D1@25fps / 720p@30fps / 720p@60fps
- * 40 / 41 / 42 - 1080p@30fps / 1080p@30fps / 1080p@60fps
- * 50 / 51 / 52 - 4K@30fps
- */
- mCodecCfg.h264.level = 40;
- mCodecCfg.h264.entropy_coding_mode = 1;
- mCodecCfg.h264.cabac_init_idc = 0;
- mCodecCfg.h264.transform8x8_mode = 1;
- if (mRcCfg.rc_mode == MPP_ENC_RC_MODE_CBR) {
- mCodecCfg.h264.qp_init = 10;
- mCodecCfg.h264.qp_min = 4;
- mCodecCfg.h264.qp_max = 30;
- mCodecCfg.h264.qp_max_step = 16;
- }
- int ret = mMppApi->control(mMppCtx, MPP_ENC_SET_CODEC_CFG, &mCodecCfg);
复制代码
yaowei 发表于 2019-4-18 11:44
那么视频解码必须要用C++写的?python代码是没有的吗?
ronyuzhang 发表于 2019-4-30 18:42
官方mipi的camera 什么时候发售
kiwi 发表于 2019-5-8 18:18
MPP兼容的ffmpeg,是指用用这个ffmpeg去编解码会调用到vpu吗
hzk8656511 发表于 2019-5-16 11:21
板子跑的是android,MPP有没有在linux下编译andorid mp.so 的详细步骤
jefferyzhang 发表于 2019-5-17 11:05
mpp的build目录里有安卓编译。
我们的android也是自带libmpp的,无需编译。
android的media_codec默认就 ...
yaowei 发表于 2019-4-18 17:17
我也成功用起来了,不止需要gstreamer-rockchip,还需要其他一些库,现在可以解码视频和rtsp摄像头。 ...
guanyuqin 发表于 2019-5-17 15:27
你好,我想问下你解码rtsp摄像头是硬解码么,视频流的压缩格式是什么
yaowei 发表于 2019-5-20 08:47
怎么看是硬解还是软解,反正我之前看不了摄像头的,装了一些东西之后就可以看到摄像头的视频了,而且还挺 ...
newstarqu 发表于 2019-6-11 09:55
MPP 解码出来的YUV可以再继续解码成RGB吗?用硬解码
mayl88222 发表于 2019-7-15 18:28
怎么可以通过jni方式调用呢
- decoder_get_frame get err info:1 discard:0
复制代码
这个错误,有是什么情况?盗骊_l 发表于 2019-7-16 17:29
我在Android上编译了mpp,demo程序也能正常跑。我自己写了个程序按照demo的使用方式,也能正常解码,但是发 ...
zhouzhouzlove 发表于 2019-8-20 09:18
楼主大神,我在板子上安装了瑞芯微官网的ffmpeg,并且跑了个存储rtsp到本地的例子。但是我怎么知道是用的硬 ...
jefferyzhang 发表于 2019-8-20 10:58
最简单看CPU占用率就知道了,ARM的cpu做264软件速度很慢的,甚至大一点的视频码率是无法达到30fps的 ...
zhouzhouzlove 发表于 2019-8-20 11:06
是不是还可以这样:
从ffmpeg官网下载一个,编译安装这个库。
然后在编译自己的程序时,链接这个新的库, ...
jefferyzhang 发表于 2019-8-20 10:58
最简单看CPU占用率就知道了,ARM的cpu做264软件速度很慢的,甚至大一点的视频码率是无法达到30fps的 ...
zhouzhouzlove 发表于 2019-8-20 14:54
ffmpeg的编译安装是这样的,大神看下是否有问题,三部曲如下:
./configure --enable-shared --prefix=/op ...
jefferyzhang 发表于 2019-8-20 15:41
是的,ffmpeg软解会有较高的CPU占用率,当然你码率要不高,就320p的264,那区别不大。
走VPU解码CPU是几 ...
zhouzhouzlove 发表于 2019-8-20 16:20
首先多谢大神的耐心回复!
--enable-rkmpp enable Rockchip Media Process Platform code [n ...
jefferyzhang 发表于 2019-8-21 09:09
这个我真不知道- -# 因为这个库是另外一个部门维护的,你们可以直接在github上的issues里问他们问题。
我 ...
zhouzhouzlove 发表于 2019-8-20 16:20
首先多谢大神的耐心回复!
--enable-rkmpp enable Rockchip Media Process Platform code [n ...
kiwi 发表于 2019-8-21 10:23
你这个想法,我之前做过同样的事情,编译ffmpeg打开--enable-rkmpp需要先编译安装mpp,然后配置好mpp的pk ...
zhouzhouzlove 发表于 2019-8-21 17:21
然后配置好mpp的pkgconfig
少侠,这句话可以具体一点么?
kiwi 发表于 2019-8-22 16:04
就是配置其lib下的pkgconfig目录下的pc文件
zhouzhouzlove 发表于 2019-8-23 10:27
多谢少侠的回复!
我做了个实验:
1、只安装ffmpeg官网的ffmpeg4.0版本,用自己的程序去测试(解码rtsp流 ...
kiwi 发表于 2019-8-23 14:10
建议别捣鼓ffmpeg了,他们也只是对接了api,据说是有bug的,也不会提供ffmpeg的支持,用mpp是最好的,官 ...
zhouzhouzlove 发表于 2019-8-23 14:13
我现在在看mpp开发手册,感觉需要例子,也正在网上找,大神有没有小例子,我想这样可能会快点,随便硬解 ...
kiwi 发表于 2019-8-23 14:16
https://github.com/rockchip-linux/mpp
里面有相应的例子,结合mpp开发文档,容易理解 ...
zhouzhouzlove 发表于 2019-8-23 17:43
大神,我安装mpp的步骤是这样的,请看下是是否正确:
1、瑞芯微github下载mpp,
2、修改mpp/build/linux/aa ...
jefferyzhang 发表于 2019-8-25 17:37
看过去编译是没问题的,都能正常跑了。
没有要改源码的话可以用我们dnf安装即可。 ...
zhouzhouzlove 发表于 2019-8-26 09:13
在上面的解码的时候log里,有一个报错:
h264d_dpb: dpb_size error.
zhouzhouzlove 发表于 2019-8-28 17:59
mpi_dec_test
这个程序如果指定了输出文件,文件的类型是什么?我看好像不能指定输出类型。
...
jefferyzhang 发表于 2019-8-29 08:16
默认是NV12,可以设置输出rgb我记得。具体看下help,我也记不清楚了。
kiwi 发表于 2019-8-23 14:10
建议别捣鼓ffmpeg了,他们也只是对接了api,据说是有bug的,也不会提供ffmpeg的支持,用mpp是最好的,官 ...
zhouzhouzlove 发表于 2019-8-29 10:55
大佬好,我看了mpi_dec_test的源码,好像确实是没有解析rtsp协议得到h264裸流数据包的功能。
你看这样想 ...
jefferyzhang 发表于 2019-8-29 12:41
mpp_dec_test一直就在讲怎么喂数据,h264数据放package喂进去就可以了,并不复杂。
整个mpp库接口都是仿 ...
zhouzhouzlove 发表于 2019-8-31 09:57
楼主大神,是的,没错,我又来了。。。。。。。。
是这样的,我运行mpi_dec_test时,运行的时候,cpu占用率 ...
15992605143 发表于 2019-9-3 00:40
兼容MPP的ffmpeg解码出来的帧格式是:AV_PIX_FMT_DRM_PRIME,我尝试使用libswscale库转成RGB24,
结果该库 ...
15992605143 发表于 2019-9-3 00:40
兼容MPP的ffmpeg解码出来的帧格式是:AV_PIX_FMT_DRM_PRIME,我尝试使用libswscale库转成RGB24,
结果该库 ...
zhouzhouzlove 发表于 2019-8-29 10:55
大佬好,我看了mpi_dec_test的源码,好像确实是没有解析rtsp协议得到h264裸流数据包的功能。
你看这样想 ...
kiwi 发表于 2019-9-4 21:06
这样做是可以的,看看MPP文档中的MppPacket的用法,就直接把packet喂进去就行 ...
jefferyzhang 发表于 2019-9-1 00:37
正不正常放到项目里看。
你这里一帧一个print,cpu低于10%都不可能,还不限帧率,你这里应该解码都有好几 ...
zhouzhouzlove 发表于 2019-9-5 14:21
大佬,我现在基本上流程走通了,就只剩下一个问题:
如何使用mpp的动态库和头文件编译程序,之前是直接将 ...
jefferyzhang 发表于 2019-9-5 15:26
看不懂你在说什么。。。。
zhouzhouzlove 发表于 2019-9-5 15:45
抱歉,我的描述有问题:
是这样的,一开始我不太熟悉怎么使用mpp,所以就直接在mpp库自带的mpi_dec_test. ...
jefferyzhang 发表于 2019-9-5 18:06
我没用过这个接口,为啥会用这个接口分配buffer?
demo里有这么用的么?
zhouzhouzlove 发表于 2019-9-5 14:18
我目前这样做了,目前情况如下:
我是在mpi_dec_test的基础上做的修改,增加了ffmpeg的功能,添加了ffmpe ...
kiwi 发表于 2019-9-5 21:47
mpp_malloc就是申请一块内存罢了,用malloc也是一样的,二者没有区别
- public void encode(byte[] yuvFrame){
- int inputBufferIndex = codec.dequeueInputBuffer(-1);
- if (inputBufferIndex >= 0) {
- ByteBuffer inputBuffer;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- inputBuffer = codec.getInputBuffer(inputBufferIndex);
- } else {
- inputBuffer = codec.getInputBuffers()[inputBufferIndex];
- }
- pts = computePresentationTime(generateIndex);
- if (inputBuffer != null) {
- inputBuffer.clear();
- inputBuffer.put(yuvFrame, 0, yuvFrame.length);
- codec.queueInputBuffer(inputBufferIndex, 0, yuvFrame.length, pts, 0);
- }
- generateIndex += 1;
- }
- MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
- int outputBufferIndex = codec.dequeueOutputBuffer(bufferInfo, DEFAULT_TIMEOUT_US);
- while (outputBufferIndex >= 0) {
- ByteBuffer outputBuffer;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- outputBuffer = codec.getOutputBuffer(outputBufferIndex);
- } else {
- outputBuffer = codec.getOutputBuffers()[outputBufferIndex];
- }
- if (outputBuffer != null) {
- byte[] outData = new byte[bufferInfo.size];
- outputBuffer.get(outData);
- if (bufferInfo.flags == 2) {
- configByte = outData;
- } else if (bufferInfo.flags == 1) {
- byte[] keyframe = new byte[bufferInfo.size + configByte.length];
- System.arraycopy(configByte, 0, keyframe, 0, configByte.length);
- System.arraycopy(outData, 0, keyframe, configByte.length, outData.length);
- if (null != callback) {
- callback.onFrame(this, keyframe);
- }
- } else {
- if (null != callback) {
- callback.onFrame(this, outData);
- }
- }
- codec.releaseOutputBuffer(outputBufferIndex, false);
- }
- outputBufferIndex = codec.dequeueOutputBuffer(bufferInfo, DEFAULT_TIMEOUT_US);
- }
- }
- /**
- * Generates the presentation time for frame N, in microseconds.
- */
- private long computePresentationTime(long frameIndex) {
- return frameIndex * 1000000 / FPS;
- }
复制代码
swlmx 发表于 2019-9-10 14:33
楼主好。我在Android环境下用java的MediaCodec API读取YUV编码h.264,然后demsg显示要20毫秒编码一帧,达不 ...
jefferyzhang 发表于 2019-9-11 08:18
编码在VPU跑 300MHz情况下只能一路1080p30,
跑2路需要将频率提到400MHz或者更高 ...
swlmx 发表于 2019-9-12 15:54
那怎么提升VPU频率呢
kiwi 发表于 2019-8-23 14:10
建议别捣鼓ffmpeg了,他们也只是对接了api,据说是有bug的,也不会提供ffmpeg的支持,用mpp是最好的,官 ...
swlmx 发表于 2019-9-24 10:09
4. you can get demo about mpp applied to linux and android.
Liunx : https://github.com/WainDing ...
jefferyzhang 发表于 2019-9-24 10:38
https://github.com/c-xh/mediacodec_gl_decode_multi_h264_file
shopping 发表于 2019-9-25 11:02
楼主你好,看了贵司的 mpp开发参考 这一文档,发现其并未提及到用哪个接口调用摄像头。那我要怎样获取摄像 ...
shopping 发表于 2019-9-25 11:02
楼主你好,看了贵司的 mpp开发参考 这一文档,发现其并未提及到用哪个接口调用摄像头。那我要怎样获取摄像 ...
kiwi 发表于 2019-9-25 19:30
usb摄像头可以不用mpp,直接用v4l2框架取yuv视频数据就行
kiwi 发表于 2019-9-25 19:30
usb摄像头可以不用mpp,直接用v4l2框架取yuv视频数据就行
shopping 发表于 2019-10-8 14:17
你好,按您的说法,不用MPP库而直接用V4L2框架解码,速度上二者差异大不大,您有试验过吗?目前我VAL2+RGA ...
jefferyzhang 发表于 2019-10-18 15:06
请搞清楚你数据源的数据格式是什么。
V4L2和MPP没有任何关系。
15992605143 发表于 2019-10-18 14:43
MPP_DEC_SET_IMMEDIATE_OUT: (仅限解码)
立即输出模式(不建议开启),如果未开立即输出模式,MPP会按预 ...
shopping 发表于 2019-10-18 15:11
这是以前没有了解时候问的,见笑了。
jefferyzhang 发表于 2019-5-17 11:05
mpp的build目录里有安卓编译。
我们的android也是自带libmpp的,无需编译。
android的media_codec默认就 ...
swlmx 发表于 2019-10-24 13:50
楼主,我现在想解码 Mjpeg,但是 mediacodec api 好像不支持 video/mjpeg。
应用层又无法通过 System.loa ...
jefferyzhang 发表于 2019-10-24 18:04
可以直接用安卓jpeg loader来读,底层我记得是对接过硬件的(大于多少像素会用VPU解),具体我也不是很清 ...
swlmx 发表于 2019-10-30 11:20
libmpp.so是armv7的?1.3固件。
我用v8a的库链接报错
jefferyzhang 发表于 2019-10-30 11:43
toybrick里带的都是64bit的
- void doCodec(){
- MppCtx ctx;
- MppApi *mpi;
- MpiCmd cmd = MPP_SET_OUTPUT_BLOCK;
- MppParam param = NULL;
- MppPollType block = MPP_POLL_BLOCK;
- MppCodingType type = MPP_VIDEO_CodingMJPEG;
- int MPI_ENC_LOOP_COUNT = 1;
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","mpp_create");
- if(MPP_OK != mpp_create(&ctx, &mpi)){
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","mpp_create failed");
- goto MPP_TEST_FAILED;
- }
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","mpp_init");
- if(MPP_OK != mpp_init(ctx, MPP_CTX_ENC, type)){
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","mpp_init failed");
- goto MPP_TEST_FAILED;
- }
- MppEncRcCfg rcCfg;
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","rcCfg");
- rcCfg.change = MPP_ENC_RC_CFG_CHANGE_ALL;
- rcCfg.rc_mode = (MppEncRcMode) MPP_ENC_RC_MODE_CBR;
- rcCfg.quality = (MppEncRcQuality)MPP_ENC_RC_QUALITY_BEST;
- rcCfg.bps_target = bps;
- rcCfg.bps_max = bps * 17 / 16;
- rcCfg.bps_min = bps * 15 / 16;
- rcCfg.fps_in_flex = 0;
- rcCfg.fps_in_num = 24;
- rcCfg.fps_in_denorm = 1;
- rcCfg.fps_out_flex = 0;
- rcCfg.fps_out_num = 24;
- rcCfg.fps_out_denorm = 1;
- rcCfg.gop = 50;
- if(MPP_OK != mpi->control(ctx, MPP_ENC_SET_RC_CFG, &rcCfg)){
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","rcCfg failed");
- goto MPP_TEST_FAILED;
- }
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","prepCfg");
- MppEncPrepCfg prepCfg;
- prepCfg.change = MPP_ENC_PREP_CFG_CHANGE_INPUT | MPP_ENC_PREP_CFG_CHANGE_FORMAT;
- prepCfg.width = 1920;
- prepCfg.height = YUV_HEIGHT;
- prepCfg.hor_stride = MPP_ALIGN(1920, 8);
- prepCfg.ver_stride = MPP_ALIGN(YUV_HEIGHT, 8);
- prepCfg.format = MPP_FMT_YUV420P;
- if(MPP_OK != mpi->control(ctx, MPP_ENC_SET_PREP_CFG, &prepCfg)){
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","rcCfg failed");
- goto MPP_TEST_FAILED;
- }
-
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","codecCfg");
- MppEncCodecCfg codecCfg;
- if(MPP_OK != mpi->control(ctx, MPP_ENC_SET_CODEC_CFG, &codecCfg)){
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","codecCfg failed");
- goto MPP_TEST_FAILED;
- }
-
- MppPacket enc_out;
- MppFrame enc_in;
- param = █
- MppBuffer frm_buf;
- unsigned char *buf2;
- mpp_buffer_get(NULL, &frm_buf, MPP_ALIGN(1920, 8) * MPP_ALIGN(YUV_HEIGHT, 8) * 3 / 2);
- FILE *file;
- file = fopen("/sdcard/single_frame.yuv", "rb");
- buf2 = (unsigned char *)malloc(YUV_SIZE);
- memset(buf2, 0, YUV_SIZE);
- fread(buf2, 1, YUV_SIZE, file);
- if(MPP_OK != mpi->control(ctx, MPP_SET_OUTPUT_BLOCK, param)){
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","control failed");
- goto MPP_TEST_FAILED;
- }
- // interface with both input and output
- for (int i = 0; i < MPI_ENC_LOOP_COUNT; i++) {
- unsigned char *buf;
- buf = (unsigned char *)mpp_buffer_get_ptr(frm_buf);
- memcpy(buf, buf2, YUV_SIZE);
- mpp_frame_init(&enc_in);
- mpp_frame_set_width(enc_in, 1920);
- mpp_frame_set_height(enc_in, YUV_HEIGHT);
- mpp_frame_set_hor_stride(enc_in, MPP_ALIGN(1920, 8));
- mpp_frame_set_ver_stride(enc_in, MPP_ALIGN(YUV_HEIGHT, 8));
- mpp_frame_set_fmt(enc_in, MPP_FMT_YUV420P);
- mpp_frame_set_buffer(enc_in, frm_buf);
- mpp_frame_set_eos(enc_in, 0);
- if (MPP_OK != mpi->encode_put_frame(ctx, enc_in)) {
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","encode_put_frame failed");
- goto MPP_TEST_FAILED;
- } else{
- if (MPP_OK != mpi->encode_get_packet(ctx, &enc_out)) {
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","encode_get_packet failed");
- goto MPP_TEST_FAILED;
- } else{
- if(enc_out){
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","enc_out!");
- void *ptr = mpp_packet_get_pos(enc_out);
- size_t len = mpp_packet_get_length(enc_out);
- RK_U32 eos = mpp_packet_get_eos(enc_out);
- unsigned char* out_buf = new unsigned char[len];
- memcpy(out_buf, ptr, len);
- FILE *outfile = fopen("/sdcard/output.jpeg", "wb+");
- fwrite(out_buf, 1, len, outfile);
- fclose(outfile);
- mpp_packet_deinit(&enc_out);
- }
- }
- }
- mpp_frame_deinit(&enc_in);
- }
- mpi->reset(ctx);
- if (enc_in){
- mpp_frame_deinit(&enc_in);
- }
- mpp_destroy(ctx);
- free(buf2);
- __android_log_print(ANDROID_LOG_DEBUG, "JNI","mpi_test success");
- return;
- MPP_TEST_FAILED:
- if (enc_in){
- mpp_frame_deinit(&enc_in);
- }
- if (ctx){
- mpp_destroy(ctx);
- }
- if (buf2){
- free(buf2);
- }
- }
复制代码
jefferyzhang 发表于 2019-10-30 11:43
toybrick里带的都是64bit的
swlmx 发表于 2019-11-6 11:31
你们固件里面libmpp.so确实是armv7的,我下载github上mpp的testcode编译出来armv8找不到libmpp.so,只有v ...
jefferyzhang 发表于 2019-11-6 12:52
你说的是安卓还是linux?
swlmx 发表于 2019-11-6 13:58
安卓 字数补丁
jefferyzhang 发表于 2019-11-6 15:15
哦,安卓是v7 32bit的,因为安卓的框架mediacodec他是32 only的,所以mpp也必须是32才能被系统调用 ...
- mpp_packet_set_pos
- mpp_packet_set_length
- //input
- mpi->poll
- mpi->dequeue
- mpp_task_meta_set_packet
- mpp_task_meta_set_frame
- mpi->enqueue
- //output
- mpi->poll
- mpi->dequeue
- mpp_task_meta_get_frame
- mpi->enqueue
复制代码
- [83150.339427] rk_vcodec: vpu2_dec task: 1573200164298 ms
- [83150.368903] rk_vcodec: vpu2_dec task: 1573200164327 ms
- [83150.394374] rk_vcodec: vpu2_dec task: 1573200164353 ms
- [83150.419830] rk_vcodec: vpu2_dec task: 1573200164378 ms
- [83150.445152] rk_vcodec: vpu2_dec task: 1573200164404 ms
- [83150.470661] rk_vcodec: vpu2_dec task: 1573200164429 ms
- [83150.496018] rk_vcodec: vpu2_dec task: 1573200164455 ms
- [83150.521544] rk_vcodec: vpu2_dec task: 1573200164480 ms
- [83150.550334] rk_vcodec: vpu2_dec task: 1573200164509 ms
- [83150.579556] rk_vcodec: vpu2_dec task: 1573200164538 ms
- [83150.620477] rk_vcodec: vpu2_dec task: 1573200164579 ms
- [83150.649453] rk_vcodec: vpu2_dec task: 1573200164608 ms
- [83150.678954] rk_vcodec: vpu2_dec task: 1573200164637 ms
- [83150.702283] rk_vcodec: vpu2_dec task: 1573200164661 ms
复制代码
swlmx 发表于 2019-11-8 16:44
我用mpp demo里的decode_advanced代码循环300次平均每解码1帧1080p jpg要26ms,而且dmesg显示解码耗时很离 ...
jefferyzhang 发表于 2019-11-8 18:06
1. decode_simple 确实解不了mjpeg,很早前就提过需求给相关部门了,他们还没有实现。
2. MJpeg解码比cpu ...
dawnmaples 发表于 2019-11-25 15:48
我在debian下编译的mpp,运行./make-Makefiles.bash,显示...
--compile without drm support
...
欢迎光临 Toybrick (https://t.rock-chips.com/) | Powered by Discuz! X3.3 |