obs obs_transform_info数据结构解析

今天端午节,中午烙了好久没吃到的韭菜馅儿盒子,晚上尝试自己包了粽子,虽然翻车了,还是挺开心的,啊,好困~

obs中有obs_sceneitem_set_info函数用来设置场景项信息,这个转换信息就是今天学习的这个数据结构。

官方帮助手册上的信息:

Scene Item Transform Structure (obs_transform_info)¶
struct obs_transform_info
Scene item transform structure.

struct vec2 obs_transform_info.pos
Position.

float obs_transform_info.rot
Rotation (degrees).

struct vec2 obs_transform_info.scale
Scale.

uint32_t obs_transform_info.alignment
The alignment of the scene item relative to its position.

Can be 0 or a bitwise OR combination of one of the following values:

OBS_ALIGN_CENTER
OBS_ALIGN_LEFT
OBS_ALIGN_RIGHT
OBS_ALIGN_TOP
OBS_ALIGN_BOTTOM
enum obs_bounds_type obs_transform_info.bounds_type
Can be one of the following values:

OBS_BOUNDS_NONE - No bounding box
OBS_BOUNDS_STRETCH - Stretch to the bounding box without preserving aspect ratio
OBS_BOUNDS_SCALE_INNER - Scales with aspect ratio to inner bounding box rectangle
OBS_BOUNDS_SCALE_OUTER - Scales with aspect ratio to outer bounding box rectangle
OBS_BOUNDS_SCALE_TO_WIDTH - Scales with aspect ratio to the bounding box width
OBS_BOUNDS_SCALE_TO_HEIGHT - Scales with aspect ratio to the bounding box height
OBS_BOUNDS_MAX_ONLY - Scales with aspect ratio, but only to the size of the source maximum
uint32_t obs_transform_info.bounds_alignment
The alignment of the source within the bounding box.

Can be 0 or a bitwise OR combination of one of the following values:

OBS_ALIGN_CENTER
OBS_ALIGN_LEFT
OBS_ALIGN_RIGHT
OBS_ALIGN_TOP
OBS_ALIGN_BOTTOM
struct vec2 obs_transform_info.bounds
The bounding box (if a bounding box is enabled).

.pos,.bounds好理解,即场景项在输出output中占据的矩阵位置,当然可能不是实际全都填充上。

.alignment咋眼看上去不好理解,它描述的其实是.pos这个起始位置相对于场景项的位置,最简单的一种位置关系是left | top,示意图如下:

如果设置这个值为left | bottom,那么位置就变成了这样:

那么sceneItem就有看不到的可能。

.rot即旋转角度

.bounds_type 和  .bounds_alignment即通常意义上的填充规则的语义了。当源的宽高比例和这个矩形的宽高比例不一致时,这两个选项就有了意义。

举两个例子吧。假如output和信号源的分辨率都是1280*720,但是场景设置的信号源rect是(0,0,1280,720*3/4),那么当

.bounds_type为scale_to_height,.bounds_alignment为right时,布局如下图:

stretch是直接不保持比例进行填充。

.bounds_type为scale_to_width,.bounds_alignment为bottom时,布局如下图:

即信号源有一部分是处于output之上看不到的。此时如果设置alignment为top的话,信号源会充满整个output;center则是这两种极端情况的中间位置。

难理解的情况应该是都说了,inner,outer和max_only的情况下次再说吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值