自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (2)
  • 收藏
  • 关注

原创 OpenGL ES特效分析 --- 跳动的心

很早之前就见过一个博主发的shader图片,一个跳动的心, 感觉太好玩了,于是想要分析一下原理,上面的博主也已经做了初步分析,但是对于我这个特效小白来说还是太难,于是就更详细的分析了一遍。

2023-05-12 15:49:21 841

原创 OpengES中 GLSL优化要点

本文整理一些日常积累的可以优化的方向。

2023-05-12 10:54:20 501

原创 学习笔记 -- 从零开始学习Android Camera2 -- (1)

学习一个框架,第一步学习肯定是照着代码看文档。既然要看代码,就要看最权威的,这里我是代码是参照android给的官方示例,结合官方文档来看,所以首先要先看一遍文档,然后重写一遍它里面最基础的Camera2Basic。

2023-05-10 11:34:13 989

原创 从头用脚分析FFmpeg源码 - av_interleaved_write_frame | av_write_frame

本文所使用的是FFmpeg n4.4的源码,所有分析均来自博主瞎猜,如果有误,欢迎批评指正。

2023-04-10 15:17:57 776

原创 从头用脚分析FFmpeg源码 - avcodec_send_frame | avcodec_receive_packet

编码阶段重要函数,这个函数会判断所使用的AVCodec是否已经实现了receive_packet函数,从而判断是否是调用receive_packet编码还是调用encode_simple_receive_packet编码。相对应avcodec_send_packet | avcodec_receive_frame而言,avcodec_send_frame | avcodec_receive_packet 是编码用的。多线程编码,配合调用avcodec_open2 时,打开的编码线程。

2023-03-31 11:27:05 708

原创 从头用脚分析FFmpeg源码 - avcodec_send_packet | avcodec_receive_frame

然后通过判断avci->buffer_frame->buf[0]是否null来决定是否调用decode_receive_frame_internal来接受解码后的frame。需要注意的是,AVCodecContext必须经过avcodec_open2函数打开,输入的AVPacket会在内部增加一个ref,所以如果要free,外部也应该调用av_packet_unref。avcodec_send_packet和avcodec_receive_frame中最核心的函数,大部分的编码格式都会调用到这里解码。

2023-03-30 11:48:31 982

原创 从头用脚分析FFmpeg源码 - av_read_frame

从AVInputFormat或者raw_packet_buffer中读取一个AVPacket,如果raw_packet_buffer中有,就从raw_packet_buffer中读取,没有的话,只能从对应的AVInputFormat中读取。)分析出视频一帧(或音频若干帧),返回,下次进入循环的时候,如果上次的数据没有完全取完,则st = s->cur_st;读取一个AVPacket,如果buffer里面存在,就从buffer中读,没有就调用read_frame_internal函数,从流中读。

2023-03-29 10:10:28 443

原创 从头用脚分析FFmpeg源码 - avformat_write_header

看源码之后感觉申请数据没发现什么,这个函数最重要的就干了两个事情,第一个是调用avformat_init_output,初始化mutex,实际上大部分都是检查格式,然后写入options。这个函数就三个作用,第一个作用是把options设置到AVFormatContext中,第二个作用就是遍历所有的AVStream,然后检测AVStream中的参数是否正确。其实就是init_muxer的一个封装,avformat_init_output在回输出多个文件的格式中会调用多次,比如m3u8格式。

2023-03-22 18:02:21 448

原创 从头用脚分析FFmpeg源码 - avcodec_open2

worker线程函数,就是等待ThreadContext中的信号量,如果等到了,就判断当前唤醒的是否是自己这个task_index,如果唤醒的是自己这个task,就进行编码操作,编码用的来源frame和输出pkt,都是来自于ThreadContext的tasks数组中,如果不是就继续等待下一个信号量。代码贼多,和avformat_find_stream_info有的一拼,但实际上没干很多东西,基本都是在malloc然后check,需要注意的就是多线程编码。按照惯例,看FFmpeg的解释。

2023-03-20 16:26:33 330

原创 从头用脚分析FFmpeg源码 - avcodec_alloc_context3

这个函数平平无奇,就是分配了一块内存给AVCodecContext,然后调用init_context_defaults初始化了这个函数。avcodec_alloc_context3主要就是生成一个AVCodecContext,然后初始化。按照惯例,先看FFmpeg怎么解释的。初始化函数也平平无奇。

