自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

WangShuo的专栏

不积跬步,无以至千里;不积小流,无以成江海!

  • 博客(140)
  • 资源 (5)
  • 收藏
  • 关注

原创 Camera源码解析之数据传递

MTK Camera HAL 层数据传递主要三模块:一:预览(StartPreview)二:拍照(TakePicture)三:回传(PreviewCallBack)一:预览(StartPreview)AP层下达预览指令后如何获取数据,数据是什么格式的,最后拿到数据后 是如何去预览,以下分为四部分解析预览数据流程1 :AP 层到HAL 层流程及获取数据参数 AP层下达startPreview后调到

2017-04-27 09:26:53 1439

原创 Android Multimedia实战(三)基于MediaExtractors与MediaMuxer的视频分离与合成

上篇介绍了mp4parser合成视频功能:http://blog.csdn.net/king1425/article/details/70805960 ,这篇使用Android原生API实现视频的分离与合成MediaExtractors将视频多信道的分离出来,比如声音和图像分隔出来 1. JAVA层file: frameworks/base/media/Java/Android/media/M

2017-04-26 20:59:09 2235

原创 Android Multimedia实战(二)使用MediaRecorder实现分段录制视频,mp4parser合成视频功能

1.MediaRecorder类介绍: MediaRecorder类是Android sdk提供的一个专门用于音视频录制,一般利用手机麦克风采集音频,摄像头采集图片信息。MediaRecorder主要函数:setAudioChannels(int numChannels) 设置录制的音频通道数setAudioEncoder(int audio_encoder) 设置audio的编码格式setAu

2017-04-26 16:00:10 6678 1

原创 android Multimedia实战(一)详解SurfaceView,TextureView之播放视频的四种方式

在Android中,我们有四种方式来实现视频的播放: 1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。4、使用MediaPlayer类和Te

2017-04-25 20:24:36 9335

原创 ffmpeg源码简析(十一)libavformat,libavcodec,libavutil

libavformatavformat.h 文件 定义识别文件格式和媒体类型库使用的宏、数据结构和函数,通常这些宏、数据结构和函数在此模块内相 对全局有效allformat.c 文件 简单的注册/初始化函数,把相应的协议,文件格式,解码器等用相应的链表串起来便于查找。cutils.c 文件 文件格式分析模块使用的两个工具类函数,都是对字符串的操作。file.c 把 file 当做类似

2017-04-25 10:40:33 1943

原创 ffmpeg源码简析(十)libswscale中的SwsContext,sws_scale()

libswscale是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸等工作。 libswscale常用的函数数量很少,一般情况下就3个:sws_getContext():初始化一个SwsContext。sws_scale():处理图像数据。sws_freeContext():释放一个SwsContext。其中sws_getContext()也可以用sws_getCa

2017-04-25 09:46:01 3894 1

原创 ffmpeg源码简析(九)av_log(),AVClass,AVOption

