自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用Opengl PBO上传下载数据

PBO(pixel buffer object)是储存像素数据的缓冲区对象,主要有两个用途:1. 上传一帧像素数据到PBO中,GL_UNPACK_ALIGNMENT2. 从PBO中读取像素到cpu内存空间, GL_PIXEL_PACK_BUFFER其实不使用PBO也可以上传下载数据,那么PBO好处何在?我们对比两种方式上传yuv420数据:使用PBO的方法:1. 创

2017-08-07 19:26:10 2375

原创 编译cmake 2.8.10.2报错:undefined reference to symbol 'keypad'

解决办法修改文件: vim cmake-2.8.10.2/Source/CursesDialogCMakeLists.txt在其他的target_link_libraries 命令附近添加下面一行:target_link_libraries(ccmake tinfo)

2017-08-02 16:13:38 1043

原创 笔记,安卓上简单的surfaceview使用

建立基于GLSurfaceView的类:public class MyGLSurfaceView extends GLSurfaceView {初始化:1. onSurfaceCreated:a) mProgram = createProgram(mVertexShader, mFragmentShader);   vao, vertex, coords handleb

2017-07-25 17:32:31 393

原创 离屏渲染FBO中使用depth信息

在显示窗口中使用的framebuffer,opengl渲染管线会自动创建一个颜色渲染区(color),一个深度渲染缓冲区(depth)和一个模板渲染缓冲区(stencil),开启glEnable(GL_DEPTH_TEST)就可以了。然而在离屏渲染自己创建的framebuffer中,这几个需要手动创建。需要哪个创建哪个。之前在基于ffmpeg中添加的离屏渲染filter中只

2017-06-21 16:54:42 851

转载 记录一下,金山云基于ffmpeg支持hevc flv的支持patch

如题,具体如下https://github.com/ksvc/FFmpeg/wiki/instructionshttps://github.com/ksvc/FFmpeg/wiki

2017-06-19 19:00:22 4008

原创 opengl在linux上进行离屏渲染

opengl往往初始化需要使用glutinit之类创建窗口的函数,而对于某些开发,比如ffmpeg中间的滤镜,我们是不希望创建这种窗口的。这时候需要使用离屏渲染的方法在代码中对opengl进行初始化。在linux上使用离屏渲染的前提是运行在图形界面X window。所以ssh之类的非图形界面远程是起不来的。这里我们需要GLX相关的函数来建立context。首先拿到glXCreate

2017-05-24 11:16:45 4653 2

原创 处理opengl使用fbo贴图时产生的锯齿

