快速掌握一个语言最常用的50%
现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作。然而这两种方法都有弊病。第二种方法的问题当然很明显,不仅浪费了时间,偏离了目标,而且学习效率不高。因为没有实际问题驱动的语言学习通常是不牢固不深入的。有的人学着学着成了语言专家,反而忘了自己原本是要解决问题来的。第一种路子也有问题,在对于这种语言的脾气秉性还没有了解的情况下大刀阔斧地拼凑代码
C++经典书籍解读
C++是一门广泛用于工业软件研发的大型语言。它自身的复杂性和解决现实问题的能力,使其极具学术研究价值和工业价值。和C语言一样,C++已经在许多重要的领域大获成功。 然而,一个不可否认的现实是,在低阶程序设计领域,C++挤压着C同时也在承受着C的强烈反弹,而在高阶程序设计领域,Java和C#正在不断蚕食着C+ +的地盘。也许C++与C合为一体永远都是一个梦想,也许Java和C#的狂潮终将迫使C++回归本位 — 回到它有着根本性优势的开发领域:低级系统程序设计、高级大规模高性能应用设计、嵌入式程序设计以及数值科学计算等。果真
嵌入式CGI开发之旅——3
对于CGI来说,处理表单是它的重头戏,今天我们来看看CGI如何处理HTML的表单。处理表单(GET)现在大多数的CGI脚本用来处理表单输入,处理表单的过程和上面直接在URL中调用CGI脚本的情况有些不同。一个表单通常分为两个部分:HTML表单格式和处理数据的脚本,处理程序由标签的ACTION属性指定,每个输入区都有一个NAME属性用来称呼表单元素,当表单数据被递交给ACTION中定义的处理程序时,NAME和其输入内容被以数字或字符的形式保存在环境变量中,脚本程序再通过读取环境变量的方式获得用户输入,根据编程语言的不同获取环境变量的方式也不同
嵌入式CGI开发之旅——2
第一个CGI程序:Hello WorldHello World!任何程序语言的学习都是从打印Hello World!开始的,这样不但可以熟悉程序的流程和大体结构,而且最大限度的避免了一些细小的错误,给初学者信心。hello.c#include <stdio.h>int main(){ printf("Content-Type:text/plain;charset=us-asciinn"); printf("Hello Worldnn"); return 0;}#gcc –o hello.cgi hello.c#cp hello.cgi /var/www/cgi-bin/用GCC将源文件编译成CGI程序,并拷贝到服务器所制定的cgi程序运行目录中。在浏览器中输入:192.168.4
cgi编程概述
cgi编程概述 徐春香 随着internet的广泛使用,人们对被动地接收信息或服务的方式越来越不满意,人们不希望看到或接受不喜欢的服务,而希望主动去参与。同时,厂商也希望能利用internet获得用户对其服务的质量、内容或性质的反馈以便更好地改进服务。总之,人们都希望改变internet的单向通信方式,使原先只能提供静态文档或静态链接的web页面具有交互性,变得生动、富有生命力。这时,internet上就需要提供web应用程序以支持用户的随机参与。于是,cgi(common gateway interface,通用网关接口)便应运而生。 一、cgi工作方式 cgi
Linux项目组编程规范
前言: 本手册以林锐博士编写的《高质量 C++/C 编程指南》内容为参考,根据项目组成员的经验总结和共同协定,稍作简洁和修改。本规范手册分成两部分: 第一部分:以条款的形式列出了项目组编程的规则和建议,规则是指项目组成员必须要遵守的编程规范,建议是指推荐使用的编程风格。 第二部分:是对第一部分规则和建议的详细说明。建议先仔细阅读第二部分,在已经了解了每条规则和建议的真正意义以及为什么要遵守的基础上,在实际项目编程时可以通过直接查阅第一部分来实现快速规范代码的目的。 本手册由Linux项目组成员共同制定,暂
关于C语言结构体赋值(linux内核风格)
1 对成员赋值.例如结构体struct st1 {int a;int b;int c;}1.1 用{}形式.struct st1 st1 = {1,2,3);1.2 linux kernel风格.struct st1 st1 = {.a = 1;.b = 2;};//注 此风格(即在成员变量之前加点“.”),可以不按成员变量的顺序进行赋值。如可以为struct st1 st1 = {.c = 3;.a = 1;.b = 2;};2 对整体赋值.struct st1 a, b;b = a;3 结构体作为函数返回值对另一个结构体赋值.struct st1 func1();struct st1 a = func1();举例:[ctest]# vi t.c #include <stdio.h>struct st1 { int e1; int e2;};struct st1 func1(){ stru
MPEG2 TS小结
应该说真正了解TS,还是看了朋友推荐的《数字电视业务信息及其编码》一书之后,MPEG2 TS和数字电视是紧密不可分割的,值得总结一下其中的一些关系。ISO/IEC-13818-1:系统部分;ISO/IEC-13818-2:视频;ISO/IEC-13818-3:音频;ISO /IEC-13818-4:一致性测试;ISO/IEC-13818-5:软件部分;ISO/IEC-13818-6:数字存储媒体命令与控制;ISO /IEC-13818-7:高级音频编码;ISO/IEC-13818-8:系统解码实时接口;MPEG2系统任务包括:1. 规定以包传输数据的协议;2. 规定收发两端数据流同步的协议;3. 提供多个数据流的复用和解复
FFMpeg对MPEG2 TS流解码的流程分析[2]
5.渐入佳境恩,前面的基础因该已近够了,有点像手剥洋葱头的感觉,我们来看看针对MPEG TS的相应解析过程我们后面的代码,主要集中在[libavformat/mpegts.c]里面,毛爷爷说:集中优势兵力打围歼,恩,开始吧,蚂蚁啃骨头。static int mpegts_read_header(AVFormatContext *s,AVFormatParameters *ap){MpegTSContext *ts = s->priv_data;ByteIOContext *pb = s->pb;uint8_t buf[1024];int len;int64_t pos;....../* read the first 1024 bytes to get packet size */###############################################################
FFMpeg对MPEG2 TS流解码的流程分析
FFMpeg对MPEG2 TS流解码的流程分析1.引子gnxzzz广告都打出去了,不能没有反应.现在写东西很少了,一是年纪大了,好奇心少了许多,;二则是这几天又犯了扁桃体炎,每天只要是快睡觉或刚起床,头晕脑涨,不过功课还是的做的,是吧:)2. 从简单说起说道具体的音频或者视频格式,一上来就是理论,那是国内混资历的所谓教授的做为,对于我们,不合适,还是用自己的方式理解这些晦涩不已的理论吧。其实MPEG2是一族协议,至少已经成为ISO标准的就有以下几部分:ISO/IEC-13818-1:系统部分;ISO/IEC-13818-2:视频编码格式;ISO/IEC-13818-3:
TS基本概念和数据结构(转
)ES- Elementary Streams (原始流),对视频、音频信号及其他数据进行编码压缩后的数据流称为原始流。原始流包括访问单元,比如视频原始流的访问单元就是一副图像的编码数据。(2) PES- Packetized Elementary Streams (分组的原始流),原始流形成的分组称为PES分组,是用来传递原始流的一种数据结构(3)节目是节目元素的集合。节目元素可能是原始流,这些原始流有共同的时间基点,用来做同步显示。(4)传输流和节目流TS-Transport Stream 翻译为“传输流”PS-Program Stream 翻译为“节目流”PS用来传输和保存一道节目的编码数据或其他数据。
MPEG2 TS流
该说真正了解TS,还是看了朋友推荐的《数字电视业务信息及其编码》一书之后,MPEG2 TS和数字电视是紧密不可分割的,值得总结一下其中的一些关系。ISO/IEC-13818-1:系统部分;ISO/IEC-13818-2:视频;ISO/IEC-13818-3:音频;ISO/IEC- 13818-4:一致性测试;ISO/IEC-13818-5:软件部分;ISO/IEC-13818-6:数字存储媒体命令与控制;ISO/IEC- 13818-7:高级音频编码;ISO/IEC-13818-8:系统解码实时接口;MPEG2系统任务包括:1. 规定以包传输数据的协议;2. 规定收发两端数据流同步的协议;3. 提供多个数据流的复用和解复用
TS流解析之PMT表格解析(转)
PMT结构定义:typedef struct TS_PMT_Stream{ unsigned stream_type : 8; //指示特定PID的节目元素包的类型。该处PID由elementary PID指定 unsigned elementary_PID : 13; //该域指示TS包的PID值。这些TS包含有相关的节目元素 unsigned ES_info_length : 12; //前两位bit为00。该域指示跟随其后的描述相关节目元素的byte数 unsigned descriptor;}TS_PMT_Stream;//PMT 表结构体typedef struct TS_PMT{ unsigned table_id : 8; //固定为0x02, 表示PMT表
TS流解析之PAT表格解析(转)
PAT表格定义如下:typedef struct TS_PAT_Program{ unsigned program_number :16; //节目号 unsigned program_map_PID :13; //节目映射表的PID,节目号大于0时对应的PID,每个节目对应一个}TS_PAT_Program;//PAT表结构体typedef struct TS_PAT{ unsigned table_id : 8; //固定为0x00 ,标志是该表是PAT unsigned section_syntax_indicator : 1; //段语法标志位,固定为1 unsigned zero : 1; //0 unsigned reserved_1 : 2; // 保留位
TS流解析之TS包头解析(转)
根据前一篇中各数据的定义及数据结构,对数据进行分别解析如下:TS包头定义:typedef struct TS_packet_header{ unsigned sync_byte : 8; //同步字节, 固定为0x47,表示后面的是一个TS分组 unsigned transport_error_indicator : 1; //传输误码指示符 unsigned payload_unit_start_indicator : 1; //有效荷载单元起始指示符 unsigned transport_priority : 1; //传输优先, 1表示高优先级,传输机制可能用到,解码用不着 unsigned PID : 13; //
关于TS流的解析
IP数据报有首部和数据两部分组成的,首部的前一部分是固定长度20字节,是所有IP数据报必须具有的。首部包括:总长度、标识、MF、DF、片偏移。 数字信号实际传送的是数据流,一般数据流包括以下三种:ES流:也叫基本码流,包含视频、音频或数据的连续码流。PES流:也叫打包的基本码流,是将基本的码流ES流根据需要分成长度不等的数据包,并加上包头就形成了打包的基本码流PES流。TS流:也叫传输流,是由固定长度为188字节的包组成,含有独立时基的一个或多个节目,适用于误码较多的环境。 TS流(TransportStream)即在MPEG-2系统中,由视频
基于V4L2的视频驱动开发
编写基于V4L2视频驱动主要涉及到以下几个知识点:● 摄像头方面的知识 要了解选用的摄像头的特性,包括访问控制方法、各种参数的配置方法、信号输出类型等。● Camera解码器、控制器 如果摄像头是模拟量输出的,要熟悉解码器的配置。最后数字视频信号进入camera控制器后,还要熟悉camera控制器的操作。● V4L2的API和数据结构 编写驱动前要熟悉应用程序访问V4L2 的方法及设计到的数据结构。● V4L2的驱动架构 最后编写出符合V4L2规范的视频驱动。本文介绍基于S3
查看cpu信息
理解 /proc/cpuinfoprocessor : 0vendor_id : GenuineIntelcpu family : 15model : 6model name : Intel(R) Pentium(R) 4 CPU 3.00GHzstepping : 5cpu MHz : 3143.295cache size : 0 KBphysical id 0siblings : 1fdiv_bug : nohlt_bug : nof00f_bug : nocoma_bug : nofpu : yesfpu_exception : yescpuid level : 6wp : yesflags : fpu vme pse tsc msr pae cx8 sep pge cmov acpi mmx fxsr sse
在Linux中创建静态库和动态库
我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。第1步:编辑得到举例的程序--hello.h、hello.c和main.c;hello.c(见程序2)是函数库的源程序,其中包含公用
CIF、DCIF、D1格式介绍
CIF、DCIF、D1格式介绍 CIF简介CIF是常用的标准化图像格式(Common Intermediate Format)。在H.323协议簇中,规定了视频采集设备的标准采集分辨率。CIF = 352×288像素QCIF全称Quarter common intermediate format。QCIF也是常用的标准化图像格式。在H.323中,规定QCIF = 176×144像素。CIF格式具有如下特性: (1) 电视图像的空间分辨率为家用录像系统(Video Home System,VHS)的分辨率,即352×288。 (2) 使用非隔行扫描(non-interlaced scan)。 (3) 使用NTSC帧速率,电视图像的最大帧速率为30 000/1001≈29.97幅/秒。 (4) 使用1/2的PAL