VVC代码学习之自定义数据结构阅读

struct Position

struct Position
{
    PosType x;
    PosType y;

    Position()  :x(0),y(0){}
    Position(const PosType _x, const PosType _y): x(_x), y(_y) {}

    bool operator!=(const Position &other) const {return x != other.x || y != other.y;}
    bool operator==(const Position &other) const {return x == other.x || y == other.y;}

    Position offset(const Position pos)   const {return Position(x + pos.x,y + pos.y);}
    Position offset(const PosType _x,const PosType _y)   const {return Position(x + _x,y + _y);}
    
    void repositionTo(const Position newPos) {x = newPos.x; y = newPos.y;}
    void relativeTo (const Position origin) {x -= origin.x; y -= origin.y;}

    Position operator-(const Position &other) {return Position(x-other.x, y-other.y);}
};

应该是包含了图像的位置信息,坐标x,y,提供了两种构造函数,在其中重载了 == ,!= 和 - 两个运算符,用来判断位置是否相等,以及相减操作

定义了offset成员函数,用来给当前的位置增加偏移量,达到改变当前位置的效果

定义了repositionTo成员函数,用来更新当前的位置信息:x,y

定义了relativeTo成员函数,返回当前位置减去形参数据的新位置

struct Size

应该是用来保存当前块的大小,定义了 width和height两个成员变量,提供了两种构造函数,重载了 == 和 != 两个运算符判断是否相等

定义了area() 成员函数,返回当前块的大小(或者说面积,像素点数量)

定义了resizeTo()方法,裁剪当前块的大小,或者说调整区域大小

struct Area

继承了两个基类,分别是Position和Size,分别存在有三个构造函数

定义pos()和size()两个成员函数,用来返回当前区域的坐标信息和区域信息

分别定义了四个成员函数,分别返回左上,右上,左下和右下的坐标

分别定义和重载了两个contains()函数,返回值为布尔类型,判断当前坐标或者area是否包含形参变量代表的区域

重载了 ==  和 != 运算符,判断两个区域是否想和或不等

struct UnitScale

这个类是用来进行缩放操作的,目标分别是模板类型,Position,Size,Area

struct CompArea 

这个类在继承了Area类的基础上,也就是在定义了位置position,大小size两种信息之后,为这个区域提供了编码格式(444,420,422 etc.)和编码的通道信息(Y,Cb,Cr)。

其中定义了chromaPos(),lumaPos(),chromaSize(),lumaSize(),compPos(),chanPos()等成员函数,用来返回对应的position和size,不过总感觉chromaPos()和chromaSize()函数没搞明白,因为如果是luma的话,chromaPos() 和chromaSize() 返回的值并没有改变,还是luma对应的值,如果有大佬看懂了的话,请教教我

还有返回左上,左下,右上,右下四个位置position的函数,但需要根据具体的形参决定返回的是luma还是chroma的position。

valid()成员函数返回值为bool类型,返回当前的compArea是否可用,判断条件为chromaFormat < NUM_CHROMA_FORMAT && compID < MAX_NUM_TBLOCKS && width != 0 && height != 0;

重载了 == 和 != 运算符,同前面一样,不再赘述。

定义了该类的resizeTo(), repositionTo(), positionRelativeTo(),分别调用了对应的父类方法。

未完待续

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值