自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chance_yin

丛浪大化中,不喜亦不惧,应尽便应尽,无复独多虑

  • 博客(97)
  • 收藏
  • 关注

原创 Linux 线程间关系

先说结论再做论证:        All of the threads in a process are peers: any thread can join with any other thread in the process. --- POSIX文档(man pthread_join NOTES)        也就是说,在linux中所有线程都是并列的关系,一个线程的结束&退出不

2015-04-16 19:30:01 1147

原创 NAT网关和NAT穿越原理

一、原理图1、我们模拟的情形是位于局域网A

2014-07-17 21:57:55 8184 2

原创 伸展树c++ 实现

一、为什么要有伸展树根据

2014-06-28 11:36:07 3202 1

原创 分析obj文件,理解重定位过程以及obj文件在程序中扮演的角色

一、待分析的程序源代码#include #include typedef void (*TestFunc)();void test(){ printf("hello world!");};int gi = 0x12345678;void test2(){ printf("to prove compiler will generate a code-sec

2014-03-27 18:42:43 2579 1

原创 通过汇编程序看函数调用过程中的原理

一、C++ 源代码部分int Add(int x,int y){ int sum; sum = x+y; return sum;}int main(int argc, char * argv[]){ int z; z = Add(1,2);}二、反汇编1、函数调用部分:int main(int argc, char * argv[])

2014-03-13 21:38:34 9974 4

原创 汇编机器码分析,同一对象不同字节在内存中的存储位置(大小端讨论)

一、测试环境: vs2008二、测试代码int gi;void main(){ gi = 12;}三、分析:使用VS的发汇编功能,查看上面那段代码的汇编程序(这里主要分析 gi = 12; 这条C语句的反汇编),结果如下:   从反汇编中,我们主要可以得出以下信息:(1)0x00c9138E 是 赋值指令mov的存放地址

2014-03-11 09:06:21 2220

原创 RTMP_ParseUrl 源代码分析,

RTMP_ParseUrl 源代码分析,// rtsp://192.168.10.100 : 8888 / vlc/avatar.mp4 \0// p col slash end/* 可以记录一种含有杂质的字符串中任何一种数据类型 例如记录url中从哪开始(用av_val区别

2014-01-14 10:33:33 1165

原创 Ubuntu下使用VLC的图形界面搭建一个RTSP服务器

1、安装vlc , sudo apt-get install vlc2、打开命令行,执行vlc命令,启动vlc窗口,在工具栏中选择  “媒体 --> 流”

2014-01-07 19:10:11 5885 1

转载 正则表达式的学习与小结

目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。正则表达式的使用,可以通过简单的办法来实现强大的功能。为了简单有效而又不失强大,造成了正则表达式代码的难度较大,学习起来也不是很容易,所以需要付出一些努力才行,入门之后参照一定的参考,使用起来还是比较简

2014-01-06 21:37:09 783

原创 常见和弦

一、C 、 Cm、C7、Cm7、C6、Cm6、Cmaj7、C9、Csus4二、#Dm7、#D6 、#Dm6 、 #Dmaj7 #D9、#Dsus4、E、Em、E7、Em7、E6、Em6、Emaj7、E9、Esus4、F、Fm、F7、Fm7、F6、Fm6三、#C、#Cm、#C7、#Cm7、#C6、#Cm6、#Cmaj7、#C9、#Csus4、D、Dm、D7

2014-01-05 18:56:31 4309

原创 Ubuntu 下用NDK编译移植 ffmpeg 2.0 (配置最新版x264) 到android平台

将x264配置到ffmpeg中需要先编译x264,生成静态库或动态库。因为264的静态库本身不大(我编译完成后是1.1M)且考虑到平台移植问题,这里选择的是编译生成静态库。准备,新建工作空间 (1)创建总目录FFmpeg-Androideg: mkdir workspace --> cd workspace --> mkdir FFmpeg-Android --> cd FFm

2013-12-31 11:32:06 6026 6

原创 Ubuntu下搭建 eclipse+NDK for android JNI 的开发环境

一、准备安装包1、去官网下载adt-bundle-linux 和 android-ndk,我的环境是Ubuntu64位,所以我下载的版本是:(1)adt-bundle-linux-x86_64-20131030.zip(2)android-ndk-r9b-linux-x86_64 .tar.bz2下载完后解压,用命令行进入,执行  "  ./eclipse ",就可以启动e

2013-12-28 17:10:51 2545

原创 Shell 基础学习

