Fuchsia.mediacodec

添加数量:7

协议

编解码器工厂

fuchsia.mediacodec/codec_factory.fidl 中定义

media::CodecFactory 接口的用途是为解码器和编码器创建 media::StreamProcessor 实例。

接口方法不会尝试对所有编解码器类型进行同质化,而是希望为解码器提供单独的专用消息。

AttachLifecycleTracking

AttachLifetimeTracking:

将 eventpair 端点附加到下一个 Create{X}(),以便在分配的缓冲区数达到“buffers_remaining”时关闭 codec_end。每次创建可以附加多个事件对端点,强制限制为 CODEC_FACTORY_LIFETIME_TRACKING_EVENTPAIR_PER_CREATE_MAX。

此事件指示的生命周期旨在跟踪编解码器使用的所有资源,包括编解码器在内部创建的 sysmem-allocated 缓冲区。对客户端可见的输入和输出缓冲区的 sysmem 缓冲区集合不包含在此处跟踪的资源中,因为这些资源可以通过 fuchsia.sysmem.Buffer.Attach 如需同时进行,并且可通过 fuchsia.sysmem.Buffer.Attach 如需同时进行,并同时通过此处所跟踪的代码完成。这样可以方便地避免客户端需要多个单独的异步等待。

如果服务器进程崩溃,或编解码器无法将 codec_end 连接到 sysmem,则 codec_end 的对等端上发出的 ZX_EVENTPAIR_PEER_CLOSED 会在所有资源被释放前不久发生。

在任何 Create{X}() 之前,最多允许对 AttachLifetimeTracking() 进行 CODEC_FACTORY_LIFETIME_TRACKING_EVENTPAIR_PER_CREATE_MAX 调用。除了关闭 CodecFactory 渠道之外,无法取消连接。关闭事件对的客户端端不会减少待处理连接的数量。因此,最好只在客户端知道将同时发送附加消息和 Create{X}() 消息时,先发送相关 Create{X}() 的附加消息。

关闭客户端不会导致服务器执行任何操作。如果服务器完全监听来自客户端的事件,则仅用于调试日志记录。

服务器有意不“信任”客户端有信号的任何位。此机制有意仅使用 ZX_EVENTPAIR_PEER_CLOSED,它无法提前触发,并且仅在 codec_end 的所有句柄均关闭时触发。没有任何含义与任何其他信号位相关联,客户端在功能上应忽略事件对一端或其对等端上的任何其他信号位。

codec_end 可能缺少 ZX_RIGHT_SIGNAL 或 ZX_RIGHT_SIGNAL_PEER,但必须具有 ZX_RIGHT_DUPLICATE(并且必须具有 ZX_RIGHT_TRANSFER 才能传输,而不会导致 CodecFactory 通道故障)。

请求

名称类型
codec_end handle<eventpair>

CreateDecoder

CreateDecoder:

deck_params - 如需了解用于创建解码器的必需参数和可选参数,请参阅 CreateDecoder_Params 注释。

解码器 - Codec.NewRequest(),有望连接到编解码器服务器;如果找不到合适的编解码器,编解码器通道将关闭。在这里,我们不会返回任何其他编解码器专用状态,因为找到的编解码器是完全异步的,所以在从此方法返回时,我们并不一定知道将选择哪个编解码器(如果有)。

用于创建解码器的粗略序列:

工厂 = ConnectToEnvironmentService(CodecFactory); CreateDecoder_Params params; [填写参数] CreateDecoder(params, Decoder_request);

如需了解详情,请参阅 use_media_decoder 代码。

请求

名称类型
decoder_params CreateDecoder_Params
decoder server_end<fuchsia.media/StreamProcessor>

CreateEncoder

CreateEncoder:

Encoder_params - 如需了解用于创建解码器的必需参数和可选参数,请参阅 CreateEncoder_Params 注释。

