Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在IMAPI接口中可以选择cd写入模式吗?

在IMAPI接口中可以选择cd写入模式吗?
EN

Stack Overflow用户
提问于 2011-02-02 04:18:51
回答 1查看 1.1K关注 0票数 2

我正在使用IMAPIv2在我的C#项目中刻录CD/DVD。我意识到接口是XA格式的(模式2)。我认为XA格式主要用于ISO。关于网络上的IMAPIv2的许多例子使用了以下方法来演示总的磁盘空间和空闲空间:

代码语言:javascript
运行
AI代码解释
复制
discFormatData.Recorder = discRecorder;
IMAPI_MEDIA_PHYSICAL_TYPE mediaType = discFormatData.CurrentPhysicalMediaType;
this.MediaType = GetMediaTypeString(mediaType);
fileSystemImage = new MsftFileSystemImage();
fileSystemImage.ChooseImageDefaultsForMediaType(mediaType);
MediaStateString = GetMediaStatus(discFormatData.CurrentMediaStatus);
if (discFormatData.MediaHeuristicallyBlank) MediaStateString = "Blank";

Int64 freeMediaBlocks = discFormatData.FreeSectorsOnMedia;
this.TotalDiscCapacity = 2048 * freeMediaBlocks;
Int64 userMediaBlocks = discFormatData.TotalSectorsOnMedia - discFormatData.FreeSectorsOnMedia;
this.TotalUsedDiscSpace = 2048 * userMediaBlocks;

不幸的是,如果我用上面描述的TotalSectorsOnMedia乘以2048 *,我将无法获得正确的总磁盘容量。当我用IMAPIv2烧录一个容量为800 MB的磁盘时,上面的代码将显示我的磁盘容量大约在650 MB左右。当我用其他软件燃烧器检查磁盘时,我看到模式被设置为XA。是否可以在燃烧前设置此模式?此外,如果有以模式1编写的会话,我将如何解决确定磁盘空闲空间的问题?是否有可能知道光盘是以哪种方式写的?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-11-13 07:22:04

为了获得总磁盘容量,您需要将扇区的数量乘以每个扇区上用户数据字段的长度(在CD/XA (eXtended体系结构)模式2上,该模式的长度为2336字节,而不是2048年)。

CD上的扇区保存2048字节的用户数据,留下304字节用于其他目的.每个数据扇区都以一个16字节的头开头:

  • 12字节同步字段(00 ff 00)
  • 3字节地址(分钟,秒,分数(1/75)秒)
  • 1字节模式

模式字节确定扇区中剩余的2336字节是什么样子:

  • 模式0:空数据;对CD记录没有实际用途。
  • 模式1:典型的CD-ROM布局2048字节的用户数据,4字节的EDC (错误检测代码,32位的CRC) 8字节的保留空间,设置为零172字节的"P“奇偶,104字节的"Q”奇偶。
  • 模式2: 2336字节的用户数据,通常用于CD-ROM/XA

为了检索为同一轨道中的扇区提供的数据类型,可以从IRawCDImageTrackInfo接口中使用IRawCDImageTrackInfo方法。

可能的扇区类型由类型枚举定义:

