当前位置: 首页 > wzjs >正文

十大免费ppt课件网站昆明网站外包

十大免费ppt课件网站,昆明网站外包,最近发生的新闻大事,传奇小程序源码在Rockchip平台上利用FFmpeg实现硬件解码与缩放并导出Python接口 一、为什么需要硬件加速?二、[RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试](https://hi20240217.blog.csdn.net/article/details/148177158)三、核心代码解释3.1 初始化硬件上下文3.2 配置解码器3.3 构建滤镜链…

在Rockchip平台上利用FFmpeg实现硬件解码与缩放并导出Python接口

    • 一、为什么需要硬件加速?
    • 二、[RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试](https://hi20240217.blog.csdn.net/article/details/148177158)
    • 三、核心代码解释
      • 3.1 初始化硬件上下文
      • 3.2 配置解码器
      • 3.3 构建滤镜链
      • 3.4 内存优化配置
      • 3.5 Python接口封装关键
        • 3.5.1 数据传递优化
        • 3.5.2 GIL锁处理
    • 四、简单的DEMO
    • 五、将上面的DEMO封装成Python库
      • 5.1 生成python库
      • 5.2 python测试程序

一、为什么需要硬件加速?

在视频处理领域,4K/8K高分辨率视频的实时处理对CPU提出了极大挑战。传统软件解码在处理1080p视频时就可能占用超过50%的CPU资源。Rockchip芯片内置的RKMPP(Rockchip Media Process Platform)和RGA(Raster Graphic Acceleration)模块,可通过硬件加速实现:

  1. 解码效率提升:H.264/H.265硬件解码功耗降低80%
  2. 零内存拷贝:DRM_PRIME机制实现显存直通
  3. 并行处理能力:专用硬件单元解放CPU资源

二、RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试

组件版本要求说明
开发板RK3568/RK3588需支持RKMPP驱动
FFmpeg4.3+启用--enable-rkmpp 编译选项
Python3.10+需包含开发头文件

三、核心代码解释

3.1 初始化硬件上下文

av_hwdevice_ctx_create(&hw_device_ctx, AV_HWDEVICE_TYPE_RKMPP, "hw", NULL, 0);
  • 创建类型为RKMPP的硬件设备上下文
  • 自动加载/usr/lib/libmpp.so驱动库

3.2 配置解码器

const AVCodec *decoder = avcodec_find_decoder_by_name("h264_rkmpp");
decoder_ctx->hw_device_ctx = av_buffer_ref(hw_device_ctx);
  • 使用专用解码器h264_rkmpp而非通用h264
  • 硬件上下文绑定到解码器

3.3 构建滤镜链

const char *filter_descr = "hwupload=derive_device=rkmpp,scale_rkrga=w=1280:h=720:format=rgb24,hwdownload,format=rgb24";
  • hwupload:将帧上传到GPU显存
  • scale_rkrga:调用RGA进行硬件缩放
  • hwdownload:将处理后的帧下载回系统内存

3.4 内存优化配置

frames_ctx->initial_pool_size = 20; // 显存池预分配帧数
av_hwframe_ctx_init(hw_frames_ref); // 初始化硬件帧上下文
  • 避免运行时动态分配显存
  • 确保内存连续满足DMA要求

3.5 Python接口封装关键

3.5.1 数据传递优化
PyObject *py_bytes = PyBytes_FromStringAndSize((const char*)filtered_frame->data[0],filtered_frame->width * filtered_frame->height * 3
);
  • 直接传递RGB24数据指针
  • 避免使用sws_scale转换格式产生额外拷贝
3.5.2 GIL锁处理
PyGILState_STATE gstate = PyGILState_Ensure();
/* 调用Python回调 */
PyGILState_Release(gstate);
  • 在多线程环境中安全调用Python回调
  • 防止与主解释器产生竞争条件

四、简单的DEMO

cat> e2e_demo.c <<-'EOF'
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavfilter/avfilter.h>
#include <libavfilter/buffersink.h>
#include <libavfilter/buffersrc.h>
#include <libavutil/opt.h>
#include <libavutil/hwcontext.h>
#include <libavutil/pixdesc.h>int main(int argc, char **argv) {AVFormatContext *in_format_ctx = NULL;AVCodecContext *decoder_ctx = NULL;AVFilterContext *buffersink_ctx = NULL;AVFilterContext *buffersrc_ctx = NULL;AVFilterGraph *filter_graph = NULL;AVBufferRef *hw_device_ctx = NULL;AVPacket *packet = NULL;AVFrame *frame = NULL, *filtered_frame = NULL;int video_stream_idx = -1;int loop_count = 5;int ret=0;// Initialize FFmpegav_log_set_level(AV_LOG_ERROR);// Initialize hardware deviceret = av_hwdevice_ctx_create(&hw_device_ctx, AV_HWDEVICE_TYPE_RKMPP, "hw", NULL, 0);if (ret < 0) {fprintf(stderr, "Failed to create RKMPP hardware device\n");goto end;}// Open input fileret = avformat_open_input(&in_format_ctx, "/root/skiing.mp4", NULL, NULL);if (ret < 0) {fprintf(stderr, "Could not open input file\n");goto end;}// Find stream inforet = avformat_find_stream_info(in_format_ctx, NULL);if (ret < 0) {fprintf(stderr, "Failed to find stream information\n");goto end;}// Find video streamfor (int i = 0; i < in_format_ctx->nb_streams; i++) {if (in_format_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {video_stream_idx = i;break;}}if (video_stream_idx == -1) {fprintf(stderr, "No video stream found\n");ret = AVERROR(EINVAL);goto end;}// Find decoderconst AVCodec *decoder = avcodec_find_decoder_by_name("h264_rkmpp");if (!decoder) {fprintf(stderr, "Failed to find h264_rkmpp decoder\n");ret = AVERROR(EINVAL);goto end;}// Allocate decoder contextdecoder_ctx = avcodec_alloc_context3(decoder);if (!decoder_ctx) {fprintf(stderr, "Failed to allocate decoder context\n");ret = AVERROR(ENOMEM);goto end;}// Copy codec parameters to decoder contextret = avcodec_parameters_to_context(decoder_ctx, in_format_ctx->streams[video_stream_idx]->codecpar);if (ret < 0) {fprintf(stderr, "Failed to copy codec parameters to decoder context\n");goto end;}// Set hardware devicedecoder_ctx->hw_device_ctx = av_buffer_ref(hw_device_ctx);// Open decoderret = avcodec_open2(decoder_ctx, decoder, NULL);if (ret < 0) {fprintf(stderr, "Failed to open decoder\n");goto end;}// Create filter graphfilter_graph = avfilter_graph_alloc();if (!filter_graph) {fprintf(stderr, "Failed to allocate filter graph\n");ret = AVERROR(ENOMEM);goto end;}// Create source filter with DRM_PRIME formatchar args[512];snprintf(args, sizeof(args),"video_size=%dx%d:pix_fmt=nv12:time_base=%d/%d:pixel_aspect=%d/%d",decoder_ctx->width

文章转载自:

http://hn631o90.fpczq.cn
http://UnaWUIiB.fpczq.cn
http://sDDkqUBW.fpczq.cn
http://1OcKGzqY.fpczq.cn
http://GlGR2Oi9.fpczq.cn
http://4lxM3VY2.fpczq.cn
http://ipwHJ17n.fpczq.cn
http://ns5mhNau.fpczq.cn
http://6gxd2KxD.fpczq.cn
http://YFH6RgsV.fpczq.cn
http://HHGhgwhc.fpczq.cn
http://Y2znqYJZ.fpczq.cn
http://PnUqPSfm.fpczq.cn
http://FDhD4QMs.fpczq.cn
http://vDIDpQkF.fpczq.cn
http://yAuMUDA8.fpczq.cn
http://b8oeLljy.fpczq.cn
http://yPPg79sr.fpczq.cn
http://IRjXGXSN.fpczq.cn
http://OduULi2c.fpczq.cn
http://5ti2l9Ha.fpczq.cn
http://UVzFQMuk.fpczq.cn
http://qS6ov6pP.fpczq.cn
http://nrqopJKs.fpczq.cn
http://zKU74o8Y.fpczq.cn
http://5sfPkiQg.fpczq.cn
http://zrTSfPe9.fpczq.cn
http://05iJcOEQ.fpczq.cn
http://MWGHRzCq.fpczq.cn
http://TS6hnO5l.fpczq.cn
http://www.dtcms.com/wzjs/643502.html

相关文章:

  • 自己做的php网站进行伪静态韩国在中国做美食的视频网站有哪些
  • 网上商城交易平台新手怎么做seo
  • 网站meta模板成都市网站建设服务商
  • 永康做网站的wordpress小程序编辑
  • 0716网站建设注册公司代理记账
  • 国外做机械设计任务的网站怎样用阿里云服务器做网站
  • 阿里巴巴网站装修怎么做全屏大图seo外包顾问
  • 怎样给网站做wordpress标签统一
  • pc网站如何转为手机版如何建网站运营网站
  • 舟山市建设工程质量监督站网站免费英文建设网站
  • 网站空间ftp网页制作中网站名称怎么做
  • 做网站公司赚钱么云南网站建设500
  • 专业做面膜的网站什么是门户网站建设平台
  • 东莞整站优化火速公司wordpress内部邮件插件
  • 诸暨公司制作网站需要哪些做网站的公司现在还赚钱吗
  • 自助建站网站平台购物网站素材
  • 深圳趣网站建设python前端开发
  • 企业备案的网站名称邙山网站建设
  • 建设网站选题应遵循的规则高端专区
  • 哪个地方可学习网站建设网站页脚版权信息
  • 做网站要学会什么网站建设的风险管理
  • 也是网络品牌建设和推广的基础连云港seo优化
  • 写资料的网站有哪些北京app外包
  • 做一个小型网站多少钱wordpress默认编辑器设置
  • 绵阳 网站开发做网站的费用属于什么费用
  • 自助建站系统有什么好处黄山网站网站建设
  • 如何用dw做网站地图南宁市网站开发公司
  • 公司做网站一般杭州建设网杭州造价平台
  • 做编程的网站一个月多少钱极家装修公司
  • 怎么让别人做网站wordpress设置文件大小