1、单引号、双引号、反引号(1)双引号,引号内的内容部分“转义”,如:$VAR,会先转义替换后再执行(2)单引号,屏蔽所有符号的“转义”,(3)反引号,将引号中的内容作为命令来执行例子:#!/bin/bash#单引号,双引号,反引号num=3#(1) 单引号echo 'this is single quote'echo '$num'#(2)

2013-12-26 18:57:18 783

原创 ffmpeg 编码器参数配置

bit_rate= 200000, // 目标码率,采样码率越大,目标文件越大bit_rate_tolerance= 8000000 //码率误差,允许的误差越大,视频越小gop_size= 300 //多少帧内出现1个I帧qmin= 30 // 最小量化系数qmax= 50 //最大量化系数max_b_frames= 300 //两

2013-12-23 13:46:34 3008 1

原创 Ubuntu下使用adb和USB连接的方式进行android设备调试

1、执行命令: sudo vi /etc/udev/rules.d/51-android.rules  , 创建51-android.rules配置文件2、按照下面的数据格式添加一个条目:SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx1", ATTR{idProduct}=="xxxx2", MODE="0600",OWNER=="xxxx3"3、接

2013-12-23 10:11:08 4357

转载 看程序员是怎么喝酒的(搞笑)

○你们这桌交错敬酒,你敬我一杯,我敬你一杯,这叫全相连.○你们这桌有人提议咱们男士敬女士们一杯,这叫组相连.○BOSS自己提了一瓶过来说兄弟们再把这个解决了这叫alpha测试.○BOSS让服务生端了二瓶过来,隔着桌子喊,你们这桌再把这个解决了,这叫beta测试.○经理过来要敬大家,你们都说不行了,经理指着酒量最大的人说×××你代表大家把这杯干了,这叫白盒测试.○经理过来要敬大家

2013-12-19 20:40:20 1107 1

原创 每天干的事情,遇到的问题,解决的方法

2013年12月18日今天晚上喝了杯咖啡,趁着兴奋的劲,一不小心找出了困扰好长时间的Bug问题描述是这样的:阶段1、两个进程通过位于共享内存中的互斥量来实现进程控制,但主进程从共享区获取了pthread_mutex_t后,准备用pthread_mutex_lock加锁的时候,程序卡住。调试:使用gdb运行程序,当程序卡住后 -> ctrl+c,结束程序, -> bt 查看主进程停在

2013-12-19 20:31:28 2004 2

原创 ffmpeg 基本数据结构和对象(二): muxer/demuxer 和 encoder/decoder

一、muxer(封装器) 和 demuxer(解封装器)存放在 libavformat 目录下的mux.c 文件中;1、封装器 muxer muxer 提供的接口有:int avformat_write_header(AVFormatContext *s, AVDictionary **options)int av_write_frame(AVFormatContext *s,

2013-11-19 13:11:30 3616

原创 ffmpeg 基本数据结构和对象(一): AVPacket、AVPicture、AVFrame

一、AVPacket/** * AVPacket 作为解码器的输入 或 编码器的输出。 * 当作为解码器的输入时,它由demuxer生成,然后传递给解码器 * 当作为编码器的输出时,由编码器生成,然后传递给muxer * 在视频中,AVPacket 只能包含不大于1帧的内容,而视频的1帧可能要包含在多个AVPacket中,AVPacket < AVFrame * * * AVP

2013-11-19 09:54:40 9229

原创 图像处理常用概念

一、1、图像在某点处的灰度值 ps:  灰度 == 幅值== 强度, 实际应用中,灰度这个术语用的更多些任一幅图像都可以表示成一个二维函数 f(x,y),x,y是平面坐标。而平面中任一点的坐标( xi  , yi)都对应一个函数值 f ( xi, yi) 我们称这一点的函数值为该点处的灰度。二、1、图像的灰度级图像的灰度级表示一副图像的灰度区间,【Lmin , Lmax】;说的

2013-11-18 22:53:20 1497

原创 ffmpeg 编码器AVCodecContext 的配置参数

1、先说一些基本的APIAVFormatContex * pFormatCtxEnc;AVCodecContext * pCodecCtxEnc;AVStream * video_st;AVOutputFormat * pOutputFormat;pOutputFormat = av_guess_format(NULL,/*文件名*/,NULL); //根据文件后缀来猜测文件的格式

2013-11-15 09:35:23 8790

原创 ffmpeg 用 h264库进行编码的编译配置