2023-03-15 17:24:56 555

原创 从头用脚分析FFmpeg源码 --- avcodec_find_decoder | avcodec_find_encoder

实际调用的是find_codec函数,输入AVCodecID和一个判断函数,avcodec_find_encoder中输入函数指针作用是编解码器是否为编码器,avcodec_find_decoder中则是判断是否为解码器。就很简单,就是根据输入的AVCodecID类型,找到对应的解码器。根据输入的AVCodecID类型,找到对应的编码器。

2023-03-15 16:43:31 150

原创 从头用脚分析FFmpeg源码 ---avformat_alloc_output_context2

从头用脚分析FFmpeg源码 ---avformat_alloc_output_context2

2023-03-15 14:08:05 202

原创 从头用脚分析FFmpeg源码 --- avformat_find_stream_info

从头用脚分析FFmpeg源码 --- avformat_find_stream_info

2023-03-15 14:07:38 150

原创 从头用脚分析FFmpeg源码 --- avformat_open_input

本文所使用的是FFmpeg n4.4的源码,所有分析均来自博主瞎猜,如果有误,欢迎批评指正。

2023-03-01 16:15:34 637 2

原创 FFmpeg 生成mp4时 Annexb转Avcc失败

FFmpeg 生成mp4时 Annexb转Avcc失败

2023-02-23 18:23:19 438 2

原创 FFmpeg转码实战

FFmpeg转码源码实现

2022-06-06 17:43:25 373

原创 MacOS编译ffmpeg 出现 ERROR: openssl not found

今天心血来潮,突然想开始研究ffmpeg的源码,所有依赖库下载完成后,在用一下命令configure的时候sh configure --prefix=/usr/local/ffmpeg \--enable-gpl \--enable-version3 \--enable-nonfree \--enable-postproc \--enable-libass \--disable-libcelt \--enable-libfdk-aac \--enable-libfreetype \--e

2022-03-18 10:39:41 5624

原创 Android中遇到的待解决问题

问题一: HorizontalScrollView与ScrollView连用,导致ScrollView的match_parent属性异常示例布局如下 <HorizontalScrollView android:layout_width="wrap_content" android:layout_height="200dp" app:layout_constraintTop_toTopOf="parent" app:layout_co

2021-04-21 18:26:56 101

原创 Android上的巨坑|使用ActivityMainBinding 并没有自动生成类

在拷贝别人代码的时候发现找不到这个类,查看了xml的写法后发现xml并不是用layer作为最顶层。那该如何使用AndroidBinding呢对比代码后发现是在build.gradle 中添加 buildFeatures { viewBinding true }添加后完美解决问题,然后查了官网,看卡这个buildFeature的介绍https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/a.

2021-02-22 12:58:38 4909 2

转载 Android上的巨坑 | Failed to find configured root that contains

这个博主写的很好,亲测可行。https://blog.csdn.net/fengyuzhengfan/article/details/52876586

2019-10-11 16:25:46 686

原创 Android8.0以后带通道的通知创建流程

以下写法不规范,只是为了能发送通知,把所有东西全部都写再Activity中了:流程如下:通过getSystemService()获得 Notificationmanager 对象manager。创建NotificationChannel类对象 channel将channel传入manager 的createNotificationChannel 方法中通过new Notificati...

2019-10-11 09:53:50 615

原创 Git命令

git 查看本地分支git branchgit 查看远程分支(其中以remotes开头的就是远程分支)git branch -agit创建本地分支git branch <本地分支名>git删除本地分支(删除前要先切换分支)git branch -d <本地分支名>git切换分支git checkout <本地分支名>...

2019-09-27 15:27:01 98

转载 Java类的初始化顺序 (静态变量、静态初始化块、变量、初始画块)

https://www.cnblogs.com/luckygxf/p/4796955.html

2019-09-26 17:13:24 121

转载 Android q (29)中RecyclerView的使用

这是一个博主写的答案,写的不错https://blog.csdn.net/lilongsy/article/details/91390343这是android库中的说明https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView28版本以前可以根据这个博主写的答案https://blog...

2019-09-24 20:01:53 773

原创 java利用泛型时,如何创建类型实例?

