自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

stpeace的专栏

涛哥不知何许人也,亦不详其姓字。好读书,求甚解。常著文章自娱,颇示己志。忘怀得失,有始有终......

原创 fseek函数的用法(用于设定指针位置)

fseek函数用来设置文件指针stream的位置,原型为: int fseek(FILE *stream, long offset, int fromwhere);       下面先对fseek有一个初步的认识,以后具体用到时,如果不清楚,可以查阅相关(网络)资料. #include u...

2012-11-30 23:29:12

阅读数 10957

评论数 2

原创 ftell函数的用法(用于获取指针位置)

ftell函数用于得到文件位置指针当前位置相对于文件首的偏移字节数,下面给出一个简单的例子: #include using namespace std; int main() { FILE *fp = fopen("myData.txt", "w&qu...

2012-11-30 23:11:30

阅读数 27754

评论数 0

原创 #ifdef WIN32有什么作用?

经常在程序中碰到#ifdef WIN32这样的代码,实际上这提供了一种抽象机制,使代码可以在不同平台间移植. 下面给出一个简单的例子: #include using namespace std; #ifdef WIN32 #define HAHA 1 #else #define H...

2012-11-30 15:05:59

阅读数 25716

评论数 2

原创 malloc函数和calloc函数的一个小区别

最近看程序,总是看到calloc, 基本没有看到malloc. malloc函数和calloc函数除了原型有点不一样之外,还有个微不足道的小小区别,看程序: #include #include // 为了malloc 和 calloc int main() { unsigned ...

2012-11-29 23:11:01

阅读数 6218

评论数 0

原创 main函数中的argc和argv是什么意思?

先看程序: #include using namespace std; int main(int argc, char *argv[]) { cout << argc << endl; cout << argv[0] << end...

2012-11-29 22:53:16

阅读数 9465

评论数 2

原创 如何从JM8.6的编码端和解码端提取滤波前的像素值?

先来看看H.264编码器和解码器的示意图:                           在H.264的编码端和解码端都会有一帧图像的滤波前的像素值,而且必然是相等的. 与滤波前的像素值对应的一个概念是滤波后的像素值,滤波后的像素值又叫做重建值. 值得一提的是:H.264帧内预...

2012-11-28 21:31:58

阅读数 6898

评论数 2

原创 为什么delete p;后最好加上p = NULL; ? (浅谈内存泄露和内存过度释放)

