师范大学生
码龄5年
  • 330,024
    被访问
  • 145
    原创
  • 4,296
    排名
  • 271
    粉丝
  • 24
    铁粉
关注
提问 私信

个人简介:登峰造极境

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2017-03-12
博客简介:

师范大学生的博客

查看详细资料
  • 5
    领奖
    总分 1,428 当月 54
个人成就
  • 获得359次点赞
  • 内容获得125次评论
  • 获得2,025次收藏
创作历程
  • 27篇
    2022年
  • 35篇
    2021年
  • 48篇
    2020年
  • 36篇
    2019年
成就勋章
TA的专栏
  • android
    7篇
  • C++
    54篇
  • 算法程序
    15篇
  • 音视频开发
    18篇
  • Linux开发
    13篇
  • QT
    13篇
  • cadence allegro
    29篇
  • PCB layout
    38篇
  • 树莓派4
    3篇
  • altium designer
    4篇
  • web前端
    9篇
兴趣领域 设置
  • Android
    android
  • 硬件开发
    硬件工程硬件架构pcb工艺
  • 操作系统
    linux
  • 音视频
    音视频
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

EventBus3 笔记

eventbus是安卓开发中常用的消息传递工具,能够有效对发送方与接收方解耦合。
原创
发布博客 5 小时前 ·
6 阅读 ·
0 点赞 ·
0 评论

jni学习4.动态注册

静态注册较为简单,只需要在Java程序中声明jni函数,随后在cpp程序中实现此jni函数即可。静态注册的实现方式为:当java程序第一次使用某个jni函数时,会进行搜索,根据包名-类名-函数名进行搜索,随后与对应的jni函数建立连接,随后便可以调用。由于虚拟机自动实现了注册匹配,所以在实际编写中比较省力,名字匹配了就可以直接用。但是静态注册有一些缺点:1.函数名称需要匹配,不能自定义。2.每个jni函数第一次被调用时都需要搜索,增加了额外开销。如果工程中的jni函数较多,在搜索方面可能会花费较多时间。..
原创
发布博客 2022.08.04 ·
19 阅读 ·
0 点赞 ·
0 评论

jni学习3.cpp代码在android studio打印日志

从代码中可知,“CPPLOG”就是日志的tag,可以自定义修改。代码运行时在logcat中搜索CPPLOG就可以找到相关的日志。为了方便调试,通常在Java代码中打印日志。但是在jni开发中,如果c++函数也需要打印日志进行调试,就必须进行额外设置。LOGD,LOGI,LOGE是三种类型的日志,和java日志原型是一一对应的。4.在Java程序中调用jni函数,日志输出结果。3.在jni函数中进行调用。...
原创
发布博客 2022.08.04 ·
54 阅读 ·
0 点赞 ·
0 评论

jni学习2.c++调用java函数

这里需要注意com.example.hello_cmake.TestCallBack是类的完整路径,但是识别的时候是以Linux标准进行的,因此里面的.要替换成/来表示路径。jni函数本身也算是java类的一个成员方法,在调用的时候,需要先实例化TestCallBack类,再进行调用。在java中,类的成员方法必须以实例调用的形式调用,因此必须实例化一个对象,才能调用成员函数add。调用方法的函数参数中,前两个分别为实例与方法的ID,后面的参数则是调用的java方法的参数。第三步:实例化一个对象。.....
原创
发布博客 2022.08.03 ·
92 阅读 ·
0 点赞 ·
0 评论

查看java函数签名

在jni函数开发中需要知道被调用的java函数的函数签名,在android studio内即可完成操作。首先对工程build一下,得到build文件夹。
原创
发布博客 2022.08.03 ·
58 阅读 ·
0 点赞 ·
0 评论

JNI学习1.环境配置与简单函数实现

本文使用的android studio版本是2021年的版本,自android studio之后对JNI的配置就比较简单,因为LLDB已经默认集成到了android studio中。打开SDK manager,在SDK tools里面将NDK与CMake一起下载即可,可以点击右下角的show package details,展示具体的版本进行下载安装。......
原创
发布博客 2022.08.03 ·
91 阅读 ·
0 点赞 ·
0 评论

Android cannot resolve constructor intent解决

