自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 const, static, inline, #define的用法以及关系

在我们写代码的过程中,添加合适恰当的相应修饰符去告诉编译器该怎么做,限制编译器在我们背后偷偷的做一些出乎我们意料的行为,这样方能提高程序的鲁棒性。作为程序员,我们是主宰,应该由我们来明确告诉编译器,我们希望它做什么,不希望它做什么,而不是等发生错误的时候才花大量的时间去debug。合理应用各种修饰符,就像我们为程序开凿了一条河床,让它按照我们的意愿流淌,何乐而不为?语言有很多修饰符,我们在这里只分析

2016-06-04 11:47:43 2152

原创 构造函数与析构函数中不调用虚函数

在C++中,提倡不能在构造函数和析构函数中调用虚函数。 这是为什么呢?首先,我们先回顾一下C++虚函数的作用。 虚函数的引入是c++运行时多态的体现,通过调用虚函数可以在运行程序时实现动态绑定,体现了面向对象编程多态的思想。那为何提倡不能在构造函数与析构函数中不能调用虚函数。接下来我们通过代码分析在构造函数或者虚构函数中调用虚函数是否可行。假设我们有两种商品A, B。 我们要记录着两种商品的销售记

2016-06-02 00:44:57 3230

原创 构造函数及析构函数与虚函数的关系

我们都知道构造函数不能为虚函数,而基类的析构函数一般都要定义为虚函数。今天重新复习了一下,特在此记载,以便查找。构造函数不能为虚函数主要有以下两点1、必要性分析: 当定义派生类对象时,它会主动依次调用构造函数,顺序为基类的构造函数->一级派生类构造函数->二级派生类构造函数….直到当前派生类的构造函数调用完毕为止,到此派生类对象生成。 而虚函数存在的意义为动态绑定,从上一段话可知,它会从基类开始

2016-03-05 20:38:08 2391

转载 HEVC参考帧管理(RPS)

分析HM参考帧的管理:HEVC采用了参考帧集(RPS)的技术来管理已解码的帧,用作后续图像的参考。与之前的视频编码标准中参考侦管理策略不同的是,HEVC中的RPS技术,通过直接在每一帧开始的片头码流中传输DPB中各个帧的状态变化,而H.264/AVC中的滑动窗和MMCO (Memory ManagementControl Operation)这两种参考帧管理技术,是通过传输每一个片的DPB的相对变化

2016-03-03 15:54:42 2731

原创 OpenHEVC多线程解码之线程初始化

OpenHEVC支持单进程解码,同时支持多种类型的多线程解码,具体有帧并行,Slice并行,帧片同时并行. 因此多线程初始化函数需要判断当前程序是否支持多线程,以及其类型并初始化. //!< 判断是否并行,以及初始化 int ff_thread_init(AVCodecContext *avctx) { int ret = 0;validate_thread_parameters(a

2016-03-01 17:14:26 1600

原创 OpenHEVC多线程解码流程

Author: lb ffmpeg中的OpenHEVC支持单线程,多线程解码。支持多线程解码大大提高了解码速度。其中,OpenHEVC支持三种形式的多线程解码,分别是 Frame(帧)并行解码, Slice(片)并行解码,frameSlice(帧片)并行解码。下面重点分析Frame并行解码,Slice并行解码还没有怎么研究,读懂之后再更新Slice并行解码的相关内容。 这篇文章参考了:ffm

2016-01-29 14:03:29 2548

原创 OpenHEVC(ffmpeg)多线程解码参数配置过程