1.av_log()av_log()是FFmpeg中输出日志的函数。随便打开一个FFmpeg的源代码文件,就会发现其中遍布着av_log()函数。一般情况下FFmpeg类库的源代码中是不允许使用printf()这种的函数的,所有的输出一律使用av_log()。 av_log()的声明位于libavutil\log.h,如下所示。void av_log(void *avcl, int level,

2017-04-25 09:19:05 1532

原创 ffmpeg源码简析(八)解码 av_read_frame(),avcodec_decode_video2(),avformat_close_input()

1.av_read_frame()av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调用 av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码(例如H.264中一帧压缩数据通常对应一个NAL)。通过av_read_packet(***),读取一个包,需要说明的是此函数必须是包含整数帧的,不存在半帧的情况,

2017-04-24 20:42:13 2205

原创 ffmpeg源码简析(七)解码-avformat_open_input,avformat_find_stream_info()

1.avformat_open_input打开媒体的的过程开始于avformat_open_input,因此该函数的重要性不可忽视。在该函数中,FFMPEG完成了:输入输出结构体AVIOContext的初始化;输入数据的协议(例如RTMP,或者file)的识别(通过一套评分机制):1判断文件名的后缀 2读取文件头的数据进行比对;使用获得最高分的文件协议对应的URLProtocol,通过函数指针的方式

2017-04-24 20:05:42 2528

原创 ffmpeg源码简析(六)编码-av_write_frame(),av_write_trailer()

1.av_write_frame()av_write_frame()用于输出一帧视音频数据,它的声明位于libavformat\avformat.h,如下所示。int av_write_frame(AVFormatContext *s, AVPacket *pkt); 简单解释一下它的参数的含义: s:用于输出的AVFormatContext。 pkt:等待输出的AVPacket。函数

2017-04-24 19:35:45 2573

原创 ffmpeg源码简析(五)编码——avformat_alloc_output_context2(),avcodec_encode_video2()

1.avformat_alloc_output_context2()在基于FFmpeg的视音频编码器程序中,该函数通常是第一个调用的函数(除了组件注册函数av_register_all())。avformat_alloc_output_context2()函数可以初始化一个用于输出的AVFormatContext结构体。它的声明位于libavformat\avformat.h,如下所示。int av

2017-04-24 19:22:42 1818

原创 ffmpeg源码简析(四)avcodec_find_encoder(),avcodec_open2(),avcodec_close()

avcodec_find_encoder()和avcodec_find_decoder()avcodec_find_encoder()用于查找FFmpeg的编码器,avcodec_find_decoder()用于查找FFmpeg的解码器。 avcodec_find_encoder()的声明位于libavcodec\avcodec.havcodec_find_encoder()的源代码位于libav

2017-04-24 17:28:49 3040

原创 ffmpeg源码简析(三)av_malloc(),AVIOContext,AVFrame,avio_open2()等

内存操作的常见函数位于libavutil\mem.cav_malloc()av_malloc()是FFmpeg中最常见的内存分配函数。av_malloc()的代码可以简化成如下形式。void *av_malloc(size_t size) { void *ptr = NULL; /* let's disallow possibly ambiguous cases */

2017-04-24 17:07:46 2474

原创 ffmpeg源码简析(二)av_register_all(),avcodec_register_all()

av_register_all()该函数在所有基于ffmpeg的应用程序中几乎都是第一个被调用的。只有调用了该函数,才能使用复用器,编码器等。av_register_all()调用了avcodec_register_all()。avcodec_register_all()注册了和编解码器有关的组件:硬件加速器,解码器,编码器,Parser,Bitstream Filter。av_register_a

2017-04-24 16:00:03 4902 1

原创 ffmpeg源码简析(一)结构总览

未毕业通过校招进入了某做机的公司从事camera方面的工作。比较悲剧的是做了将近一年的Camera之后,正要研究Camera上下层打通任督二脉的时候,公司架构调整加上OS版本大变动,被调到了多媒体组(不过也好,我对编码解码这块也是向往已久)。以前大学的时候用vitamio写过一个播放器项目,后来ijkplayer 出来之后也实践过一两个小项目,它们都是基于ffmpeg的框架。 悬窗播放视频,让你聊

2017-04-24 14:24:00 23129 7

原创 android系统—储存知识源码分析

1.存储相关名词:RAM Ramdom Access Memory 随机存取存储器 ROM Read Only Memory ROM image 只读存储器镜像 NAND Flash flash内存的一种2.OBBOBB:Opaque Binary BlobAndroid 2.3引入的OBB文件 一种隔离的文件系统 APK分离出的资源文件放在S

2017-04-24 09:30:41 2625

原创 ffmpeg必知道的知识点

ffmpegFFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、

2017-04-22 10:04:36 11139 1

原创 windows下编译最新版ffmpeg3.3-android,并通过CMake方式移植到Android studio2.3中

windows下编译最新版ffmpeg3.3win下编译: 1.下载安装MinGW:http://sourceforge.net/projects/mingw/files/ 2.下载yasm http://yasm.tortall.net/Download.html 3.下载 ffmpeg:https://www.ffmpeg.org/download.html 编辑ffmpeg文件夹下

2017-04-21 20:34:02 8454 25

原创 Windows下编译android版ijkplayer

今天也来编译一下ijkplayer ,并做记录。 先普及一下cygwin和mingw知识 cygwin和mingw都是为用户提供在windows操作系统使用GNU工具的方法,使得在windows上可以编译为linux写的c源代码并运行(让你可以用signal等linux才有的api)。真正的不同在于 1,cygwin大,mingw小 2,cygwin编译后的exe需要cygwin1.dll作

2017-04-21 16:40:52 4987 5

原创 Python教程精华版(二)

类使用class语句来创建一个新类,class之后为类的名称并以冒号结尾,如下实例:class ClassName: '类的帮助信息' #类文档字符串 class_suite #类体self代表类的实例,而非类类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。class Test: def prt(self):

2017-04-20 20:46:44 972

原创 Python教程精华版(一)

本教程适用于有Java/C++或其他编程语言能力想再学习Python的开发者。 主要罗列出了于其他语言不同的地方行和缩进学习Python与其他语言最大的区别就是,Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。如下所示:if True:

2017-04-20 20:20:10 1071

原创 C++小结(二)

C++ 类,对象类成员函数 类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类访问修饰符 类成员可以被定义为 public、private 或 protected。默认情况下是定义为 private。构造函数 & 析构函数 类的构造函数是一种特殊的函数,在创建一个新的对象时调用。类的析构函数也是一种特殊的函数,在删除所创建的对象时调用。C++ 拷贝构造函数

2017-04-20 16:57:01 692

原创 C++小结(一)

#include <iostream>using namespace std;// main() 是程序开始执行的地方int main(){ cout << "Hello World"; // 输出 Hello World return 0;}接下来我们讲解一下上面这段程序:C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息。上面这段程序中,包含了头文件 <io

2017-04-20 15:18:26 1289

原创 C语言小结

C语言小结,适用于有其他编程语言基础的开发者#include <stdio.h> int main() { /* 我的第一个 C 程序 */ printf("Hello, World! \n"); return 0; }● 所有的 C 语言程序都需要包含 main() 函数。 代码从 main() 函数开始执行。 ● /* … */ 用于注释说明。 ● printf() 用于格

2017-04-20 11:40:32 1778

转载 音视频开发术语介绍

视频分辨率标清、高清、720P… 标清:意思就是“标准清晰度”,是物理分辨率在720p以下的视频格式。所谓标清,英文为“Standard Definition”,是物理分辨率在1280P*720P以下的一种视频格式,是指视频的垂直分辨率为720线逐行扫描。具体的说,是指分辨率在400线左右的VCD、DVD、电视节目等“标清”视频格式,即标准清晰度。 高清:而物理分

2017-04-19 12:28:15 3978

原创 YUV格式解析

YUVYUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号B-Y(即U)、R-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的

2017-04-19 11:44:18 1742

原创 Android MediaProvider,MediaScanner媒体文件扫描源码解析

关于媒体文件扫描,我们需要弄明白两个问题: 1.什么时候开启媒体文件扫描 2.如何解析媒体文件(音频,视频,图片)信息插入到数据库中,对应code流程我们现在音乐,视频播放器,图库等应用关于音视频图片等信息都是通过多媒体数据库直接查询 在源码 packages\providers\下有个叫MediaProvider(进程名:android.process.media) 它主要处理管理这个媒体

2017-04-19 10:03:42 5299

原创 Java I/O流(二)——File,Properties,PrintWriter,IO ,RandomAccessFile,ByteBuffer,nio

File概述文件的操作是非常重要的,我们先来看下他的基本概念•用于将文件或者文件夹封装成对象 •方便对文件和文件夹的操作 •File对象可以作为参数传递给流的构造函数 我们写个小例子先import java.io.File;public class HelloJJAVA { public static void main(String[] args) { // 创建Fi

2017-04-17 20:57:00 1059

原创 java I/O流(一)——FileWriter,BufferedWriter,inputStream,BufferedInputStream,InputStreamReader

I/O全名:Input Output,输入输出的意思•IO流用来处理设备之间的数据传输 •流操作分两种:字节流,字符流 •流按流向分为:输入流,输出流•字节流的抽象积累◦InputStream ◦OutputStream•字符流的抽象基类◦Reader ◦WriterFileWriter•需求:在硬盘上创建一个文件,并且写入数据 那我们怎么去做?他构造函数比较多的,我们看例子public

2017-04-17 19:56:57 2047

原创 Java数据结构(三)——集合总结及集合的线程安全

Vector,HashTable是线程安全的集合类,不过,这两种类是很早的用法,现在一般要尽量少采用set –没有重复项目的集合 有三种特定类型的集可用 HashSet-基于散列表的集,加进散列表的元素要实现hashCode()方法 LinkedHashSet-对集迭代时,按增加顺序返回元素 TreeSet-基于(平衡)树的数据结构List ArrayList(数组表)-类似于Ve

2017-04-17 16:59:27 8283

原创 java数据结构(二)——Set(HashSet,TreeSet),泛型,Map(HashMap,TreeMap)

•Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复 Set集合的功能和Collection是一致的概念HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.hashCode和equal()是HashMap用的, 因

2017-04-17 16:33:10 874

原创 Java数据结构(一)——StringBuffer,StringBuilder,Collection,Iterator,List

一.StringBuffer关于StringBuffer这个对象,Buffer是什么意思?缓冲区的意思,String一旦初始化时不可以被改变的,而StringBuffer是可以的,这就是区别,特点:•StringBuffer是一个容器 •可以字节操作多个数据类型 •最终会通过toString方法变成字符串API: •存储StringBuffer append():将指定的数据作为参数添加到已有

2017-04-17 16:09:20 1933

原创 java多线程并发(二)——线程池Executors

线程池的创建我们可以通过ThreadPoolExecutor来创建一个线程池。new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, milliseconds,runnableTaskQueue, threadFactory,handler);创建一个线程池需要输入几个参数:corePoolSize(线程池的基本

2017-04-17 12:23:57 971

原创 java多线程并发(一)Semaphore,volatile,synchronized ,Lock, CyclicBarrier和CountDownLatch

在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。我们先看具体看一下这三个概念:1.原子性  原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。     一个很经典的例子就是银行账户转账问题 2.可见性  可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。3.有序性  有序性

2017-04-17 10:58:36 2989 2

原创 实现前后Camera 480P 720P 1080P高清视频录像(MTK平台)

Camera AP有定义了低,中,高,精细几种quality。每个quality都有对应的MediaProfile, MediaProfile里面包涵当前quality的mCameraId, mFileFormat,mVideoCodec,mFrameWidth,mFrameHeight,mFrameRate等信息。 camera启动后会针对每一个quality去加载对应的Medi

2017-04-17 09:04:25 5778

原创 android系统源码之 系统应用安装过程(下)

android系统源码之 系统应用安装过程(上) :http://blog.csdn.net/king1425/article/details/70135813 下图是PackageParser主要数据结构: 这里有个疑问为什么不直接用Activityinfo? (3)扫描完成之后的工作:解析完成之后存在Package对象里边的信息公有化到PackageManagerService当中, PK

2017-04-12 09:11:36 1130

原创 android系统源码之 系统应用安装过程(上)

PackageManagerService是Android系统中最常用的服务之一。它负责系统中Package的管理,应用程序的安装、卸载、信息查询等。 我们在使用PKMS的时候,一般都是这样用的,PackageManager packageManager = getApplicationContext().getPackageManager();packageManager是一个抽象类,A

2017-04-11 21:02:55 6326

原创 VectorDrawable矢量图

AndroidL中有一个非常好的新特性是VectorDrawable以及相关的一些类,他们为我们提供了添加复杂矢量图形的强大功能,同时也提供了动画显示这些图形的方法,不用写很多代码就可以实现非常复杂的动画。矢量图形的好处是放大不会失真,可以适应不同分辨率的屏幕。简单的来说,矢量图形就是使用几个形状的方式来描述一个图像元素。矢量图形非常适合于与设备无关的简单或者合成的制图或者不需要实现真实感的场合。而

2017-04-10 20:33:06 1050

原创 SystemUI 布局

代码路径: frameworks\base\packages\SystemUI 代码构成: 一、布局详细介绍布局特点: 1、FrameLayout,自定义控件 的大量使用 2、布局层级分布,高度细化 3、状态繁多statusBar 状态栏界面 布局文件 status_bar.xml 继续深入,查看system_icons 布局文件 在这儿需要注意一下,在这两个和电量有关的控件上方

2017-04-10 19:45:09 2250

原创 JavaWEB之Markdown 编辑器Editor.md集成使用教程

第一步:下载插件项目地址:http://pandao.github.io/editor.md/第二步:解压插件,并将需要的包拷进项目。如图: 第三步:配置<!-- editormd start --> <link href="<%=path%>/app/editormd/css/editormd.min.css" rel="stylesheet" type="text/css" />

2017-04-05 20:25:36 10822 6

SSM+maven+邮箱激活账号

maven+SSM+邮箱注册激活账号

2017-03-31

camera dome

拍照,录像,前后摄像头,闪光灯,预览比例,相片质量。

2017-02-25

gson,Volley

gson,Volley库

2016-11-02

Zing二维码精简库

Zing二维码精简库,体积小,可直接套用

2016-11-02

ant以及UiAutomatorHelper封装test封装

集成封装了UiAutomatorHelper.java和test.java,我们只需要在第四步写测试步骤,后期的各种命令行输入都不需要了

2016-10-29

空空如也

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

TA关注的人

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