编译准备:ffmpeg的编译 要用到yasm 汇编器,安装apt-get install yasm一、编译X2641、下载x264的工程代码,git clone git://git.videolan.org/x264.git2、进入x264目录,然后./configure --help看看它的帮助信息,我们这里需要的是x264以.so or .a的形式来支援

2013-11-14 16:28:07 1988

原创 ffmpeg 视频采集、压缩、裁剪、合并命令(已测试通过)

1、视频采集ffmpeg -f video4linux -s 480*272 -r 10 -i /dev/video0 test.asf2、ffmpeg 视频压缩命令 ffmpeg -threads 4 -i test.asf -r 29.97 -vcodec libx264 -s 480x272 -flags loop -cmp chroma -crf 24 -bt 25

2013-11-14 16:27:10 12646

原创 opendir

dr-x------ 2 root root  0 11月  6 17:10 .dr-xr-xr-x 9 root root  0 11月  6 17:10 ..lrwx------ 1 root root 64 11月  6 17:11 0 -> /dev/pts/5lrwx------ 1 root root 64 11月  6 17:11 1 -> /dev/pts/5lrw

2013-11-06 17:12:15 810

原创 面向方法、宏定义、dll库、面向对象给程序灵活性带来的好处

从一个网上找的例子说起:定义了一个ILog接口,用于记录日志文件,它有一个对外接口WriteLog用于记录日志这些日志可以记录到磁盘上(FileLog)或者数据库上(DBLog),或者其它的什么地方;后来,你又发现需要一个StdOutLog,于是你又继承了一个StdOutLog类。各种派生类:DBLog, FileLog, StdOutLog不同的Log创建不同的对象。但对于程序来说他

2013-10-25 14:23:18 964

原创 Linux多线程开发(三):使用C++封装线程消息通信

正所谓“师夷长技已治夷”,在我们使用C++来封装Linux下的多线程消息通信前,最好先学一下Windows中多线程是如何进行通信的。Windows系统会为每个线程配备一个消息队列【Tips1】,其他线程others可以通过调用postThreadMessages函数,向线程拥有者owner发送消息;而Owner可以调用GetMessage 函数从消息队列中获取消息Tips1:我刚开始学的时

2013-10-22 21:27:57 2058

转载 Linux 动态库剖析

原文地址:https://www.ibm.com/developerworks/cn/linux/l-dynamic-libraries/库用于将相似函数打包在一个单元中。然后这些单元就可为其他开发人员所共享,并因此有了模块化编程这种说法 — 即,从模块中构建程序。Linux 支持两种类型的库,每一种库都有各自的优缺点。静态库包含在编译时静态绑定到一个程序的函数。动态库则不同,它是在加

2013-10-22 10:25:04 723

原创 git 使用

1. 首先到 https://github.com/这里创建一个帐号。  2. 创建Repository,到个人首页以后,点击 New repository,如下图:    3. 添加该代码库名称,描述,其他如下图:    4. 点击 Create repository,完成创建,会显示如下图:    这张图是上传代码到github仓库的关键

2013-10-20 21:32:09 646

原创 Linux多线程开发(二):使用C++封装线程同步操作

互斥量的作用是用来多线程之间互斥排它的访问共享资源(比如一个读一个写等等)多线程操作还有一个重要问题,不用说你也猜的到了:就是线程同步问题线程同步的概念就是:多个线程之间相互协作完成某项任务就是说线程A需要先执行某项操作,执行完后,线程B才能执行。在window中,有个叫做“内核事件”的对象,线程B可以通过调用 WaitForSIngleObject 等函数,使自己进入阻塞状态以等

2013-10-18 22:54:26 1899

原创 Linux多线程开发(一):用C++封装线程的互斥操作

学过操作系统的人,估计都知道互斥量是个何方神圣,我这里也就不再狗尾续貂再做解释了好,先看Linux下关于互斥量的一些API(所谓封装,说白了也就是封装这些API,让这些API更简单好用罢了)一、Linux下互斥量的使用1、定义一个互斥量pthread_mutex_t  myMutex;2、初始化互斥量pthread_mutex_init( &myMutex, 0);  //

2013-10-18 22:06:33 1389

原创 消除switch/case语句,不破坏代码的封闭性,使程序结构更符合面向对象思想(二)

在 “消除switch/case语句,不破坏代码的封闭性,使程序结构更符合面向对象思想(一)”中,我们曾讨论过维护一个消息管理器来记录不同消息和它对应的消息处理类。但是,这种实现方式存在一个问题,考虑下:如果我们项目的业务逻辑很复杂,比如需要处理100多个消息类型,那我们就需要实现100多个消息处理类,维护这么多个消息处理类是相当麻烦的。怎么办?思路:我们只能采取一种折中的方法,即把所有的