这篇文章主要讲解在Linux终端和Eclipse(IDE)下怎么配置OpenHEVC的多线程解码.注意运行系统环境均为Ubuntu.首先,我们的ffmpeg工程已经配置好,可以正确运行(参照这篇文章) ,接下来我们要配置OpenHEVC多线程解码的话,需要通过编译参数去配置. 下面先认识一下ffmpeg相关的配置参数.打开终端,如下图所示: 一: -f (1: frame, 2: slice,

2016-01-29 13:42:37 3818

原创 回调函数

这段时间在研究ffmpeg的代码,发现里面为了兼容各种格式的音视频编解码,大量采用了回调函数,使得ffmpeg的兼容性得到很好的提升.那么什么是回调函数呢,它的作用是什么,我们应该怎么用它. 作者浏览了网上的很多文章,发现下面的这一遍写的不错,故转载.原文: 著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:桥头堡 链接:http://www.zhihu.com

2016-01-25 18:21:52 794 1

转载 ffmpeg多线程解码流程

FFMPEG多线程编码器一般以在Slice内分功能模块进行多线程编码,如h263,h263P,msmpeg(v1, v2, v3),wmv1。包含以下几个线程:(1)Pre_estimation_motion_thread运动估计前的准备;(2)Estimation_motion_thread运动估计;(3)Mb_var_thread宏块其他变量;(4)Encode_thread编码主线程。当然也有

2016-01-19 11:21:21 7761

原创 [leetCode]26. Remove Duplicates from Sorted Array

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do this in place with cons

2016-01-18 14:32:43 428

原创 [leetCode]70. Climbing Stairs

You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 题意: n步阶梯,你每次只能迈一步或者两步,共有几种方法;分析: 这个问

2016-01-14 20:32:29 327

原创 [leetcode]326. Power of Three

Given an integer, write a function to determine if it is a power of three.Follow up: Could you do it without using any loop / recursion?题意:给你一个数,判断它是否为3的幂。 程序中最好不采用任何循环和递归。思路:下面给出两种解法,第一种为常规解法,采用循环

2016-01-14 20:03:53 415

原创 [leetCode]Add Digits

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.For example:Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, r

2016-01-13 19:31:29 340

原创 [leetCode]Happy Number

Write an algorithm to determine if a number is “happy”.A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of i

2016-01-13 14:14:03 645

原创 [leetCode]Ugly Number

Write a program to check whether a given number is an ugly number.Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 6, 8 are ugly while 14 is not ugly since it in

2016-01-13 14:04:48 361

原创 [LeetCode] Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.Subscribe to see which companies asked this question题意: 给两个已

2016-01-13 13:57:10 303

原创 [leetCode]Majority Element

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.You may assume that the array is non-empty and the majority element always

2016-01-07 21:48:10 400

原创 [leetCode]Single Number III

Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.For example:Given nums = [1,

2016-01-06 14:22:24 409

原创 OpenHEVC在Linux Eclipse 下的配置过程

从前段时间开始,由于项目需要,开始研究OpenHEVC. 于是在GitHub上面将OpenHEVC整个工程fork到我自己的账号下,并clone到了电脑上. 按照OpenHEVC的ReadMe文件上面的教程在终端界面很顺利就将OpenHEVC配置好,能够顺利解码. 接下来为了更好的调试阅读代码,打算将OpenHEVC在Eclipse里面配置,结果弄了蛮久才成功,下面将在Eclipse上的

2016-01-05 20:55:32 1179

原创 Linux下出现launch failed.Binary not found的解决方案

Project->Properties->C/C++Build->Settings->Binary Parsers勾选GNU Elf Parser和Elf Parser然后千万千万别忘了Project->Build All (Ctrl+B), 再run(Ctrl+F11)如果看到项目下面出来一项名为Binaries, Congradulations! 配置成功,可以run了!

2016-01-05 20:45:10 2788 1

原创 2015年HEVC解码器组个人工作总结

2015年工作总结今天是2015年的最后一天,怀着对过去的怀念与对未来的期盼,在此写下2015年的工作总结。 2015年一整年的工作均以实现H.265解码器为中心。从四月份廷姐与琦师兄离开公司项目组开始,解码器项目组就只剩下林工和我两个人。而我们的目标是年内实现解码器的DSP版本能够实现1080p的实时解码,当时看起来我们的工作解码器框架刚刚搭建起来,还有很多的bug,距离年终目标还差了非常多,不

2015-12-31 18:02:54 1119

原创 [LeetCode] Single Number

Single Number: Given an array of integers, every element appears twice except for one. Find that single one.给出一个整数数组,数组里的元素除了一个只出现一次之外,其它元素均出现两次,求得并返回只出现一次的元素。 范例: [1,2,3,1,3,] -> 返回 2思路: 其它元素均出现两次,

2015-12-27 16:50:15 405 1

原创 IDCT的原理以及代码分析

代码版本: HM16.2IDCT(逆DCT)变换是DCT变换的逆变换。在HEVC的解码端对图像的像素残差进行IDCT变换,再进行反量化,就可以得到最初的残差值, 原像素 = 预测值 + 残差值。这篇文章基于HM16.2版本的解码代码进行原理分析以及代码实现。原理分析: 令: H为编码端的变换矩阵,X为像素值矩阵, Y为变换后得到的像素值矩阵。 变换公式大体为:。 n为变换矩阵的尺寸,在HEVC

2015-12-23 17:10:42 7596 1

转载 [若有所悟]七步,改变你的纯文本报告面目

本文转自: http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/09/26/2704707.html 所谓纯文本工作报告,即用纯文本对工作进行总结汇报。由于没有Excel强大的数据处理功能,没有PPT绚丽的表现形式,很多人做出的报告都很难让人读懂、甚至晦涩杂乱。本文,从最原始的一篇报告开始改起,通过7步法(个人理论),将其变为一篇

2015-12-14 21:09:02 506

转载 指针常量与常量指针的区别[转帖]

三个名词虽然非常绕嘴,不过说的非常准确。用中国话的语义分析就可以很方便地把三个概念区分开。一) 常量指针。常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。在C/C++中,常量指针是这样声明的:1)const int *p;2)int const *p;常量指针的

