君正X2100 RTOS JPEG硬件编码

一、配置

进入SDK的tools/iconfigtool/IConfigToolApp目录,执行./IConfigTool指令,进入配置界面:

Config.in 是生成配置界面的文件,Config是需要修改的配置文件,选择之后点击Open。

选择 xburst2系列CPU->X2000系列 CPU->vpu_jpeg_encode(硬件解码):

点击File->save,File->Quit。

 二、代码编写

包含头文件

#include <jpeg-hw.h>

此文件所在目录:\freertos\xburst2\soc-x2000\jpeg_encoder\include

文件类容:

#ifndef __JPEG_HW_H__
#define __JPEG_HW_H__#include <stdint.h>enum helix_raw_format {HELIX_TILE_MODE = 0,HELIX_420P_MODE = 4,HELIX_NV12_MODE = 8,HELIX_NV21_MODE = 12,
};/* JPEG encode quantization table select level */
typedef enum {LOW_QUALITY,MEDIUMS_QUALITY,HIGH_QUALITY,
} QUANT_QUALITY;void* hw_jpeg_encode_init(int width,int height);
void hw_jpeg_encode_deinit(void *handle);
int hw_yuv420_planar_nv12_to_jpeg_frame(void *handle, unsigned char *dst_jpeg_frame, unsigned char *ybuf, unsigned char *uvbuf, int width, int height,  QUANT_QUALITY quality);
int hw_yuv420_planar_nv21_to_jpeg_frame(void *handle, unsigned char *dst_jpeg_frame, unsigned char *ybuf, unsigned char *uvbuf, int width, int height,  QUANT_QUALITY quality);void *JZMalloc(int align, int size);
unsigned int get_phy_addr(unsigned int vaddr);#endif    /* __JPEG_HW_H__ */

参考例程:

\freertos\example\driver\vpu_jpeg_encode_example.c

文件内容:

