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