背景描述:在使用artools的矩阵进行贴图的时候,发现在我自己的滤镜里贴图会有明显锯齿。学习了一下,这种锯齿被称作aliasing,反锯齿被称作anti-aliasing。比较常用的方法是MSAA(Multisample Anti- Aliasing),该方法已经在opengl里实现了,对于使用窗口的opengl程序来说,仅仅需要设置sample的数目,然后glEnable(

2017-05-16 15:38:54 2043

原创 基于陀螺仪的全景视频播放器基础上,增加手指拖动旋转的效果

笔记一下:背景:手机全景播放app,放向根据陀螺仪调整。需求:增加一个功能,手指滑动屏幕,可以调整坐标系方向。或者关闭陀螺仪仅仅用手指操作方向。方法:1. 根据触摸的api得到精度和纬度方向旋转角度,thOffset,laOffset。(实现略)2. 根据thOffset,laOffset计算旋转后在球面上的矢量,(lookX, lookY, lookZ)。因为在球坐标

2017-04-14 11:09:59 1377

原创 linux上在不建立窗口的情况下使用opengl

之前遇到的问题是,在linux上基于ffmpeg增加使用opengl的模块,opengl只是用来映射投影等等,并不需要窗口显示到screen。所以需要使用一种方法不会创建screen还能对opengl进行初始化和正常使用。首先需要启动linux下的 window X图形界面,目的是利用OpenGL 3.0增加的接口glXCreateContextAttribsARB。该接口同时还需要G

2017-03-31 15:18:14 4530 6

原创 ARTool初步涉足,从simpleLite.c里opengl的流程开始

刚接触ARTool,基于ARToolKit5-bin-5.3.2r1-Linux-x86_64.tar.gz,简单笔记一下,simpleLite.c作用是读入视频,找到对应贴图位置,然后贴一个六面体。这里主要分析了一下相关代码opengl的作用和流程。这里在代码中笔记一下重要流程的comment。主函数是Display()。根据解码后的一帧,和之前找到的需要贴图六面体的位置,进行贴

2017-03-30 17:50:57 1385

原创 vr视频六面体转换的Equi-Angular优化以及实现

本篇主要基于facebook之前提出的vr视频转cube六面体的方案,根据文章里的优化算法对其进行优化,并实现播放。关于之前六面体的映射方法,facebook早早就提供了基于ffmpeg的滤镜vf_transform.c,其他相关请参考我另一篇笔记:http://blog.csdn.net/defence006/article/details/52459543这里主要是针对

2017-03-29 19:03:45 2866 1

原创 音频基础,笔记

采样率,采样精度常见44.1kHz,48kHz的采样率,也就是采样频率,物理意义就是一秒钟对音频采样的次数。由于人耳分辨的频率范围是20Hz~20KHz,根据奈奎斯特采样定理,需要40KHz来保证不失真。采样精度是指每一次采样的数据精度,比如常见的16bits,或者粗糙一些的8bits。音频raw data类似视频里dump出来的yuv,音频的rawdata是多个声道交替排

2017-03-13 15:37:45 633

原创 opengl基础,学习笔记

Opengl里的四维变换矩阵对三维坐标做变换时常用到四维变换矩阵,如图,红色是对x轴坐标的变换,绿色是对y轴,紫色是对z轴。最右面的(m12,m13,m14)是用于translation transformation, glTranslatef().最后一个m15是用于齐次坐标,投影变换的时候会用到。http://www.songho.ca/opengl/g

2017-03-01 15:23:48 943

原创 180度vr直播用,鱼眼视频展开到全景

对于180度vr的直播,一般来说低成本的做法是采用鱼眼镜头拍摄整个180度的视频。鱼眼镜头成像过程:不同的鱼眼镜头有不同的成像方式,我们采用的也是比较常用的等距投影模型。对于输入来说,由于镜头的成像范围,我们的输入是一部分的鱼眼图。输出我们希望是一个全景图,该图可以在带上vr头盔后以180度范围观看全景。也就是鱼眼到全景的转换。关于鱼眼展开到全景图的

2017-01-21 15:31:36 10660 4

原创 汇编笔记

sub     x2, x2, x3, lsl #1表示,x3=x3        ld1         {v22.1D - v23.1D}, [x2], x3        ext         v16.8B, v22.8B, v23.8B, #1        ext         v17.8B, v22.8B, v23.8B, #2

2016-12-07 11:23:52 423

原创 ffmpeg里ts流seek,笔记随记

普通模块走模块内部的read_seek就可以了,然而mpegts没有read_seek,所以实际上是在libavformat/utils.c里的函数实现的。mpegts因为有read_timestamp,所以仅仅需要ff_gen_search()这个函数应该就可以完成ts的seek,只需要用read_timestamp遍历整个流就可以。这个函数大概流程1. 首先ts_min 为AV

2016-11-11 09:39:36 3103 1

原创 ffmpeg里yuv格式以及各种format,笔记

ffmpeg里yuv格式以及各种8~10bits的定义在pixfmt.h里。转换大概方法,拿format索引av_pix_fmt_desc_get(dstFormat)设定输入输出格式dstContext = sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat,               

2016-11-09 18:28:25 936

原创 ffmpeg笔记,av_read_frame()阻塞在哪

笔记一下。av_read_frame()阻塞在哪av_read_frame() -> read_frame_internal() -> ff_read_packet() -> s->iformat->read_packet() -> /*不同demux最后都要到read url*/ -> read_from_url() -> ffurl_read() -> retry_transfer_w

2016-11-04 18:51:34 7966 6

原创 codec 随写笔记未整理

264,intra prediction对于16x16,4种,垂直,水平,DC,planeDC:需要上面和左边的宏块。上面一行和左边一列的像素平均值作为宏块预测plane:需要上面和左边的宏块。适用于亮度变化平缓区域对于8x8,4种,顺序和16x16不同,DC,水平,垂直,plane对于4x4,比16x16少plane,除了垂直,水平,DC以外有六种

2016-11-04 14:11:00 480

原创 零基础搭建nginx转码服务器

搭建服务器,需要nginx和一个插件 nginx-rtmp-module1. 下载nginx,从官网下载:http://nginx.org/2. 下载nginx-rtmp-modulegit clone git://github.com/arut/nginx-rtmp-module.git###http://www.pcre.org/yum

2016-09-22 14:14:49 2447

原创 零基础android studio入门

下载必要程序全程需要翻墙。主要是安装android studio环境,参考地址:https://dl.google.com/dl/android/studio/install/2.1.2.0/android-studio-bundle-143.2915827-windows.exe 首先下载ndk,参考地址:https://dl.google.com/android/rep

2016-09-22 13:53:52 526

原创 vr四棱锥视频文件通过opengl在手机端播放全景视频

输入是一个正方形vr四棱锥变换后的视频,目的是手机上反映射播放全景视频。app的demo基于native-media进行改动,因为大部分都是针对opengl ES的改动,所以主要修改文件为MyGLSurfaceView.java。其他改动都是些界面或者按钮的改动,这里不赘述了。这里主要讲解一下opengl这部分的流程。1. 建立两个shader,vertexShader和fra

2016-09-20 14:35:39 1598 1

原创 Native media简单使用流程

笔记一下简单的mediaPlayer调用流程1. 建一个SurfaceView SurfaceView mSurfaceView1; mSurfaceView1 = (SurfaceView) findViewById(R.id.surfaceview1); mSurfaceHolder1 = mSurfaceView1.getHolder();2. 设置分辨率 mSu

2016-09-20 14:32:06 633

原创 Shader语言的一些简单解释和备注

先以一对Shader的代码为例子开始: private final String mVertexShader = "uniform mat4 uMVPMatrix;\n" + "uniform mat4 uSTMatrix;\n" + "attribute vec4 aPosition;\

2016-09-20 10:19:10 3808

原创 GLSurfaceView.Renderer,openGL的渲染接口

如果需要用opengl ES对视频输出的帧做渲染处理,比如四棱锥,六面体的反映射,就需要实现GLSurfaceView.Renderer这个接口。GLSurfaceView.Renderer 一个渲染器接口,完成设置之后要调用 setRenderer(GLSurfaceView.Renderer) 去注册。其接口:onDrawFrame(GL10 glUnused)    需要

2016-09-19 18:38:34 1193

原创 HandlerThread

HandlerThread继承于Thread,所以本质上HandlerThread的对象自己就是一个线程,只不过多了一个looper,可以在自己的线程里分发和处理消息。Looper:每个线程只有一个looper实例,每个实例只有一个MessageQueue,用来存放消息和事件。首先需要调用prepare()初始化,然后Looper.loop()不断地从MessageQueue里取出Mess

2016-09-19 14:36:07 302

原创 java interface

接口是一种特殊的抽象类,interface,本身不能实例化,成员方法只能是抽象方法,访问权限只能是public。抽象方法需要在子类中实现,而且必须全部实现。其成员变量如果是static final,则只能赋值一次,不能被继承通过implements来引用接口,实现其中的方法接口之间可以继承,比如 public interface B {  public stat

2016-09-19 11:26:18 539

原创 mpeg dash简单介绍

MPEG DASH也是一个主流的直播点播流媒体协议,而且兼容HLS。只不过相对复杂,下面作为简介进行介绍。首先,解析一个dash流需要对应MPD文件(Media Presentation Description),相当于hls的m3u8文件。MPD文件是xml格式的。下面从外到内介绍MPD文件的主要成员。1. period:一个mpeg dash流由1~n个period组成

2016-09-18 15:43:36 4461

原创 neon 64bits hevc优化例子

由于之前ffmpeg中hevc decoder不支持neon 64bits的优化,所以参与这部分工作。大部分指令从这里查:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802a/USHLL_advsimd_vector.html另外还有两个文档:ARMv8-A programming gu

2016-09-14 17:00:29 1459

原创 vr视频六面体变换

本文会对facebook的开源filter:vf_transform.c 做代码级分析,解释vr视频是如何做六面体转换的。转换的关键其实就是输入vr视频到六面体的映射(也就是下图中蓝色图像映射到红色图像):假设每个正方形的像素是512x512个,那么对于(x, y)这个像素值来说,想得到这个值,我只需要从原点,拉一条直线连接到(x, y)并沿着这条直线一直打到球面上,得到的像素值就

2016-09-07 14:48:42 3490

原创 vr视频简介

常见的vr视频大部分都是基于柱面(或者称为球面)的,比如:其原理和地球仪展开是一样的,越接近南北极柱面展开的图像畸变越大:从codec的角度看,这种视频其实很不适合编码,因为当畸变区域较大的地方出现运动,运动估计效果是很不好的。毕竟现在所有的codec在me方面都是以平移为最佳,这种引入很多形变的vr视频不仅不利于压缩,其中很多内容也是冗余的。如何可以更好的处理呢?face

2016-09-07 14:26:45 1073

空空如也

空空如也

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

TA关注的人

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