- 博客(119)
- 资源 (24)
- 收藏
- 关注
原创 Makefile 中开启 GDB 调试
通过这种方式,你可以确保生成的可执行文件能够被 GDB 正确调试。应该添加到编译阶段的编译选项(中开启 GDB 调试时,-g。),而不是链接阶段的链接选项(,说明调试信息已正确包含。
2025-03-24 10:38:11
265
原创 STL容器跨模块使用风险
在不同版本的 Visual Studio(VS)中调用该接口时,若为封闭项目,强制统一编译环境是最简单的方式。,尤其是当接口参数涉及STL容器(如。:若需跨不同VS版本调用接口,
2025-03-20 15:04:38
420
原创 STL容器跨模块使用的风险
即使在PIMPL模式中,如果头文件的接口参数仍然包含STL容器(如std::string和std::vector),还是可能导致ABI兼容性问题。此例中就未解决问题!如果两个模块(如动态库和可执行文件)的ABI不兼容,即使它们的源代码兼容,编译后的二进制文件也可能无法正确协同工作。:减少头文件依赖,但接口参数仍需处理STL的ABI问题。在头文件中隐藏STL容器的使用,仅暴露实现类指针。例如一个日志库的头文件接口参数有 STL 容器。
2025-03-20 14:54:59
598
原创 【C++】基于范围的for循环(range-based for loop)
在 C++ 中, 是一个动态数组,用于存储同类型元素的序列。当你向 中添加元素时(通常通过 方法),元素是按照你添加它们的顺序排列的。具体来说:顺序添加:每次调用 或其他插入方法(如 )时,新元素会被添加到 的末尾。因此, 中的元素顺序与你添加它们的顺序一致。内存布局: 在底层通常使用连续的内存块来存储元素,这意味着所有元素在内存中是连续排列的。这与链表等数据结构不同,链表中的元素在内存中不一定是连续的。性能考虑:当 的容量不足以容纳新元素时,它会自动分配一个更大的内存块,并将现有元素复制到新的内
2025-03-04 17:14:15
663
原创 【C++】switch 语句编译报错:error: jump to case label
switch这个错误是由于switch语句中局部变量的作用域问题导致的。通过限制局部变量的作用域、将变量定义移到switch之前,或者使用if-else替代switch,都可以解决这个问题。推荐使用方法 1,因为它既保持了代码的清晰性,又避免了潜在的错误。
2025-03-04 13:57:24
289
原创 【Makefile】介绍 Makefile 增量编译
增量编译的原理make如果目标文件不存在,则编译。如果目标文件存在,但依赖文件比目标文件新(即依赖文件被修改过),则重新编译。如果目标文件存在,且依赖文件没有更新,则跳过编译。通过合理配置Makefile的依赖关系和规则,可以实现增量编译。
2025-02-27 14:56:00
673
原创 【Linux】修改 core 文件大小和路径
在 Linux 系统中,默认情况下,核心转储文件(core dump)会生成在当前工作目录下。为了将核心转储文件生成在指定路径下,可以通过以下方法进行配置。
2025-02-27 14:46:53
741
1
原创 图像缩放(放大和缩小)对图像质量的影响
缩小图像:主要问题是细节丢失和锯齿效应。放大图像:主要问题是模糊、块状效应和细节失真。算法选择:不同的缩放算法对图像质量的影响不同,需根据需求选择合适的方法。通过合理选择缩放算法和工具,可以最大限度地减少缩放对图像质量的影响。
2025-02-25 16:28:15
1030
原创 【ISP】畸变校正 LDC
LDC 是 ISP 中重要的图像处理模块,用于校正镜头畸变,提升图像质量。通过数学模型和硬件加速,LDC 能够高效地处理各种类型的畸变,广泛应用于手机、车载、安防等领域。随着技术的发展,LDC 将更加智能化和自适应,为用户提供更高质量的视觉体验。
2025-02-25 16:26:37
425
原创 【C++】在 C++ 中,如果一个类有虚函数(即它是一个多态基类),那么它应该有一个虚析构函数
如果一个类有虚函数,那么它应该有一个虚析构函数。虚析构函数确保在通过基类指针删除派生类对象时,能够正确调用派生类的析构函数,避免内存泄漏。在你的类中,只需将析构函数声明为虚函数即可解决问题。如果你遵循这个规则,可以避免因多态行为导致的内存泄漏问题。
2025-02-20 18:46:32
368
原创 硬件 RGA
硬件 RGA 是一种高效的图像处理加速器,广泛应用于视频编解码、摄像头处理、图形显示和图像处理等领域。它通过硬件加速显著提升了图像处理的性能,同时降低了 CPU 和 GPU 的负载。是一种专门用于图像处理的硬件加速器,通常集成在 SoC(System on Chip)中,用于高效处理图像缩放、旋转、格式转换、合成等操作。RGA 通过硬件加速显著提升了图像处理的性能,同时降低了 CPU 和 GPU 的负载。RGA 通常通过驱动程序或库提供编程接口,开发者可以通过这些接口调用 RGA 的功能。
2025-02-17 14:05:18
956
原创 图像处理之CSC
在图像处理中,通常需要将图像从一种色彩空间转换到另一种色彩空间(例如从 RGB 转换到 YUV),以便对亮度、饱和度、对比度和色度等参数进行独立调整。这些调整通常是在 YUV 或 YCbCr 色彩空间中进行的,因为这些色彩空间将亮度和色度分离,便于单独处理。亮度、饱和度、对比度和色度是图像处理中的核心参数,它们与 CSC(色彩空间转换)密切相关。(色彩空间转换)的缩写,它涉及图像处理中的亮度、饱和度、对比度和色度等参数的调整。这些参数是图像处理中的核心概念,通常用于描述和操作图像的颜色信息。
2025-02-17 09:12:23
350
原创 HDMI、MIPI、DP的区别和用途
HDMI是高清多媒体接口(High Definition Multimedia Interface)的简称,是一种全数字化视频和声音发送或接收接口,可以发送未压缩的音频及视频信号。
2024-12-25 14:11:00
933
原创 【C++】无参数构造函数 由谁来生成定义?
需要注意的是,编译器生成的这些特殊成员函数通常是“浅拷贝”或“浅赋值”,这意味着它们只复制或赋值对象的成员变量,而不会复制或赋值对象可能拥有的任何动态分配的资源(如指针指向的内存)。因此,对于MyClass2类,编译器会生成默认的拷贝构造函数、赋值运算符和析构函数,但不会生成默认构造函数和移动相关的特殊成员函数(除非类的定义发生变化,使得这些函数的自动生成变得合适)。此外,从C++11开始,编译器还会考虑生成移动构造函数和移动赋值运算符,但这些函数通常只在类的成员变量也支持移动语义时才会自动生成。
2024-12-17 15:14:25
986
原创 【Makefile】编译日志之输出重定向符号 >
标准输出和标准错误都被重定向到文件中。:只有标准输出被重定向到文件中,标准错误仍然会在控制台上显示。选择哪种方式取决于你的需求。如果你希望同时记录正常输出和错误信息,可以使用第一个命令;如果你只关心正常输出,可以使用第二个命令。使用指定的Makefile文件进行编译。将所有正常的编译输出(标准输出)和错误信息(标准错误)都重定向到文件中。这样做的好处是,你可以方便地查看和分析编译过程中的所有输出信息,而不需要分别查看标准输出和标准错误。覆盖模式每次运行时会覆盖文件的内容。追加模式。
2024-12-09 10:50:55
1199
原创 【ALSA】snd_pcm_avail 接口
是 ALSA(Advanced Linux Sound Architecture)库中的一个函数,用于获取 PCM(Pulse Code Modulation)设备环形缓冲区中可用的音频数据量。这个函数对于音频播放和录音应用来说非常重要,因为它允许应用程序了解还有多少音频数据可以被写入缓冲区(对于播放)或者还有多少音频数据可以从缓冲区中读取(对于录音)。:指向一个打开的 PCM 设备句柄的指针。这个句柄是通过调用函数获得的,并且指向了特定的音频设备。函数返回一个。
2024-12-06 15:36:57
746
原创 【OpenCL】多线程绘图时,clFinish 返回错误 CL_INVALID_COMMAND_QUEUE
在多线程环境中,每个线程应该拥有自己的独立命令队列。如果你在多个线程中共享同一个命令队列,可能会导致冲突和错误。确保你的 OpenCL 上下文和设备在所有线程中都是正确配置的。,通常是由于命令队列在多个线程之间共享或使用不当导致的。的命令队列对象在当前线程的上下文中是无效的。以下是一个简单的示例代码,展示了如何在多线程环境中创建和使用命令队列,并确保。以下是一个简化的示例,展示了如何在多线程环境中正确使用。确保命令队列在其整个生命周期内都是有效的。错误的问题,确保命令队列的正确使用和管理。
2024-11-29 14:21:27
909
原创 【OpenCL】 clFinish 返回错误 CL_INVALID_COMMAND_QUEUE
在 OpenCL 中,当clFinish函数返回错误时,这表示传递给clFinish的命令队列对象无效。:如果传递给clFinish的命令队列对象已经被释放(例如,通过调用),那么再次尝试使用该命令队列将导致错误。:如果传递给clFinish的是一个未初始化或已经被篡改的命令队列句柄,那么它也会被认为是无效的。:命令队列与其关联的 OpenCL 上下文之间的关系可能已被破坏。例如,如果上下文已被释放,但命令队列仍在使用,这也可能导致此错误。
2024-11-29 11:07:49
1081
原创 SVN小乌龟 create patch 和 apply patch 功能
这两个功能在处理代码更改和分享这些更改时非常有用。通过创建补丁,你可以轻松地分享你的更改给团队成员或外部贡献者,而无需让他们直接访问仓库。通过应用补丁,你可以轻松地将这些更改合并到你的本地版本中,从而保持代码的同步和更新。
2024-10-18 10:11:47
897
2
原创 OpenGL 和 Direct3D 11 区别
OpenGL是一种跨平台的图形渲染API,由Khronos Group组织维护。提供了一系列函数和接口,用于实现2D和3D图形的绘制、渲染和交互。是Microsoft开发的图形API,属于DirectX API系列中的一部分。主要用于Windows平台和Xbox游戏主机,实现高性能的2D和3D图形渲染。
2024-10-18 10:09:14
1929
原创 DirectX 11 和 Direct3D 11 的关系
DirectX 11是微软的一项技术,为高性能游戏和复杂图形程序制定了标准。它是DirectX系列的一个版本,引入了多项创新功能,如硬件加速的Tessellation(细分曲面技术)、多线程渲染等,这些特性共同提高了游戏的图形质量和流畅度。DirectX 11不仅关注图形渲染,还包括音频、输入设备等多个方面,是一个综合性的多媒体编程接口。综上所述,DirectX 11和Direct3D 11在范围和功能上存在差异。而Direct3D 11则专注于3D图形渲染,是DirectX 11中的一个核心组件。
2024-10-18 10:08:23
958
原创 DirectDraw和Direct3D的区别
DirectDraw和Direct3D都是Microsoft DirectX API的重要组成部分,但它们在功能和用途上存在显著的差异。
2024-10-18 10:06:42
829
原创 int vprintf(const char *format, va_list ap)
是 C 标准库中的一个函数,用于打印格式化的输出到标准输出流(通常是控制台或终端)。函数接受一个格式字符串和可变数量的参数。下面是一个简单的例子,演示了如何使用。和相关的宏来处理这些参数,并通过。操作的,用于访问可变数量的参数。并传递了格式字符串和两个参数。类型的参数,该参数是通过宏。将它们打印到标准输出。
2024-10-16 16:58:26
374
原创 C/C++ 获取 linux 的所有 USB声卡ID及其信息
popen()在 Linux 下,要获取 USB 声卡的 ID 和名称信息,通常你需要结合多个系统命令和接口,因为 C/C++ 标准库本身并不直接提供这样的功能。下面我将给出一个大致的方向,展示如何通过执行系统命令或使用 Linux 特有的库来实现这一目标。
2024-09-04 11:24:08
1468
1
原创 音频PCM的能量dB计算
音频PCM(脉冲编码调制)数据转换为分贝(dB)的计算涉及两个主要步骤:首先计算音频信号的均方根(RMS)值,然后将RMS值转换为分贝。
2024-08-29 14:51:21
3139
原创 查看 linux 系统信息
综上所述,Linux系统提供了多种方式来查看GPU信息,包括命令行工具和图形界面程序。根据具体的显卡型号和需求选择合适的命令,可以有效地了解GPU的状态和性能。综上所述,通过这些命令,可以方便地查看Linux系统的基本信息、硬件配置、内存使用、进程状态、网络连接等各方面的详细信息。这可以提供关键的系统配置和状态信息,帮助用户和管理员对系统进行监控、诊断和优化。这些工具不仅能够显示GPU的基本信息,还能显示实时的使用状态和性能数据。对于不同的显卡品牌和型号,有不同的具体命令可以使用。
2024-08-29 14:21:26
2653
原创 线程栈和函数栈
线程栈是每个线程私有的内存区域,用于存储该线程执行时的局部变量、函数参数、返回地址和调用栈等信息。函数栈(或调用栈)是一个更抽象的概念,用于描述函数调用的层次关系,实际上是线程栈中的一个动态变化的部分。在实际编程中,我们通常不需要直接操作线程栈或函数栈,因为这些都是由操作系统和运行时环境自动管理的。但是,了解这些概念对于理解程序的执行流程和调试程序中的错误是非常有帮助的。此外,在编写多线程程序时,还需要特别注意线程栈的使用和管理,以避免出现数据竞争和死锁等问题。
2024-08-29 14:18:49
1034
原创 DESKTOPHORZRES 和 HORZRES
因为桌面是屏幕上的一个主要界面,它占据了屏幕的大部分或全部区域,所以桌面的分辨率通常与屏幕的分辨率相匹配。然而,在某些特殊情况下,如使用多显示器设置时,整个桌面的水平分辨率可能会是多个显示器水平分辨率的总和或某种组合。,并且它在你的环境中有效,那么它可能是某个特定库、框架或项目定义的一个宏或常量,用于封装或简化获取桌面分辨率的过程。屏幕的当前水平分辨率和整个桌面的水平分辨率在大多数情况下是相同或紧密相关的,但也有一些细微的差别和特殊情况需要注意。用于获取与指定设备上下文相关的水平分辨率,而。
2024-08-29 14:15:11
598
原创 并发 和 并行 的区别
理解并发和并行的区别对于设计和实现高效的程序至关重要。在许多情况下,我们需要根据任务的特性和可用的硬件资源来选择合适的并发或并行策略。
2024-08-29 14:07:23
526
原创 pthread_exit 介绍
是 POSIX 线程(pthread)库中用于终止线程执行的一个函数。当一个线程调用时,它会立即停止执行当前线程的代码,并允许其他线程继续执行。与进程退出时调用exit或_exit不同,只影响调用它的线程,而不影响整个进程或进程中的其他线程。
2024-08-29 14:05:14
562
原创 GetDC 使用注意
或者,可以使用内存设备上下文(Memory Device Context)或缓存设备上下文(Cached Device Context),这些方式可以在内存中模拟设备上下文,从而避免直接访问实际的设备上下文。然而,需要注意的是,频繁地在不同的线程之间切换设备上下文可能会导致性能问题。在多线程应用程序中,如果需要在不同线程中使用设备上下文进行绘图操作,通常的做法是在每个线程中分别获取自己的设备上下文句柄。综上所述,方案二在资源管理方面是安全的,但方案一由于存在资源泄漏和程序无响应的问题,因此是不推荐的。
2024-08-29 11:25:22
957
原创 GetDC ReleaseDC CreateCompatibleDC CreateCompatibleBitmap SelectObject DeleteDC DeleteObj
GetDCReleaseDCDeleteDC这些函数是Windows编程中用于图形设备上下文(Device Context, DC)和位图(Bitmap)操作的API函数,它们通常在使用GDI(图形设备接口)进行绘图时会被用到。此函数获取指定窗口(hWnd)的设备上下文(DC)。设备上下文是一个包含绘图表面的信息的数据结构,比如屏幕的像素格式、颜色管理能力等。通过DC,应用程序可以在窗口上绘制图形。释放之前通过GetDC函数获取的指定窗口(hWnd)的设备上下文(hDC)。
2024-08-29 10:45:54
1144
原创 G722.1.C简单介绍
这些编码参数决定了编码后的数据量和音质水平,低码率适用于带宽有限的环境,而高码率则能提供更高的音质。:G722.1.C采用变换域编码方法(如MLT,即Modulated Lapped Transform),这种方法通过将音频信号从时域转换到变换域(如频域),利用音频信号在变换域中的稀疏性进行压缩,从而实现高效的编码。(注意,通常不直接提及G722.1.C,因为G722.1本身就是一个标准的音频编码算法,G722.1.C并不是一个广泛认知的标准名称,可能是对G722.1的某种变体的特定引用)
2024-08-29 10:05:53
1159
原创 G722.1.C有三种编码参数 24kbps、32kbps、48kbps,但解码时能自动识别出码率参数,不需要外部设置参数
对于“G722.1.C有三种编码参数 24kbps、32kbps、48kbps,但解码时能自动识别出码率参数,不需要外部设置”这句话,我们可以从以下几个方面进行分析:综上所述,“G722.1.C有三种编码参数 24kbps、32kbps、48kbps,但解码时能自动识别处码率参数,不需要外部设置”这句话是正确的。解码器能够自动识别编码时所使用的码率参数,并据此采用相应的解码算法和策略来恢复出高质量的音频信号。
2024-08-29 09:51:05
457
原创 C/C++ 线程局部存储(TLS)
在C或C++中,线程局部存储(Thread-Local Storage,简称TLS)是一种用于存储线程特有数据的方法。这意味着每个线程都可以访问它自己的变量实例,而不会影响到其他线程中的同名变量。这在多线程程序中非常有用,因为它可以避免对共享数据的竞争和同步开销。C++11引入了关键字来简化线程局部存储的使用。在C中,则需要依赖操作系统或编译器提供的特定机制,如GCC的__thread关键字。
2024-08-21 14:13:52
711
原创 C/C++ 线程的创建和释放
在这个示例中,我们创建了一个新线程,该线程执行MyThreadFunction函数。然后,我们使用WaitForSingleObject等待线程完成。最后,我们使用CloseHandle关闭线程句柄。CreateThread、WaitForSingleObject和CloseHandle是Windows操作系统中用于线程管理的三个函数。在这个示例中,我们创建了 5 个线程,每个线程都执行。是用于创建和等待线程完成的函数。
2024-07-29 11:22:25
1276
2
原创 std::string 介绍
是 C++ 标准库中提供的一个类,用于表示和操作可变长度的字符串。它封装了字符数组,提供了丰富的成员函数来执行字符串的各种操作,如插入、删除、查找、替换、比较等。使得处理字符串变得更加安全和方便,因为它自动管理内存,避免了传统 C 风格字符串中的缓冲区溢出等问题。
2024-07-22 15:47:03
1308
原创 应用进程、SurfaceFlinger进程、HWC进程 之间的关系
应用进程、SurfaceFlinger进程和HWC进程之间的关系和通信流程是Android图形显示系统的重要组成部分。应用进程通过Surface接口管理UI数据,并通过Binder IPC机制将数据传递给SurfaceFlinger。SurfaceFlinger作为中枢通路,负责将多个应用进程的UI数据合成为一个画面,并与HWC协商确定显示策略。HWC则负责与底层硬件进行交互,优化显示性能。这三个进程协同工作,共同完成了Android系统的图形显示任务。
2024-07-03 15:24:18
907
1
原创 使用 Python2.7 抓取 systrace 文件
1、安装python 2.72、打开cmd执行命令安装python包:pip install pypiwin323、解压six-1.16.0.tar.gz,进入目录用命令安装six:python setup.py install4、adb 连接设备:adb connect x.x.x.x:55555、进入目录systrace,执行命令:python systrace.py -t 10 -o systrace.html。
2024-07-03 14:37:17
933
C++ and the Perils of Double Checked Locking.zip
2021-07-22
Windows Media ASF View 9 Series 1.0
2018-11-07
发包工具(内有使用文档)
2018-10-26
《提高C++性能的编程技术(译本)》.pdf (译:左飞)
2018-10-26
C++设计模式(经典版).pdf
2018-10-15
《Windows核心编程(第5版)》pdf(高清电子版+有目录)
2018-08-16
Windows程序设计(第五版).pdf (高清电子版+有目录)
2018-08-16
DXVA Checker v4.0.0(显卡硬件加速检测工具)
2018-08-16
MediaInfo (音视频文件检测)
2018-08-16
Intel_Media_SDK_2017_R1.msi
2018-08-16
yuvplayer.exe (YUV序列播放器)
2018-08-16
GitlHEVCAnalyzer_win32_v1.5.1(H265码流分析工具)
2018-08-16
Visual_Assist_X_10.9.2089_Crack(完美破解版)
2018-08-08
CoolEditPro破解版
2018-08-06
Depends工具
2018-08-06
clumsy 0.2 网络调试工具(含32位和64位)
2018-08-06
Procexp工具(含32位和64位)
2018-08-06
CPU-Z(含32位和64位)
2018-08-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人