编码器 - 一个 Codec.NewRequest(),有望连接到编解码器服务器,如果找不到合适的编解码器,就会关闭编解码器通道。在这里,我们不会返回任何其他编解码器专用状态,因为找到的编解码器是完全异步的,所以在从此方法返回时,我们并不一定知道将选择哪个编解码器(如果有)。

请求

名称类型
encoder_params CreateEncoder_Params
encoder server_end<fuchsia.media/StreamProcessor>

获取详细编解码器说明

客户端应调用 |GetSpecificCodecDescriptions()| 以获取软件实现或底层硬件支持的编解码器列表。

添加数量:11

请求

<空>

回复

名称类型
payload CodecFactoryGetDetailedCodecDescriptionsResponse

OnCodecList

在主 CodecFactory 连接到驱动程序本地 CodecFactory 后,基于驱动程序的本地 CodecFactory 将立即发送一次。

目前,主 CodecFactory 不会发送此信息。

基于软件的本地 CodecFactory 不会发送此事件。

为了进行干净汇总,列表中的每个编解码器都必须单独进行描述。

已弃用:11 添加:7

回复

名称类型
codecs vector<CodecDescription>[256]

结构

编解码器说明

fuchsia.mediacodec/codec_factory.fidl 中定义

已弃用。

如果客户端在使用 CodecFactory.CreateDecoder 或 CodecFactory.CreateEncoder 来请求编解码器之前需要编解码器信息,则不应监听 OnCodecList,而应使用 GetDetailCodecDescriptions 来获取 CompletedCodecDescription 表,该表中包含所有这些字段的等效项(每个配置文件条目)。在请求编解码器之前,确实不需要编解码器信息的客户端可以调用 CodecFactory.CreateDecoder 或 CodecFactory.CreateEncoder,并在该请求中设置相关要求,然后调用 StreamProcessor.Sync,查看是否确实已成功创建编解码器。

与使用 FIDL 结构体的 OnCodecList 不同(由于历史事件的排序原因),Get detailsCodecDescriptions 使用 FIDL 表,因此不需要弃用,因为我们可以根据需要添加新的表字段,并在必要时逐步弃用旧的表字段,而不废弃整个内容。

按编解码器的服务器无需填充此结构体或发送 OnCodecList,因为主 CodecFactory 将根据 GetDetailCodecDescriptions 信息构建 OnCodecList 信息,以便每个编解码器都可以(可选)立即停止发送 OnCodecList,而不必等待所有客户端停止监听 OnCodecList,这可能需要一段时间。但是,所有编解码器都需要实现 GetDetailCodecDescriptions。

已弃用:11 添加:7

字段类型说明默认
codec_type CodecType

解码器或编码器。

无默认值
mime_type string[256]

压缩格式的 MIME 类型。对于解码器,这是输入的 MIME 类型。对于编码器,这是输出的 MIME 类型。

无默认值
can_stream_bytes_input bool

对于每个字段,默认值都是功能最强大的设置,但如果编解码器不支持功能最强的行为,则编解码器必须替换默认值。

true
can_find_start bool true
can_re_sync bool true
will_report_all_detected_errors bool true
is_hw bool true
split_header_handling bool true

枚举

CodecType 严格

类型:uint32

fuchsia.mediacodec/codec_factory.fidl 中定义

名称说明
0
1

SecureMemoryMode 严格

类型:uint32

fuchsia.mediacodec/codec_factory.fidl 中定义

缓冲区是否为安全的。如果未指定,则默认为 OFF。

此枚举以后可能会添加其他值;在编写处理此类型的代码时应考虑到这一点。例如,在 C++ 中,在针对该类型的任何 switch 语句中使用“default”大小写可避免在添加新值时出现编译警告/错误。

名称说明
0
1

表格

CodecFactoryGetDetailCodecDescriptionsResponse

fuchsia.mediacodec/codec_factory.fidl 中定义

序数字段类型说明
codecs vector<DetailedCodecDescription>[256]

CreateDecoder_Params

fuchsia.mediacodec/codec_factory.fidl 中定义

