Media Player Classic - HC 源代码分析 1:整体结构

article/2025/7/6 14:27:15

=====================================================

Media Player Classic - HC 源代码分析系列文章列表:

Media Player Classic - HC 源代码分析 1:整体结构

Media Player Classic - HC 源代码分析 2:核心类 (CMainFrame)(1)

Media Player Classic - HC 源代码分析 3:核心类 (CMainFrame)(2)

Media Player Classic - HC 源代码分析 4:核心类 (CMainFrame)(3)

Media Player Classic - HC 源代码分析 5:关于对话框 (CAboutDlg)

Media Player Classic - HC 源代码分析 6:MediaInfo选项卡 (CPPageFileMediaInfo)

Media Player Classic - HC 源代码分析 7:详细信息选项卡(CPPageFileInfoDetails)

=====================================================


Media Player Classic - Home Cinema (mpc-hc)播放器一个经典的影音播放器,可播放CD、VCD、DVD、及MP3、MP4、AVI、AAC等多种影音格式。与此同时,它还是开源的。很多知名的视频播放器都是在它的基础上建立起来的,在这里就不例举了。本文将会对其源代码进行简要的分析。

之前一篇博客中曾经介绍了它的编译过程:VC2010 编译 Media Player Classic - Home Cinema (mpc-hc)

在这里就不再重复说明了,直入主题,看看它的工程是什么样子:


相信大部分人看到这个工程的第一反应就是:好大啊!确实,我看到这个工程的时候也是这个反应。mpc-hc总体上分为3个部分:Apps,Filters,Libraries。其中Apps是其主程序;Filters是其附带的一些directshow filter,比如说AVI分离器,FLV分离器等等;Libraries则是其依赖的一些库:像Zlib这类的。

来细看看mpc-hc都有什么directshow filter吧(截图都放不下了...)


Filters分为以下几种:

Muxer(封装),Parser(解封装,或称为分离器),Reader(读取),Renderer(显示),Source(源),Switcher(这个我不懂),Transform(处理)

在这里就不一一例举各种Filter了,因为数量实在太多,大部分Filter工程都可以通过名称来判断其功能。

再看看主程序Apps工程吧:


可见主程序包含了巨量的代码,截图也只能显示其中的一部分。因此在代码分析的时候,不可能做到面面俱到,只能选择其中的重点部分进行详细的分析。

mpc-hc的对话框数量也很惊人:


在这里就不再花篇幅形容mpc-hc工程的巨大了。赶紧说说如何来研究分析它的代码。本文主要分析它的主程序即在Apps目录下的工程。先介绍一下我总结出来的一些规则:

1.以PPage开头的.cpp或.h文件通常是一些属性选项卡的对话框对应的类。随后会详细介绍一个“视频信息”选项卡的代码(在这里用到了开源库MediaInfo)

2.主框架所在的位置是Mainfrm.cpp

目前只有这两条规则,以后会随着研究的不断深入,进一步完善这些规则。


http://chatgpt.dhexx.cn/article/JDvk8lR9.shtml

相关文章

HC-08蓝牙模块与电脑进行蓝牙远程通信! 支持HC-02、HC-08、HC-42蓝牙

因项目接触HC-08蓝牙模块,一直想电脑与STM32上接的HC-08蓝牙模块进行远程通信!在网上未能找到解决办法,此方式为广州汇承公司提供(蓝牙生产厂家),亲测有效! 一、适用型号及PC条件: 1…

蓝牙模块(HC-05/HC-06)详解

这里写目录标题 0. 蓝牙概述蓝牙技术的特点 1. 常见的蓝牙模块2. HC-05/HC-062.1 概念2.2 区别 3. STM32使用HC-05通信3.1 方法3.2 示例代码 0. 蓝牙概述 蓝牙(Bluetooth)是一种用于无线通信的技术标准,允许设备在短距离内进行数据交换和通信…

经验分享帖 汇承HC-12无线模块的简单使用说明

** 汇承HC-12无线模块的简单使用说明 ** 无意间在网上看到HC-12的功能介绍,最吸引我的是他的通信距离。于是我从网上买了两个,想着替代两个蓝牙,实现远距离通信控制。 这两张图是我手上的HC-12无线模块,其他引脚我就不多说了,与…

HC-05主从模式蓝牙配对说明v1.0

HC-05主从模式蓝牙配对说明 在参加电赛或者做毕业设计的时候,可能需要进行无线通信传输数据。 无线通信的方案有NRF24L01的射频传输。 有esp8266的wifi。 使用HC-05蓝牙的方式进行无线透传使用简单,延时较低,用于调试场景非常方便&#xff0c…

【51】HC-06蓝牙模块使用

