《DirectShow开发指南》学习笔记_6

2024-01-11 03:48

本文主要是介绍《DirectShow开发指南》学习笔记_6,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

动态重建技术

由于下列任何一个原因,我们都需要对已有的Filter Graph进行修改。

  1. 应用程序在播放一段视频的过程中想要插入一个视频效果Filter;
  2. Source Filter在运行过程中改变了数据流的媒体类型,需要接入新的解码Filter;
  3. 应用程序想要在Filter Graph中加入另外一条视频流。

       通常的做法是,现将Filter Graph停止,进行修改之后,再重新启动。那么,有没有一种方法能够在保持Filter Graph运行状态的同时实现Filter Graph的重建呢?答案是肯定的。

Filter Graph的重建包括如下几种情形:

  • 仅仅改变Filter之间连接媒体类型;
  • 增加或删除Filter,重新进行相关Filter之间的连接;
  • 对一条Filter链路(Filter Chain)进行操作。

媒体类型的动态改变

当两个Pin连接完成后,就会有一个双方商定的媒体类型用来描述以后在这两个连接Pin之间传递的数据格式。一般情况下,这个媒体类型在Filter Graph运行的整个过程中是不会改变的。但在一些特殊的场合下,“需要”这种媒体类型的动态改变。DirectShow是如何支持的呢?下面分不同情况来讨论。

从上往下要求媒体类型改变,但传送数据使用的内存不需增大

    媒体类型的改变由Filter A的输出Pin发起。首先,Filter A调用Filter B的输入Pin上的IPin::QueryAccept或IPinConnection::DynamicQueryAccept,看Filter B是否支持新的媒体类型,如果支持,则Filter A调用IMemAllocator::GetBuffer得到一个空的Sample,通过IMediaSample::SetMediaType将新的媒体类型与Sample相连。然后,Filter A就可以将Sample传送给Filter B。当Filter B接收到新的Sample时,可以通过调用IMediaSample::GetMediaType得到新的媒体类型。

      一般来说,Filter B应该具有对媒体类型改变的应变能力,这是在写自己的Filter时应该考虑到的问题。Filter A一般调用QueryAccept来判断Filter B的输入Pin是否支持新的媒体类型。可以从CBasePin::QueryAccept的实现中看到,它仅仅是调用Pin上的CheckMediaType函数。所以QueryAccept返回S_OK并不能保证媒体类型能够在Graph运行状态下改变成功。

这篇关于《DirectShow开发指南》学习笔记_6的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/593071

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali