FFMPEG学习【libavutil】:Crypto and Hashing(三)

来源:互联网 发布:软件开发项目简介 编辑:程序博客网 时间:2024/05/18 01:34

一、LZO

一)、宏

#define AV_LZO_INPUT_PADDING   8

#define AV_LZO_OUTPUT_PADDING   12


二)、函数

int av_lzo1x_decode (void *out, int *outlen, const void *in, int *inlen)解码LZO 1x压缩数据。

参数:out:输出缓冲

    outlen:输出缓冲区的大小,剩余的字节数在这里返回

    in:输入缓冲

    inlen:输入缓冲区的大小,此处返回的字节数

返回:0成功,否则上面的错误标志的组合

确保所有缓冲区都被适当填充,必须提供AV_LZO_INPUT_PADDING,必须提供AV_LZO_OUTPUT_PADDING附加字节。


三)、av_lzo1x_decode返回的错误标志

#define AV_LZO_INPUT_DEPLETED   1解码完成之前达到的输入缓冲区结束


#define AV_LZO_OUTPUT_FULL   2解码数据不适合输出缓冲区


#define AV_LZO_INVALID_BACKPTR   4对先前解码的数据的引用是错误的


#define AV_LZO_ERROR   8压缩比特流中的非特定错误



二、RC4

一)、数据结构

struct  AVRC4{
uint8_t state [256];
int  x;
int  y;
}

二)、函数

AVRC4 * av_rc4_alloc (void)分配AVRC4上下文。


int av_rc4_init (struct AVRC4 *d, const uint8_t *key, int key_bits, int decrypt)初始化AVRC4上下文。

参数:key_bits:必须是8的倍数

    decrypt:0加密,1解密,目前没有任何效果

返回:成功为零,否则为负值


void av_rc4_crypt (struct AVRC4 *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt)使用RC4算法进行加密/解密。

参数:count:字节数

    dst:目标数组,可以等于src

    src:源数组,可以等于dst,可能为NULL

    iv:不用(还)用于RC4,应为NULL

    decrypt:0用于加密,1用于解密,不(尚)使用



三、TEA

一)、函数

struct AVTEA * av_tea_alloc (void)分配AVTEA上下文要释放结构体:av_free(ptr)


void av_tea_init (struct AVTEA *ctx, const uint8_t key[16], int rounds)初始化AVTEA上下文。

参数:ctx:AVTEA上下文

    key:用于加密/解密的16字节的密钥

    rounds:TEA的回合次数(64个是“标准”)


void av_tea_crypt (struct AVTEA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt)使用先前初始化的上下文加密或解密缓冲区。

参数:ctx:AVTEA上下文

    dst:目标数组,可以等于src

    src:源数组,可以等于dst

    count:8字节块数

    iv:CBC模式的初始化向量,如果NULL,则使用ECB

    decrypt:0加密,1解密

    


二)、变量

const int av_tea_size