说到蓝牙模块,就不得不说下主、从机: 主机 : 用于向从机下发指令,能够搜索从机并主动建立连接的一方。 从机 : 用于接收主机下发的命令,不能主动建立连接,只能等别人连接自己。 主从一体 : 能够在主机和从机模式间切换…

hc-05 模块教程2 (两个hc-05连接)

http://www.arduino.cn/thread-21735-1-1.html 最近在做项目需要建立两个hc-05通讯,但网上教程有限和有很多都不是很清楚所以整合了下资料重新做了一份个人认为比较详细的教程和大家一起分享学习。 这个教程说明怎么样用hc-05查找附近的hc-05模块并与它建立通讯。 …

面向对象在python中的实践---如何定义类、对象?

一、如何定义一个类 1.1基本语法 class Money:pass 类可以分为经典类和新式类 注意点: 类名Money中的首字母必须要大写 二、怎样通过类,创建一个对象 2.1根据类创建一个对象 #定义一个类 class Money:pass #根据这个类来实例化出一个对象 oneMon…

python的安装教程

Python 是这两年来比较流行的一门编程语言,主要的特点是其相对简单的语法以及丰富的第三方库。下面是python的下载安装过程。 1.python的官方下载网站: Welcome to Python.orghttps://www.python.org/ 选择自己适合的版本进行下载 * 我们以最新的3X为例…

java和python应该学哪一个,纠结?

小孩子才做选择,必须两个都学! 不用纠结,又不是说学校让你选一个学,你就真的只学一个了!(别被课本知识限制了) 从一名开发工程师的角度,我的建议是,将 Java 作为主武器&…

Python循环语句

Python 循环语句 本章节将向大家介绍Python的循环语句,程序在一般情况下是按顺序执行的。 编程语言提供了各种控制结构,允许更复杂的执行路径。 循环语句允许我们执行一个语句或语句组多次,下面是在大多数编程语言中的循环语句的一般形式&…

python 安装教程(附安装包)

有没有小伙伴想安装python,可发现官网的英文看不懂,而且加载很慢,想找找现成的安装包却五花八门,不知道下什么好了。 现在我教你怎么安装python,下载点我下64位(密码:61rn),如果下载32位点我(密码:dguv) 下好后点击这个文件 这个是你刚刚下…

尝试用python解概率题,并祝大小朋友儿童节快乐

实题操作 1. 三个人独立地去破译一份密码,每人能独立译出这份密码的概率分别为1/5, 1/3, 1/4。则这份密码被译出的概率为(3/5)。 def success():p 1/5,1/3,1/4t 1for i in p:t * 1-ireturn 1-tprint(f成功概率&…

华为OD机试用Python实现 -【组合出合法最小数】(2023-Q1 新题)

华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题解:…

华为OD机试用Python实现 -【字母组合】(2023-Q1 新题)

华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 字母组合 | 华为…

提取文本关键词?很 easy 啊,用 Python 三行搞定

从大量文本中提取有用的关键信息是数据分析的一个重要环节。 Python 作为一门广泛应用于数据分析领域的编程语言,有着强大的文本处理库。 整理了几个用于文本关键词提取的优秀工具,一起学习下。 1、jieba库 jieba 是一个中文分词库,可以将一段文本分割为单独的单词。可以…

linux建立phyon文件,PyInstaller 来建立Linux下的Python独立执行文件

以下内容假定已安装好Python 2.4/2.5 一、下载并编译pyinstaller(只需做一次,以后可直接做第二步) 1.下载pyinstaller,现在的版本是1.3 (1)wget http://pyinstaller.hpcf.upr.edu/source/1.3/pyinstaller_1.3.tar.gz 2.解包进入源码目录 (1)tar zxv pyinstaller_1.3…

phyon数据结构

phyon常用的数据结构有:序列和元组 另外不常用的有 :字符串、Unicode字符串、buffer对象、xrange对象 1、索引:跟c中的下标是一个意思 2、分片:就是索引的范围: >> >num[5] [1, 2, 3, 4, 5] >>>…

phyon快速入门(hello phyon)

创建一个phyon项目 点击新建项目 新建phyon文件 新建hellophyon print(hello phyon)在文本中编辑print(hello phyon) 右键run 控制台打印出hello pyhon 第二次运行可直接点击右上角工具栏

学习java好还是phyon好_phyon学习第一天

一直想用phyon写个网络爬虫,太懒了,一直到现在才开始学习 phyon的强大就不用说了,第一天学习,好好加油 今天主要学下一下它的语法: 1、用过简单的计算器使用 程序的计算包括: - * / % **(幂运算符) >…

phyon快速入门(phyon基础知识)

1、创建变量 a10 b2 cab print(c)2、判断语句 # codingutf-8a 90if a > 80:print("nice") elif a > 60:print("normal") else:print("bad")***# codingutf-8***用于指定中文的编码格式 3、循环 # codingutf-8for i in range(1, 100):p…