9 Dec 2021, 14:12 by an...@khirnov.net: > Quoting Lynne (2021-12-08 13:57:45) > >> 8 Dec 2021, 13:16 by an...@khirnov.net: >> >> > Quoting Lynne (2021-12-08 10:02:34) >> > >> >> 8 Dec 2021, 02:06 by jamr...@gmail.com: >> >> >> >> > From: Anton Khirnov <an...@khirnov.net> >> >> > >> >> > The new API is more extensible and allows for custom layouts. >> >> > More accurate information is exported, eg for decoders that do not >> >> > set a channel layout, lavc will not make one up for them. >> >> > >> >> > Deprecate the old API working with just uint64_t bitmasks. >> >> > >> >> > Expanded and completed by Vittorio Giovara <vittorio.giov...@gmail.com> >> >> > and James Almer <jamr...@gmail.com>. >> >> > Signed-off-by: Vittorio Giovara <vittorio.giov...@gmail.com> >> >> > Signed-off-by: James Almer <jamr...@gmail.com> >> >> > --- >> >> > libavutil/channel_layout.c | 498 ++++++++++++++++++++++++++++++------ >> >> > libavutil/channel_layout.h | 510 ++++++++++++++++++++++++++++++++++--- >> >> > libavutil/version.h | 1 + >> >> > 3 files changed, 906 insertions(+), 103 deletions(-) >> >> > >> >> > /** >> >> > * @} >> >> > @@ -128,6 +199,157 @@ enum AVMatrixEncoding { >> >> > AV_MATRIX_ENCODING_NB >> >> > }; >> >> > >> >> > +/** >> >> > + * @} >> >> > + */ >> >> > + >> >> > +/** >> >> > + * An AVChannelCustom defines a single channel within a custom order >> >> > layout >> >> > + * >> >> > + * Unlike most structures in FFmpeg, sizeof(AVChannelCustom) is a part >> >> > of the >> >> > + * public ABI. >> >> > + * >> >> > + * No new fields may be added to it without a major version bump. >> >> > + */ >> >> > +typedef struct AVChannelCustom { >> >> > + enum AVChannel id; >> >> > +} AVChannelCustom; >> >> > >> >> >> >> Consider adding a 25-byte or so of a description field string here that >> >> would also be copied if the frame/layout is copied? >> >> That way, users can assign a description label to each channel, >> >> for example labeling each channel in a 255 channel custom layout >> >> Opus stream used in production at a venue somewhere. >> >> Also, consider additionally reserving 16-bytes here, just in case. >> >> >> > >> > That would enlarge the layout size by a significant amount. Keep in mind >> > that this is all per frame. And for something that very few people would >> > want to use. >> > >> > These descriptors, if anyone really needs them, can live in side data. >> > >> >> That's fine with me. >> Can we at least have an opaque uint64_t? I'd accept a uintptr_t, >> or an int too, or even a single-byte uint8_t. >> > > like this? > > diff --git a/libavutil/channel_layout.h b/libavutil/channel_layout.h > index 7b77a74b61..7b2ba12532 100644 > --- a/libavutil/channel_layout.h > +++ b/libavutil/channel_layout.h > @@ -252,7 +252,8 @@ enum AVMatrixEncoding { > * No new fields may be added to it without a major version bump. > */ > typedef struct AVChannelCustom { > - enum AVChannel id; > + enum AVChannel id:16; > + int reserved:16; > } AVChannelCustom; >
"reserved" rather than "opaque"? 16 bits for both? Could you keep the id as a plain (32-bit, on a sane compiler) enum, since we may need to add flags, one never knows, and make the opaque field a plain uint32_t? 64-bits per channel overall isn't too bad. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".