Menu Home

android平台YUV420SP到RGB565的转换

/** * @param yuvDataArray * @param width * @param height * @return int[] : ARGB array * @throws NullPointerException * @throws IllegalArgumentException */ private static int[] decodeYUV(byte[] yuvDataArray, int width, int height) throws NullPointerException, IllegalArgumentException { int size = width * height; if(yuvDataArray == null) throw new NullPointerException(“buffer yuvDataArray is […]

linux串口设备识别和信息收发

OS : ubuntu 12.10 & opensuse 11.4 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #include <asm-generic/ioctls.h> #include <errno.h> #define version “1.0” #define FALSE -1 #define TRUE 0 int speed_attr[] = { B38400, B19200, B115200, B9600, B4800, B1200, B300, B38400, B19200, B9600, B4800, B1200, […]

Linux串口编程详解

串口本身,标准和硬件 串口是计算机上的串行通讯的物理接口。计算机历史上,串口曾经被广泛用于连接计算机和终端设备和各种外部设备。虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接通常特指那些与RS-232标准兼容的硬件或者调制解调器的接口。虽然现在在很多个人计算机上,原来用以连接外部设备的串口已经广泛的被USB和Firewire替代;而原来用以连接网络的串口则被以太网替代,还有用以连接终端的串口设备则已经被MDA或者VGA取而代之。但是,一方面因为串口本身造价便宜技术成熟,另一方面因为串口的控制台功能RS-232标准高度标准化并且非常普及,所以直到现在它仍然被广泛应用到各种设备上。 某些计算机使用一个叫做UART的集成电路来作为串口设备。这个集成电路可以进行字符和异步串行通讯序列之间的转换,并且可以自动地处理数据的时序。而某些低端设备则会让CPU直接通过输出针来传送数据,这种技术叫做bit-banging。 因为“串口”,RS-232和UARTs基本上总是在同一个语境中出现,所以这些名词通常会被搞混。下面逐一解释以下一些重要的名词和术语。 什么是串行通信 计算机可以每次传送一个或者多个位(bit)的数据。“串行”指的式每次只传输一位(1bit)数据。 当需要通过串行通讯传输一个字(word)的数据时,只能以每次一位的方式接收或者发送。每个位可能是on(1)或者off(0)。很多技术术语中经常用mark表示on,而space表示off。 串行数据的速度通常用每秒传输的字节数bits-per-second(bps)或者波特率(baud)表示。这个值表示的是每秒钟被送出的0和1的个数。很久很久以前,300bps就是很快的速度了,而现在的电脑可以处理高达430,800的RS-232速率。表示波特率的单位还有kpbs和Mbps,1kps=1000bps而1Mbps=1000kbps。 一般有人提到串行设备的时候,它通常说可能是某种数据通讯设备-DCE(Data Communications Equipment)或者数据终端设备-DTE(Data Terminal Equipment)。它们之间的区别非常简单,每个信号对,比如传送和接收,它们俩正好是相反的。如果需要将两个DTE或者DCE设备连接起来的话,需要适配器或者交叉线缆将信号对交换。

使用Java 代理(proxy)类

HelloWorld.java package net.lnmcc.www; public interface HelloWorld { public void sayHelloWorld(); public void sayGoodBye(); } HelloWorldHandler.java package net.lnmcc.www; import java.lang.reflect.*; public class HelloWorldHandler implements InvocationHandler { private Object obj; public HelloWorldHandler(Object obj) { super(); this.obj = obj; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result […]

Android下编译OTA升级包

ref : http://blog.csdn.net/llping2011/article/details/9471913 概念介绍 我们知道Android系统一般可以通过本地升级和空中升级两种,一般本地升级包括SD卡升级、U盘升级、串口升级等。而所谓的空中升级就是通过网络将升级包下载升级包到本地,进行升级。 而OTA升级作为Android系统提供的标准软件升级方式,同时支持本地升级如SD卡或U盘 和 空中升级如网络。OTA升级一般分为全包升级和差分升级。 全包升级:编译当前系统得到的软件包,不依赖于当前手机里的软件版本 差分升级:对手机两个软件版本做差分,在第一个版本上打patch得到第二个升级包,所以差分升级只能对第一个版本的机器进行升级 编译方法 在源码根目录下执行: make otapackage 注意:执行这句命令之前需要在根目录下make编译整个源码。 在out/target/product/$(PRODUCT_NAME)/$(BUILD_NAME)-target-files-$(BUILD_NUMBER).zip文件,其中$(PRODUCT_NAME)是编译产品名字,$(BUILD_NAME)是编译的版本名字,$(BUILD_NUMBER)一般是编译的版本号。以我的fsl的Qiyi版本为例。 生成文件目录为:out/target/product/sabresd_6dq/Qiyi-target-files-20130725.zip文件 拷贝到U盘下的upgrade目录下即可(有的是直接拷贝到U盘根目录下,各个代码不一样)。

Nexus 7 Tablet 安装多系统

ref:http://www.linuxjournal.com/content/multi-booting-nexus-7-tablet Multi-Booting the Nexus 7 Tablet Jul 29, 2013  By Bill Childers Anyone who knows me well enough knows I love mobile devices. Phones, tablets and other shiny glowing gadgets are almost an addiction for me. I’ve talked about my addiction in other articles and columns, and Kyle Rankin even made […]

Using libavformat and libavcodec

ref : http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html Using libavformat and libavcodec Martin Böhme ([email protected]) February 18, 2004 Update (January 23 2009): By now, these articles are quite out of date… unfortunately, I haven’t found the time to update them, but thankfully, others have jumped in. Stephen Dranger has a more recent tutorial, ryanfb of cryptosystem.org has an updated version of […]

tcpdump命令

ref : http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 实用命令实例 默认启动 tcpdump 普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。 监视指定网络接口的数据包 tcpdump -i eth1 如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。

linux下重置USB设备

#include <stdio.h> #include <usb.h> int main(void) { struct usb_bus *busses; usb_init(); usb_find_busses(); usb_find_devices(); busses = usb_get_busses(); struct usb_bus *bus; int c, i, a; /* … */ for (bus = busses; bus; bus = bus->next) { struct usb_device *dev; int val; usb_dev_handle *junk; for (dev = bus->devices; dev; dev = dev->next) […]

ubuntu 搭建vpn

OS : ubuntu 12.10 install pptpd apt-get install pptpd configure pptpd vi /etc/pptpd.conf localip 192.168.0.234 #主机的ip地址 remoteip 192.168.1.200-238 #分配给客户端的ip地址 vi /etc/ppp/pptpd-options ms-dns 8.8.8.8 vi /etc/ppp/chap-secrets #设置连接密码,可以使用如下2种格式: user1 pptpd password * #适用所有ip, “pptpd”需要跟/etc/ppp/pptpd-options中的name相同 user2 pptpd password 192.168.1.211 #适用指定ip /etc/init.d/pptpd restart #重启pptpd服务 设置ip转发规则 vi /etc/sysctl.conf net.ipv4.ip_forward=1 #开启ip转发 sysctl -p #使ip转发生效 apt-get install […]

android 触摸和鼠标模式切换

Android os : > 4.0 android 4.0以后,触摸屏的触摸模式和鼠标模式使用idc文件来做切换。 需要把触摸屏设备的相应idc文件放到 /system/usr/idc/ 目录下。 如下是IRTOUCH Vendor_6615_Product_0085.idc文件的内容: # Copyright (C) 2012 Beijing IRTOUCH SYSTEMS Co.,Ltd # # # Input Device Configuration File for the IRTOUCH touch screen. # #common device.internal = 1 # Basic Parameters touch.deviceType = touchScreen touch.orientationAware = 1 # Size touch.size.calibration = […]

这不是神经病,这是理想

ref: http://www.u148.net/article/44302.html 文:石头 紫霞说,这不是神经病,这是理想。 五百年又五百年的轮回,却再也等你不回。我猜中了开始,却猜不中结局。 紫霞看见至尊宝的时候说,我现在郑重宣布,这个山头所有的东西都是属于我的,包括你在内!结果她什么也没有,甚至失去了生命。她的爱情童话里,王子最后踩着七色云彩回来时,却已是不能再有情欲的神。所以,含着泪感叹,我猜中了开头,却猜不中结尾。其实没有人能猜到结尾,因为没有结尾。白晶晶本以为喉上的一剑就可以结束自己对这男人的痛苦,却开始了另一个女子的感情悲剧。 至尊宝用一种让二当家以为是上帝升天的方式一遍又一遍穿梭时空,为的是去找白晶晶,所以他推开了紫霞的亲吻。但是当他见到晶晶并将平静地结婚的时候,才知道自己做梦的时候叫了晶晶这个名字九十八次,叫紫霞的名字叫了七百八十四次——他喜欢的是紫霞。命运终于让撒谎如吃饭一样随便的他明白了,他永远骗不了自己。 晶晶看见了紫霞留在至尊宝像椰子一样的心里的一滴泪,知道他的心房所住另有伊人,匆匆离去。爱的确是不能马虎的糊涂事。就像当初至尊宝在山崖上冒着被晶晶一剑刺死的危险承认自己并不是孙悟空时候说的,怕,不过没办法,因为我不希望你看到我的时候,心里面却想着另外一个人。 爱一个人不需要理由。菩提老祖毕竟是老资格,委琐的外表下,是一颗睿智的心灵。至尊宝(后来是悟空)与他对爱情的一番探讨,高下立见。悟空总是在为做一件事找理由,他找不到自己屈服于尘世的理由,所以无法无天,所以他没有去疼爱过身边的女人。但问题是有许多事情是不需要理由的,爱一个人更是。悟空喜欢了白骨精,而八戒爱上了蜘蛛精春三十娘,牛魔王的妹妹香香更是喜欢了沙僧。尽管春三十娘曾哭着说,想我春三十娘貌美如花,却跟了这么丑的人……但是最后还是选择了为八戒放下断龙石自己与牛魔王同归于尽。 最悲哀的是紫青宝剑和至尊宝“爱你一万年”的千古谎言。他们都是别人生活中的借口。没有人知道能拔出紫青宝剑的人是不是真的就是紫霞的如意郎君。因为只有至尊宝一个人拔过。而至尊宝的千古谎言,在命运面前,是如此的渺小。它骗了一个女人的心,上天却瞒着所有人早早安排了从头到尾让人猜不透的故事。看似可以穿梭时空遨游三清的月光宝盒的作用也仅仅是让所有拿到它的人按照上天安排的轨迹运行一遍又一遍。 于是,五百年又五百年的轮回,却再也等你不回。有人侥幸猜中了开始,却再也没有人猜中结局。 但是,但爱情的意义不是猜测谁会许诺给谁一个永远。爱是白晶晶说的不开心长生不死也没用,开心就算只能活几天也足够了。爱是让你喜欢的人浅浅的生活中有满满的感动。爱是紫霞说的像飞蛾一样,明知道会受伤,还是会扑到火上的执着与冲动。而不是当桀骜的至尊宝变成了无情无欲的悟空后,面对着观音和金箍说,如果上天再给他一次机会…… 于是,紫霞说,这不是神经病,这是理想……

Ubuntu 12.04编译 android 4.0源码

ref:http://blog.sina.com.cn/s/blog_641bd2500100ype3.html 本来计划晚上研究Ice的In-out的用法,直接从demo中找示例,顺便看看其与CORBA在这方面的区别。但在使用slice2cpp时才发现系统升级到11.10后,居然把ice3.3给删除了。于是象上次一样,重新apt-get install zeroc-ice34,下载了80多M的内容,但装好以后无法使用,明明看到动态库在/usr/lib下,就是链接不上,原因也没找到,会不会ubuntu有bug,把32位的库装上了?但如何看一个库是64位还是32位我还不清楚。不管了,还是从源码安装吧。下了第三方的源和Ice的源,刚开始装第一项qt,就进行不下去了。其实我电脑里装有qt creator,比其版本高。于是直接编译源码,碰到第三方库则用apt安装。 第一个问题

ffmpeg中的时间

视频的显示和存放原理 对于一个电影,帧是这样来显示的:I B B P。现在我们需要在显示B帧之前知道P帧中的信息。因此,帧可能会按照这样的方式来存储:IPBB。这就是为什么我们会有一个解码时间戳和一个显示时间戳的原因。解码时间戳告诉我们什么时候需要解码,显示时间戳告诉我们什么时候需要显示。所以,在这种情况下,我们的流可以是这样的: PTS: 1 4 2 3 DTS: 1 2 3 4 Stream: I P B B 通常PTS和DTS只有在流中有B帧的时候会不同。 DTS和PTS 音频和视频流都有一些关于以多快速度和什么时间来播放它们的信息在里面。音频流有采样,视频流有每秒的帧率。然而,如果我们只是简单的通过数帧和乘以帧率的方式来同步视频,那么就很有可能会失去同步。于是作为一种补充,在流中的包有种叫做DTS(解码时间戳)和PTS(显示时间戳)的机制。为了这两个参数,你需要了解电影存放的方式。像MPEG等格式,使用被叫做B帧(B表示双向bidrectional)的方式。另外两种帧被叫做I帧和P帧(I表示关键帧,P表示预测帧)。I帧包含了某个特定的完整图像。P帧依赖于前面的I帧和P帧并且使用比较或者差分的方式来编码。B帧与P帧有点类似,但是它是依赖于前面和后面的帧的信息的。这也就解释了为什么我们可能在调用avcodec_decode_video以后会得不到一帧图像。 ffmpeg中的时间单位 AV_TIME_BASE ffmpeg中的内部计时单位(时间基),ffmepg中的所有时间都是于它为一个单位,比如AVStream中的duration即以为着这个流的长度为duration个AV_TIME_BASE。AV_TIME_BASE定义为: #define AV_TIME_BASE 1000000 AV_TIME_BASE_Q ffmpeg内部时间基的分数表示,实际上它是AV_TIME_BASE的倒数。从它的定义能很清楚的看到这点: #define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE} AVRatioal的定义如下: typedef struct AVRational{ int num; //numerator int den; //denominator } AVRational; ffmpeg提供了一个把AVRatioal结构转换成double的函数: static inline […]

使用QGraphicsProxyWidget实现字幕滚动和翻转动画

OS : ubuntu 12.04 QT : 4.8 multiTxtWidget.h #ifndef MULTITEX_WIDGET_H #define MULTITEX_WIDGET_H #include <QGraphicsItem> #include <QPainter> #include <QPropertyAnimation> #include <QGraphicsWidget> #include <QGraphicsProxyWidget> #include <QWidget> #include <qcoreevent.h> class MulitTexWidget : public QWidget { Q_OBJECT Q_PROPERTY(QString text READ text WRITE setText) public: explicit MulitTexWidget(QWidget *parent = 0); virtual ~MulitTexWidget(); void setText(const QString […]

基于QGraphicsItem的字幕翻转动画效果

OS: mac os x 10.7.5 QT: 5.0.1 main.cpp #include “mainwindow.h” #include <QApplication> #include <QGraphicsScene> int main(int argc, char *argv[]) { QApplication a(argc, argv); TxtItem txtItem; txtItem.setText(“How are you, my friend!!”); QGraphicsScene scene; MyQView mqv(&scene); scene.addItem(&txtItem); mqv.show(); return a.exec(); }

linux socket常规操作(备忘)

/*server*/ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/socket.h> #include <sys/wait.h> #define PORT 3333 #define BACKLOG 10 #define DATASIZE 10 int main(int argc, char **argv) { int sockfd, client_fd; struct sockaddr_in serv_addr; struct sockaddr_in remote_addr; char buf[DATASIZE]; int recv_len; if((sockfd […]

基于ffmpeg的流媒体服务器

OS:ubuntu 12.04 ffmpeg:N-47141-g4063bb2 x264:0.133.2334 a3ac64b 目标: 使用ffserver建立流媒体服务器 使用ffmpeg对本地文件流化(x264编码器) 使用ffplay播放 ffserver.conf配置 Port 8090 #访问端口 RTSPPort 554 #rtsp端口 BindAddress 0.0.0.0 #服务器地址绑定 MaxHTTPConnections 2000 #允许的最大连接数 MaxClients 1000 #最大的客户数 MaxBandwidth 10000 CustomLog – <Feed feed1.ffm> File /tmp/feed1.ffm FileMaxSize 1G ACL allow 127.0.0.1 #只允许本地连接 </Feed> ################ asf ################ <Stream test.asf> Feed feed1.ffm Format asf #流媒体格式 […]

一些关于流媒体的基本概念

ASF ASF是(Advanced Streaming Format 高级串流格式)的缩写,是 Microsoft 为 Windows 98 所开发的串流多媒体文件格式。ASF是微软公司Windows Media的核心。这是一种包含音频、视频、图像以及控制命令脚本的数据格式。这个词汇当前可和 WMA 及 WMV 互换使用。 ASF是一个开放标准,它能依靠多种协议在多种网络环境下支持数据的传送。同JPG、MPG文件一样,ASF文件也是一种文件类型,但它是专为在IP网上传送有同步关系的多媒体数据而设计的,所以ASF格式的信息特别适合在IP网上传输。ASF文件的内容既可以是我们熟悉的普通文件,也可以是一个由编码设备实时生成的连续的数据流,所以ASF既可以传送人们事先录制好的节目,也可以传送实时产生的节目。 ASF用于排列、组织、同步多媒体数据以利于通过网络传输。ASF是一种数据格式,它也可用于指定实况演示。ASF最适于通过网络发送多媒体流,也同样适于在本地播放。任何压缩/解压缩运算法则(编解码器)都可用来编码ASF流。 Windows Media Service的核心是ASF。ASF是一种数据格式,音频、视频、图像以及控制命令脚本等多媒体信息通过这种格式,以网络数据包的形式传输,实现流式多媒体内容发布。其中,在网络上传输的内容就称为ASF Stream。ASF支持任意的压缩/解压缩编码方式,并可以使用任何一种底层网络传输协议,具有很大的灵活性。 Microsoft Media player是能播放几乎所有多媒体文件的播放器,支持ASF在Internet网上的流文件格式,可以一边下载一边实时播放,无需下载完再听。 ASF流文件的数据速率可以在28.8Kbps到3Mbps之间变化。用户可以根据自己应用环境和网络条件选择一个合适的速率,实现VOD点播和直播。 FLV FLV 是FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等缺点。 FLV是被众多新一代视频分享网站所采用,是目前增长最快、最为广泛的视频传播格式。是在sorenson公司的压缩算法的基础上开发出来的。FLV格式不仅可以轻松的导入Flash中,速度极快,并且能起到保护版权的作用,并且可以不通过本地的微软或者REAL播放器播放视频。