序数字段类型说明
input_details fuchsia.media/FormatDetails

解码器的输入 MIME 类型。

目前可识别的 MIME 类型:video/h264 video/vp9 audio/aac input_details.oob_bytes 必须是 AAC 规范定义的 AudioSpecificConfig()。 audio/sbc input_details.oob_bytes 必须是 SBC 的编解码器专属信息元素(如 A2DP 规范中所定义)。

promise_separate_access_units_on_input bool

此值必须为 true,系统才能允许客户端对输入数据包添加时间戳,而需要从输入数据包上获取任何时间戳。

向解码器提供单独的访问单元(以下称为 AU)始终是合法的,但此布尔值必须为 true,解码器才能接受和传播时间戳值。

创建视频编码器时,此 ID 必须为 true,否则 CodecFactory 频道将关闭。

如果未设置,则解释为 false。

require_can_stream_bytes_input bool

当 AU 未拆分为单独的数据包时,要求所选编解码器能够接受输入。

这并不意味着解码器可以找到第一个 AU 的起始位置;如需查看,请参阅 require_can_find_start。这并不意味着在数据流数据损坏后解码器可以自行重新同步;如需了解这种情况,请参阅 require_can_re_sync。

如果 promise_split_access_units_on_input 和 require_can_stream_bytes_input 均为 true,则 CodecFactory 通道将关闭。

如果此字段为 false,客户端必须在 fuchsia.ui.input 上向不同的 AU 提供数据。对于视频编码器,该值为 false;如果为 true,则 CodecFactory 通道将关闭。

除非客户端需要能够接收串联 AU 的解码器 (require_can_stream_bytes_input true),否则客户端必须向解码器提供单独的 AU。这意味着客户端不能在同一个数据包中同时包含两个不同 AU 的部分,除非 require_can_stream_bytes_input 为 true。

如果未设置,则解释为 false。

require_can_find_start bool

解码器能够流式传输字节,但无法搜索第一个可用 AU 的起始位置。如需同时要求这两者,请同时设置 require_can_stream_bytes_input 和 require_can_find_start。在没有 require_can_stream_bytes_input 的情况下设置 require_can_find_start 无效。

如果 require_can_stream_bytes_input 为 true,但 require_can_find_start 为 false,则客户端必须以 AU 开头处启动第一个数据包,但在之后可以发送字节流。

如果未设置,则解释为 false。

require_can_re_sync bool

在有问题的输入数据上,所有解码器都至少应能够关闭通道,而不是陷入失败和/或损坏的状态。

从具有 require_can_re_sync 的请求返回的解码器有可能能够处理损坏的输入,而无需关闭编解码器通道。我们鼓励(但并非必须)使用此类编解码器,以便同时满足 require_report_all_detected_errors 的要求。

如果未设置,则解释为 false。

require_report_all_detected_errors bool

有时,客户端宁愿无法使用解码器的整体使用,也不会注意到数据损坏。对于此类场景,客户端可以指定 require_report_all_detected_errors。对于从设置了 require_report_all_detected_errors 的请求返回的任何编解码器,在检测到任何输入数据损坏时,编解码器都会通过以下一种或多种方式报告:

  • 关闭编解码器通道
  • OnStreamFailed()
  • error_detected_before
  • 错误检测 (error_detected_during)

如果为 false,编解码器可能会静默跳过损坏的输入数据。

任何解码器都无法检测到所有损坏,因为有些损坏可能看起来像是有效的数据流数据。此要求仅请求为了检测和报告输入流损坏而编写的编解码器。

此标志并不是万无一失的。如果客户端需要强有力地保证始终可检测到所有可检测到的数据流损坏,此标志并不足以保证实现这一点。由于在任何情况下都无法检测到某些数据流损坏,因此此类客户端应考虑在上游使用更强大的技术,以确保能够以非常接近于 1 的所需概率检测到损坏。

此标志为 true,并不表示编解码器是会舍弃受损的数据还是生成相应的受损输出。只有这样,编解码器才会适时将 error_detected_* 布尔值设置为 true。

