Files
luban-lite-t3e-pro/doc/topics/sdk/mpp/mpp_encoder_design.html
2025-01-23 16:37:00 +08:00

195 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn" lang="zh-cn" data-whc_version="26.0">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="description" content="MPP Encoder 目前只支持 JPEG 图片编码。接口设计如下: 表 1 . mpp_encode_jpeg 函数原型 int mpp_encode_jpeg(struct mpp_frame* frame, int quality, int dma_buf_fd, int buf_len, int* len) 功能说明 编码一帧 JPEG 图片 参数定义 frame: 待编码的原始 YUV ..."/><meta name="DC.rights.owner" content="(C) 版权 2025"/><meta name="copyright" content="(C) 版权 2025"/><meta name="generator" content="DITA-OT"/><meta name="DC.type" content="concept"/><meta name="DC.contributor" content="yan.wang"/><meta name="DC.date.modified" content="2024-12-02"/><meta name="DC.format" content="HTML5"/><meta name="DC.identifier" content="mpp_encoder_design_and_interface_intro"/><meta name="DC.language" content="zh-CN"/><title>MPP Encoder 设计及接口说明</title><!-- Build number 2023110923. --><meta name="wh-path2root" content="../../../"/><meta name="wh-toc-id" content=""/><meta name="wh-source-relpath" content="topics/sdk/mpp/mpp_encoder_design.dita"/><meta name="wh-out-relpath" content="topics/sdk/mpp/mpp_encoder_design.html"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/commons.css?buildId=2023110923"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/topic.css?buildId=2023110923"/>
<script src="../../../webhelp/app/options/properties.js?buildId=20250121171154"></script>
<script src="../../../webhelp/app/localization/strings.js?buildId=2023110923"></script>
<script src="../../../webhelp/app/search/index/keywords.js?buildId=20250121171154"></script>
<script defer="defer" src="../../../webhelp/app/commons.js?buildId=2023110923"></script>
<script defer="defer" src="../../../webhelp/app/topic.js?buildId=2023110923"></script>
<link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-styles-web.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/notes.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-common.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-images.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/footnote.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-web-watermark.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/topic-body-list.css?buildId=2023110923"/></head>
<body id="mpp_encoder_design_and_interface_intro" class="wh_topic_page frmBody">
<a href="#wh_topic_body" class="sr-only sr-only-focusable">
跳转到主要内容
</a>
<header class="navbar navbar-default wh_header">
<div class="container-fluid">
<div class="wh_header_flex_container navbar-nav navbar-expand-md navbar-dark">
<div class="wh_logo_and_publication_title_container">
<div class="wh_logo_and_publication_title">
<a href="http://www.artinchip.com" class=" wh_logo d-none d-sm-block "><img src="../../../company-logo-white.png" alt="RTOS SDK 使用指南SDK 指南文件"/></a>
<div class=" wh_publication_title "><a href="../../../index.html"><span class="booktitle"><span class="ph mainbooktitle">RTOS SDK 使用指南</span><span class="ph booktitlealt">SDK 指南文件</span></span></a></div>
</div>
</div>
<div class="wh_top_menu_and_indexterms_link collapse navbar-collapse" id="wh_top_menu_and_indexterms_link">
</div>
</div>
</div>
</header>
<div class=" wh_search_input navbar-form wh_topic_page_search search " role="form">
<form id="searchForm" method="get" role="search" action="../../../search.html"><div><input type="search" placeholder="搜索 " class="wh_search_textfield" id="textToSearch" name="searchQuery" aria-label="搜索查询" required="required"/><button type="submit" class="wh_search_button" aria-label="搜索"><span class="search_input_text">搜索</span></button></div></form>
</div>
<div class="container-fluid" id="wh_topic_container">
<div class="row">
<nav class="wh_tools d-print-none navbar-expand-md" aria-label="Tools">
<div data-tooltip-position="bottom" class=" wh_breadcrumb "></div>
<div class="wh_right_tools">
<button class="wh_hide_highlight" aria-label="切换搜索突出显示" title="切换搜索突出显示"></button>
<button class="webhelp_expand_collapse_sections" data-next-state="collapsed" aria-label="折叠截面" title="折叠截面"></button>
<div class=" wh_print_link print d-none d-md-inline-block "><button onClick="window.print()" title="打印此页" aria-label="打印此页"></button></div>
</div>
</nav>
</div>
<div class="wh_content_area">
<div class="row">
<div class="col-12" id="wh_topic_body">
<div class=" wh_topic_content body "><main role="main"><article class="- topic/topic concept/concept topic concept" role="article" aria-labelledby="ariaid-title1"><span class="edit-link" style="font-size:12px; opacity:0.6; text-align:right; vertical-align:middle"><a target="_blank" href="http://172.16.35.88/tasks/jdssno1uvvbf2mltu9kb9v3if05d5gopuakboe8hlud18rma/edit/F:/aicdita/aicdita-cn/topics/sdk/mpp/mpp_encoder_design.dita">Edit online</a></span><h1 class="- topic/title title topictitle1" id="ariaid-title1">MPP Encoder 设计及接口说明</h1><div class="date inPage">2 Dec 2024</div><div style="color: gray;">
Read time: 1 minute(s)
</div><div class="- topic/body concept/conbody body conbody"><p class="- topic/p p" data-ofbid="d170221e22__20250121171620"> MPP Encoder 目前只支持 JPEG 图片编码。接口设计如下:</p><div class="table-container"><table class="- topic/table table frame-all" id="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c" data-ofbid="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c" data-cols="2"><caption class="- topic/title title tablecap" data-caption-side="top" data-is-repeated="true"><span class="table--title-label"><span class="table--title-label-number"> 1</span><span class="table--title-label-punctuation">. </span></span><span class="table--title">mpp_encode_jpeg</span></caption><colgroup><col style="width:16.666666666666664%"/><col style="width:83.33333333333334%"/></colgroup><thead class="- topic/thead thead"><tr class="- topic/row"><th class="- topic/entry entry colsep-1 rowsep-1" id="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c__entry__1">函数原型</th><th class="- topic/entry entry colsep-0 rowsep-1" id="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c__entry__2">int mpp_encode_jpeg(struct mpp_frame* frame, int quality, int
dma_buf_fd, int buf_len, int* len)</th></tr></thead><tbody class="- topic/tbody tbody"><tr class="- topic/row"><td class="- topic/entry entry colsep-1 rowsep-1" headers="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c__entry__1">功能说明</td><td class="- topic/entry entry colsep-0 rowsep-1" headers="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c__entry__2">编码一帧 JPEG 图片</td></tr><tr class="- topic/row"><td class="- topic/entry entry colsep-1 rowsep-1" headers="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c__entry__1">参数定义</td><td class="- topic/entry entry colsep-0 rowsep-1" headers="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c__entry__2">
<ul class="- topic/ul ul" id="mpp_encoder_design_and_interface_intro__ul_kb4_fwh_d1c" data-ofbid="mpp_encoder_design_and_interface_intro__ul_kb4_fwh_d1c"><li class="- topic/li li" data-ofbid="d170221e48__20250121171620">frame: 待编码的原始 YUV 数据</li><li class="- topic/li li" data-ofbid="d170221e50__20250121171620">quality: 编码质量,取值范围 1~1001 表示编码图片质量最差100 表示最好</li><li class="- topic/li li" data-ofbid="d170221e52__20250121171620">dma_buf_fd输出 JPEG 图片存放的 dma-buf fd </li><li class="- topic/li li" data-ofbid="d170221e54__20250121171620">buf_len输出 JPEG 图片 buf 的长度 </li><li class="- topic/li li" data-ofbid="d170221e56__20250121171620">len: 输出 JPEG 图片的真实大小</li></ul>
</td></tr><tr class="- topic/row"><td class="- topic/entry entry colsep-1 rowsep-1" headers="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c__entry__1">返回值</td><td class="- topic/entry entry colsep-0 rowsep-1" headers="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c__entry__2">0: 成功<p class="- topic/p p" data-ofbid="d170221e64__20250121171620">&lt;0:失败</p></td></tr><tr class="- topic/row"><td class="- topic/entry entry colsep-1 rowsep-0" headers="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c__entry__1">注意事项</td><td class="- topic/entry entry colsep-0 rowsep-0" headers="mpp_encoder_design_and_interface_intro__table_sch_dwh_d1c__entry__2">-</td></tr></tbody></table></div><div class="- topic/note note tip note_tip" id="mpp_encoder_design_and_interface_intro__note_ykh_hwh_d1c" data-ofbid="mpp_encoder_design_and_interface_intro__note_ykh_hwh_d1c"><span class="note__title">提示:</span> 输出 JPEG 图片的缓存 buffer 由调用者申请,但调用者并不知道编码后图片的实际大小, 为避免
VE 写输出数据时越界,该 buffer 需要预先申请较大的内存。</div><section class="- topic/section section" id="mpp_encoder_design_and_interface_intro__section_qfn_3wh_d1c" data-ofbid="mpp_encoder_design_and_interface_intro__section_qfn_3wh_d1c"><h2 class="- topic/title title sectiontitle">MPP Decoder 参考 demo</h2>
<p class="- topic/p p" data-ofbid="d170221e78__20250121171620">以下 demo 为基本流程调用,具体实现可以参考代码 <span class="+ topic/ph sw-d/filepath ph filepath">mpp/mpp_test/jpeg_encoder_test.c</span></p>
<pre class="+ topic/pre pr-d/codeblock pre codeblock language-c" id="mpp_encoder_design_and_interface_intro__pre_rfn_3wh_d1c" data-ofbid="mpp_encoder_design_and_interface_intro__pre_rfn_3wh_d1c"><em class="hl-comment">//* 1. 获取 dma-buf device 句柄</em>
<strong class="hl-keyword">int</strong> dma_fd = dmabuf_device_open();
<em class="hl-comment">//* 2. 设置输入 YUV 数据结构体</em>
<strong class="hl-keyword">struct</strong> mpp_frame frame;
<em class="hl-comment">// ....</em>
<em class="hl-comment">//* 3. 申请编码输出 buffer</em>
<strong class="hl-keyword">int</strong> len = <span class="hl-number">0</span>;
<strong class="hl-keyword">int</strong> buf_len = width * height * <span class="hl-number">4</span>/<span class="hl-number">5</span> * quality / <span class="hl-number">100</span>;
<strong class="hl-keyword">int</strong> jpeg_data_fd = dmabuf_alloc(dma_fd, buf_len);
<em class="hl-comment">//* 4. 编码 JPEG 图片</em>
mpp_encode_jpeg(&amp;frame, quality, jpeg_data_fd, buf_len, &amp;len)。
<em class="hl-comment">//* 5. 保存编码后 JPEG 图片</em>
<strong class="hl-keyword">unsigned</strong> <strong class="hl-keyword">char</strong>* jpeg_vir_addr = dmabuf_mmap(jpeg_data_fd, buf_len);
FILE* fp_save = fopen(<span class="hl-string">"/save.jpg"</span>, <span class="hl-string">"wb"</span>);
fwrite(jpeg_vir_addr, <span class="hl-number">1</span>, len, fp_save);
fclose(fp_save);
<em class="hl-comment">//* 6. 释放资源</em>
dmabuf_munmap(jpeg_vir_addr, buf_len);
dmabuf_free(jpeg_data_fd);
dmabuf_device_close(dma_fd);</pre>
</section></div></article></main></div>
</div>
</div>
</div>
</div>
<footer class="navbar navbar-default wh_footer">
<div class=" footer-container mx-auto ">
<title>footer def</title>
<style><!--
.p1 {
font-family: FangZhengShuSong, Times, serif;
}
.p2 {
font-family: Arial, Helvetica, sans-serif;
}
.p3 {
font-family: "Lucida Console", "Courier New", monospace;
}
--></style>
<div class="webhelp.fragment.footer">
<p class="p1">Copyright © 2019-2024 广东匠芯创科技有限公司. All rights reserved.</p>
</div><div>
<div class="generation_time">
Update Time: 2025-01-21
</div>
</div>
</div>
</footer>
<div id="go2top" class="d-print-none">
<span class="oxy-icon oxy-icon-up"></span>
</div>
<div id="modal_img_large" class="modal">
<span class="close oxy-icon oxy-icon-remove"></span>
<div id="modal_img_container"></div>
<div id="caption"></div>
</div>
<script src="${pd}/publishing/publishing-styles-AIC-template/js/custom.js" defer="defer"></script>
</body>
</html>