自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SuperLi

不老实程序员

  • 博客(90)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android Native Thread

Android 本地线程

2022-11-20 11:51:31 1620 1

原创 pthread使用

pthread使用

2022-11-19 08:45:25 1674

原创 在map中使用结构体

在std::map中使用结构体

2022-03-14 19:17:18 2226

原创 avcodec_receive_frame 和 avcodec_send_packet的调用顺序

avcodec_receive_frame 和 avcodec_send_packet的调用顺序环境首先交代一下环境,通常,这类问题随着编译环境、平台类型、版本等的更新变得不那么相同。运行系统:Mac OS Big Sur:11.5.2编码平台:Qt 5.15.2、Qt Creator 4.14.0FFmpeg版本:4.2测试片源基本信息:Metadata:major_brand : mp42minor_version : 0compatible_brands: isommp42

2021-08-16 11:45:14 3032 3

原创 C++笔记:关于函数指针

函数指针定义普通函数指针函数指针可以理解为指向该类型函数的指针函数指针定义:返回值类型 (*函数指针名)(参数列表)。如:int (*fp)(int a)该段代码定义了一个函数指针,该指针可以用于指向返回值类型为int,只有一个int类型参数的函数。函数指针赋值:函数指针赋值有两种方式直接赋值:函数指针 = 函数名取地址符赋值:函数指针 = &函数名调用:函数指针的使用方式和普通函数调用别无二致例子如下:#include <iostream>using

2021-06-16 21:50:12 301 6

原创 Catalina编译android 10报错

Catalina编译android 10报错环境先声明一下环境:系统: macOS Catalina 10.15.3aosp分支版本:android-10.0.0_r21编译目标版本:aosp_walleye-userdebug当执行完编译相关命令后,最终执行make -j16的时候,出现了异常:编译相关命令简介:source build/envsetup.shlunch ...

2020-03-27 19:03:46 1632 2

原创 git diff 输出含义

git diff 输出含义今天编译aosp时,碰到个在MAC Catalina系统上存在的bug,艰难的翻遍内外网,只找到一个解决方案。那就是Google家的补丁,但是只给了一个补丁版本号,咱代码的源地址是国内的,也不好直接更新这个补丁。于是找了找该补丁版本更改,可以直接从网页上看到相关修改,只不过是以diff的格式提供。初一看,有点懵,所以,来温习一下diff输出含义吧。先随便找个目录,创...

2020-03-26 20:49:28 531

原创 Add Configuration

当导入别人项目时,有可能会出现不能够运行的情况,在Android Studio的小锤子图标旁边,会显示 Add Configuration 字样,平时这里都是显示:要编译运行的模块的,类似下图:该情况出现的原因不确定,也不想探究。原因花时间探究一番的小伙伴可以去这个链接看看:一探究竟解决方式是,依次点击 File -> Sync Project with Gradle Files...

2020-02-01 15:46:43 22159 2

原创 Cause: couldn't make a guess for com.xxx.xxx.databinding.mainViewImpl

使用DataBinding时,不小心把DataBinding实现类命名搞成了这样:mainView ,以小写开头了,结果出现了标题中的异常。使命名遵行类的命名规则编译不会报错。报错代码如下:<?xml version="1.0" encoding="utf-8"?><layout> <data class="mainView"> &l...

2020-01-31 15:25:01 3126

原创 MVVM&Android实践(四):MVVM的前世今生

第四部分:MVVM前面的主要内容,基本只是介绍了MVVM的基础DataBinding的语法和使用。但这远远不够,下面才是本文的重头戏。Android 的关于代码的组织方式(你也可以称之为设计模式),从MVC 到MVP 再到MVVM,经历了三次重要变化。MVVM的前世今生MVCAndroid设计之初,就遵循的MVC模式,此时的模块划分是:Model:所有和数据相关的类View:布局文件...

2020-01-03 08:18:41 377

原创 MVVM&Android实践(三):表达式语言

第三部分:表达式语言文章目录第三部分:表达式语言常用操作符缺失操作符Null coalescing operator(`??`)避免非空指针异常资源语句include:传递参数常用操作符DataBinding允许开发者在布局文件中使用表达式语言,就像在普通代码中一样。表达式语言中可供使用的操作符和关键字如下:算术运算符:+ - / * %字符串连接符: +逻辑运算符:&&am...

2020-01-03 08:18:23 782

原创 MVVM&Android实践(二):动态绑定