无论是否设置此设置,输入时提供的所有 timestamp_ish 值都不一定会显示在输出中。

如果未设置,则解释为 false。

require_hw bool

如果为 true,则要求返回的编解码器经过硬件加速。另请参阅 require_sw

如果未设置,则解释为 false。

permit_lack_of_split_header_handling bool

allow_lack_of_split_header_handling

此字段是一个临时字段,即将停用。

TODO(dustingreen):一旦在处理拆分标头时遇到问题的编解码器数量减少到零,请移除此字段。

默认情况下,需要编解码器实例来处理“拆分标头”,这意味着客户端可以一次传送一个字节的 AU 的某些部分,包括 AU 开头附近的部分,并且编解码器需要正确容忍和处理。遗憾的是,并非所有编解码器都能正确支持拆分头文件。如果客户端愿意允许使用此类编解码器,客户端可以将此值设为 true。不建议客户端设置该属性,但暂时可能需要设置它才能找到适用于某些格式的编解码器。如果客户端将此属性设为 true,则客户端应传送每个 AU 的数据,且从每个 AU 的开头开始包含许多连续的非拆分字节。我们并不严格要求客户端一次传送一个 AU,只是为了确保所有 AU 字节都在单个数据包中,或者每个 AU 开头的许多字节都在单个数据包中。

关于客户端应如何使用此属性以及客户端应如何行为的规范刻意不明确,因为不支持标头拆分并不理想,这应该只是暂时性的,并且从长远来看,所有编解码器都应处理拆分标头。此字段的主要目的是避免使用默认值 false 向正常客户端提供无法正确处理拆分标头的编解码器。这并不是尝试采用一种机制来完全解决不处理拆分头文件的编解码器。

如果未设置,则解释为 false。

secure_output_mode SecureMemoryMode

如果设置为 ON,则解码器必须在输出端支持安全缓冲区,且在输出端必须拒绝非安全缓冲区。

如果设置为 OFF 或未设置,创建的解码器将关闭 StreamProcessor 通道,从而拒绝输出的安全缓冲区。

如果 safe_input_mode 为 ON,则 safe_output_mode 也必须为 ON。

secure_input_mode SecureMemoryMode

如果设置为 ON,则解码器必须在输入时支持安全缓冲区,并且必须在输入时拒绝非安全缓冲区。

如果设置为 OFF 或未设置,创建的解码器将关闭 StreamProcessor 通道,从而拒绝输入时的安全缓冲区。

如果 safe_input_mode 为 ON,则 safe_output_mode 也必须为 ON。

require_sw bool

如果为 true,则要求返回的编解码器完全基于软件,而非硬件(可能使用矢量 CPU 指令除外)。这对于测试目的或其他特殊场景非常有用,但不建议用于对性能敏感的场景。此外,对于某些格式,某些 build 可能缺少基于软件的解码器。另请参阅 require_hw

如果未设置,则解释为 false。

CreateEncoder_Params

fuchsia.mediacodec/codec_factory.fidl 中定义

用于请求编码器的参数。

序数字段类型说明
input_details fuchsia.media/FormatDetails

未压缩输入数据的格式。

此字段应该是原始 mime_type(例如“video/raw”)和未压缩格式详细信息,以供编码器在读取缓冲区时使用。

编码器必须支持输入格式才符合条件。

require_hw bool

如果为 true,则要求返回的编解码器经过硬件加速。

如果未设置,则解释为 false。

DecoderProfileDescription

fuchsia.mediacodec/codec_factory.fidl 中定义

指定视频解码器受支持参数的规范。

如果此表中的字段与 CodecDescription 中的字段同名,则与 CodecDescription 结构体中的字段具有相同的含义(如果设置了此表中的相应字段)。

如果未设置相应字段,系统会根据此表中该字段的相应文档注释来解释其中每个字段(对 CodecDescription struct re.struct 字段默认值中的字段的注释与对此表中未设置的字段的解释无关)。

