class StreamBufferConstraints
Defined at line 11987 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.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 Members
static const fidl_type_t * FidlType
Public Methods
bool IsEmpty ()
Returns whether no field is set.
void StreamBufferConstraints ()
void StreamBufferConstraints (StreamBufferConstraints && other)
const 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).
Defined at line 12007 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_buffer_constraints_version_ordinal ()
Defined at line 12011 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
uint64_t * mutable_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).
Defined at line 12029 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_buffer_constraints_version_ordinal ()
Defined at line 12037 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const ::fuchsia::media::StreamBufferSettings & default_settings ()
Defined at line 12045 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_default_settings ()
Defined at line 12049 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
::fuchsia::media::StreamBufferSettings * mutable_default_settings ()
Defined at line 12053 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_default_settings ()
Defined at line 12061 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const uint32_t & per_packet_buffer_bytes_min ()
Defined at line 12069 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_per_packet_buffer_bytes_min ()
Defined at line 12073 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
uint32_t * mutable_per_packet_buffer_bytes_min ()
Defined at line 12077 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_per_packet_buffer_bytes_min ()
Defined at line 12085 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const uint32_t & per_packet_buffer_bytes_recommended ()
Defined at line 12093 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_per_packet_buffer_bytes_recommended ()
Defined at line 12097 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
uint32_t * mutable_per_packet_buffer_bytes_recommended ()
Defined at line 12101 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_per_packet_buffer_bytes_recommended ()
Defined at line 12109 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const uint32_t & per_packet_buffer_bytes_max ()
Defined at line 12117 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_per_packet_buffer_bytes_max ()
Defined at line 12121 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
uint32_t * mutable_per_packet_buffer_bytes_max ()
Defined at line 12125 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_per_packet_buffer_bytes_max ()
Defined at line 12133 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const uint32_t & packet_count_for_server_min ()
Defined at line 12141 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_packet_count_for_server_min ()
Defined at line 12145 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
uint32_t * mutable_packet_count_for_server_min ()
Defined at line 12149 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_packet_count_for_server_min ()
Defined at line 12157 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const uint32_t & packet_count_for_server_recommended ()
Defined at line 12165 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_packet_count_for_server_recommended ()
Defined at line 12169 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
uint32_t * mutable_packet_count_for_server_recommended ()
Defined at line 12173 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_packet_count_for_server_recommended ()
Defined at line 12181 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const uint32_t & packet_count_for_server_recommended_max ()
Defined at line 12189 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_packet_count_for_server_recommended_max ()
Defined at line 12193 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
uint32_t * mutable_packet_count_for_server_recommended_max ()
Defined at line 12197 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_packet_count_for_server_recommended_max ()
Defined at line 12205 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const uint32_t & packet_count_for_server_max ()
Defined at line 12213 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_packet_count_for_server_max ()
Defined at line 12217 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
uint32_t * mutable_packet_count_for_server_max ()
Defined at line 12221 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_packet_count_for_server_max ()
Defined at line 12229 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const uint32_t & packet_count_for_client_min ()
Defined at line 12237 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_packet_count_for_client_min ()
Defined at line 12241 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
uint32_t * mutable_packet_count_for_client_min ()
Defined at line 12245 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_packet_count_for_client_min ()
Defined at line 12253 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const uint32_t & packet_count_for_client_max ()
Defined at line 12261 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_packet_count_for_client_max ()
Defined at line 12265 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
uint32_t * mutable_packet_count_for_client_max ()
Defined at line 12269 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_packet_count_for_client_max ()
Defined at line 12277 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const 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.
Defined at line 12436 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_buffer_count_for_server_current ()
Defined at line 12440 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
uint32_t * mutable_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.
Defined at line 12547 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_buffer_count_for_server_current ()
Defined at line 12555 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_pixel_format ()
Defined at line 12678 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
::fuchsia::images2::PixelFormat * mutable_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.
Defined at line 12717 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_pixel_format ()
Defined at line 12725 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
StreamBufferConstraints & set_buffer_constraints_version_ordinal (uint64_t _value)
StreamBufferConstraints & set_default_settings (::fuchsia::media::StreamBufferSettings _value)
StreamBufferConstraints & set_per_packet_buffer_bytes_min (uint32_t _value)
StreamBufferConstraints & set_per_packet_buffer_bytes_recommended (uint32_t _value)
StreamBufferConstraints & set_per_packet_buffer_bytes_max (uint32_t _value)
StreamBufferConstraints & set_packet_count_for_server_min (uint32_t _value)
StreamBufferConstraints & set_packet_count_for_server_recommended (uint32_t _value)
StreamBufferConstraints & set_packet_count_for_server_recommended_max (uint32_t _value)
StreamBufferConstraints & set_packet_count_for_server_max (uint32_t _value)
StreamBufferConstraints & set_packet_count_for_client_min (uint32_t _value)
StreamBufferConstraints & set_packet_count_for_client_max (uint32_t _value)
StreamBufferConstraints & set_buffer_count_for_server_current (uint32_t _value)
StreamBufferConstraints & set_pixel_format (::fuchsia::images2::PixelFormat _value)
const bool & single_buffer_mode_allowed ()
Defined at line 12285 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_single_buffer_mode_allowed ()
Defined at line 12289 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool * mutable_single_buffer_mode_allowed ()
Defined at line 12293 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_single_buffer_mode_allowed ()
Defined at line 12301 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const bool & is_physically_contiguous_required ()
Defined at line 12309 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_is_physically_contiguous_required ()
Defined at line 12313 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool * mutable_is_physically_contiguous_required ()
Defined at line 12317 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_is_physically_contiguous_required ()
Defined at line 12325 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
StreamBufferConstraints & set_single_buffer_mode_allowed (bool _value)
StreamBufferConstraints & set_is_physically_contiguous_required (bool _value)
const ::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).
Defined at line 12589 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
bool has_size ()
Defined at line 12593 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
::fuchsia::math::SizeU * mutable_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).
Defined at line 12623 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
void clear_size ()
Defined at line 12631 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
const ::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.
Defined at line 12674 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h
StreamBufferConstraints & set_size (::fuchsia::math::SizeU _value)
void ~StreamBufferConstraints ()
StreamBufferConstraints & operator= (StreamBufferConstraints && other)
::std::unique_ptr<StreamBufferConstraints> New ()
void Encode (::fidl::Encoder *_encoder,size_t_offset,std::optional< ::fidl::HandleInformation>maybe_handle_info)
void Decode (::fidl::Decoder *_decoder,StreamBufferConstraints *_value,size_t_offset)
zx_status_t Clone (StreamBufferConstraints * _result)