YUV420 或 YV12 图像缩放

这是一个关于如何使用最近邻和双线性内插法进行YUV420(YV12)图像缩放的代码实现。包括了`vs_scanline_resample_nearest_Y`、`vs_scanline_resample_linear_Y`等扫描线缩放函数,以及`orc_merge_linear_u8`和`vs_scanline_merge_linear_Y`的像素合并函数。代码还展示了如何根据不同的缩放类型(SCALE_TYPE_NEAREST、SCALE_TYPE_BILINEAR)选择合适的缩放方法。
摘要由CSDN通过智能技术生成

author: CarlsonLee(carlsonlee.freec@hotmail.com), 本代码是freecamera的一部分,freecamera源代码存在:http://gitorious.org/freecamera


///scale
typedef struct _VSImage
{
    guchar *pixels;
    int width;
    int height;
    int stride;
}VSImage;

static void vs_scanline_resample_nearest_Y (guchar * dest, guchar * src, int src_width,
    int n, int *accumulator, int increment)
{
    int acc = *accumulator;
    int i;
    int j;
    int x;

    for (i = 0; i < n; i++) {
    j = acc >> 16;
    x = acc & 0xffff;
    dest[i] = (x < 32768 || j + 1 >= src_width) ? src[j] : src[j + 1];

    acc += increment;
    }

    *accumulator = acc;
}

static void vs_scanline_resample_linear_Y (guchar * dest, guchar * src, int src_width,
    int n, int *accumulator, int increment)
{
    int acc = *accumulator;
    int i;
    int j;
    int x;

    for (i = 0; i < n; i++)
    {
        j = acc >> 16;
        x = acc & 0xffff;

        if (j + 1 < src_width)
              dest[i] = (src[j] * (65536 - x) + src[j + 1] * x) >> 16;
        else
              dest[i] = src[j];

        acc += increment;
    }

    *accumulator = acc;
}

static void orc_merge_linear_u8 (guchar * d1, const guchar * s1, const guchar * s2,
    int p1, int p2, int n)
{
    int i;
    gchar var0;
    gchar *ptr0;
    gchar var4;
    const gchar *ptr4;
    gchar var5;
    const gchar *ptr5;
    const gshort var16 = 128;
    const gshort var17 = 8;
    const int var24 = p1;
    const int var25 = p2;
    gshort var32;
    g

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值