对于视频解码器,始终需要满足以下条件:

  • 当输入帧对于单个输入缓冲区来说过大时,处理拆分输入载荷(与拆分标头不同)。经过时间戳处理的输入分块的下一部分(可能是剩余部分)将在下一个输入数据包中传送。

对于音频解码器,始终需要满足以下条件:

  • 始终允许通过输入串联多个压缩音频块。
添加数量:11

序数字段类型说明
profile fuchsia.media/CodecProfile

此解码器支持的编解码器配置文件。如果客户端想要使用此配置文件,则必须遵守此表中指定的要求。

min_image_size fuchsia.math/SizeU

此解码器针对给定 |profile| 支持的最小图片大小。解码器必须设置此字段,并且此字段必须指定的大小不得小于编解码器规范中为配置文件定义的最小大小。

此大小是指内存中的像素布局,而不是 display_rect,后者可以小于 fuchsia.Images2.ImageFormat.size / fuchsia.sysmem.ImageFormat2.coded_width/height。

max_image_size fuchsia.math/SizeU

对于指定的 |profile|,此解码器支持的图片大小上限。

解码器必须设置此字段,并且此字段指定的大小必须小于编解码器规范中为配置文件定义的大小上限。

此大小是指内存中的像素布局,而不是 display_rect,后者可以小于 fuchsia.Images2.ImageFormat.size / fuchsia.sysmem.ImageFormat2.coded_width/height。

设置此字段后,如果数据流指定的大小大于数据流配置文件通常允许的大小,则解码器无需解码失败。解码器不一定能解码未列出的配置文件或不在所列配置文件的大小边界内的数据流。

allow_encryption bool

此 |profile| 条目可适用于加密的输入数据。如果 require_encryption 为 false 或未设置,则此 |profile| 条目也可以应用于未加密的输入数据。

除非 Fuchsia 支持在解码过程中解密(即使 allow_input_protection 或 require_input_protection 为 true),此属性也将取消设置(相比之下,Fuchsia 支持在解码过程中使用受保护的内存,而这是另一个独立的步骤)。如果 allow_encryption 为 false/un-set 但 allow_input_protection 为 true,则设置 DRM 解码的客户端应将解密设置为单独的步骤,然后再使用受保护的内存进行解密,然后再使用受保护的内存进行解密和解码。

require_encryption bool

此 |profile| 条目仅在输入数据经过加密时才适用。此 |profile| 条目不适用于未加密的输入数据。未设置时用作 false。

如果将此属性设置为 true,并且同一 DetailCodecDescription 中没有包含 require_encryption false 的配置文件,则此解码器仅支持加密输入。

在 Fuchsia 支持在解码过程中解密之前(即使 allow_input_protection 或 require_input_protection 为 true),此字段也不会设置。另请参阅 allow_encryption、allow_input_protection、require_input_protection。

allow_input_protection bool

当输入数据通过受保护的内存传递时,此 |profile| 条目可能会应用。是否保护输入以及要使用哪个受保护的“堆”(如果保护输入)取决于系统内存限制汇总期间以及 DRM 机制。另请参阅 require_input_protection、allow_encryption、require_encryption。

require_input_protection bool

仅当输入数据通过受保护的内存传递时,此 |profile| 条目才适用。是否保护输入以及要使用哪个受保护的“堆”(如果保护输入)由系统内存限制汇总期间以及单独的 DRM 机制确定。

如果将此属性设置为 true,并且同一 DetailCodecDescription 中没有包含 require_input_protection false 的配置文件,则该解码器仅支持受保护的输入。

输出保护在 sysmem 中的输出缓冲区约束汇总期间以及通过 DRM 机制进行单独协商。

另请参阅 allow_input_protection、allow_encryption、require_encryption。

can_stream_bytes_input bool