2015-12-11 15:44:26 491

原创 H.265 帧内PCM模式详解

原理:PCM模式是帧内的一种特殊的编码模式,编码端直接传输像素值。当相应的CU采用PCM模式时,CU不经过预测,变换,量化和熵编码等步骤,直接将Cu的像素值直接传输到解码端。同理,解码端不用经过预测等步骤,直接从码流中将像素值读出来即可。PCM模式适用于图像特别复杂,采用其他编码模式效果不理想,采用PCM模式效果还更好的情况。在无损编码中也采用PCM模式。代码流程:首先从SPS(图像序列头)中读取p

2015-11-03 18:15:01 5543

原创 Debug模式下正确,Release错误

今天在调HEVC项目代码时,发现Debug下码流可以正确解码,Relaese下出错。经过一番调试,发现问题是一个数组没有初始化导致的错误。 真正的原因是:Debug会给未初始化的变量自动初始化,Release不会。 平时写代码千万不要偷懒,该初始化就初始化,特别是数组的初始化。 下面的链接是关于Debug和Release模式下程序的差异,写得不错: http://www.cnblogs.co

2015-11-01 20:40:20 7037

转载 vs2010下Release版本调试代码设置

有时候代码在Debug正确,在Release版本下出错。此时需要在Release下调试程序,为了方便调试,我们需要把优化关掉。设置在Release模式下调试的方法:1.工程项目上右键 -> 属性2.c++ -> 常规 -〉调试信息格式 选 程序数据库(/Zi)或(/ZI), 注意:如果是库的话,只能(Zi)3.c++ -> 优化 -〉优化 选 禁止(/Od)4

2015-11-01 17:55:15 2806

原创 HEVC加权预测(Weight Prediction)原理兼解码代码

HEVC添加加权预测模式的原因:现今很多视频中都采用的一种技术:场景随着时间光线强弱渐变(temporal illumination variation),或者相同场景,出现阴影效应。这样的视频,帧与帧之间,背景的相似度可能很高,明暗差别较大,若单纯采用运动预测,运动补偿技术,得到的残差会不够理想。此时,有人注意到,出现temporal illumination variation现象,相

2015-10-29 21:35:40 4339

原创 [LeetCode] Excel Sheet Column Title、Excel Sheet Column Number