2013-10-16 22:48:07 2127

原创 消除switch/case语句,不破坏代码的封闭性,使程序结构更符合面向对象思想(一)

一、引入:最近在学习一个执行体库的封装,里面线程间的通信使用的是基于消息循环机制的消息通信。稍微讲下这套通信机制的封装:线程A拥有一个消息队列queue,其他的线程B、C、D...如果想要和线程A通信,就可以向queue中放消息。显然该队列是一个生产者/消费者模型(单读多写)。二、回到主题:好,现在开始考虑:线程A需要处理多种消息类型,而每种消息类型的处理方式可能不同,问题的解决方法最简单

2013-10-16 21:59:52 2707

原创 关于C++ 构造函数的那点小事

先列出来c++中所有的构造函数1、默认构造函数和带参数的构造函数 我们暂且称他们为“普通构造函数” .eg Test(); or Test(int i, ...);2、拷贝构造函数Test(const Test & t); 3、类型转换构造函数  Test(int i); 一、普通构造函数1、这里我们主要讲一下默认构造函数的生命周期:即它什么时候会出现?答:通常

2013-10-10 10:00:54 785

原创 Linux API -- open 设置操作属性O_APPEND时的那点小事

一、openint open (const char * pathname , int flags, ..../* 只有当你要创建文件时,才需要填写这第3个参数,用来指定文件权限 */) ;问题1、我们都知道,open 的flags参数 有个文件操作属性叫 : O_APPEND;现在提出问题: 如果我指定了O_APPEND属性, 那么我第一次读文件读写位置时,读写位置的值是多少?

2013-10-04 15:59:07 5199 1

原创 程序设计二:基于接口程序设计思想的模板实现、面向方面的程序设计

待写

2013-10-03 17:43:30 704

原创 程序设计方法(一):结构化、基于对象、面向对象、基于接口

先引入问题:实现一个加法器,加法器中已经保存了被加数,使用加法器的时候,要给他传递一个加数,然后加法器计算并返回相加后的结果;一、结构化程序设计struct SAugend{ int iAugend;};int Add(struct SAugend * pSAugend,int iAddend){ return pSAugend->iAugend + iAdden

2013-10-03 16:18:42 1319

原创 C 语言中处理四舍五入

float f = 9.9;int a;//eg1:没有处理四舍五入a = f; printf("%d\n",a); // 打印结果为9,错误。C中对于浮点型向整型数据的转换是直接把小数点后面去掉,不会进行四舍五入,所以这要求程序员自己来和处理//eg2:带四舍五入的处理a = (int)(f+0.5);printf("%d\n",a); // 打印结果为10,正确。

2013-09-27 21:34:06 1442 1

原创 输入结束的符--空白格的那点小事

0:先引入一个关键字,空白格就是 空格、tab 、回车1、scanf getchargets等输入函数,总是把《enter》回车键在键盘缓冲区中转换成 换行符号‘\n’   (注意回车符和换行符是两个符号,这里只是缓冲区的一个变换处理)2、对于输入函数scanf,scanf 把 空白格(空格、tab、回车)当成是输入输入结束符,同时也意味着用scanf不能输入空白格

2013-09-16 22:03:51 1104

原创 关于计算机中数值的表示的那点小事

一、1、数值在2进制中的表示有3种:原码、反码和补码;这里我只记第3种,因为计算机中,数值的表示只用第3种补码,另外两种用网友的话就是科学家没事吃饱了撑的造出来的(只是开个玩笑,根据哲学中存在比有用的原理,相信他们在其他领域一定还是用的);2、求补码原则:(1)正数补码还是他本身 (2)负数补码,符号位变成1,其他位取负数的绝对值后按位取反再加1 (3)补码中高位进位都直接丢掉3、

2013-09-16 21:54:11 1067

原创 win7下安装Ubuntu,搭双系统

一、先把用到软件说下1、WINGRB,用来检查存放镜像的分区的盘符x,(hd0,x)这个在后面使用easybcd 设置系统引导时要用到2、分区助手3、EasyBCD,用来设置系统引导的二、开始安装1、用分区助手删掉一定大小的空间(eg:我删了80G),这个空间用来装我们的ubuntu;2、用分区助手在windows下创建一个10G(大小能装下ubuntu镜像就好)的

2013-09-14 19:26:59 912

空空如也

空空如也

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

TA关注的人

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