如果设置为 true,则解码器可以处理跨数据包边界(标头和载荷之间,或载荷字节之间)拆分的输入块载荷(包含压缩数据),并且解码器还可以处理单个输入数据包中含有压缩输入数据的多个输入块。另请参阅分屏_header_handling,以确定解码器是否也可以处理分屏标头。

未设置意味着 false。

虽然此字段始终指示是否可以跨数据包边界拆分输入分块,并且设置此字段始终意味着可以具有来自多个输入分块的单个输入数据包(包括输入分块包含压缩输入数据的情形),但视频和音频解码器之间有一些额外的微妙含义。

无论此字段是否设置或未设置,音频解码器始终需要允许单个输入数据包包含多个输入块,包括每个包含压缩输入数据的多个输入块(而不只是附加的“上下文”标头)。对于音频解码器,此字段仅指示是否允许将输入分块拆分为多个数据包。

音频解码器不应将分屏设置为 true,除非它们也将 can_stream_bytes_input 设置为 true,因为除非允许拆分输入分块,否则允许拆分标头字节毫无意义。

对于视频解码器,如果此字段未设置或 false,解码器可能无法处理单个输入数据包中的多个输入分块的字节。不过,对于所有解码器(视频和音频),都可以将前面的“上下文”标头(例如 h264 SPS 和 PPS 标头)与包含压缩输入数据(例如 h264 切片)的下一个输入分块位于同一输入数据包中。视频解码器始终需要允许下一数据包中的输入分块继续传输,包括在标头字节和压缩输入数据字节之间进行拆分,或拆分到两个压缩输入数据字节之间(但不一定位于两个标头字节之间;另请参阅 split_header_handling)。

解码器将 can_stream_bytes_input 设置为 true 的情况应该比较常见,但由于硬件、固件或驱动程序中的解析限制,将分屏_header_handling 设置为未设置或将 split_header_handling 设置为 false。在某些情况下,将 can_stream_bytes_input 设置为 false 或使 can_stream_bytes_input 未设置的解码器可能会强制重新打包输入数据。如果可行,建议设置 allow_encryption 的配置文件也设置 can_stream_bytes_input,因为在一些涉及加密的场景中,重新打包输入数据可能会更困难。

can_find_start bool

如果设置为 true,解码器可以在数据流开始时向前扫描,以查找第一个完全存在的输入块的开头,即使输入数据从位于数据块中间的字节开始也是如此。

对于视频和音频解码器,将此字段设置为 true 还表示能够处理(跳过或仅部分使用)由于缺少引用的先验数据而无法解码(或无法完全解码)的任何输入分块。

如果未设置或 false,解码器可能无法向前扫描以与输入流同步,除非输入流从合适分块的开头开始。

can_re_sync bool

如果设置为 true,则即使输入块缺失,解码器也可以(最终)重新与输入流同步,并且可以处理部分输入分块,而不会使数据流或 StreamProcessor 控制连接失败。

will_report_all_detected_errors bool

如果设置为 true,则解码器会尝试在适当期间设置 error_detected_before 和/或 error_detected_d,来指示部分、被检测为缺失或被检测为损坏的输入分块。即使此字段设置为 true,也要注意,一般情况下,解码器无法检测所有可能的数据损坏,因为编解码器通常不会倾向于在数据流中包含错误检测位。这并非实际数据完整性检查的替代方法(例如,对随机位翻转和位插入/删除的可靠度很高)。

split_header_handling bool

如果设置为 true,则解码器可以处理跨数据包边界拆分的任何标头的字节。如果为 false 或未设置,解码器会要求标头的所有标头字节都位于同一个数据包内。

始终允许在正式位于单独输入分块中的两个标头之间的规范定义的边界处创建新数据包。

就此字段而言,h264 SPS 和 PPS 标头等标头被视为单独的输入分块,因此无论此字段如何设置,具有自己的输入分块的此类标头都可以在单独的数据包中传送,并且后续的 h264 切片标头可以位于另一个数据包中。

