class EnableOldOutputBuffers

Defined at line 2121 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/cpp/fidl/fuchsia.media/cpp/markers.h

This informs the StreamProcessor that the client is prepared to handle

output packets that specify a buffer with buffer_lifetime_ordinal older

than the most recent buffer_lifetime_ordinal.

If the client doesn't send this message, the StreamProcessor will omit

any such output, even if

DetailedCodecDescription.supports_dynamic_buffers is true. For relevant

decoders such as VP9 decoders, not sending this message can result in

output that isn't bistream spec compliant, and the output can be

visually different than intended by the bitstream.

Such streams are only possible with some bitstream formats (such as

VP9), and are rare, but can happen and can be valid per the bitstream

spec. For example, this can be specified by a VP9 bitstream using

show_existing_frame to output an old-dimensions buffer after having

already output a new-dimensions buffer.

Most clients that send this message will also want to use RemoveBuffer

to know when it becomes safe to stop tracking an old buffer.

Most of the time this makes no difference as most bitstreams don't

actually emit old buffers, even if the bitstream spec would allow it.

Old output buffers are especially rare for RTC streams which typically

don't have any frame reordering in the first place.

In most video streaming scenarios that use dimension switching as part

of their bitrate control strategy (among those that I've observed), at

the StreamProcessor layer the new dimensions are part of a new stream

instead of being spliced together as a continuation of the old stream.

That said, using a continuation of the old stream is also a completely

valid way to implement dimension switching. When a stream switch occurs

as part of dimension switching, the decoder state is not retained and

there won't be any old buffer(s) emitted after new buffer(s), since the

new stream doesn't know anything about old buffers filled by the old

stream.

Clients which haven't tested their ability to handle old output buffers

should not send this message. Clients decoding bitstreams like VP9 for

decoder compliance testing purposes should send this message (and use a

VP9 decoder with DetailedCodecDescrption.supports_dynamic_buffers true).

Clients which are required to support old output frames and/or fully

comply with a relevant bitstream spec should/must send this message, and

should test using a test stream that outputs packets referencing an old

output buffer.

Sending this message more than once closes the channel. If sent, this

message must be sent prior to the client establishing the first output

buffer_lifetime_ordinal. This requirement avoids ambiguity re. free/busy

status of packets of old buffer_lifetime_ordinal(s), as the server can

auto-recycle packets with old buffer_lifetime_ordinal on behalf of the

client when this message was not sent by the client.

This message is only permitted when

`[fuchsia.mediacodec/CodecFactory.DetailedCodecDescription.supports_dynamic_buffers]`

is true.

Public Members

static const bool kHasClientToServer
static const bool kHasClientToServerBody
static const bool kHasServerToClient
static const bool kHasServerToClientBody
static const bool kHasNonEmptyUserFacingResponse
static const bool kHasDomainError
static const bool kHasFrameworkError
static const uint64_t kOrdinal