一直很怕内存泄露,内存泄露有时候真的会有严重的后果. 本人在处理内存问题时经常小心翼翼,生怕忘了释放. 但是,上次在某公司实习,我把内存重复释放了,结果引起了程序的错误. 由于程序很大,而且很复杂,所以开始并没有找到问题所在,花了好长时间才找到. 哎,差点被骂. (后来发现,网上有很多人也有这个错...

2012-11-28 20:27:39

阅读数 10458

评论数 0

原创 stderr 和 stdout有什么区别?

最近看程序,经常碰到stderr, 在一般的小程序中很少用到这些,查阅了很多网上资料,说得玄乎得很,我们先来看一下程序: #include int main() { fprintf(stdout, "hello"); fprintf(stderr, "...

2012-11-28 13:22:00

阅读数 6811

评论数 0

原创 snprintf函数的用法

看程序,看着看着,总看到这个snprintf, 又不知道其用途,颇为不爽,现在把它搞清楚:  #include int main() { char str1[50]; char str2[50]; char str3[50]; char *str4 = "123456789&...

2012-11-28 12:00:53

阅读数 7443

评论数 0

原创 matlab中如何删除向量和矩阵中的元素?

碰到一个问题,要删除文件中的某些数据,于是想到用matlab来实现,matlab中删除向量和矩阵中的元素的代码如下: clear clc for i = 1 : 10 a(i) = i; end a a(1 : 5) = []; a b= magic(5) ...

2012-11-27 23:11:43

阅读数 35200

评论数 2

原创 这个程序的结果究竟是多少呢?

#include using namespace std; int main() { int a=100; int b=200; int *p=&b; int c=a/*p; cout <<c<< endl; return ...

2012-11-27 23:02:29

阅读数 5945

评论数 0

原创 Why do Java programmers wear glasses?

面试官:Why do Java programmers wear glasses?        程序员:Because they do not C#.        面试官:你被录取了.

2012-11-27 22:36:15

阅读数 7971

评论数 0

原创 如何实现四舍五入操作?

#include using namespace std; int myRounding(float x) { return int(x + 0.5); } int main() { float x; for(x = 0; x < 5; x += 0.3) { cout ...

2012-11-27 22:25:20

阅读数 6072

评论数 0

原创 matlab中如何实现对不同类型对象(类型也可相同)的索引?(很重要的用法)

在matlab中,现在有若干个对象,这些对象可能是一个整数,可能是一个字符串,可能是一个向量,甚至可能是一个矩阵,那么,如何对这些不同类型对象(类型也可相同)进行统一的索引呢?matlab代码如下: clear clc a{1} = 1; a{2} = '12'; ...

2012-11-27 22:12:38

阅读数 6727

评论数 0

原创 利用matlab实现图的绘制、保存、关闭

clear clc cd('C:\Documents and Settings\Administrator\桌面\matlab\test'); vector = ones(1, 100); stem(vector); title('myFigure&...

2012-11-27 21:25:43

阅读数 16307

评论数 0

原创 matlab中fprintf, fscanf, fwrite, fread函数的用法

clear clc cd('C:\Documents and Settings\Administrator\桌面\matlab\test'); a = 1 : 10; fid = fopen('myData.txt', 'w...

2012-11-27 20:44:03

阅读数 58182

评论数 4

原创 matlab中movefile和copyfile的重要用途

clear clc cd('C:\Documents and Settings\Administrator\桌面\matlab\test'); % 设置当前目录 % 此时test文件夹中有:文件夹1, 文件夹2, 文件1.txt, 文件2.txt movefi...

2012-11-27 15:55:13

阅读数 49442

评论数 4

原创 如何用matlab索引文件夹中的所有.txt文件?

对文件夹中的所有某些形式的文件进行批量索引很重要, 经常遇到. 现在test文件夹中有1.txt, 2.txt, 3.txt,..., 100.txt, 那么如果对这些文件进行批量的索引呢?matlab代码如下: clear clc cd('C:\Documents and Sett...

2012-11-27 15:41:10

阅读数 8529

评论数 0

原创 如何用matlab批量新建和删除文件夹?

有时,需要批量地新建多个文件夹,现用matlab来实现:   clear clc cd('C:\Documents and Settings\Administrator\桌面\matlab\test'); % 设置当前目录:current directory ...

2012-11-27 14:24:34

阅读数 24446

评论数 4

原创 为什么C语言的同一个文件中可以定义两个接口完全相同的函数?

最近看程序,有一个大文件中有两个接口完全相同的函数,在调用时,一个被调用,另外一个没有被调用,深感纳闷儿,由于这个文件中的东西比较多,开始竟然没有搞清为什么,后来仔细分析才发现:哦,原来是条件编译啊!举例如下: #include // #define HAHA #ifdef HAHA...

2012-11-27 13:46:44

阅读数 9188

评论数 0

原创 C/C++中的“头文件卫士”

在Objective C中可以用#import来防止重复包含,但在C/C++中就不同了,只能用“头文件卫士”了.               下面的程序是有错误的: // global.h 文件 // #ifndef GLOBAL // #define GLOBAL int total = 0...

2012-11-27 13:32:42

阅读数 9099

评论数 0

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

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

2012-11-26 21:25:27

阅读数 6692

评论数 0

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

原始的foreman_part_qcif.yuv文件进行编码后(本人编码的是一帧),生成了test.264文件,现在要用JM8.6解码器对其进行解码,显然,首先要读取码流,然后对码流进行解析. 读二进制的数据,无非就是用到fread, fgetc这样的函数,在代码中简单搜索一下,就很容易定位到我们...

2012-11-26 16:12:01

阅读数 8319

评论数 0

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

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

2012-11-26 15:42:11

阅读数 7634

评论数 2

原创 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 #...

2012-11-26 15:19:03

阅读数 7270

评论数 0

原创 JM8.6编码器主要函数调用关系小结

跟踪了一下JM8.6编码器代码,发现主要函数调用关系如下:                  1. 编码核心函数                                                                                         ...

2012-11-26 13:23:01

阅读数 6420

评论数 0

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

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

2012-11-26 12:50:07

阅读数 6673

评论数 0

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

在lencod.c的main函数中调用了encode_one_slice函数,在encode_one_slice函数中调用了frame_picture函数,调用了frame_picture函数后(frame_picture还会继续调用其他重要函数) 就实现了对第一帧的编码,这样全局变量frame_...

2012-11-25 21:41:03

阅读数 6746

评论数 0

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

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

2012-11-25 18:41:41

阅读数 6813

评论数 0

原创 JM8.6中NALU(此处指非VCL式的NALU,如SPS和PPS)是如何写进码流的?

先看lencod.c中的GenerateParameterSets函数,进入其中: void GenerateParameterSets () { seq_parameter_set_rbsp_t *sps = NULL; pic_parameter_set_rbsp_t *pps = ...

2012-11-25 16:09:45

阅读数 6795

评论数 0

原创 闲谈杂扯:什么是H.264标准?什么是H.264句法元素?

现在来闲谈杂扯:什么是H.264标准?什么是H.264句法元素?                 之前的博文中有这样一段话,现复制如下:           视频编解码的思路很简单,具体算法有点复杂,下面用一个例子来类比说明视频编解码的原理:         假设你的工资是20000,...

2012-11-25 15:21:58

阅读数 6409

评论数 0

原创 简单看一看H.264中的SPS和PPS

欣赏一下JM8.6代码中的SPS和PPS: typedef struct { Boolean Valid; // indicates the parameter set is valid // 指明profile号 unsigned ...

2012-11-25 14:30:34

阅读数 8498

评论数 0

原创 H.264中NALU、RBSP、SODB的关系 (弄清码流结构)

NALU:Coded H.264 data is stored or transmitted as a series of packets known as NetworkAbstraction LayerUnits. (NALU单元)       RBSP :A NALU contain...

2012-11-25 12:38:50

阅读数 18999

评论数 8

原创 尽信书则不如无书、尽信标准则不如无标准(也谈JM8.6代码中的手误)

看代码时,无意看到了JM8.6中的两个手误,虽然不影响程序,但还是揪出来看看长什么样. 有瑕疵才是正常的,本人一直信奉的观点是:有瑕疵,才真实.          在start_sequence的注释中,单词alternative写成了alterbative,这个很容易理解,在键盘上,n和b刚...

2012-11-25 10:04:45

阅读数 6141

评论数 0

原创 JM8.6中的一个重要结构体NALU_t的定义、分配和释放

在JM8.6中,NALU_t是一个非常重要的结构体,回寝室之前,欣赏一下结构体NALU_t的定义: typedef struct { int startcodeprefix_len; //! 4 for parameter sets and first slice in pictu...

2012-11-24 23:34:40

阅读数 7125

评论数 0

原创 H.264码流分析入门(以第一帧为例)

编码foreman_part_qcif.yuv的第一帧,分析生成的码流,为了便于分析,我们需要打开JM8.6编码器中的trace_enc.txt文件记录功能,怎么开启呢?在JM8.6 encoder的define.h文件中有这样的代码: #if defined _DEBUG #define TRA...

2012-11-24 21:12:02

阅读数 8514

评论数 2

原创 C++与C的一个小区别(变量定义的先后区别)

在C工程中,经常要加一些代码,同时要定义一些新变量,此时,如果在添加代码处定义变量,那么程序就会出错,定义变量必须放在函数的最前面,本人觉得,这是C语言中的一个比较丑陋的现象,比如在C语言编译器中编译下面程序会出错:(本人以前不知道为什么下面的程序会有错,所以第一次碰到这个情况时花了很长时间才把b...

2012-11-24 16:49:09

阅读数 6307

评论数 4

原创 把十进制转成二进制的一个简单易行的方法(不需要用栈) .

前面已经用了一个比较简单的方法把十进制转成十六进制,只需要把%d改成%X即可,如果是八进制,则改成%O即可,但是,查了资料之后发现没有二进制对应的形式. 有时候,为了对数据进行分析,的确需要把十进制化成二进制形式,便于分析每一位,当然用Windows自带的计算器是可以快速转换的,但那样很麻烦,而且...

2012-11-24 16:12:03

阅读数 8897

评论数 0

原创 分析JM8.6中的写码流函数WriteAnnexbNALU

之前已经说过,在JM8.6中写码流函数为WriteAnnexbNALU,如果编码一帧,在WriteAnnexbNALU前打个断点,跟踪代码可以看到该函数被调用了3次,但是奇怪的是,在工程中搜索后,貌似找不到调用WriteAnnexbNALU函数的地方. 在搜索过程中,可以发现这样一个语句: Wri...

2012-11-22 23:08:44

阅读数 6381

评论数 0

原创 JM8.6配置文件中参数的解释

参考JVT-Q042文档,可以学到很多东西. 说明: 不同profile的配置文件中参数一样,只是取值不一样而已,本人认为这样并不好,在baseline的配置文件中带有B帧的信息,非常不好,容易误导人,因为baseline根本就不支持B帧. 下面将对配置文件重要的参数进行解释.   #####...

2012-11-22 21:42:55

阅读数 7652

评论数 2

提示
确定要删除当前文章?
取消 删除