代码语言:javascript
运行
AI代码解释
复制
typedef enum  { 
 IMAPI_CD_SECTOR_AUDIO          = 0x00,
 IMAPI_CD_SECTOR_MODE_ZERO      = 0x01,
 IMAPI_CD_SECTOR_MODE1          = 0x02,
 IMAPI_CD_SECTOR_MODE2FORM0     = 0x03,
 IMAPI_CD_SECTOR_MODE2FORM1     = 0x04,
 IMAPI_CD_SECTOR_MODE2FORM2     = 0x05,
 IMAPI_CD_SECTOR_MODE1RAW       = 0x06,
 IMAPI_CD_SECTOR_MODE2FORM0RAW  = 0x07,
 IMAPI_CD_SECTOR_MODE2FORM1RAW  = 0x08,
 IMAPI_CD_SECTOR_MODE2FORM2RAW  = 0x09
} IMAPI_CD_SECTOR_TYPE;

  • 在这种扇区类型的IMAPI_CD_SECTOR_AUDIO中,音频数据每个扇区/帧有2352字节。这可以分解为588个连续的样本,每个样本是4个字节。单个示例的布局与16位立体声44.1KHz WAV文件数据匹配。这种类型的扇区没有额外的纠错代码。
  • 具有这种扇区类型的IMAPI_CD_SECTOR_MODE_ZERO,每个扇区/帧的用户数据有2336字节。这种很少使用的扇区类型包含所有的零数据,在今天的媒体中几乎从未见过。
  • 具有这种扇区类型的IMAPI_CD_SECTOR_MODE1,每个扇区/帧的用户数据有2048字节。Mode1数据是按下光盘媒体中最常见的数据格式.此数据类型还提供了标准扇区类型中最大级别的ECC/EDC。
  • 具有这种扇区类型的IMAPI_CD_SECTOR_MODE2FORM0,每个扇区/帧的用户数据有2336字节。所有模式2扇区类型也被称为“CD”模式,它允许在单个光盘上混合音频和数据轨道。这种扇区类型也被称为模式2“无形式”,被认为是废弃的,而且很少使用。
  • 具有这种扇区类型的IMAPI_CD_SECTOR_MODE2FORM1,每个扇区/帧的用户数据有2048字节。所有模式2扇区类型也被称为“CD”模式,它允许在单个光盘上混合音频和数据轨道。
  • 对于这种扇区类型的IMAPI_CD_SECTOR_MODE2FORM2,每个扇区/帧的用户数据有2336字节,其中最后四个字节是可选的CRC代码(如果不使用则为零)。所有模式2扇区类型也被称为“CD”模式,它允许在单个光盘上混合音频和数据轨道。这种扇区类型在编写VideoCD光盘时最常用。
  • 具有这种扇区类型的IMAPI_CD_SECTOR_MODE1RAW,每个扇区/帧的用户数据有2352字节。这是预处理的Mode1Cooked数据扇区,扇区标头、ECC/EDC以及已经添加到数据流中的扰码。
  • 具有这种扇区类型的IMAPI_CD_SECTOR_MODE2FORM0RAW,每个扇区/帧的用户数据有2352字节。这是预处理的Mode2Form0数据扇区,扇区标头、ECC/EDC以及已经添加到数据流中的扰码。
  • 具有这种扇区类型的IMAPI_CD_SECTOR_MODE2FORM1RAW,每个扇区/帧的用户数据有2352字节。这是预处理的Mode2Form1数据扇区,扇区标头、ECC/EDC以及已经添加到数据流中的扰码。
  • 具有这种扇区类型的IMAPI_CD_SECTOR_MODE2FORM2RAW,每个扇区/帧的用户数据有2352字节。这是预处理的Mode2Form2数据扇区,扇区标头、ECC/EDC以及已经添加到数据流中的扰码。

备注:某些扇区类型与单个映像中的其他扇区类型不兼容。以下是这种情况的典型例子:如果第一个音轨是音频,那么所有的音轨都必须是音频的。如果第一首曲目是Mode1,那么所有曲目都必须是Mode1。只有三个Mode2 (XA)扇区(模式2形式0、模式2表单1和模式2表单2)可以在单个磁盘映像中混合,即使这样,也只能与其他模式2 (XA)扇区类型混合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4874374