第二部分:动态绑定文章目录第二部分:动态绑定ObservableObservableFieldsobservable collections`ObserableArrayList`初始化和赋值在xml中的使用`ObserableArrayMapDataBinding的强大之处在于,数据的变化会直接体现在界面上。如何达到这总效果呢?DataBinding有三种数据变化的通知机制:Observab...

2019-12-24 08:33:53 1001

原创 MVVM&Android实践(一):DataBinding入门

MVVM&Android实践文章目录MVVM&Android实践第一部分:DataBinding入门配置项Layout标签使用数据绑定第一种绑定方法第二种常规方式了解DataBinding的使用,请参考:如果你暂时无法翻墙,看这篇文章也可以。本文中,默认的View就是Activity及其对应的XML文件。第一部分:DataBinding入门配置项在Android中,需...

2019-12-17 23:54:23 293

原创 Qt在透明QWidget上自由绘画

Qt在透明控件上自由绘画文章目录Qt在透明控件上自由绘画如何让QWidget变透明透明QWidget上响应鼠标事件初学Qt,需要实现这样的效果:在透明的QWidget上自由的绘图,看起来就像是直接在桌面绘图一样。要达到这样的效果,需要分成两个步骤:如何将QWidget变得透明。如何在透明的QWidget控件上使用QPainter绘制图形。当然,第二点是Widget透明之后才发...

2019-11-15 22:49:14 4343 24

原创 win10 Python/pip/numpy/matplot/scipy安装

windows Python/pip/numpy/matplot/scipy安装最近在研究触控屏设备的手写轨迹拟合(仿真),需要用到贝塞尔曲线。某一天,突然在网上看到一篇博客,有理有据,清晰易懂,瞬间膜拜。所以决定研究一下。它的地址是:优秀的作者里边给出了算法,是python脚本写的。需要用到numpy、matplot、scipy等。安装这些库过程中,踩了不少坑,如果熟悉的话,完全可以避免,所...

2019-11-15 09:05:34 710

原创 Mac OpenGL的坑

OpenGL使用Bug系统:MacOS 10.13.6openGL 版本: 4.1 ATI-1.68.21opengl 函数管理库:glew2.1.0opengl 窗口库:glfw3.3IDE:CLion 2018.1openGL 相关函数找不到报错日志:Undefined symbols for architecture x86_64: "_glClear", refer...

2019-09-22 22:52:41 2162 1

原创 Android Native报错定位(addr2line工具的使用)

文章目录Android Native报错定位源码部分:日志分析线索一线索二addr2line使用位置使用实战addr2line出现“??:?”小结android studio编译的库其它总结Android Native报错定位今天调试Android stagefright模块,修改MediaCodec.cpp文件时,一不小心在代码里写了个空指针进去。于是得到了下面这个报错日志:------...

2019-08-17 10:45:59 11131 5

原创 《剑指offer》Java学习录:面试题 12:打印1到最大的n位数

文章目录面试题 12:打印1到最大的n位数题目分析解:java面试题 12:打印1到最大的n位数题目输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。分析如果不作分析,可能直接就会采用:算出n位数的最大值,然后循环输出就完事儿了。但这个题显然不是这么简单,题目中没有给n做任何限定,如果n的值很大,那么不管是double还是long...

2019-06-29 18:52:18 285

原创 《剑指offer》Java学习录:面试题 11:数值的整数次方

文章目录面试题 11:数值的整数次方题目分析解:java面试题 11:数值的整数次方题目实现函数 double power(double base, int exponent),求base的 exponent次方。不得使用库函数,同时不需要考虑大数问题。分析因为不用考虑大数问题,所以,这个题看起来很简单。只需要将base累计乘以exponent次就可以了。如果是这样的话,你就掉进陷阱了。...

2019-06-29 18:49:06 212

原创 《剑指offer》Java学习录:面试题9:斐波那契数列

面试题 9:斐波那契数列题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列的定义如下:f(n)={0,n=01,n=1f(n−1)+f(n−2),n&gt;1f(n)= \begin{cases} 0, &amp; \text{$n = 0$}\\ 1, &amp; \text{$n = 1$}\\ f(n - 1) ...

2019-06-29 18:47:24 301

转载 时间复杂度&空间复杂度《数据结构》清华大学出版社

文章目录时间复杂度&空间复杂度时间复杂度空间复杂度时间复杂度&空间复杂度时间复杂度算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。一般有两种方法:事后统计:利用计算机的计时功能。有明显的两种缺点,一、必须要运行起来才行。二、结果依赖于计算机硬件、软件环境,容易掩盖算法本身的优劣。所以该方法一半不可靠,多用后面一种方式。事前分析:一个程序在计算机...

2019-06-28 08:48:07 481

原创 《剑指offer》Java学习录:查找和排序(面试题8:旋转数组)

文章目录查找和排序查找排序面试题8:旋转数组的最小数字题目分析解:Java这样就完了么查找和排序查找查找和排序时程序设计中常用的算法,查找相对简单,大致有顺序查找、二分查找、哈希查找和二叉树查找,其中二分查找是大多数面试官都会考察的内容。这几个查找都各有特点:顺序查找:是最普通的查找方式,虽然常用,但并不推荐。二分查找:用在排序或者部分排序数组中查找一个数字或者统计某个数字出现的次数。...

2019-06-27 19:48:02 177

原创 单例设计模式详解(5种)

单例模式按照惯有的分类方式,设计模式总共分为3大类:1、创建型 ,2、结构型, 3、行为型。单例模式便是创建型设计模式的一种,它确保某一个类在系统中只有一个实例,并自行实例化,同时向外部提供获取这个唯一实例的接口。从这段描述中,我们不难可以得到单例模式的三大特性:单例类只有一个实例。单例类必须自己实例化自己。单例类需要向外提供实例。虽然单例设计模式算是“入门级“的设计模式,但依然需...

2019-06-25 22:05:07 8740 7

原创 PSI/SI信息表

缩写全称中文说明PSIProgram Specific Information节目引导信息对单一码流的描述SIService Information业务信息对系统中所有码流的描述TSTransport Stream传输流(常称为TS流)一个频道(多个节目及业务)的TS包复用后称TS流TS包Transport Packet传输包数字视...

2019-06-24 23:40:01 1239

原创 MPEG2-TS标准分析

基本概念ES流(Elementary Stream):基本码流,经过编码后的连续码流。PES流(Pakckaged Elementary Stream):将ES流分割成段,加上相应的头文件打包后的码流。PES包的长度可变,包头中最重要的是PTS(Presentation Time Stamp)、和DTS(Decode Time Stamp)时间,再加上参考PCR参考时钟,播放器便能从PES流中...

2019-06-24 23:38:41 3259

原创 MP4文件结构解析

文章目录MP4相关文档MP4分析工具术语和缩略语Mp4文件的组织结构Box对象结构FullBox对象结构常见的BoxFile Type BoxMovie 结构Movie BoxMovie Header BoxTrack BoxTrack Header BoxMedia BoxMedia Header BoxHandler Reference Box : 'hdlr'Media Informatio...

2019-06-21 00:36:56 8569

原创 《剑指offer》Java学习录:栈和队列(面试题7:两个栈实现一个队列)

文章目录栈和队列面试题 7:两个栈实现一个队列题目分析解:Java解:C++栈和队列栈:栈是一个非常常见的数据结构,特点是先机后出,即最先压入(push)栈的元素会第一个被弹出(pop)。在计算机中被广泛使用。例如,操作系统会给每个线程创建一个栈用来存储函数调用时各个函数的参数。通常栈是一个不考虑排序的数据结构,我们需要O(n)O_{(n)}O(n)​的时间才能找到栈中的元素,TODO:...

2019-06-19 00:42:25 208

原创 《剑指offer》Java学习录:树(面试题6:重建二叉树)

文章目录树树的定义二叉树二叉树实现(Java/C++)Java实现C++实现二叉树的遍历深度优先搜索(Depth-First Search)前序遍历中序遍历后续遍历广度优先搜索(Breadth-First Search)二叉搜索树新增节点搜索删除面试题 6:重建二叉树题目分析解:Java解:C++树在数据结构中,我们把存在逻辑上的起点和终点的数据结构,成为线性的数据结构。例如链表、栈和队列等都...

2019-06-19 00:38:44 446

原创 《剑指offer》Java学习录:链表(面试题5:从尾到头打印链表)

链表文章目录链表C/C++中的链表Java中的链表面试题 5:从尾到头打印链表题目分析解:C++解:Java和数组不同,链表是一种动态的数据结构,在创建时并不需要知道他的长度。链表的结构很简单,它通过指针(C/C++中)或者引用(Java中)将若干个节点连接成链状结构。在链表中插入一个节点时,我们只需要为新节点分配内存,然后调整指针或引用的指向即可。因为内存是在使用过程中动态分配,不会出现空...

2019-06-15 00:11:15 123

原创 《剑指offer》Java学习录:字符串(面试题4:替换空格)

文章目录字符串String的重要特性StringBuilder的重要特性StringBuffer和StringBuilder的区别StringBuilder&StringBuffer的扩容逻辑String、StringBuilder、StringBuffer之间的区别面试题 4:替换空格题目分析解:java字符串字符串是若干字符组成的序列,因为使用频率较高在各语言中都做了特殊处理。C...

2019-06-13 19:19:12 209

原创 《剑指offer》Java学习录:数组(面试题3:二维数组中的查找)

文章目录数组面试题 3:二维数组中的查找题目分析解:C++解:java数组占据了内存中一段连续的内存空间,并顺序存储,因此可以通过数组下标直接访问,时间复杂度为O(1)O_{(1)}O(1)​,时间效率高。在申明一个数组时,即使不往数组内存数据,也需要给定数组的空间大小。数组的这种存储方式,造成了内存空间的浪费,经常会有空间没有得到有效利用。为了解决数组空间利用率的问题,在各大高级语言中,设...

2019-06-12 00:02:15 166

原创 PCM数据格式介绍

PCM原始音频数据格式介绍文章目录PCM原始音频数据格式介绍什么是PCMSampling(采样)采样率(Sample rate)Quantization(量化)Encoding(编码)PCM数据常用量化指标PCM数据流音量控制采样率调整什么是PCMPCM全称Pulse-Code Modulation,翻译一下是脉冲调制编码。其实大可以不用关心英文释义,之所以这么命令是因为一些历史原因。在...

2019-05-30 00:58:41 23996 13

原创 NuPlayer源码分析四:渲染模块&音视频同步

渲染模块&音视频同步渲染模块的作用是,将音频、视频数据安装一定的同步策略通过对应的设备输出。这是所有的播放器都不可或缺的模块。NuPlayer的渲染类为Renderer,定义在NuPlayerRenderer.h文件中。它的主要功能有:缓存数据音频设备初始化&数据播放视频数据播放音视频同步功能缓存数据在表明缓存逻辑之前,先介绍一下NuPlayerRenderer...

2019-05-27 23:41:54 1885 10

原创 NuPlayer源码分析三:解码模块

解码模块NuPlayer的解码模块相对比较简单,统一使用了一个基类NuPlayerDecoderBase管理,该类中包含了一个MediaCodec的对象,实际解码工作全靠MediaCodec。如果你不会知道MediaCodec是什么,推荐去官网看看:MediaCodec尽管解码工作都被MediaCodec接管,我还是会按照播放器的一般步骤,来分析一下NuPlayerDecoderBase...

2019-05-27 23:37:38 1647

原创 NuPlayer源码分析二:解封装模块

NuPlayer解封装模块解封装模块的重要作用,是将封装好的音视频源文件,通过不同的封装协议,解析成码流后,送到解码器解码。NuPlayer中和解封装相关的类有:NuPlayer::Source:解封装模块的基类,定义了解封装的基本接口。GenericSource:本地文件相关。HTTPLiveSource:HLS流媒体使用的解封装类。RTSPSource:SDP协议媒体流使用的解封...

2019-05-27 23:33:33 1937 5

原创 NuPlayer源码分析一:播放器创建

摘要

2019-05-20 00:28:41 1896 5

原创 SDL2:第五个程序:播放pcm数据

播放音频数据对一个播放器来说是不可或缺的,索性SDL2支持播放视频数据之外,也支持播放音频数据。废话不多说,先来试试吧!使用FFmpeg命令提取PCM数据这里从网上下了一首歌Forevermore,非常好听,是mp3格式的:Forevermore.mp3。在提取Forevermore中的pcm数据时,为了使提取数据的基本采样率编解码格式等不发生改变,先用ffprobe命令探测一下该原数据的基...

2019-05-17 00:26:58 1909 3

原创 FFmpeg播放器(一):FFmpeg+SDL2播放视频数据

基本调用流程做了一个利用ffmpeg解码出yuv数据,通过SDL2显示数据的demo,记录一下。视频源使用的是网上源:http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4也不知道是谁家的,先感谢一下吧。代码算是最基本的代码了,没有做过度的抽取封装,个人觉得这种代码更加易学。能够直观的看出FFmpeg和SDL2的接口调用顺序。其中FFmpeg...

2019-05-14 23:41:30 1557 2

原创 SDL_UpdateTexture+ffmpeg播放YUV数据程序异常崩溃:VM Regions Near 0x113e3d000:MALLOC_LARGE

异常代码:#include <iostream>#include <map>#include <pthread.h>extern "C" {#include <libavformat/avformat.h>#include <libavcodec/avcodec.h>#include <libswscale/swsc...

2019-05-14 13:19:06 21216 1

原创 SDL2:第四个程序(Mac):显示YUV数据

在上一个程序SDL2:第三个程序(Mac):显示任意图片我们利用sdl2_image库已经可以做到显示任意格式的图片了。可我这种最终要利用SDL2做视频工具的男人,怎么会满足于小小的图片呢。因为FFmpeg解码出来的视频帧数据是以YUV数据的格式展现,所以我必须先弄清楚YUV格式,在SDL2中是怎么显示的。为此,我专门用FFmpeg命令,将小王子的图片从jpg格式,转成了I420的YUV4:...

2019-05-10 21:04:15 718 2

TransparentWidget.rar

Qt在透明控件上自由绘画的源码。1、解决QWidget透明背景为题。2、解决在透明widget上获取鼠标事件问题。最终效果为可以在桌面自由绘制。

2019-11-15

little_prince_yv12_960x540.yuv

该图片为yv12格式,宽高为960x540。主要用于代码验证。后面的信息没有用,可以不看。

2019-05-08

java_ee_api_中英文对照版

2016-03-12

空空如也

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

TA关注的人

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