无论“上下文”标头(例如 h264 SPS 和 PPS 标头)的此字段如何设置,始终允许将“上下文”标头(例如 h264 SPS 和 PPS 标头)与传送压缩图像数据(例如 h264 切片)的后续分块在同一个数据包中传送。

从不支持在 codec_oob_bytes 和数据流数据之间拆分单个标头(例如,客户端绝不会依赖于该标头),即使此字段设置为 true 也是如此。

另请参阅 can_stream_bytes_input。

具有 can_stream_bytes_input true 但 split_header_handling false 的视频解码器可以处理在标头和载荷之间或在载荷字节之间拆分时在下一个数据包中继续运行块的情况,并且可以处理单个输入数据包中多个输入分块的字节,但无法处理跨数据包拆分标头的操作。具有 can_stream_bytes_input false 和 split_header_handling 为 true 的视频解码器无法容忍单个数据包中的多个输入分块的字节,但无论拆分的位置如何(例如在 h264 SPS、PPS 或切片标头的中间),都可以容许下一个数据包中的输入分块的延续。

音频解码器不应将分屏设置为 true,除非它们也将 can_stream_bytes_input 设置为 true,因为对于音频解码器而言,允许拆分标头字节(对于音频解码器)没有意义,除非也允许拆分输入分块。

详细编解码器说明

fuchsia.mediacodec/codec_factory.fidl 中定义

如果客户端在仅通过 CodecFactory.CreateDecoder 或 CodecFactory.CreateEncoder 请求编解码器之前需要编解码器信息,应使用 GetDetailCodecDescriptions 获取此表格,其中详细介绍了编解码器支持的编解码器和配置文件条目。

如果客户端在请求编解码器之前确实不需要编解码器信息,只需使用 CodecFactory.CreateDecoder 或 CodecFactory.CreateEncoder,并在该请求中设置相关要求,然后调用 StreamProcessor.Sync(往返),即可检查是否已成功创建编解码器。

添加数量:11

序数字段类型说明
codec_type CodecType

解码器或编码器。

mime_type string[256]

压缩格式的 MIME 类型。对于解码器,这是输入的 MIME 类型。对于编码器,这是输出的 MIME 类型。

is_hw bool

该解码器/编码器使用底层硬件执行其操作。

profile_descriptions ProfileDescriptions

配置文件说明列表,描述此编码器/解码器支持的编解码器配置文件,以及使用每个配置文件的要求。

EncoderProfileDescription

fuchsia.mediacodec/codec_factory.fidl 中定义

添加数量:11

序数字段类型说明
profile fuchsia.media/CodecProfile

联合

ProfileDescriptions 严格

fuchsia.mediacodec/codec_factory.fidl 中定义

添加数量:11
序数变体类型说明
decoder_profile_descriptions vector<DecoderProfileDescription>[256]

|DecoderProfileDescription| 列表,描述此解码器支持的编解码器配置文件,以及如果客户端要使用解码器,则必须遵守的要求。CodecFactory 向客户端保证 |decoder_profile_descriptions| 中的每个 |DecoderProfileDescription| 都将具有唯一的 |profile|。

encoder_profile_descriptions vector<EncoderProfileDescription>[256]

常量

名称类型说明
CODEC_FACTORY_CODEC_LIST_SIZE_MAX 256 uint32

限制通过 OnCodecList 指示的向量的长度,并在 GetDetailedCodecDescriptions 的响应内限制任何向量中的项数上限。但是,编解码器上限信息的总体强制限制是通道消息大小上限,因为每个大小上限的嵌套矢量可能会超过通道消息大小上限。

CODEC_FACTORY_LIFETIME_TRACKING_EVENTPAIR_PER_CREATE_MAX 16 uint32

如果在没有 Create{X}() 调用的情况下对 AttachLifetimeTracking() 调用超过这么多调用,则会导致 CodecFactory 通道从服务器端关闭。

CODEC_FACTORY_MAX_MIME_TYPE_LENGTH 256 uint32

将 mime_type 限制为不会导致问题的大小。