class PacketHeader

Defined at line 9202 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h

PacketHeader

When referring to a free packet, we use PacketHeader alone instead of

Packet, since while a packet is free it doesn't really have meaningful

offset or length etc.

A populated Packet also has a PacketHeader.

Public Members

static const fidl_type_t * FidlType

Public Methods

bool IsEmpty ()

Returns whether no field is set.

void PacketHeader ()
void PacketHeader (PacketHeader && other)
const uint64_t & buffer_lifetime_ordinal ()

This is which buffer configuration lifetime this header is referring to.

See

`[fuchsia.mediacodec/StreamBufferPartialSettings.buffer_lifetime_ordinal]`.

For QueueInputPacket(), a server receiving a buffer_lifetime_ordinal

that isn't the current input buffer_lifetime_ordinal will close the

channel.

For output packets, this can be an old buffer_lifetime_ordinal only if

EnableOldOutputBuffers was sent by the client. See also RemoveBuffer to

determine when it's safe to stop tracking old output buffers (only

relevant to some video bitstream formats such as VP9, and only relevant

to decoders). Streams that want to emit old output buffers are rare

outside of bitstream format test streams.

Defined at line 9223 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h

bool has_buffer_lifetime_ordinal ()

Defined at line 9227 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h

uint64_t * mutable_buffer_lifetime_ordinal ()

This is which buffer configuration lifetime this header is referring to.

See

`[fuchsia.mediacodec/StreamBufferPartialSettings.buffer_lifetime_ordinal]`.

For QueueInputPacket(), a server receiving a buffer_lifetime_ordinal

that isn't the current input buffer_lifetime_ordinal will close the

channel.

For output packets, this can be an old buffer_lifetime_ordinal only if

EnableOldOutputBuffers was sent by the client. See also RemoveBuffer to

determine when it's safe to stop tracking old output buffers (only

relevant to some video bitstream formats such as VP9, and only relevant

to decoders). Streams that want to emit old output buffers are rare

outside of bitstream format test streams.

Defined at line 9246 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h

void clear_buffer_lifetime_ordinal ()

Defined at line 9254 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h

const uint32_t & packet_index ()

When using `SetInputBufferPartialSettings` or

`SetOutputBufferPartialSettings` to allocate buffers, the valid range of

`packet_index` is from 0..buffer_count-1, where buffer_count is the

length of `[fuchsia.sysmem2/BufferCollectionInfo.buffers]`, considering

input and output separately.

When using `ParticipateInBufferAllocation` and `AddBuffer` to allocate

and add buffers, the valid range of `packet_index` is unconstrained (any

uint32 value). The client and server must still ensure that

`packet_index` values aren't re-used until the other end has indicated

the `packet_index` value is again available and can be re-used.

The number of concurrently in-flight `packet_index` values is limited

per port (input vs. output) and `buffer_lifetime_ordinal`. If a client

never puts the same input buffer in flight using more than one input

packet concurrently, this inherently ensures the client will conform to

this limit. Most clients can safely ignore this limit for output from

the server. The limit is as follows:

* When sending a packet, the sender must ensure that the number of

concurrently in-flight `packet_index` values under the port (input

or output) and `buffer_lifetime_ordinal` does not exceed the

high-water-mark number of buffers that have concurrently existed

from the server's point of view under the `buffer_lifetime_ordinal`

so far. When using `SetInputBufferPartialSettings`, this is

buffer_count as defined above.

* When using `AddBuffer`, the high-water-mark value is determined

slightly differently for input vs. output.

* For input, this high-water-mark value is the maximum value so far

under the `buffer_lifetime_ordinal` of the total number of

`AddBuffer` messages regarding the `buffer_lifetime_ordinal` minus

the total number of `RemoveBuffer` messages regarding the

`buffer_lifetime_ordinal`.

* If a client never puts an input buffer in flight more than once

concurrently using multiple different input `packet_index`

values, then the client will inherently stay under this limit

for input.

* For output, this high-water-mark value is the maximum so far under

the `buffer_lifetime_ordinal` of the total number of `AddBuffer`

messages regarding the `buffer_lifetime_ordinal` minus the total

number of completed buffer removals under the

`buffer_lifetime_ordinal`. This is without regard to which buffer

removals had a corresponding `RemoveBuffer` completion.

* If a client wishes to (optionally) validate this server

behavior, the client can rely on the server to not complete a

`RemoveBuffer` until after completion of buffer removal

server-side (else the server is failing to conform to

`RemoveBuffer` semantics or failing to conform to this limit).

For input, the client chooses an available `packet_index` value

arbitrarily when sending an input packet with `QueueInputPacket`, and

the client doesn't re-use the value until the server has sent

`OnFreeInputPacket` with that `packet_index` value.

For output, the server chooses an available `packet_index` value

arbitrarily (among all uint32 values) when sending an output packet with

`OnOutputPacket`, and doesn't re-use the value until the client has sent

