In the ffmpeg module, namely in avformat , there is a structure called AVIndexEntry , and it is described as:

 typedef struct AVIndexEntry { int64_t pos; int64_t timestamp; /**< * Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are available * when seeking to this entry. That means preferable PTS on keyframe based formats. * But demuxers can choose to store a different timestamp, if it is more convenient for the implementation or nothing better * is known */ #define AVINDEX_KEYFRAME 0x0001 #define AVINDEX_DISCARD_FRAME 0x0002 /** * Flag is used to indicate which frame should be discarded after decoding. */ int flags:2; int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). int min_distance; /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */ } AVIndexEntry; 

Interested in 2 fields, in which there are bit fields, or rather how to paralyze them, and make binary compatibility when transferring to .

    1 answer 1

    Separate fields - no way. There are no bit fields in C #.

    But you can simply combine these two values ​​into one whole uint, and share it already through the properties:

     struct AVIndexEntry { public Flag Flaga => (Flag)((flagsAndSize & 0xC0000000) >> 30); public int Size => (int)(flagsAndSize & 0x3FFFFFFF); long pos; long timestamp; uint flagsAndSize; int min_distance; } [Flags] public enum Flag : byte { AVINDEX_KEYFRAME = 0x0001, AVINDEX_DISCARD_FRAME = 0x0002 }