Java的解决方法是传递一个工厂对象,并使用它来创建新的实例。1.最便捷的工厂对象就是Class对象用Class对象的话,就可以利用newInstance()创建这个类型的新对象。class ClassFactory<T>{ T x; public ClassFactory(Class<T> kind) { // TODO Auto-generated con...

2019-09-09 22:16:10 4286 1

原创 JAVA并发的一个问题

在实验下方代码时,本以为会因为在函数之前加了关键字 synchronized 会形成对共享资源的保护,但是结果出乎意料,先记录一下,等什么时候解决了再给答案。import java.lang.reflect.Array;import java.net.PortUnreachableException;import java.util.ArrayList;import java.util.A...

2019-09-03 20:45:41 93

原创 JAVA并发学习

以下内容来自《java编程思想》中的第21章和我自己的感悟一,实现多线程的方法1,通过继承Thread类实现。这种方法不推荐,一般写小的Demo时可以尝试class B extends Thread{ public void run(){ System.out.print("This is a Thread"); }}public class Main{ public sta...

2019-09-03 11:32:43 68

原创 gerrit命令行密钥配置以及向仓库push一个文件夹

粘贴复制git里面不支持ctrl + c粘贴的, 粘贴可以用 shift+ insert , 复制可以用ctrl + insert密钥配置git命令 : ssh-keyen -t rsa然后一直enter建生成SSH秘钥之后在**~/.ssh/目录下创建config**文件,并编辑,编辑操作如下:git命令 创建文件: touch ~/.ssh/config...

2019-08-30 21:21:21 1011

原创 Java中正则表达式表示 ‘\’ 时为什么不用三个而用四个?

其实写出来就知道了例如:String i= "I am a boy\\ boy";System.out.print(Arrays.toString(i.split("\\\\")));在String串中表达符号 ‘\’ 需要两个反斜杠来表示,所以在正则表达式中也需要用四个,而不是三个。...

2019-08-26 20:39:08 281

原创 Java简单聊天工具

Java简单聊天工具双人聊天工具双人聊天工具教程链接: https://www.bilibili.com/video/av57820725/?p=1.代码如下//下面是客户端,文件名ClinetChatMain.javapackage cn.itcast.chat;import java.awt.BorderLayout;import java.awt.BufferCapabili...

2019-08-19 11:47:48 232

原创 numpy中的一些函数使用

mat() numpy函数库中存在两种不同的数据类型(矩阵matrix与数组array),都可以用于处理行列表示的数字元素。虽然他们看起来很相似,但是在这两个数据类型上执行相同的数学运算可以得到不同的结果,其中numpy函数库中matrix与MATLAB中matrices等价。调用mat( )函数可以将数组转化为矩阵。 例如a = numpy.random.rand(3,3)#创建...

2018-06-23 15:17:43 177

原创 pyhthon3中 一些函数使用

zip函数 zip函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个一个元组,然后返回这些元组组成的列表,如果各个迭代器的元素个数不一致,则返回列表长度与最短对象相同,利用 * 号操作符,可以将元组解压为列表。使用方式: zip([ ] , [ ] , …)a=[1,2,3]b=[4,5,6]c=[1,2]zipped = zip(a,b)#在python3中...

2018-06-22 18:42:31 535

转载 Numpy中的random用法

在学习numpy的时候遇到了random函数,下面是一些用法random模块用于生成随机数,下面是一些常用函数的用法numpy.random.rand(d0,d1,…,dn) 生成一个[0,1)之间的随机浮点数或N维浮点数组#numpy.random.rand(d0,d1,...,dn)import numpy as np#生成一个[0,1)之间的随机浮点数np....

2018-06-22 18:17:40 340

原创 关于python中查询数据库的学习

利用 PyMySQL操作MySQL数据库数据库的连接:import pymysqlconn = pymysql.Connect( host = 'localhost', port = 3306, user = 'root', password = '123456', db = 'mydv3', charset = 'utf8')数...

2018-06-08 16:44:40 456

1天搞懂深度学习

1天搞懂深度学习,1天搞懂深度学习,1天搞懂深度学习,1天搞懂深度学习

2019-04-22

stanford机器学习笔记

机器学习笔记,是斯坦福大学网上的那个课程的笔记。。。

2019-04-22

空空如也

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

TA关注的人

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