`RecycleOutputPacket` with that `packet_index` value.

Available `packet_index` values can be queued in arbitrary order.

Both the client and server should validate the packet_index against the

known bound (if any; see above) and disconnect if it's out of bounds.

The packet_index values don't imply anything about order of use of

packets. The client should not expect the ordering to remain the same

over time - the stream processor is free to hold on to an input or

output packet for a while during which some other packet_index values

may be re-used multiple times.

For a given properly-functioning StreamProcessor instance, output

packet_index values will be unique among concurrently-outstanding

packets.

Servers should validate that a client isn't double-using a packet and

clients may similarly validate `packet_index` values from the server.

Defined at line 9337 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h

bool has_packet_index ()

Defined at line 9341 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h

uint32_t * mutable_packet_index ()

When using `SetInputBufferPartialSettings` or

`SetOutputBufferPartialSettings` to allocate buffers, the valid range of

`packet_index` is from 0..buffer_count-1, where buffer_count is the

length of `[fuchsia.sysmem2/BufferCollectionInfo.buffers]`, considering

input and output separately.

When using `ParticipateInBufferAllocation` and `AddBuffer` to allocate

and add buffers, the valid range of `packet_index` is unconstrained (any

uint32 value). The client and server must still ensure that

`packet_index` values aren't re-used until the other end has indicated

the `packet_index` value is again available and can be re-used.

The number of concurrently in-flight `packet_index` values is limited

per port (input vs. output) and `buffer_lifetime_ordinal`. If a client

never puts the same input buffer in flight using more than one input

packet concurrently, this inherently ensures the client will conform to

this limit. Most clients can safely ignore this limit for output from

the server. The limit is as follows:

* When sending a packet, the sender must ensure that the number of

concurrently in-flight `packet_index` values under the port (input

or output) and `buffer_lifetime_ordinal` does not exceed the

high-water-mark number of buffers that have concurrently existed

from the server's point of view under the `buffer_lifetime_ordinal`

so far. When using `SetInputBufferPartialSettings`, this is

buffer_count as defined above.

* When using `AddBuffer`, the high-water-mark value is determined

slightly differently for input vs. output.

* For input, this high-water-mark value is the maximum value so far

under the `buffer_lifetime_ordinal` of the total number of

`AddBuffer` messages regarding the `buffer_lifetime_ordinal` minus

the total number of `RemoveBuffer` messages regarding the

`buffer_lifetime_ordinal`.

* If a client never puts an input buffer in flight more than once

concurrently using multiple different input `packet_index`

values, then the client will inherently stay under this limit

for input.

* For output, this high-water-mark value is the maximum so far under

the `buffer_lifetime_ordinal` of the total number of `AddBuffer`

messages regarding the `buffer_lifetime_ordinal` minus the total

number of completed buffer removals under the

`buffer_lifetime_ordinal`. This is without regard to which buffer

removals had a corresponding `RemoveBuffer` completion.

* If a client wishes to (optionally) validate this server

behavior, the client can rely on the server to not complete a

`RemoveBuffer` until after completion of buffer removal

server-side (else the server is failing to conform to

`RemoveBuffer` semantics or failing to conform to this limit).

For input, the client chooses an available `packet_index` value

arbitrarily when sending an input packet with `QueueInputPacket`, and

the client doesn't re-use the value until the server has sent

`OnFreeInputPacket` with that `packet_index` value.

For output, the server chooses an available `packet_index` value

arbitrarily (among all uint32 values) when sending an output packet with

`OnOutputPacket`, and doesn't re-use the value until the client has sent

`RecycleOutputPacket` with that `packet_index` value.

Available `packet_index` values can be queued in arbitrary order.

Both the client and server should validate the packet_index against the

known bound (if any; see above) and disconnect if it's out of bounds.

The packet_index values don't imply anything about order of use of

packets. The client should not expect the ordering to remain the same

over time - the stream processor is free to hold on to an input or

output packet for a while during which some other packet_index values

may be re-used multiple times.

For a given properly-functioning StreamProcessor instance, output

packet_index values will be unique among concurrently-outstanding

packets.

Servers should validate that a client isn't double-using a packet and

clients may similarly validate `packet_index` values from the server.

Defined at line 9420 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h

void clear_packet_index ()

Defined at line 9428 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/hlcpp/fuchsia/media/cpp/fidl.h

PacketHeader & set_buffer_lifetime_ordinal (uint64_t _value)
PacketHeader & set_packet_index (uint32_t _value)
void ~PacketHeader ()
PacketHeader & operator= (PacketHeader && other)
::std::unique_ptr<PacketHeader> New ()
void Encode (::fidl::Encoder * _encoder, size_t _offset, std::optional< ::fidl::HandleInformation> maybe_handle_info)
void Decode (::fidl::Decoder * _decoder, PacketHeader * _value, size_t _offset)
zx_status_t Clone (PacketHeader * _result)