和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
一、基础介绍
1.ChiUsecase数据结构用来概括一个usecase的信息
2.ChiPipelineTargetCreateDescriptor数据结构用来描述一个完整的pipeline
3.ChiPipelineCreateDescriptor数据结构描述一个pipeline的构成
4.ChiTargetPortDescriptorInfo数据结构描述一个pipeline的sink/source缓存信息
二、裁剪变量
1.裁剪变量的定义
2.usecase描述中的裁剪参数
三、usecase裁剪的代码实现
四、裁剪ZSLSnapshotJpeg 举例
1.ZSLSnapshotJpeg pipeline
2.裁剪node
3.裁剪link
4.裁剪sourceTarget
一、基础介绍
usecase裁剪是指根据pruneSettings将一个usecase描述中部分内容剪修的处理过程。
接下来会以ZSLSnapshotJpeg 这条pipeline的裁剪为例子,了解是如何裁剪的。
在开始裁剪一条pipeline前,先看下usecas描述中的几个数据结构,了解可裁剪的内容有哪些(node, target, link)。
1.ChiUsecase数据结构用来概括一个usecase的信息
struct ChiUsecase
{
const CHAR* pUsecaseName;
UINT streamConfigMode;
UINT numTargets;
ChiTarget** ppChiTargets;
UINT numPipelines;
ChiPipelineTargetCreateDescriptor* pPipelineTargetCreateDesc;
const PruneSettings* pTargetPruneSettings;
BOOL isOriginalDescriptor;
}
一个usecase的基本信息包括:
usecase名字
streamConfigMode, 表明该usecase用于什么相机操作模式
chiTargets, 该usecase所拥有的target,包括sinkTarget和sourceTarget.
chiPipelineTargetCreateDescriptor, 该usecase所拥有的pipeline的描述
pruneSettings, 该usecase的裁剪配置
2.ChiPipelineTargetCreateDescriptor数据结构用来描述一个完整的pipeline
struct ChiPipelineTargetCreateDescriptor
{
const CHAR* pPipelineName;
ChiPipelineCreateDescriptor pipelineCreateDesc;
ChiTargetPortDescriptorInfo sinkTarget;
ChiTargetPortDescriptorInfo sourceTarget;
};
一个Pipeline的完整描述有四个内容:
pipeline名,区分pipeline的不同;
pipeline的构建描述,描述这条pipeline是什么样的构成
sinkTarget下游目标,描述pipeline的输出是什么样的;
sourceTarget上游目标,描述pipeline的输入是什么样的。
3.ChiPipelineCreateDescriptor数据结构描述一个pipeline的构成
typedef struct ChiPipelineCreateDescriptor
{
UINT32 size;
INT32 numNode;
CHINODE* pNodes;
INT32 nulLinks;
CHINODELINK* pLinks;
UINT32 isRealTime;
UINT numBatchedFrames;
UINT