class PacketHeader

Defined at line 9531 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/cpp/fidl/fuchsia.media/cpp/natural_types.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 Methods

void PacketHeader (Storage_ storage)
bool IsEmpty ()
void PacketHeader ()

Defined at line 9536 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/cpp/fidl/fuchsia.media/cpp/natural_types.h

void PacketHeader (PacketHeader && )

Defined at line 9537 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/cpp/fidl/fuchsia.media/cpp/natural_types.h

void PacketHeader (const PacketHeader & other)
const std::optional<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.

::std::optional<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.

PacketHeader & buffer_lifetime_ordinal (std::optional<uint64_t> value)

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.

PacketHeader & operator= (PacketHeader && )

Defined at line 9538 of file fidling/gen/sdk/fidl/fuchsia.media/fuchsia.media/cpp/fidl/fuchsia.media/cpp/natural_types.h

PacketHeader & operator= (const PacketHeader & other)
bool operator== (const PacketHeader & other)
bool operator!= (const PacketHeader & other)
const std::optional<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.

::std::optional<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.

PacketHeader & packet_index (std::optional<uint32_t> value)

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.

void PacketHeader (::fidl::internal::DefaultConstructPossiblyInvalidObjectTag )

Friends

class MemberVisitor
class NaturalTableCodingTraits