- 博客(30)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 ffmpeg + SDL 实现简单的视频播放器
前言本文借鉴了雷神的遗作, 同时对一些已经舍弃的API更新, 加上自己的理解, 实现了一个丐版的视频播放器, 算是对以前学习的复习总结, 本文的demo仅仅能实现视频的播放, 其他播放器功能会逐渐完善。流程图对流程图的若干解释:1, 整体分为三部分, 最左边是为了实现解码FFMPEG), 最右边的是为了实现图形化显示(SDL), 中间是sws_scale部分2. sws_scale 部...
2019-12-11 22:29:41
878
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 SDL实现简单YUV播放器
概述本文借助SDL框架, 实现一个简单的YUV播放器。运行环境:Windows10, Qt5.13, SDL2.1实现功能:空格键控制暂停/继续, ESC退出,z、x、c调整播放速度。PS:SDL入门操练SDL检测按键ffmpeg 制作YUV视频项目实现写在前面的话:对非专业人士来说, 是没有机会接触YUV数据的, 更不会有播放YUV的需求,算是比较小众的了。YUV数据跟平时...
2019-12-08 20:07:05
1037
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 YUV色彩空间浅析
Table of Contents什么是RGB什么是YUVYUV基本概念YUV 和RGB 的转化:YUV 的分类:YUVFormats分成两个格式:YUV采样:YUV格式:YUV444格式:YUV422格式:UYVY422:YUV422P:YUV420P(YU12和YV12)格式YU12格式YV12格式:YUV420SP(NV2...
2019-11-26 13:00:59
8473
原创 Linux 进程间通信(三)信号之概述
前言信号是UNIX/Linux系统响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动。信号的产生有很多中,比如内存段冲突、系统调用, 浮点处理器错误或者非法指令等;需要强调的是, 信号是在软件层次上对中断的一种模拟,所以通常把它称为是软中断(软中断相对应的是硬件中断, 比如CPU的时钟中断);在诸多Linux进程间通信中, 信号是开销最小的一个。信号的机制A给B发送信号,B收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕再继续执行。与
2020-08-14 07:34:30
285
原创 c语言模式匹配路径
引言在Linux 的日常操作中, 经常需要找某个路径下的某个文件夹/文件, 这都是日常操作, 而且是很简单的, find 命令能够完美的搞定!可是如果用C语言怎么实现呢?glob英文语言说明SYNOPSIS #include <glob.h> int glob(const char *pattern, int flags, int (*errfunc) (const char *epath, int eerrno),
2020-07-21 15:24:29
441
原创 c语言删除非空文件夹
rmdirrmdir() 删除空的文件夹unlinkunlink();man page 的解释: unlink() deletes a name from the filesystem. If that name was the last link to a file and no processes have the file open, the file is deleted and the space it was using is made available for r
2020-07-21 14:26:39
2766
原创 google 编码规范
今天发现了谷歌的编码规范, 英文版的大家可以去谷歌官网找, 这里是谷歌提供的中文版https://zh-google-styleguide.readthedocs.io/en/latest/!!包含了:Google C++ 风格指南 Google Objective-C 风格指南 Google Python 风格指南 Google JSON 风格指南 Google Shell 风格指南...
2020-07-05 21:18:07
536
原创 9. 整数转化为其它进制数字
题目把一个整数转换为任意进制(进制小于65, 为什么是36呢, 因为有26个英文字母, 外加0, 1, 2,… 9)解题思路我们首先必须知道进制转化的方法是除基取余, 就是反复的除以进制数, 然后用商作为基数, 继续除以进制数, 直到商为0. 然后逆序的余数就是结果。举个栗子:111 转化为8进制, 111 / 8 = 13 余 7, 也就是111 包含13个整8, 外加一个余数7. 那么很自然的, 7 就是最低位了。13 / 8 = 1 余 5. 也就是对13 来说有一个 整8, 外加余数
2020-07-01 09:18:39
295
原创 8. 判断当前系统是大端对齐还是小端对齐
题目判断当前系统是大端对齐还是小端对齐解析首先需要明白什么是大端对齐,小端对齐。Little-Endian就是数字的低位放内存的低地址端,高位放在内存的高地址端。(为了方便记忆, 我都称小端对齐才是真对齐, 因为小对小, 大对大)Big-Endian就是数字的高位放在内存的低地址端,低位放在内存的高地址端。举一个例子,比如数字int a = 0x12 34 56 78在内存中的表示形式为:1)大端模式:2)小端模式:大端模式和字符串的存储模式有一拼代码实现#include<
2020-06-24 10:45:43
727
原创 7. IP地址整数和字符串之间转换
题目把一个整数转换为点分十进制字符串, 或者把点分十进制字符串转化为整数思路这个主要两点:ip地址 我们看到的都是10.189.132.132这样的, 如果按照字符串来保存, 那就需要15 char, 因为每一section都是0-255, 所以就可以用unsigned char来保存, 一个整数就搞定需要充分理解指针的概念。指针也是有类型的,指针的类型决定了指针的步长错误的代码实现首先一个错误的示范:请大家一定要仔细理解#include<stdio.h>#include&
2020-06-24 09:01:40
2115
原创 6.判断一年是否为闰年
题目键盘输入一个年份, 判断是否为闰年思路普通闰年:公历年份是4的倍数的,且不是100的倍数,为普通闰年。(如2004年就是闰年);世纪闰年:公历年份是整百数的,必须是400的倍数才是世纪闰年(如1900年不是世纪闰年,2000年是世纪闰年);代码实现#include<stdio.h>#include<stdlib.h>int main(){ int a; scanf("%d", &a); if (((0 == a % 4) &a
2020-06-17 10:15:12
356
原创 5. 判断一个数是否为质数(素数)
题目键盘输入一个数, 判断是否为素数思路最直观的想法就是用1-n 中间的数依次除, 有能被整除的那就不是了。这样的时间复杂度是O(n).我们可以总结一下:一个数字, 如果它是两个数字的乘机,那么它的分解因子怎么分布呢?15 = 3 * 5, 3 5 都小于 15/216 = 2 * 8 2 8 小于等于 16/2 这应该就是最极端的了吧综上, 我们就可以只试 2- n/2 之间的数就可以了我们进一步总价一下:16 = 2 * 8= 4 * 4= 8 *
2020-06-17 09:05:07
400
原创 leetCode1: two sum
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路可能很多人首先想到的是遍历,然后再遍历一次, 看有没有等于 target - array[i], 这样时间复杂度是O(n^2)
2020-06-16 19:00:18
123
原创 4. 判断一个整数是否为水仙花数
题目键盘输入一个整数,判断是否为水仙花数思路首先应该知道何为水仙花数:水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。水仙花数就是每一位的三次方相加等于原整数。解题思路就是定义瞎扯淡水仙花数只是自幂
2020-06-16 08:43:10
4178
原创 3. 判断一个字符串是不是回文字符串
题目键盘输入一个字符串, 判断是否是一个回文字符串思路第一位和最后以为对比,第二位和导数第二位对比…把字符串倒序,然后比较。代码思路一#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ char string[128]; bzero(string, 128); scanf("%s", string); int len = strlen(string),
2020-06-15 19:14:40
742
原创 2. 判断一个数字是不是回文数
题目键盘输入一个数字, 判断数字是否为回文数思路想办法把一个数字高低位数对调, 1234 变成 4321;输入数字a, 每次对10取整就截断个位数, 每次对10取余得到个位数, 这样就是一个在一位一位的变大, 一个在逐渐变小代码#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ int a, b, i = 0; scanf("%d", &a); b = a;
2020-06-15 18:54:15
415
原创 1. 求两个整数的最大公约数和最小公倍数
**求两个整数的最大公约数和最小公倍数**思路键盘输入整数a, b, 确保a 是较大的整数;利用辗转相除法求出最大公约数,进而求出最小公倍数。最后用格式输出语句将其输出。代码实现#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ printf("please input two int number\n"); int a, b; int origin
2020-06-11 22:02:14
1879
原创 clearcase 怎么删除hyperlink
问题引出为什么有这么个奇怪的需求呢?本人某次往主分支merge person view 的代码,ctbuild 在打包时候发现有错误, 时间紧急, 就先把代码退回去, 于是就要删除我进的哪一个版本, 错误如下提示已经有hyperLinks, 所以不能删除,需求来了??note: 如果这个文件已经做好了build的准备, 就会有label, 我这个文件没有是因为领导已经帮忙删除了...
2020-01-07 10:12:14
435
原创 av_image_fill_arrays详解
前言在学习ffmpeg 解码的时候, 经常需要用到av_image_fill_arrays这个函数, 其中有一个参数是const uint8_t *src, 之后的逻辑中就没再用了, 我感到很疑惑, 学习了一下源码, 才恍然大悟, 特记录在此, 希望能帮到有同样疑惑的初学者。逻辑上下文申请了一段空间av_image_fill_arrays 调用。申请了一个SwsContext初始化...
2019-12-14 10:03:36
18565
2
原创 SDL检测按键
文章目录preface按键检测基础EVENT基础event类型event结构体代码示例:示例结果preface在使用是视频播放器时, 很少再有人用鼠标去操作暂停、推出这样简单的操作,低效还麻烦, 大家都会用键盘来搞定,比如空格=暂停/继续, ESC=推出。那么如果用SDL实现的播放器是怎么检测哪个键按下去了呢?大家可以直接看代码示例, 前面都是铺垫按键检测基础EVENT基础event类型...
2019-12-08 16:06:23
1721
1
原创 SDL入门操练
概述本文使用SDL作为图形库,实现了在一个界面上, 隔一会就出来一个方块,算是学习SDL图形库的入门, 为了方便, 使用了Qt IDE, 而不是在Linux上构建。对于新手来说,对各个函数的名称, 参数, 作用, 返回值都不熟悉, 借用IDE能显著降低入门难度, 就不要逞能直接在vim里写项目了。项目实现逻辑流程重要控制原语PS:鉴于其他的函数看名字就知道是啥玩意, 在这里就不赘述,只...
2019-12-07 22:33:52
715
1
原创 windows下Qt 配置boost
preface我的配置环境:windows10 + qt5.13+ boost1.71本文着重介绍怎么在Qt上配置使用Boost, 所以就默认大家已经安装配置好了QT!!编译boost库下载boost源码:大家可以在boost官网上下载, 选择需要的版本, 尽量避免使用beta release 版本, 测试版的风险太大, 会出一些莫名其妙的问题, 成了小白鼠。解压下载的源文件到合适的目...
2019-12-06 23:22:23
2736
原创 ffmpeg日志系统
文章目录日志系统PS:使用一般步骤:设置日志级别常用的日志级别获取当前日志级别日志输出函数自定义log输出函数把日志输出到日志文件:日志系统PS:在当前的计算机系统中, I/O操作相比其它环节是最耗费资源浪费时间的,所以大家要慎重, 尽量减少不必要的I/O操作。使用一般步骤:头文件: #include <libavutil/log.h>设置log级别: av_l...
2019-12-05 22:42:24
445
原创 ffmpeg 分离视频中的YUV分量
#include <iostream>#ifdef __cplusplusextern "C" {#include <libavcodec/avcodec.h>#include <libavutil/avutil.h>#include <libavutil/imgutils.h>#include <libavformat/avfor...
2019-11-25 09:53:02
2630
原创 sed 入门到提高
声明: 以下所有的操作, 博主本人均在阿里云(ubuntu 18.04)上验证过, 可能不同的系统有些许差异, 还望大家学以致用。本人能力有限,资历尚浅,若有错误,请轻点拍砖,若有建议, 不胜感激!!!目录工作原理参数说明动作说明追加基础提高替换基础删除基础提高插入打印基础提高替换基础提高1 .保留精确匹配到的部分...
2019-11-16 20:55:24
969
3
原创 vim 入门到提高
summaryvim基础常用的设置基础操作:光标的转移:删除操作复制操作Vim进阶1.自动推断2. 跳转3. 列模式:4.录制宏5. vimdiffvim基础常用的设置ps: vim的设置, 针对当前用户的设置, 需要修改~/.vimrc, 如果没有可以自行创建 针对所有用户...
2019-11-13 17:55:26
1068
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人