复制
相关文章
如何在Visual Studio中调试.NET源码
In order to configure Visual Studio 2013 do the following in the Tools -> Options -> Debugging -> General menu:
卡尔曼和玻尔兹曼谁曼
2019/01/22
2.1K0
如何在Visual Studio中调试.NET源码
BTrace 告诉你如何在不重启 JVM 的情况下在线调试
Hello 大家好, 我是阿粉,不知道你有没有遇到过这种场景,线上服务跑了一段时间过后偶尔会出现问题,光靠代码和数据分析找不到原因,而且这种情况也不是很常见所以对应的代码也没有加日志输出,如果说重新加上日志进行发布的话,就会破坏现场只能再等一段时间了,或者有的时候想看下接口的参数,从而判断接口参数有没有问题。
Java极客技术
2022/12/02
4450
BTrace 告诉你如何在不重启 JVM 的情况下在线调试
Visual Studio远程调试
网址:https://visualstudio.microsoft.com/zh-hans/downloads/
FlyLolo
2021/11/29
1.4K0
Visual Studio远程调试
如何在 Visual Studio 编译调试 Windows 版本的 Nginx 源码?
在我们的《C/C++ 网络编程实战训练营》第二课,我们给大家布置了两个作业,其中之一是为 Nginx 源码制作一个 Visual Studio 工程文件,可以在 Visual Studio 中调试 Windows 版本的 Nginx,这个作业的目的是:
范蠡
2023/01/04
2.1K0
如何在 Visual Studio 编译调试 Windows 版本的 Nginx 源码?
Visual Studio 调试(系列文章)
  Visual Studio 调试程序有助于你观察程序的运行时行为并发现问题。 该调试器可用于所有 Visual Studio 编程语言及其关联的库。 使用调试程序时,可以中断程序的执行以检查代码、检查和编辑变量、查看寄存器、查看从源代码创建的指令,以及查看应用程序占用的内存空间。