intent的原型是Intent(Contextcontext,Classclass),从当前的context跳转到class,问题在于当前的context到底是谁的context。由于监听器是一种内部类,所以在监听器中的this指代的并不是当前的活动,而是当前的监听器。上面的语句我写在了一个button的监听器中,这也是造成错误的原因。该语句的作用为从当前的活动跳转到活动MainActivity2。因此需要将context参数进行正确的定位。...
原创
发布博客 2022.07.31 ·
11 阅读 ·
0 点赞 ·
0 评论

c++ RTTI

RTTI的意思是运行时类型识别,之所以存在这个功能,是因为c++通过父类指针实现多态,父类指针可以指向自己所有的派生类对象,指的多了就会出现问题,程序到某一时刻,父类指针究竟指向哪种派生类对象呢?假设有个父类是Human,子类是Men(毕竟男人属于人类的一种)。通过以上语句,令Human类型的指针指向一个Men对象,Human类中存在虚函数,因此构成了一种多态。但是时间久了,隔了好多行代码,Human这个父类又有一堆子类,因此很容易在某个时间节点搞不清楚当前的*phuman指向的到底是哪种类型,因此需
原创
发布博客 2022.06.20 ·
165 阅读 ·
0 点赞 ·
0 评论

c++读取配置文件

在实际开发中,程序读取配置文件以加载数据非常常见,如何安全高效地读取文件比较重要。本文代码来自于《c++新经典》。 假设有一个txt格式的文件,里面记录了花里胡哨的内容,需要把这些内容一字不差地读取到程序中,应该如何用c++实现?书中的代码如下:结果如下图所示,已经完整地将配置文件的内容打印出来了。 代码使用一个字符数组记录每行内容,为防止读取失败,代码中通过第一位清零并查询的方式检查:如果不需要代码非常严谨,可以将以上的内容从代码中删除。读取一行文本的核心实现是以下代码:fgets函数读
原创
发布博客 2022.06.18 ·
510 阅读 ·
0 点赞 ·
0 评论

ffmpeg+SDL2实现音频播放

本文记录使用ffmpeg+SDL2进行视频文件内的音频播放,注意是播放视频文件内的音频,不是播放音频文件。本文使用的ffmpeg版本为5.0.1,SDL的版本为2.022。c++环境为vs2017。和之前的播放视频或音频明显的区别是,播放视频文件内的音频需要进行重采样操作,代码中会引入重采样结构体SwrContext。重采样结构体能够改变原先音频的采样率、声道数等参数,令各种音频能够按照我们设定的参数进行输出。这样做的原因是不同视频文件内的音频参数通常区别较大,如果分别处理工作量太大,不如将其统一成相同的格
原创
发布博客 2022.06.17 ·
69 阅读 ·
0 点赞 ·
0 评论

SDL2播放pcm音频

作为播放器,只会播放视频还是不行的,因此需要研究一下SDL如何播放音频。SDL播放音频的过程相对于播放视频更为简单,主要流程如下:初始化工作:1.初始化SDL2.根据设定参数打开音频设备循环播放:1.播放音频数据2.延时等待播放完成#include <stdio.h>#include <tchar.h>#include <iostream>extern "C"{#include "SDL.h"};using namespac
原创
发布博客 2022.05.21 ·
77 阅读 ·
0 点赞 ·
1 评论

ffmpeg+SDL2实现播放器(三)

前面的文章中实现一个固定帧率的视频播放器,但是光有播放功能似乎没有那个味道。因此本次增加了暂停/继续功能,按键关闭播放器功能,以及帧率改变功能。PS:实现帧率改变的初衷是改变播放视频的速度,但是总感觉这样的实现方式并不好,因为当你加速播放的时候,一秒内极有可能处理相当多的视频帧,会对播放设备产生明显影响,因此暂时认为对视频的加减速播放应该有更优的方案。整体代码如下:#include<iostream>#include<string.h>#include<SDL
原创
发布博客 2022.05.20 ·
38 阅读 ·
0 点赞 ·
0 评论

ffmpeg+SDL2实现播放器(二)

在上一篇文章中,代码的画面刷新不是定期实现的,这就导致视频的播放速度与实际不符,因此我们需要对其进行修改,使用多线程实现画面刷新的控制。该工程使用的ffmpeg版本为5.01,SDL版本为2.0.22。#include<iostream>#include<string.h>#include<SDL.h>extern "C"{#include "libavformat/avformat.h" //头文件不仅要在项目中鼠标点击配置,在代码中也要引入#in
原创
发布博客 2022.05.13 ·
320 阅读 ·
0 点赞 ·
0 评论

