- 博客(27)
- 资源 (16)
- 收藏
- 关注
原创 FFMPEG函数之avformat_open_input
在进行输入和输出转码的过程中,会使用一个函数:int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)其目的是打开流,并通过filename来初始化AVFormatContex
2017-11-07 14:11:30
928
原创 Android蓝牙BLE应用的开发
1、检查设备是否支持蓝牙设备:PackageManager pm = getPackageManager();Bool bsupport = pm.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE);if(bsupport)Logd(TAG,“blue tooth has exist”);ElseLogd(TAG,”
2017-06-09 14:55:07
486
原创 Linux下SPI驱动的分析
1、platform_device 和 platform_driver之间的关系:platform_device 是板卡信息,可能有的板卡有SPI控制器,但没有使用SPI总线的时候,就会存在platform_device中没有SPI相关的板卡信息。这样系统就不会加载SPI驱动到系统中。板卡相关的信息一般在目录arch/arm/下(以S3C6410为例,arch\arm\plat-s5p\dev
2017-03-01 15:19:03
622
原创 C++实现类JAVA的线程类的开发
最近在学习JAVA的编程,发现java真的很好很好。封装的类,使用起来实在是太方便了。特别是在用到了java的多线程编程的时候,真的让人耳目一新,然后就自己寻思是否可以在linux上使用c++来封装一个类似java的线程类呢?于是就开始动手了。#include #include using namespace std;class Thread{private: pthread_
2017-03-01 15:04:21
598
原创 单片机上实现内存池的功能
#define MAX_ALLOC_NUM32 //最多可申请的内存块数。#define MEM_PAGE_SZ32 //一页内存的字节数。(分配的最小单位为page)#define MEM_BLK_NUM2 //可供分配的块数量。(一个块2048byte字节)//内存池的块typedef struct mem_block{unsigned c
2016-11-21 15:29:01
1243
原创 判断一个时间点是否在一个时间段的方法
判断时间点是否在时间段有两种方法:一种是计算出当前时间的秒数来判断,即从00:00:00为起始值,所经历的秒数。如 08:10:10,那么从00:00:00开始所经历的秒数为 8*60*60+10*60+10 = 29410s;所以判断一个时间点是否在一个时间段内,就可以从所经历的秒数来判断得到。其中需要注意的是,当起始大于结束时间时,需要做一些处理。如起始时间22:00:00
2016-07-06 11:39:18
9970
原创 c++中的回调函数的实现
因为一直做底层的缘故,一直对回调函数的使用只限与C。但现在开始使用C++开始编程的时候,发现实现回调比较困难,因为要传入的函数必须是静态的。本来使用C++就是为了使用其面向对象的特性。但是要现在这样使用回调,感觉又走入了以前的老路。这是我使用C方式实现的函数指针:#include using namespace std;typedef void (*pFunction)(v
2016-05-20 18:22:45
551
原创 面向对象学习记录(一)
首先得说说的经历,我是一个嵌入式软件开发工程师,属于偏底层的软件工作。大多是直接和硬件打交道。比如单片机啊,ARM啊等等。所以在我的心里,面向过程的是思想是根深蒂固的。在没有接触面向对象以前,总觉得面向过程是最好的,对面向对象是嗤之以鼻的。但在工作的过程中,慢慢的发现了C不能解决的问题,就是重用性。如果我们C的水平足够高,也许我们只要拷贝 和粘贴就可以了。但是在大多数情况下,是需要进行更改的。所以
2016-05-14 11:12:26
322
原创 循环队列和链表队列代码
链表实现的队列/************************************************file : queue_link.h************************************************/#ifndef QUEUE_LINK_H_#define QUEUE_LINK_H_#include "ringQueue.
2015-02-14 12:28:16
465
原创 lwip驱动的分析(基于LPC17XX)
首先需要说明的是这个驱动是基于LPC17XX 的芯片。很多代码会涉及到lpc17xx mac寄存器的操作。驱动文件名:LPC18xx_43xx_emac.c先看下结构体lpc_enetdata_t信息:/* LPC EMAC driver data structure*/typedef struct { /* prxs must be 8 bytealigned!
2015-02-14 11:15:54
1601
原创 lwip的架构分析(基于LPC17xx)
首先,此文是为了给自己再次整理自己思路的文档,其次也希望能帮助到其他人。LWIP开源的TCP/IP协议栈的架构分析。主要讲述了系统整个运行的基本流程和原理,对于准备开始学习lwip的同学会有很大的帮助。
2015-02-14 11:08:52
1988
原创 Linux之NiosSOC创建
1、Nios系统的构成:(1) epcs_flash控制器;(2) SDRAM控制器(SDRAM需要大于8MB);(3) Jtag_uart控制器;(4) Timer定时器(必须为全功能的定时器);(5) UART串口控制器(不是必须的);(6) Sysid在EDS中运行时需要添加此外设;(7) Triple_speed_ethernet以太网设备(不是必
2013-09-11 22:25:13
816
原创 mpegts代码分析
因为TS流的复用和解复用是通过一个结构体 AVInputFormat 传递给解复用器的。所以重点分析该结构体提供的外部接口:AVInputFormat mpegtsraw_demuxer = { "mpegtsraw", NULL_IF_CONFIG_SMALL("MPEG-2 raw transport stream format"), sizeof(MpegTSCo
2013-09-10 18:56:14
1372
原创 mpegts.c文件分析
1. 综述ffmpeg框架对应MPEG-2 TS流的解析的代码在mpegts.c文件中,该文件有两个解复用的实例:mpegts_demuxer和mpegtsraw_demuxer,mpegts_demuxer对应的真实的TS流格式,也就是机顶盒直接处理的TS流,本文主要分析和该种格式相关的代码;mpegtsraw_demuxer这个格式我没有遇见过,本文中不做分析。本文针对的ffmpeg的版本
2013-09-09 16:55:07
944
转载 FFplay的一些接口函数
muxer/demuxer和encoder/decoder在FFmpeg中的实现代码里,有许多相同的地方,而二者最大的差别是muxer和demuxer分别是不同的结构AVOutputFormat与AVInputFormat,而encoder和decoder都是用的AVCodec结构。这个需要认识清楚。1.// Open video fileav_open_input
2013-09-09 16:09:10
1394
原创 ffplay程序运行流程分析
1、main()开始:分别注册编解码器,复用以及解复用器avcodec_register_all(); //register codecavdevice_register_all();av_register_all(); //register demux and mux接着就是一些分配内存空间的代码代码 略parse_options(argc, argv, op
2013-09-06 17:11:52
1710
转载 ffmpeg结构体以及函数介绍(三)
1 AVPackettypedef struct AVPacket { /** * Presentation timestamp in AVStream->time_base units; the time at which * the decompressed packet will be presented to the user. * C
2013-09-06 15:41:51
542
转载 ffmpeg结构体以及函数介绍(一)
本文对在使用ffmpeg进行音视频编解码时使用到的一些函数做一个简单介绍,我当前使用的ffmpeg版本为:0.8.5,因为本人发现在不同的版本中,有些函数名称会有点小改动,所以在此有必要说明下ffmpeg的版本号。 ffmpeg本人也是刚接触,本文将采用累加的方法逐个介绍我使用到的函数,如有不妥之处,还望谅解! 头文件引入方法:extern "C"{#inclu
2013-09-06 15:41:46
622
转载 ffmpeg结构体以及函数介绍(二)
1 avcodec_find_decoder()/** * Find a registered decoder with a matching codec ID. * * @param id CodecID of the requested decoder * @return A decoder if one was found, NULL otherwise. */
2013-09-06 15:41:10
589
转载 ffmpeg分析系列之七(打开输入的流)
err = av_open_input_stream(ic_ptr, pb, filename, fmt, ap);int av_open_input_stream(AVFormatContext **ic_ptr, // 输出参数: 格式上下文ByteIOContext *pb, // 字节IO上下文const char *file
2013-09-06 15:12:40
983
转载 ffmpeg分析系列之六(再次探测输入的格式)
void *logctx= ap && ap->prealloced_context ? *ic_ptr : NULL; // 因为 ap == NULL, 所以 logctx 也 == NULL. if (!fmt && (err = ff_probe_input_buffer(&pb, &fmt, filename, logctx, 0, logctx ?
2013-09-06 15:10:59
751
转载 ffmpeg分析系列之五(打开输入的文件)
1. 打开文件:if (!fmt || !(fmt->flags & AVFMT_NOFILE)) { 因 fmt == NULL, 上面成立, 再看下面的代码: ByteIOContext *pb = NULL; // 字节IO上下文
2013-09-06 15:09:06
718
ffmpeg分析系列之六(再次探测输入的格式)
void *logctx= ap && ap->prealloced_context ? *ic_ptr : NULL; // 因为 ap == NULL, 所以 logctx 也 == NULL. if (!fmt && (err = ff_probe_input_buffer(&pb, &fmt, filename, logctx, 0, logctx ?
2013-09-06 15:08:37
552
转载 ffmpeg分析系列之四(探测输入的格式)
调用av_open_input_file(&pFormatCtx, is->filename, NULL, 0, NULL)函数打开输入的文件.1. 分析一下函数原型:int av_open_input_file(AVFormatContext **ic_ptr, // 输出参数: 格式上下文 const char *filename
2013-09-06 15:00:15
976
转载 ffmpeg分析系列之三(输入输出格式)
探测数据结构:/** This structure contains the data a format has to probe a file. */typedef struct AVProbeData { const char *filename; unsigned char *buf; /**< Buffer must have
2013-09-06 14:58:22
933
转载 ffmpeg分析系列之二(文件协议)
URL协议结构:URLProtocol,URLContext和ByteIOContext是FFMpeg操作文件(即I/O,包括网络数据流)的结构,这几个结构现实的功能类似于C++的多态继承吧,C++的多态是通过子类继承实现,而FFMpeg的“多态”是通过静态对像现实。这部分的代码非常值得C程序借鉴,我是说,如果你要在C里实现类似C++多态性的功能;比如当你要区分你老婆和情人之间的不同功能时。
2013-09-06 14:52:19
761
转载 ffmpeg分析系列之一(注册编解码器)
一. 调用av_register_all函数注册所有的格式和编码解码器.1.1 先调用avcodec_register_all函数注册所有的编码解码器.1. 下面列出与H264相关的注册: // 注册硬件加速器 REGISTER_HWACCEL (H264_DXVA2, h264_dxva2); RE
2013-09-06 14:26:53
1544
学习MPEG-2的笔记
2013-10-25
nios上的i2c_master外设
2013-03-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人