张传宁IT讲堂
2019/09/17
8260
Visual Studio 调试(系列文章)
Visual Studio Code调试PHP
这两天有点时间,花时间学习了一下PHP基础语法和语句。因为个人比较喜欢Visual Studio Code这款编辑器,所以学习我主要记录一下使用VSCode学习PHP的遇到的一些问题。其中最主要的就是怎样使用VSCode调试PHP代码。
siberiawolf
2020/03/24
3.4K0
Visual Studio Code调试PHP
Visual Studio 调试系列11 远程调试
你可以调试已部署在另一台计算机的 Visual Studio 应用程序。 要进行此操作,可使用 Visual Studio 远程调试器。
张传宁IT讲堂
2019/09/17
3.7K0
Visual Studio 调试系列11 远程调试
Visual Studio 调试系列2 基本调试方法
在 Visual Studio 上下文中,当调试应用时,这通常意味着你在附加了调试器的情况下(即在调试器模式下)运行应用程序。 执行此操作时,调试器在运行过程中可提供许多方法让你查看代码的情况。 你可以逐步执行代码、查看变量中存储的值、设置对变量的监视以查看值何时改变、检查代码的执行路径等。
张传宁IT讲堂
2019/09/17
4.6K0
Visual Studio 调试系列2 基本调试方法
Visual Studio 2010的并行调试支持
Visual Studio 2010大幅度的提升了并行调试的用户体验。Visual Stuido 2010的并行调试非常简单,,它提供了两个新的调试工具窗口,以帮助完成基于任务的并行编程。 在 Vis
张善友
2018/01/31
9430
Visual Studio 2010的并行调试支持
Visual Studio 调试系列3 断点
断点是开发人员的工具箱中最重要的调试技术之一。 若要暂停调试程序执行所需的位置设置断点。 例如,你可能想要查看代码变量的状态或查看调用堆栈的某些断点。
张传宁IT讲堂
2019/09/17
5.5K0
Visual Studio 调试系列3 断点
用Visual Studio调试linux程序
用Visual Studio调试linux程序?你真的没看错,这个是真的,不是标题党。当然如果你说VS2015及以上版本自带的linux调试插件,那就算了。这些自带的插件调试一个有简单的main函数程序还凑合,稍微复杂点的程序,根本无法编译调试。 而本文介绍的主角是VS的另外一款插件Visual GDB,让我们欢迎主角登场,下面是正文。 使用Visual Studio+VisualGDB调试远程linux程序 需要工具: Visual Studio 2013或以上版本(以下简称VS) VisualGDB(一
范蠡
2018/04/04
5.8K1
用Visual Studio调试linux程序
使用 Visual Studio 调试多进程的程序
当你的编写的是一个多进程的程序的时候,调试起来可能会比较困难,因为 Visual Studio 默认只会把你当前设置的启动项目的启动调试。
walterlv
2020/02/10
2.7K0
使用Visual Studio Code调试Golang工程
Visual Studio Code - Code Editing. Redefined**
上善若水.夏
2018/09/28
5.1K0
Visual Studio 系列调试方法整理
学编程不会调试,这简直就跟做买卖不会数钱一样好笑,有时候程序出了bug,思维受限的时候,肉眼是很难判断出错误的地方的,虽然调试不一定非得用Debug模式来进行,但是使用vs系列的Debug模式的确是个比较方便的好办法。
mythsman
2022/11/14
7500
Visual Studio 系列调试方法整理
visual studio 不能进入调试状态
解决Windows操作系统在处理回环地址 1、 第一种解决方案是禁用环回检查。 步骤如下 a) 依次单击“开始”和“运行”,键入 regedit,然后单击“确定” b) 在注册表编辑器中,找到并单击下面的注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa c) 右键单击“Lsa”,指向“新建”,然后单击“DWORD 值” d) 键入 DisableLoopbackCheck,然后按 Enter e) 右键单击“Disabl
hbbliyong
2018/03/06
1.3K0
visual studio code 调试php方法(图文详解)
简介 php是动态语言没有调试器的话排错起来很是麻烦。vscode可以说是程序员的福音,启动速度快,插件越来越多,跨平台。现在说一下vscode上调试php文件 所需文件
用户2323866
2021/07/07
4K0
Visual Studio 调试系列9 调试器提示和技巧
如果你在调试时,经常将鼠标悬停在数据提示上,就可能想固定变量的数据提示,方便自己随时查看。 即使在重新启动后,固定的变量也能保持不动。 要固定数据提示,请在鼠标悬停其上时单击固定图标。 你可以固定多个变量。
张传宁IT讲堂
2019/09/17
3.3K0
Visual Studio 调试系列9 调试器提示和技巧
visual Studio 无法调试,提示程序跟踪已退出
今天在打码出现了vs无法调试,我在网上查了很久没有发现一个方法。 vs点击启动时,出现了一下提示
林德熙
2022/08/04
1.2K0
visual Studio 无法调试,提示程序跟踪已退出
使用 Visual Studio 2022 调试Dapr 应用程序
使用Dapr 编写的是一个多进程的程序, 两个进程之间依赖于启动顺序来组成父子进程,使用Visual Studio 调试起来可能会比较困难,因为 Visual Studio 默认只会把你当前设置的启动项目的启动调试。 好在有Visual Studio 扩展(Microsoft Child Process Debugging Power Tool 插件)可以支持。这个思路来自 https://github.com/dapr/dotnet-sdk/issues/401#issuecomment-747563695
张善友
2022/12/13
1K0
使用 Visual Studio 2022 调试Dapr 应用程序
visual Studio 无法调试,提示程序跟踪已退出
今天在打码出现了vs无法调试,我在网上查了很久没有发现一个方法。 vs点击启动时,出现了一下提示
林德熙
2018/09/18
4K0
visual Studio 无法调试,提示程序跟踪已退出

相似问题

SceneKit如何在SCNSphere内部添加纹理

15

在OpenTK上绑定多个纹理的正确方法是什么?

13

如何在SCNSphere中使用SKScene作为纹理?

119

OpenGLUT:球体的纹理:正确的方法是什么?

10

用MVC静态方法将路径映射到图像的正确方法是什么?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档