class StreamBufferConstraints
Defined at line 12962 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/cpp/fidl/fuchsia.media/cpp/natural_types.h
This struct conveys the buffer_constraints_version_ordinal.
Historically this table conveyed more fields than it currently does, but
those fields are all deprecated in favor of using sysmem instead.
There are separate instances of this struct for stream input and stream
output.
Notes about fields:
For uncompressed video, separate and complete frames in their
separate buffers (buffer-per-packet mode) are always a requirement.
Public Methods
void StreamBufferConstraints (Storage_ storage)
void StreamBufferConstraints ()
Defined at line 12967 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/cpp/fidl/fuchsia.media/cpp/natural_types.h
void StreamBufferConstraints (StreamBufferConstraints && )
Defined at line 12968 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/cpp/fidl/fuchsia.media/cpp/natural_types.h
void StreamBufferConstraints (const StreamBufferConstraints & other)
bool operator!= (const StreamBufferConstraints & other)
bool IsEmpty ()
const std::optional<uint64_t> & buffer_constraints_version_ordinal ()
This is a version number the server sets on the constraints to allow the
server to determine when the client has caught up with the latest
constraints sent by the server. The server won't emit output data until
the client has configured output settings and buffers with a
buffer_constraints_version_ordinal >= the latest
buffer_constraints_version_ordinal that had
buffer_constraints_action_required true. See
buffer_constraints_action_required comments for more.
A buffer_constraints_version_ordinal of 0 is not permitted, to simplify
initial state handling. Other than 0, both odd and even version ordinals
are allowed (in contrast to the stream_lifetime_ordinal, neither the
client nor server ever has a reason to consider the latest version to be
stale, so there would be no benefit to disallowing even values).
::std::optional<uint64_t> & buffer_constraints_version_ordinal ()
This is a version number the server sets on the constraints to allow the
server to determine when the client has caught up with the latest
constraints sent by the server. The server won't emit output data until
the client has configured output settings and buffers with a
buffer_constraints_version_ordinal >= the latest
buffer_constraints_version_ordinal that had
buffer_constraints_action_required true. See
buffer_constraints_action_required comments for more.
A buffer_constraints_version_ordinal of 0 is not permitted, to simplify
initial state handling. Other than 0, both odd and even version ordinals
are allowed (in contrast to the stream_lifetime_ordinal, neither the
client nor server ever has a reason to consider the latest version to be
stale, so there would be no benefit to disallowing even values).
StreamBufferConstraints & buffer_constraints_version_ordinal (std::optional<uint64_t> value)
This is a version number the server sets on the constraints to allow the
server to determine when the client has caught up with the latest
constraints sent by the server. The server won't emit output data until
the client has configured output settings and buffers with a
buffer_constraints_version_ordinal >= the latest
buffer_constraints_version_ordinal that had
buffer_constraints_action_required true. See
buffer_constraints_action_required comments for more.
A buffer_constraints_version_ordinal of 0 is not permitted, to simplify
initial state handling. Other than 0, both odd and even version ordinals
are allowed (in contrast to the stream_lifetime_ordinal, neither the
client nor server ever has a reason to consider the latest version to be
stale, so there would be no benefit to disallowing even values).
const std::optional< ::fuchsia_media::StreamBufferSettings> & default_settings ()
::std::optional< ::fuchsia_media::StreamBufferSettings> & default_settings ()
StreamBufferConstraints & default_settings (std::optional< ::fuchsia_media::StreamBufferSettings> value)
Setter for default_settings.
StreamBufferConstraints & operator= (StreamBufferConstraints && )
Defined at line 12969 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/cpp/fidl/fuchsia.media/cpp/natural_types.h
StreamBufferConstraints & operator= (const StreamBufferConstraints & other)
bool operator== (const StreamBufferConstraints & other)
const std::optional<uint32_t> & per_packet_buffer_bytes_min ()
::std::optional<uint32_t> & per_packet_buffer_bytes_min ()
StreamBufferConstraints & per_packet_buffer_bytes_min (std::optional<uint32_t> value)
Setter for per_packet_buffer_bytes_min.
const std::optional<uint32_t> & per_packet_buffer_bytes_recommended ()
::std::optional<uint32_t> & per_packet_buffer_bytes_recommended ()
StreamBufferConstraints & per_packet_buffer_bytes_recommended (std::optional<uint32_t> value)
Setter for per_packet_buffer_bytes_recommended.
const std::optional<uint32_t> & per_packet_buffer_bytes_max ()
::std::optional<uint32_t> & per_packet_buffer_bytes_max ()
StreamBufferConstraints & per_packet_buffer_bytes_max (std::optional<uint32_t> value)
Setter for per_packet_buffer_bytes_max.
const std::optional<uint32_t> & packet_count_for_server_min ()
::std::optional<uint32_t> & packet_count_for_server_min ()
StreamBufferConstraints & packet_count_for_server_min (std::optional<uint32_t> value)
Setter for packet_count_for_server_min.
const std::optional<uint32_t> & packet_count_for_server_recommended ()
::std::optional<uint32_t> & packet_count_for_server_recommended ()
StreamBufferConstraints & packet_count_for_server_recommended (std::optional<uint32_t> value)
Setter for packet_count_for_server_recommended.
const std::optional<uint32_t> & packet_count_for_server_recommended_max ()
::std::optional<uint32_t> & packet_count_for_server_recommended_max ()
StreamBufferConstraints & packet_count_for_server_recommended_max (std::optional<uint32_t> value)
Setter for packet_count_for_server_recommended_max.
const std::optional<uint32_t> & packet_count_for_server_max ()
::std::optional<uint32_t> & packet_count_for_server_max ()
StreamBufferConstraints & packet_count_for_server_max (std::optional<uint32_t> value)
Setter for packet_count_for_server_max.
const std::optional<uint32_t> & packet_count_for_client_min ()
::std::optional<uint32_t> & packet_count_for_client_min ()
StreamBufferConstraints & packet_count_for_client_min (std::optional<uint32_t> value)
Setter for packet_count_for_client_min.
const std::optional<uint32_t> & packet_count_for_client_max ()
::std::optional<uint32_t> & packet_count_for_client_max ()
StreamBufferConstraints & packet_count_for_client_max (std::optional<uint32_t> value)
Setter for packet_count_for_client_max.
const std::optional<bool> & single_buffer_mode_allowed ()
::std::optional<bool> & single_buffer_mode_allowed ()
StreamBufferConstraints & single_buffer_mode_allowed (std::optional<bool> value)
Setter for single_buffer_mode_allowed.
const std::optional<bool> & is_physically_contiguous_required ()
::std::optional<bool> & is_physically_contiguous_required ()
StreamBufferConstraints & is_physically_contiguous_required (std::optional<bool> value)
Setter for is_physically_contiguous_required.
const std::optional<uint32_t> & buffer_count_for_server_current ()
If a codec has
`[fuchsia.mediacodec/DetailedCodecDescription.supports_dynamic_buffers]`
set to true, this field must be set by the server and will be the
minimum number of input or output buffers that the server needs to be
able to concurrently use (or continue using) to guarantee forward
progress. For video decoders, this number assumes a
bitstream-standard-compliant stream. Any time the server doesn't have
this many buffers available for the server's concurrent use (DPB size +
1), processing may pause, but will not fail - in this case the client
can add more buffers with AddBuffers to get the processing to start
again. When the DPB needs to reference more images, recycling an output
buffer won't necessarily cause processing to start again, as the image
may still be in the DPB, so the buffer can't be re-used yet despite
being recycled by the client.
For input, the codec may require this many buffers before the codec will
process any input. Currently, for input, this value is static per
StreamProcessor instance. The client is allowed to send QueueInput...()
messages before this many input buffers have been added, but should not
expect any output to necessarily be emitted until at least this many
input buffers have been added. This also applies for
QueueInputFormatDetails and QueueInputEndOfStream before any
QueueInputPacket, for a newly starting stream, so the first two can be
sent while there are still zero added input buffers so far. Codecs that
only need one input buffer to make forward progress (non-continuous
non-smooth forward progress still counts) should set this to one. Most
clients will want to add a low number of additional buffers to keep the
pipeline running smoothly, to avoid stalling processing while an
OnFreeInputPacket is on its way from the codec to the client. Decoders
that copy input data into a separate stream buffer (sometimes treated as
circular) typically will only need one input buffer for forward progress
to be possible, but most clients will still want to add a low number of
additional input buffers for smoother thread scheduling, even if such a
decoder core might be able to run at 100% utilization with a single
input buffer.
For video decoder output, if a client were to only `AddBuffers` this
many buffers overall, every time `OnOutputPacket` happened, the decoder
would be potentially stalled until `RecycleOutputPacket` is received at
the server. For this reason, most clients will prefer to allocate a few
more buffers, accounting for other parts of the pipeline (locally in the
client or not) that may also need to "camp" on buffers for reasons
unrelated to video decode, and possibly also a low number of additional
buffers to keep the pipeline running smoothly, to avoid stalling decode
while a free buffer on its way to being recycled or similar.
For video decoder output, when set, this value will always be less than
or equal to
`[fuchsia.mediacodec/DetailedCodecDescription.dynamic_buffers_video_decoder_output_safe]`.
This value can be updated by a new OnOutputConstraints from the server
with action_required false. However, despite "action_required" being
false, the client must still ensure that the number of buffers currently
available for concurrent use by the codec is at least this many.
If a client using dynamic buffers with a video decoder doesn't want to
pay attention to this field, the client should still pay attention to
`[fuchsia.mediacodec/DetailedCodecDescription.dynamic_buffers_video_decoder_output_safe]`.
Or the client can instead use
SetInputBufferPartialSettings/SetOutputBufferPartialSettings which has
approximately the same (potentially adverse) effect in terms of overall
buffer count (assuming a correctly operating pipeline). While these less
complicated client implementation options might initially seem like
they're wasting some memory, paying attention to
buffer_count_for_server_current (in contrast to only
dynamic_buffers_video_decoder_output_safe) only saves memory if the
stream has the needed optional fields with values less than the max DPB
size, which is unfortunately not guaranteed. In particular, h.264
streams without max_num_reorder_frames or max_dec_frame_buffering set in
vui_parameters (or anywhere else) seem more common than not (to this
author, among streams looked at so far), though this could depend
strongly on which particular set of streams a client wants to decode.
Client implementers may want to check some of the relevant streams for
relevant bitstream header fields before caring about this field and the
dynamic changes to the value conveyed by this field, for video decoders.
Also, client implementers are free to use other strategies to save
memory, such as being stingy with buffer counts but adding buffers
dynamically and quickly if it seems like the codec might be starving for
buffers (such as if downstream queued output buffers start to run low).
This sort of strategy is up to the client, and it's on the client to get
the timing right if it goes with that sort of strategy (not super easy
to get perfectly correct / tuned). The platform makes no specific
guarantee re. how quickly an additional buffer can be allocated, so a
client attempting to run with fewer than
dynamic_buffers_video_decoder_output_safe may encounter stream rendering
jank or similar, including mid-stream. The platform makes no promises
regarding the ability to avoid jank in this situation, such as if
there's a mid-stream header that increases this value for output (not
common).
Layers above are encouraged to permit storing smaller images in larger
buffers, so that mid-stream dimensions changes don't each need to
re-allocate buffers. Instead, it's almost always better to just keep
using existing larger buffers in this case, to avoid possibility of
rendering jank due to allocating buffers not always being as fast as
desired combined with output buffer count not necessarily having
sufficient extra buffers to absorb the buffer reallocation in a timing
sense. However, if a layer above really must re-allocate buffers when
the image size changes and the needed buffer size to hold the images
goes down, such a client must set force_new_buffers_for_new_dimensions
passed to CreateDecoder. Otherwise a video decoder is permitted to start
putting smaller images in the existing larger buffers, with
OnOutputFormat message(s) indicating this.
::std::optional<uint32_t> & buffer_count_for_server_current ()
If a codec has
`[fuchsia.mediacodec/DetailedCodecDescription.supports_dynamic_buffers]`
set to true, this field must be set by the server and will be the
minimum number of input or output buffers that the server needs to be
able to concurrently use (or continue using) to guarantee forward
progress. For video decoders, this number assumes a
bitstream-standard-compliant stream. Any time the server doesn't have
this many buffers available for the server's concurrent use (DPB size +
1), processing may pause, but will not fail - in this case the client
can add more buffers with AddBuffers to get the processing to start
again. When the DPB needs to reference more images, recycling an output
buffer won't necessarily cause processing to start again, as the image
may still be in the DPB, so the buffer can't be re-used yet despite
being recycled by the client.
For input, the codec may require this many buffers before the codec will
process any input. Currently, for input, this value is static per
StreamProcessor instance. The client is allowed to send QueueInput...()
messages before this many input buffers have been added, but should not
expect any output to necessarily be emitted until at least this many
input buffers have been added. This also applies for
QueueInputFormatDetails and QueueInputEndOfStream before any
QueueInputPacket, for a newly starting stream, so the first two can be
sent while there are still zero added input buffers so far. Codecs that
only need one input buffer to make forward progress (non-continuous
non-smooth forward progress still counts) should set this to one. Most
clients will want to add a low number of additional buffers to keep the
pipeline running smoothly, to avoid stalling processing while an
OnFreeInputPacket is on its way from the codec to the client. Decoders
that copy input data into a separate stream buffer (sometimes treated as
circular) typically will only need one input buffer for forward progress
to be possible, but most clients will still want to add a low number of
additional input buffers for smoother thread scheduling, even if such a
decoder core might be able to run at 100% utilization with a single
input buffer.
For video decoder output, if a client were to only `AddBuffers` this
many buffers overall, every time `OnOutputPacket` happened, the decoder
would be potentially stalled until `RecycleOutputPacket` is received at
the server. For this reason, most clients will prefer to allocate a few
more buffers, accounting for other parts of the pipeline (locally in the
client or not) that may also need to "camp" on buffers for reasons
unrelated to video decode, and possibly also a low number of additional
buffers to keep the pipeline running smoothly, to avoid stalling decode
while a free buffer on its way to being recycled or similar.
For video decoder output, when set, this value will always be less than
or equal to
`[fuchsia.mediacodec/DetailedCodecDescription.dynamic_buffers_video_decoder_output_safe]`.
This value can be updated by a new OnOutputConstraints from the server
with action_required false. However, despite "action_required" being
false, the client must still ensure that the number of buffers currently
available for concurrent use by the codec is at least this many.
If a client using dynamic buffers with a video decoder doesn't want to
pay attention to this field, the client should still pay attention to
`[fuchsia.mediacodec/DetailedCodecDescription.dynamic_buffers_video_decoder_output_safe]`.
Or the client can instead use
SetInputBufferPartialSettings/SetOutputBufferPartialSettings which has
approximately the same (potentially adverse) effect in terms of overall
buffer count (assuming a correctly operating pipeline). While these less
complicated client implementation options might initially seem like
they're wasting some memory, paying attention to
buffer_count_for_server_current (in contrast to only
dynamic_buffers_video_decoder_output_safe) only saves memory if the
stream has the needed optional fields with values less than the max DPB
size, which is unfortunately not guaranteed. In particular, h.264
streams without max_num_reorder_frames or max_dec_frame_buffering set in
vui_parameters (or anywhere else) seem more common than not (to this
author, among streams looked at so far), though this could depend
strongly on which particular set of streams a client wants to decode.
Client implementers may want to check some of the relevant streams for
relevant bitstream header fields before caring about this field and the
dynamic changes to the value conveyed by this field, for video decoders.
Also, client implementers are free to use other strategies to save
memory, such as being stingy with buffer counts but adding buffers
dynamically and quickly if it seems like the codec might be starving for
buffers (such as if downstream queued output buffers start to run low).
This sort of strategy is up to the client, and it's on the client to get
the timing right if it goes with that sort of strategy (not super easy
to get perfectly correct / tuned). The platform makes no specific
guarantee re. how quickly an additional buffer can be allocated, so a
client attempting to run with fewer than
dynamic_buffers_video_decoder_output_safe may encounter stream rendering
jank or similar, including mid-stream. The platform makes no promises
regarding the ability to avoid jank in this situation, such as if
there's a mid-stream header that increases this value for output (not
common).
Layers above are encouraged to permit storing smaller images in larger
buffers, so that mid-stream dimensions changes don't each need to
re-allocate buffers. Instead, it's almost always better to just keep
using existing larger buffers in this case, to avoid possibility of
rendering jank due to allocating buffers not always being as fast as
desired combined with output buffer count not necessarily having
sufficient extra buffers to absorb the buffer reallocation in a timing
sense. However, if a layer above really must re-allocate buffers when
the image size changes and the needed buffer size to hold the images
goes down, such a client must set force_new_buffers_for_new_dimensions
passed to CreateDecoder. Otherwise a video decoder is permitted to start
putting smaller images in the existing larger buffers, with
OnOutputFormat message(s) indicating this.
StreamBufferConstraints & buffer_count_for_server_current (std::optional<uint32_t> value)
If a codec has
`[fuchsia.mediacodec/DetailedCodecDescription.supports_dynamic_buffers]`
set to true, this field must be set by the server and will be the
minimum number of input or output buffers that the server needs to be
able to concurrently use (or continue using) to guarantee forward
progress. For video decoders, this number assumes a
bitstream-standard-compliant stream. Any time the server doesn't have
this many buffers available for the server's concurrent use (DPB size +
1), processing may pause, but will not fail - in this case the client
can add more buffers with AddBuffers to get the processing to start
again. When the DPB needs to reference more images, recycling an output
buffer won't necessarily cause processing to start again, as the image
may still be in the DPB, so the buffer can't be re-used yet despite
being recycled by the client.
For input, the codec may require this many buffers before the codec will
process any input. Currently, for input, this value is static per
StreamProcessor instance. The client is allowed to send QueueInput...()
messages before this many input buffers have been added, but should not
expect any output to necessarily be emitted until at least this many
input buffers have been added. This also applies for
QueueInputFormatDetails and QueueInputEndOfStream before any
QueueInputPacket, for a newly starting stream, so the first two can be
sent while there are still zero added input buffers so far. Codecs that
only need one input buffer to make forward progress (non-continuous
non-smooth forward progress still counts) should set this to one. Most
clients will want to add a low number of additional buffers to keep the
pipeline running smoothly, to avoid stalling processing while an
OnFreeInputPacket is on its way from the codec to the client. Decoders
that copy input data into a separate stream buffer (sometimes treated as
circular) typically will only need one input buffer for forward progress
to be possible, but most clients will still want to add a low number of
additional input buffers for smoother thread scheduling, even if such a
decoder core might be able to run at 100% utilization with a single
input buffer.
For video decoder output, if a client were to only `AddBuffers` this
many buffers overall, every time `OnOutputPacket` happened, the decoder
would be potentially stalled until `RecycleOutputPacket` is received at
the server. For this reason, most clients will prefer to allocate a few
more buffers, accounting for other parts of the pipeline (locally in the
client or not) that may also need to "camp" on buffers for reasons
unrelated to video decode, and possibly also a low number of additional
buffers to keep the pipeline running smoothly, to avoid stalling decode
while a free buffer on its way to being recycled or similar.
For video decoder output, when set, this value will always be less than
or equal to
`[fuchsia.mediacodec/DetailedCodecDescription.dynamic_buffers_video_decoder_output_safe]`.
This value can be updated by a new OnOutputConstraints from the server
with action_required false. However, despite "action_required" being
false, the client must still ensure that the number of buffers currently
available for concurrent use by the codec is at least this many.
If a client using dynamic buffers with a video decoder doesn't want to
pay attention to this field, the client should still pay attention to
`[fuchsia.mediacodec/DetailedCodecDescription.dynamic_buffers_video_decoder_output_safe]`.
Or the client can instead use
SetInputBufferPartialSettings/SetOutputBufferPartialSettings which has
approximately the same (potentially adverse) effect in terms of overall
buffer count (assuming a correctly operating pipeline). While these less
complicated client implementation options might initially seem like
they're wasting some memory, paying attention to
buffer_count_for_server_current (in contrast to only
dynamic_buffers_video_decoder_output_safe) only saves memory if the
stream has the needed optional fields with values less than the max DPB
size, which is unfortunately not guaranteed. In particular, h.264
streams without max_num_reorder_frames or max_dec_frame_buffering set in
vui_parameters (or anywhere else) seem more common than not (to this
author, among streams looked at so far), though this could depend
strongly on which particular set of streams a client wants to decode.
Client implementers may want to check some of the relevant streams for
relevant bitstream header fields before caring about this field and the
dynamic changes to the value conveyed by this field, for video decoders.
Also, client implementers are free to use other strategies to save
memory, such as being stingy with buffer counts but adding buffers
dynamically and quickly if it seems like the codec might be starving for
buffers (such as if downstream queued output buffers start to run low).
This sort of strategy is up to the client, and it's on the client to get
the timing right if it goes with that sort of strategy (not super easy
to get perfectly correct / tuned). The platform makes no specific
guarantee re. how quickly an additional buffer can be allocated, so a
client attempting to run with fewer than
dynamic_buffers_video_decoder_output_safe may encounter stream rendering
jank or similar, including mid-stream. The platform makes no promises
regarding the ability to avoid jank in this situation, such as if
there's a mid-stream header that increases this value for output (not
common).
Layers above are encouraged to permit storing smaller images in larger
buffers, so that mid-stream dimensions changes don't each need to
re-allocate buffers. Instead, it's almost always better to just keep
using existing larger buffers in this case, to avoid possibility of
rendering jank due to allocating buffers not always being as fast as
desired combined with output buffer count not necessarily having
sufficient extra buffers to absorb the buffer reallocation in a timing
sense. However, if a layer above really must re-allocate buffers when
the image size changes and the needed buffer size to hold the images
goes down, such a client must set force_new_buffers_for_new_dimensions
passed to CreateDecoder. Otherwise a video decoder is permitted to start
putting smaller images in the existing larger buffers, with
OnOutputFormat message(s) indicating this.
const std::optional< ::fuchsia_math::SizeU> & size ()
Clients are free to ignore this field.
This field is set iff
`[fuchsia.mediacodec/DetailedCodecDescription.supports_dynamic_buffers]`
is true and the indicating port is outputting uncompressed video.
This field is provided for informational purposes, for clients that may
want to know this information. However, the StreamProcessor and sysmem
protocols work fine without the client ever reading this field.
This is the required coded size, without any cropping down to display
size.
If the client gets directly involved as a sysmem participant, the client
should not set constraints which are incompatible with this size, or
allocation will fail. This field should not be taken to imply that a
given buffer only has a single allowed image size. That is incorrect in
general. Rather, this field indicates a size which will be covered by
the required_min_size and required_max_size set by the StreamProcessor
sysmem participant using token passed into
SetInputBufferPartialSettings, SetOutputBufferPartialSettings, or
ParticipateInBufferAllocation.
Despite this size indicating a specific width and height, the allocated
buffers may permit a range of image sizes (for video decoder output or
video encoder input).
::std::optional< ::fuchsia_math::SizeU> & size ()
Clients are free to ignore this field.
This field is set iff
`[fuchsia.mediacodec/DetailedCodecDescription.supports_dynamic_buffers]`
is true and the indicating port is outputting uncompressed video.
This field is provided for informational purposes, for clients that may
want to know this information. However, the StreamProcessor and sysmem
protocols work fine without the client ever reading this field.
This is the required coded size, without any cropping down to display
size.
If the client gets directly involved as a sysmem participant, the client
should not set constraints which are incompatible with this size, or
allocation will fail. This field should not be taken to imply that a
given buffer only has a single allowed image size. That is incorrect in
general. Rather, this field indicates a size which will be covered by
the required_min_size and required_max_size set by the StreamProcessor
sysmem participant using token passed into
SetInputBufferPartialSettings, SetOutputBufferPartialSettings, or
ParticipateInBufferAllocation.
Despite this size indicating a specific width and height, the allocated
buffers may permit a range of image sizes (for video decoder output or
video encoder input).
StreamBufferConstraints & size (std::optional< ::fuchsia_math::SizeU> value)
Clients are free to ignore this field.
This field is set iff
`[fuchsia.mediacodec/DetailedCodecDescription.supports_dynamic_buffers]`
is true and the indicating port is outputting uncompressed video.
This field is provided for informational purposes, for clients that may
want to know this information. However, the StreamProcessor and sysmem
protocols work fine without the client ever reading this field.
This is the required coded size, without any cropping down to display
size.
If the client gets directly involved as a sysmem participant, the client
should not set constraints which are incompatible with this size, or
allocation will fail. This field should not be taken to imply that a
given buffer only has a single allowed image size. That is incorrect in
general. Rather, this field indicates a size which will be covered by
the required_min_size and required_max_size set by the StreamProcessor
sysmem participant using token passed into
SetInputBufferPartialSettings, SetOutputBufferPartialSettings, or
ParticipateInBufferAllocation.
Despite this size indicating a specific width and height, the allocated
buffers may permit a range of image sizes (for video decoder output or
video encoder input).
const std::optional< ::fuchsia_images2::PixelFormat> & pixel_format ()
Clients are free to ignore this field.
This field is set iff
`[fuchsia.mediacodec/DetailedCodecDescription.supports_dynamic_buffers]`
is true and the indicating port is conveying uncompressed video.
This field is provided for informational purposes, for clients that may
want to know this information. However, the StreamProcessor and sysmem
protocols work fine without the client ever reading this field.
Among the pixel formats supported by the StreamProcessor server which
can carry the full bit depth of the images, and which are broadly
supported for carrying images of the needed bit depth, and assuming
linear pixel_format_modifier, this is the pixel format that is most
performant for the StreamProcessor considered in isolation. If multiple
qualified formats are essentially the same performance, this should be
the most common format (or chosen arbitrarily among roughly
equally-common formats). Most StreamProcessor servers will hard code a
particular format to put in this field for each supported bit depth.
Currently, there is no anticipated need for a list here, but please
don't hesitate to reach out if a non-test scenario is encountered which
can only be addressed by having a list here (or by attempting several
test allocations via ParticipateInBufferAllocation, or by adding a
sysmem feature).
In general, sysmem is not guaranteed to select this pixel format, since
that depends on the full set of pixel formats supported by the
StreamProcessor instance and other sysmem participants. If only the
client and StreamProcessor are sysmem participants (such as in some
tests), if the client requires this pixel format, buffer allocation can
still succeed. Typical non-test clients will not need or want to
constrain the sysmem allocation to only allow this pixel format, as that
would be more likely to fail allocation in comparison to letting sysmem
pick a format mutually supported by all participants.
::std::optional< ::fuchsia_images2::PixelFormat> & pixel_format ()
Clients are free to ignore this field.
This field is set iff
`[fuchsia.mediacodec/DetailedCodecDescription.supports_dynamic_buffers]`
is true and the indicating port is conveying uncompressed video.
This field is provided for informational purposes, for clients that may
want to know this information. However, the StreamProcessor and sysmem
protocols work fine without the client ever reading this field.
Among the pixel formats supported by the StreamProcessor server which
can carry the full bit depth of the images, and which are broadly
supported for carrying images of the needed bit depth, and assuming
linear pixel_format_modifier, this is the pixel format that is most
performant for the StreamProcessor considered in isolation. If multiple
qualified formats are essentially the same performance, this should be
the most common format (or chosen arbitrarily among roughly
equally-common formats). Most StreamProcessor servers will hard code a
particular format to put in this field for each supported bit depth.
Currently, there is no anticipated need for a list here, but please
don't hesitate to reach out if a non-test scenario is encountered which
can only be addressed by having a list here (or by attempting several
test allocations via ParticipateInBufferAllocation, or by adding a
sysmem feature).
In general, sysmem is not guaranteed to select this pixel format, since
that depends on the full set of pixel formats supported by the
StreamProcessor instance and other sysmem participants. If only the
client and StreamProcessor are sysmem participants (such as in some
tests), if the client requires this pixel format, buffer allocation can
still succeed. Typical non-test clients will not need or want to
constrain the sysmem allocation to only allow this pixel format, as that
would be more likely to fail allocation in comparison to letting sysmem
pick a format mutually supported by all participants.
StreamBufferConstraints & pixel_format (std::optional< ::fuchsia_images2::PixelFormat> value)
Clients are free to ignore this field.
This field is set iff
`[fuchsia.mediacodec/DetailedCodecDescription.supports_dynamic_buffers]`
is true and the indicating port is conveying uncompressed video.
This field is provided for informational purposes, for clients that may
want to know this information. However, the StreamProcessor and sysmem
protocols work fine without the client ever reading this field.
Among the pixel formats supported by the StreamProcessor server which
can carry the full bit depth of the images, and which are broadly
supported for carrying images of the needed bit depth, and assuming
linear pixel_format_modifier, this is the pixel format that is most
performant for the StreamProcessor considered in isolation. If multiple
qualified formats are essentially the same performance, this should be
the most common format (or chosen arbitrarily among roughly
equally-common formats). Most StreamProcessor servers will hard code a
particular format to put in this field for each supported bit depth.
Currently, there is no anticipated need for a list here, but please
don't hesitate to reach out if a non-test scenario is encountered which
can only be addressed by having a list here (or by attempting several
test allocations via ParticipateInBufferAllocation, or by adding a
sysmem feature).
In general, sysmem is not guaranteed to select this pixel format, since
that depends on the full set of pixel formats supported by the
StreamProcessor instance and other sysmem participants. If only the
client and StreamProcessor are sysmem participants (such as in some
tests), if the client requires this pixel format, buffer allocation can
still succeed. Typical non-test clients will not need or want to
constrain the sysmem allocation to only allow this pixel format, as that
would be more likely to fail allocation in comparison to letting sysmem
pick a format mutually supported by all participants.
void StreamBufferConstraints (::fidl::internal::DefaultConstructPossiblyInvalidObjectTag )
Friends
class MemberVisitor
class NaturalTableCodingTraits