/************ ** Excel Sheet Column Title ** ** Given a positive integer, return its corresponding column title as appear in an Excel sheet.For example:1 -> A 2 -> B 3 -> C … 26 -> Z 27 -> AA

2015-10-25 17:11:26 354

原创 [LeetCode] Move Zeroes

/************ ** Move Zeroes ** **Given an array nums, write a function to move all 0’s to the end of it while maintaining the relative order of the non-zero elements. **For example, given nums =

2015-10-25 14:17:50 292

转载 [转载]函数编写规范

一、可重入函数 1)什么是可重入性? 可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相 反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数 的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任 意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要 么在使用全局变量时保护自己

2015-09-04 21:34:42 883

原创 头文件应该怎么写

因为一个对象只能定义一次,能够声明多次,所以头文件最重要的规则是只声明,不定义(除少数对象外)。而且只声明其他文件需要用到的对象,其他文件不需要用到的对象没必要在头文件中声明。当其他文件需要用到本文件定义的一些对象时,我们可以将这些对象写到头文件中,其他文件只要include这个头文件即可使用相应的对象。头文件一般包含类的定义(不包含类定义外部的成员函数实现),extern变量声明,以及函数声明。要

2015-08-26 22:34:33 12473

原创 一点点感受

今晚吹着徐徐的晚风,在消防通道跟林老板聊了将近一个小时。算起来读研将近一年,在北发这边也呆了一年,做视频编解码的项目。其中大概有半年多是跟着林老板一起做项目。学到了很多东西,特别感激。 谈了一个小时,有很多的感受。林老板指出我在这半年多的表现,任务基本上能够按时完成,效果却不够满意,让人觉得是为了应付,不用心。回想起来,的确如此,一方面是自己不够认真,不愿意花更多的时间去钻研;另一方面是担心时间不

2015-08-26 21:42:19 654 1

原创 HEVC 样点自适应补偿(SAO)原理详解

代码版本:HM-16.2+SCM-3.0rc1 时间: 2015/07/20 作者:LBSAO应用于去方块滤波之后,首先将Frame划分成若干个LCU,SAO对处于不同图像区域的LCU进行局部信息补偿,以减少源图像与重构图像之间的失真。HEVC中根本上说只有两种SAO类型:边缘补偿(EO,Edge Offset),带状补偿(BO,Band Offset),在实际操作过程中还引入了参数融合模式

2015-08-26 17:15:54 6721

原创 HEVC去方块滤波原理以及代码流程

代码版本:HM-16.2+SCM-3.0rc1 时间: 2015/5/17 作者: LB环路滤波以及SAO在代码中的大概流程如下图所示: 下面分别对去方块滤波和SAO的原理和相关代码作分析。去方块滤波: 去方块滤波的主要步骤流程图如下: 滤波顺序: 以参考代码版本为例,去方块滤波的滤波顺序是以CTU为基本单位,按照光栅扫描进行滤波;在CTU内部以CU为基本单位,按照Z扫描方式进行

2015-08-26 17:02:34 3925

原创 HEVC 帧间预测技术总结

代码版本:VTHECDec 代码函数:motionCompensation 时间:2015/3/9 作者: LB帧间MV预测的函数调用流程图如下图: 由上图可以看出,函数motionCompensation()分别调用流程图后续的函数,完成帧间MV预测运动补偿过程。整个过程主要有三部分,下面分开说明。第一:函数getpuNum() 作用:根据Cu到Pu的划分方式,计算Pu的个数。返回

2015-08-26 16:29:39 5139 1

原创 HEVC 高级运动向量预测技术(AMVP)

代码版本: VTHEVCDec函数: fillMvpCand()时间: 2015/8/26作者: 林彬 高级运动向量预测技术(AMVP)利用空间、时间上运动向量的相关性,分别建立空域候选列表以及时域候选列表,再从候选列表中选取最终的MVP。 1、空域候选列表的建立       空域候选列表需要从上图5个参考块中选出两个候选MV。分别是a0,a1中选出一个

2015-08-26 16:01:42 8249 3

原创 LeetCode 之Remove Linked List Elements

LeetCode : Remove Linked List Elements 题目原意:Remove all elements from a linked list of integers that have value val. Example Given: 1 –> 2 –> 6 –> 3 –> 4 –> 5 –> 6, val = 6 Return: 1 –> 2 –>

2015-06-14 15:09:07 413 1

原创 LeetCode 之 Invert Binary Tree

LeetCode : Invert Binary Tree 题目原意:反转一棵二叉树,即交换树的每一个左右节点; 代码如下(leetCode 测得运行时间为0ms):struct TreeNode *invertTree(struct TreeNode *root){ struct TreeNode *tmp = NULL; if (root == NULL) { ret

2015-06-14 14:06:41 472

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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