前言
- 刚接触RK平台,目前正在学习探索阶段,欢迎朋友们一起讨论,指出文章错误和可以优化的地方;
- 如果想参照文中描述进行编译、执行程序,请先参考阅读rv1126 SDK编译和rv1126 数据流;
版本说明,测试使用SDK版本是2020-0912版本,文中记录的问题,可能在新版本已经解决;文中使用的接口函数,可能老版本没有实现。
备注:后续重新购买了2020-1212版本SDK,旋转问题已经解决,不需要再修改源码。另外,编译时,需要多带上如下几个库:-lrknn_runtime -lod_share -lrockx -lOpenVX -lVSC -lGAL -lArchModelSw -lNNArchPerf
代码
直接上代码,代码将同一帧图像数据,利用RK平台的RGA功能,分别对图像进行了格式转换、缩放+旋转+格式转换、裁剪+格式转换,得到3路图像输出,并存储成文件。
代码是参考SDK包rv1126_1109/external/rkmedia/test/c_api/rkmedia_vi_rga_test.c修改而成。
说明:
- 编译后,执行可能遇到旋转效果无法实现,可以参考后续说明的方法修改;
- RK平台提供的接口,缩放图的长宽应该是要16的倍数,如果参照
rv1126_1109/external/rkmedia/test/c_api/rkmedia_vi_rga_test.c里缩放输出960x540,会发现存储得到的图像数据有异常。修改输出尺寸为960x544后正常;
// Copyright 2020 Fuzhou Rockchip Electronics Co., Ltd. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <assert.h>
#include <fcntl.h>
#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <pthread.h>
//#include "common/sample_common.h"
#include "rkmedia_api.h"
#include "rkmedia_venc.h"
static bool quit = false;
// 信号处理程序
static void sigterm_handler(int sig)
{
fprintf(stderr, "signal %d\n", sig);
quit = true;
}
// 图像数据处理线程
static void *GetMediaBuffer(void *arg)
{
RGA_CHN rga_chn = *(RGA_CHN *)arg;
char save_path[512];
//
printf("#Start %s thread, rga_chn:%d\n", __func__, rga_chn);
sprintf(save_path, "/userdata/output_%d.nv12", rga_chn);
//
FILE *save_file = fopen(save_path, "w");
if (!save_file)
printf("ERROR: Open %s failed!\n", save_path);
MEDIA_BUFFER mb = NULL;
int save_cnt = 0;
int recv_len;
while (!quit)
{
mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_RGA, rga_chn, 50);
if (!mb)
{
if (!quit)
{
continue;
}
printf("chn-%d:RK_MPI_SYS_GetMediaBuffer get null buffer!\n", rga_chn);
break;
}
recv_len = RK_MPI_MB_GetSize(mb);
printf("Get Frame-chn-%d:ptr:%p, fd:%d, size:%zu, mode:%d, channel:%d, "
"timestamp:%lld\n",
rga_chn,
RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetFD(mb), recv_len,
RK_MPI_MB_GetModeID(mb

本文介绍RK平台RGA功能的应用实例,演示如何通过RGA进行图像格式转换、缩放及旋转等操作。针对旋转功能未生效的问题,给出了详细的解决方案。
最低0.47元/天 解锁文章
835





