jm8.6专题

JM8.6 的核心编码函数研究

原文转自:http://www.cnblogs.com/xkfz007/articles/2612755.html 摘 要: H.264 编解码软件JM 通常被作为算法研究或者实际应用的平台。理解JM 的程序结构是在其基础上进行进一步研究工作的前提。JM 中的编码函数encode_one_macroblock在程序实现编码算法的过程中起到核心的作用。这篇文章通过对程序中开销计算,关键全局变

JM8.6中的encode_one_macroblock注释

原文转自:http://www.cnblogs.com/xkfz007/archive/2011/04/04/2005286.html 下面是在阅读JM8.6的过程中,对encode_one_macroblock的注释。 /*!  ******************************************************************************

JM8.6解码端是如何把像素值写进test_dec.yuv文件的?(write_out_picture函数)

写文件的过程必然涉及到打开文件,所以在代码中找fopen函数,而解码器中的fopen不是很多(如果fopen太多,也可以从fwrite, fputc, putc的角度来找),所以可以很快找到我们感兴趣的代码: if ((p_out=fopen(inp->outfile,"wb"))==0){snprintf(errortext, ET_SIZE, "Error open file

JM8.6解码端是如何对H.264码流进行读取的?(GetAnnexbNALU 函数)

原始的foreman_part_qcif.yuv文件进行编码后(本人编码的是一帧),生成了test.264文件,现在要用JM8.6解码器对其进行解码,显然,首先要读取码流,然后对码流进行解析. 读二进制的数据,无非就是用到fread, fgetc这样的函数,在代码中简单搜索一下,就很容易定位到我们感兴趣的地方,即: while(!feof(bits) && (Buf[pos++]=

JM8.6解码端是如何从配置文件decoder.cfg获取数据的? (init_conf函数)

在ldecod.c文件的main中调用了init_conf函数,这个函数实际上就实现了程序从配置文件读数据的过程. 之前说过,在JM8.6编码端,Configure函数起着做配置文件encoder_baseline.cfg数据的作用,现在来看看解码端的init_conf函数.       main中是这样调用的: init_conf(input, argv[1]);

JM8.6编解码器中trace_enc.txt和trace_dec.txt文件的功能

前面博文已经说过,在JM8.6编码端如何开启trace_enc.txt功能以及如何利用trace_enc.txt文件的信息来分析码流,在此,不再赘述.下面来看看在解码端如何开启trace_dec.txt. 在JM8.6解码端的define.h文件中有: #if defined _DEBUG#define TRACE 0 /

C语言中%*[^\n]的重要用途(从JM8.6解码器中学到的)

很多软件都有配置文件,软件代码需要从配置文件中获取信息. 在看JM8.6解码器时,需要解析配置文件,以便从配置文件decoder.cfg中获取信息. 当然配置文件中有“注释”,那么,如何滤掉这些“注释”呢?       decoder.cfg文件中的内容为:   test.264                 ........H.264 coded bitstream

JM8.6中NALU(此处指VCL式的NALU)是如何写进码流的?

在lencod.c的main函数中调用了encode_one_slice函数,在encode_one_slice函数中调用了frame_picture函数,调用了frame_picture函数后(frame_picture还会继续调用其他重要函数) 就实现了对第一帧的编码,这样全局变量frame_pic就发生了变化,得到了它想得到的码流,现在要写码流,怎么写呢?       在en

从JM8.6代码看Bitstream、DataPartition、Slice、Picture的关系及码流结构本质

在global.h中有: typedef struct{int byte_pos; //!< current position in bitstream;int bits_to_go; //!< current bitcounterbyte byte_buf;