ffmpeg + SDL2 实现播放器(一)

使用的ffmpeg版本为5.0.1,SDL的版本为2.022。c++环境为vs2017。先上最简易的整体代码,初步实现了SDL和ffmpeg的结合。#include<iostream>#include<string.h>#include<SDL.h>extern "C"{#include "libavformat/avformat.h" //头文件不仅要在项目中鼠标点击配置,在代码中也要引入#include "include/libavformat/
原创
发布博客 2022.05.12 ·
425 阅读 ·
0 点赞 ·
0 评论

SDL2画面刷新

学会SDL的事件与渲染机制之后,增加画面刷新机制就可以成为一个播放器了。在上一篇文章中讲过,似乎循环执行SDL_RenderPresent(renderer)就可以令视频逐帧播放了,为什么还要引入刷新机制呢?这是因为在一个循环中,重复执行一个函数的效果通常不是周期性的,因为每次加载和处理的数据所消耗的时间是不固定的,因此单纯地在一个循环中使用SDL_RenderPresent(renderer)会令视频播放产生帧率跳动的情况。因此需要引入一个定期刷新机制,令视频的播放有一个固定的帧率。通常使用多
原创
发布博客 2022.05.11 ·
116 阅读 ·
0 点赞 ·
0 评论

SDL2的渲染

使用SDL2播放视频时需要通过渲染操作令视频的每一帧在窗口的显示。SDL播放视频的流程如下图所示:初始化组件:SDL_Init(); //初始化SDLSDL_CreateWindow(); //创建播放器的窗口SDL_CreateRenderer(); //创建基于窗口的渲染器SDL_CreateTexture(); //创建基于渲染器与视频格式的纹理循环渲染:SDL_UpdateTexture(); //设置纹理的数据SDL_Rende
原创
发布博客 2022.05.10 ·
156 阅读 ·
0 点赞 ·
0 评论

SDL2播放yuv视频文件与事件(event)

1.整体代码先上代码:#include <stdio.h>#include <string.h>#include <SDL.h>//自定义消息类型#define REFRESH_EVENT (SDL_USEREVENT + 1) // 请求画面刷新事件#define QUIT_EVENT (SDL_USEREVENT + 2) // 退出事件//定义分辨率// YUV像素分辨率#define YUV_WIDTH
原创
发布博客 2022.05.10 ·
166 阅读 ·
0 点赞 ·
0 评论

使用ffmpeg指令转换出yuv视频文件

播放器播放的都是经过解码后的视频,也就是yuv格式的视频文件,因此在学习的过程中需要准备一下yuv格式的视频做实验素材,这里演示如何在电脑中使用ffmpeg指令将一个视频文件转换为.yuv格式。1.打开视频文件路径下的shell视频文件一般存放在电脑中任何位置里,因此需要将shell定位到该路径下才能使用命令行。在视频所在的文件夹里按住shift键右键单击空白处,选择“在此处打开powershell窗口”,这样shell就定位到当前位置了。2.使用ffmpeg指令以该文件下的ds
原创
发布博客 2022.05.02 ·
1575 阅读 ·
0 点赞 ·
0 评论

vs配置SDL2.0

这里记录下在vs2017配置SDL2.0。1.下载源文件下载地址如下图所示,注意需要下载visual c++对应的版本。2.解压将文件夹存放在一个不包含中文路径的地方,解压,注意文件夹中只有include文件夹和lib文件夹是我们需要的。3.新建一个vc++项目注意我们使用的版本是x64的,因此在配置过程中所看到的一切“x86”的东西都要改成“x64”。4.右键单击左侧管理器的项目名称(“SDL2Test”),选择属性,进行配置。平台的类型要改成x64..
原创
发布博客 2022.05.02 ·
329 阅读 ·
1 点赞 ·
0 评论

ffmpeg读取packet数据

在ffmpeg中,使用AVPacket结构体表示视频文件中的压缩数据,也就是还未进行解压缩的原始视频帧与音频帧。整体代码如下:#include<iostream>#define __STDC_CONSTANT_MACROSextern "C"{#include "libavcodec/avcodec.h"#include "include/libavformat/avformat.h"#include "include/libswscale/swscale.h"#incl
原创
发布博客 2022.05.02 ·
896 阅读 ·
0 点赞 ·
0 评论
加载更多