- 博客(6)
- 收藏
- 关注
原创 QT-c++使用FFMpeg库实现音视频同步的方法
使用SwrContext进行音频重采样,将解码后的音频数据转换为适合播放的格式。时间戳计算:FFMpeg中的时间戳是以时间基(AVRational)为单位的,需要使用av_q2d函数将其转换为秒。线程安全:在实际应用中,音频和视频的解码和播放可能需要在不同的线程中进行,以避免阻塞主线程。错误处理:FFMpeg的函数调用可能会返回错误码,需要进行适当的错误处理,确保程序的健壮性。的方式,即以音频的播放时间为基准来调整视频的播放。以音频的播放时间为基准,调整视频帧的显示时间。// 查找音频和视频解码器。
2025-04-11 09:15:00
543
原创 基于QT ffmpeg多媒体播放器项目(一)
FFmpeg 是一个开源的多媒体处理库,广泛用于音视频的编码、解码、转码、处理和流媒体传输等任务。创建一个新的视频流,并设置其参数。通常需要设置视频的宽、高、帧率、比特率等参数。在使用 FFmpeg 库之前,需要先初始化相关的模块。avformat_alloc_output_context2 函数。avcodec_parameters_to_context 函数。遍历 formatContext 中的流列表,找到视频流。从解码后的帧中读取数据并进行编码。从找到的视频流中获取编解码器参数。
2025-04-10 09:15:00
1187
原创 ioremap,中断,上半部&下半部(tasklet, workqueue, jiffies)
timer_setup() 是一个存在于 Linux 内核中的函数,通常用于设置内核定时器。当驱动程序需要访问硬件设备的寄存器时,通常会使用 ioremap 将寄存器所在的物理地址映射到内核虚拟地址空间,然后通过虚拟地址进行读写操作。中断:通过 request_irq 申请中断,并在 struct irqaction 中注册中断处理程序。:一个指向设备特定数据的指针,通常用于区分多个设备共享同一个中断的情况。缓存一致性: 对于一些硬件设备,可能需要禁用缓存或使用特定的内存类型,以确保数据的一致性。
2025-03-09 16:00:00
1680
原创 内核设备字符框架
define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS)) // 获取主设备号。以下是一个简单的字符设备驱动程序示例,展示了如何注册和注销设备号、创建和添加字符设备,并在读写操作中进行用户空间和内核空间的数据拷贝。这个示例代码展示了如何创建一个简单的字符设备驱动程序,包括设备号的注册和注销、字符设备的创建和添加、以及读写操作中的数据拷贝。这将在 /dev 下创建一个名为 haha0 的字符设备文件,主设备号为250,次设备号为0。
2025-03-09 12:13:54
1535
原创 内存映射,平台设备框架,平台设备和驱动分开, 平台设备添加资源
平台设备:通过 platform_device_register 注册,platform_device_unregister 注销。平台驱动:通过 platform_driver_register 注册,platform_driver_unregister 注销。平台设备框架是嵌入式 Linux 系统中管理片上设备和外设的重要机制,通过它,设备和驱动可以独立开发,并通过总线进行自动匹配。平台设备框架提供了一种抽象层,使得设备驱动程序可以与设备独立开发,并通过总线(平台总线)进行匹配和交互。
2025-03-09 12:01:52
1610
原创 阻塞、非阻塞、poll机制、异步详解
4.wake_up可以唤醒TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE,因为TASK_NORMAL == TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE。这个函数在处理文件描述符的异步 I/O 时非常有用,它可以将文件描述符加入或移出异步通知队列。,wait_event设置状态为TASK_UNINTERRUPTIBLE,而wait_event_interruptible设置状态为TASK_INTERRUPTIBLE。
2025-03-09 11:51:24
573
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人