#include <os.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <include_bin.h>#include <jpeg-hw.h>#define WIDTH (128)
#define HEIGHT (72)// #define YUV_RAWBIN#if defined(YUV_RAWBIN)
#define WIDTH (1280)
#define HEIGHT (720)
// rawbinData, rawbinSize
INCBIN(rawbin, "example/resource/video-1280x720_nv12.yuv");
#endifstatic int dump_framebuffer_hex(unsigned char *frame, int len)
{int i;unsigned char * buf;buf= (unsigned char *) frame;for (i=0;i<len;i++) {fprintf(stderr, "0x%02x, ", *buf++);if ((i&0xf)==0xf)fprintf(stderr, "\n");msleep(1);}if ((i&0xf)!=0xf)fprintf(stderr, "\n");return 0;
}static int generate_color_pattern_nv12(unsigned char *yuvframe, int width, int height)
{int i,j;unsigned char * y0;unsigned short * uv;y0 = (unsigned char *)(yuvframe);uv = (unsigned short *)(yuvframe+width*height);/* y buffer */for (j=0;j<height;j++) {for (i=0;i<width;i++) {*y0 = (i&0xff);y0++;}}/* uv buffer */for (j=0;j<height/2;j++) {for (i=0;i<width/2;i++) {//*uv = (((255-j)&0xff)<<8)|(i&0xff);*uv = (((255-i)&0xff)<<8)|(i&0xff);uv++;}}return 0;
}static int generate_color_pattern_yuv422(unsigned char *yuvframe, int width, int height)
{int i,j;unsigned short * y0u;unsigned short * y1v;y0u = (unsigned short *)(yuvframe);y1v = (unsigned short *)(yuvframe+2);for (j=0;j<height;j++) {for (i=0;i<width/2;i++) {*y0u = (((j)&0xff)<<8)|(i&0xff);*y1v = (((255-j)&0xff)<<8)|(i&0xff);y0u+=2; y1v+=2;}}return 0;
}static int generate_color_pattern_yuv422_2(char *yuvframe, int width, int height)
{int i,j;unsigned short * y0u;unsigned short * y1v;y0u = (unsigned short *)(yuvframe);y1v = (unsigned short *)(yuvframe+2);for (j=0;j<height;j++) {for (i=0;i<width/2;i++) {*y0u = (((i)&0xff)<<8)|(j&0xff);*y1v = (((255-i)&0xff)<<8)|(j&0xff);y0u+=2; y1v+=2;}}return 0;
}int test_jpeg(void)
{int jpg_bs_len;void *jz_jpeg = NULL;int width = WIDTH;int height = HEIGHT;int quality = MEDIUMS_QUALITY;unsigned char *yframe;unsigned char *uvframe;printf("%s() width=%d, height=%d, quality=%d\n", __func__, width, height, quality);jz_jpeg = hw_jpeg_encode_init(width, height);unsigned char *yuvframe = (unsigned char *)JZMalloc(256, width*height*2);if(yuvframe == NULL) {printf("Get src yuv buffer failed!\n");return -1;}yframe = yuvframe;uvframe = yuvframe + (width*height);unsigned char *dst_jpeg_frame = (unsigned char *)JZMalloc(256, width*height*3/2);if(dst_jpeg_frame == NULL) {printf("Get src yuv buffer failed!\n");return -1;}memset(dst_jpeg_frame, 0, width*height*3/2);// dump_framebuffer_hex(dst_jpeg_frame, 124);#if defined(YUV_RAWBIN)memcpy(yuvframe, rawbinData, width*height*2);
#elsegenerate_color_pattern_nv12(yuvframe, width, height);
#endifprintf("convert to jpeg frame:\n");jpg_bs_len = hw_yuv420_planar_nv12_to_jpeg_frame(jz_jpeg, (char *)dst_jpeg_frame, yframe, uvframe, width, height, quality);// jpg_bs_len = hw_yuv420_planar_nv21_to_jpeg_frame(jz_jpeg, (char *)dst_jpeg_frame, yframe, uvframe, width, height, quality);printf("convert to jpeg frame finish. quality=%d, jpg_bs_len=%d\n", quality, jpg_bs_len);if (jpg_bs_len>0) {dump_framebuffer_hex(dst_jpeg_frame, jpg_bs_len);} else {printf("err --- jpg_bs_len = %d\n", jpg_bs_len);}printf("jpeg encode deinit\n");hw_jpeg_encode_deinit(jz_jpeg);free(yuvframe);free(dst_jpeg_frame);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Harmony OS 网络编程 实验指南

netcat简介 netcat 是什么&#xff1f; netcat是一个非常强大的网络实用工具&#xff0c;可以用它来调试TCP/UDP应用程序&#xff1b; netcat 如何安装&#xff1f; Linux上可以使用发行版的包管理器安装&#xff0c;例如Debian/Ubuntu上&#xff1a; sudo apt-get instal…

别想宰我,怎么查看云厂商是否超卖?详解 cpu steal time

据说有些云厂商会超卖&#xff0c;宿主有 96 个核心&#xff0c;结果卖出去 100 多个 vCPU&#xff0c;如果这些虚机负载都不高&#xff0c;大家相安无事&#xff0c;如果这些虚机同时运行一些高负载的任务&#xff0c;相互之间就会抢占 CPU&#xff0c;对应用程序有较大影响&a…

缺省和重载。引用——初识c++

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 C输入&输出cout 和cin<<>> 缺省参数全缺省半缺省应用场景声明和定义分离的情况 函数重载1.参数的类型不同2.参数的个数不同3.参数的顺…

生成可读取配置文件的独立运行jar程序

前言: 周五刚躺下,前线打来语音要个下载文件的小程序,下载路径和下载码需要根据配置获取,程序需要在服务器执行。当然配置的设计是个人设计的,不然每次更新下载码都要重新出具jar包,太麻烦。多年没写独立运行的jar包了,翻阅了相关资料,最终还是功夫不负有心人。想着这种…

Redis锁,乐观锁与悲观锁

锁 悲观锁 认为什么时候都会出问题&#xff0c;无论做什么都会加锁 乐观锁 很乐观&#xff0c;认为什么时候都不会出问题&#xff0c;所以不会上锁。 更新数据时去判断一下&#xff0c;在此期间&#xff0c;是否有人修改过这个数据 应用于&#xff1a;秒杀场景 **watch*…

小折叠手机如何经久耐用?收下这份日常养护指南

不同于普通手机的玻璃屏幕&#xff0c;折叠机出于折叠的特性&#xff0c;使用了柔性屏幕。因此撕除原厂保护膜时&#xff0c;由于贴膜较强的粘合力&#xff0c;很容易就会导致屏幕产生不可修复的损伤。 这也是为什么各大手机厂商都不允许折叠机私自贴膜的原因&#xff0c;并且…

从产品组装和维护/维修的角度来看,基于增强现实的指导:关于挑战和机遇的最新综述

作者&#xff1a; 1. M. Eswaran 2. Anil Kumar Gulivindala 3. M.V.A.Raju Bahubalendruni 关于本文 •分析了增强现实在装配和维护/维修中的作用。 •讨论了AR辅助制造系统的软件和硬件元素。 •讨论了AR跟踪和配准技术面临的挑战。 •讨论了AR辅助制造系统的未来…

视频素材app有哪些?视频素材网址推荐

在这个视觉传达愈发重要的时代&#xff0c;拥有一款好的无水印短视频素材网站就如同握有一把打开创意之门的钥匙&#xff0c;选择合适的短视频素材平台至关重要&#xff0c;这会让你的视频制作更加轻松而高效。 1&#xff0c;蛙学府 以其广泛的优质视频素材库而闻名&#xff0…

Maven发布开源框架到远程仓库

1.背景 当你写了一个自我感觉良好的开源工具希望给他人分享&#xff0c;如果只是在github等网站进行公布之外&#xff0c;用户使用起来还不是很方便&#xff0c;特别是当你提供是特定领域的基础工具。你还可以把它部署到中央仓库&#xff0c;这样别人使用就会方便很多。接下来…

后端常见面经之MySQL

MySQL字段类型 数值类型 整型经常被用到&#xff0c;比如 tinyint、int、bigint 。默认是有符号的&#xff0c;若只需存储无符号值&#xff0c;可增加 unsigned 属性。 int(M)中的 M 代表最大显示宽度&#xff0c;并不是说 int(1) 就不能存储数值10了&#xff0c;不管设定了显…

【@changesets/cli】变更集实战教程

一、背景概述 前端目前基于Monorepo架构的npm包开发很普遍&#xff0c;在开发完毕后&#xff0c;我们需要对包进行版本号升级&#xff0c;并且部署&#xff0c;这些操作如果是手动来操作的话&#xff0c;很麻烦&#xff0c;而且容易出错。 例如有这样的场景&#xff1a; -ap…

1.Git快速入门

文章目录 Git快速入门1.Git概述2.SCM概述3.Git安装3.1 软件下载3.2 软件安装3.3 软件测试 Git快速入门 1.Git概述 Git是一个免费的&#xff0c;开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目&#xff0c;Git易于学习&#xff0c;占用空间小&…

供应链 | 顶刊OR论文精读:在线最小峰值作业调度的竞争算法

Competitive Algorithms for the Online Minimum Peak Job Scheduling 本文为OR期刊论文&#xff0c;原文信息&#xff1a; Clia Escribe, Michael Hu, Retsef Levi (2023) Competitive Algorithms for the Online Minimum Peak Job Scheduling. Operations Research. Article…

ZYNQ学习之PetaLinux开发环境搭建

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ FTP&#xff1a;File Transfer Protocol 一、Ubuntu 和 Windows 文件互传 1.1、开启 Ubu…

【git分支管理策略】如何高效的管理好代码版本

目录 1.分支管理策略 2.我用的分支管理策略 3.一些常见问题 1.分支管理策略 分支管理策略就是一些经过实践后总结出来的可靠的分支管理的办法&#xff0c;让分支之间能科学合理、高效的进行协作&#xff0c;帮助我们在整个开发流程中合理的管理好代码版本。 目前有两套Git…

【线段树】第十三届蓝桥杯省赛C++ A组 Java C组 Python A组/B组《最长不下降子序列》(C++)

【题目描述】 给定一个长度为 N 的整数序列&#xff1a;,,⋅⋅⋅,。 现在你有一次机会&#xff0c;将其中连续的 K 个数修改成任意一个相同值。 请你计算如何修改可以使修改后的数列的最长不下降子序列最长&#xff0c;请输出这个最长的长度。 最长不下降子序列是指序列中的…

python每日分析练习:产品季度销售的比较分析

这次我们将关注一家零售公司的季度销售分析。 假设场景 一家零售公司希望分析其过去一年内各季度的销售表现&#xff0c;以便更好地理解其业务趋势&#xff0c;评估不同产品类别的表现&#xff0c;并优化未来的销售策略。 分析目的 理解季度销售趋势&#xff1a;分析公司整体…

Mac 装 虚拟机 vmware、centos7等

vmware&#xff1a; https://www.vmware.com/products/fusion.html centos7 清华镜像&#xff1a; 暂时没有官方的 m1 arm架构镜像 centos7 链接: https://pan.baidu.com/s/1oZw1cLyl6Uo3lAD2_FqfEw?pwdzjt4 提取码: zjt4 复制这段内容后打开百度网盘手机App&#xff0c;操…

C语言例4-7:格式字符f的使用例子

%f&#xff0c;实型&#xff0c;小数部分为6位 代码如下&#xff1a; //格式字符f的使用例子 #include<stdio.h> int main(void) {float f 123.456;double d1, d2;d11111111111111.111111111;d22222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n&qu…

服务运营|香港大学雷骁:收益管理中价格歧视的公平性

编者按&#xff1a; INFORMS George B. Dantzig Dissertation Award 用于表彰运筹学和管理科学领域中具有创新性和实用性的最佳毕业设计。香港大学助理教授雷骁题为“Revenue Management in Video Games and With Fairness” 是这一奖项2023年度的提名者之一。 这篇毕业设计重…