FFMPEG 不到200行实现HEVC/H265解码器并读取量化参数

代码

参考FFMpeg中example代码写了个简单的HEVC解码器(实际上修改了CODECID应该都能解码)
example的代码位于doc/examples路径下

运行方法

获取到FFMpeg编译包(包括include和lib,还有dll这些,后面会写一下如何在windows下编译生成ffmpeg)
实际FFMpeg编译后生成包含的头文件很少,可能因为主要是为了包装成上层应用。因此我在读取解码后的量化参数的时候,把hevcdec.h之类的文件也全部复制过来了,主要是为了调用HEVCContext这个结构体,里面的qp_y_tab包含每个min_cb的量化参数。
应该是可以根据划分深度,获取到每个编码块的量化参数,这样更符合码流分析的习惯。但是目前没有找到有用ffmpeg对HEVC码流实现码流分析的开源项目,因此都是自己瞎琢磨,每个参数每个变量去找他们的用途和含义,因此有很多不懂的地方法,有写的不合理和不对的地方,烦请指出。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
extern "C" {
   
#include <libavcodec/avcodec.h>
#include <libavcodec/codec_desc.h>
#include <libavcodec/codec.h>
#include <libavcodec/hevcdec.h>
}
#define INBUF_SIZE 4096
FILE* fr;
static void pgm_save(AVFrame *frame, int xsize, int ysize,
    char* filename)
{
   
    //FILE* f;
    int i, j, k;

    int width = frame->width;

    
    //fprintf(f, "P5\n%d %d\n%d\n", xsize, ysize, 255);
    for (i = 0; i < ysize; i++)
        fwrite(frame->data[0] + width * i , 1, width, fr);
    for (j = 0; j < ysize / 2; j++)
        fwrite(frame->data[1] + width / 2 * j, 1, width / 2, fr);
    for (k = 0; k < ysize / 2; k++)
        fwrite(frame->data[2] + width / 2 *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值