Skip to content

Commit baaba70

Browse files
fastman61Ruslan-B
andauthored
Update for ffmpeg 7.1.1 (#320)
* Enhance audio/video processing and CI configuration Updated CI configuration to use .NET 6.0.x and improved artifact upload actions. Incremented version number in `Directory.Build.props` to 7.1.1. Introduced new delegates and structures in `Delegates.g.cs` for AVFilter functionality, and expanded `AVChannel` enum for additional audio channel types. Added `AVCodecConfig` enum for codec parameters and deprecated certain fields in `AVCodec`. Enhanced `ffmpeg` facade with new functions for side data and mastering display metadata. Expanded `AVPacketSideDataType` and `AVOptionType` enums for improved metadata handling. Modified `AVCodecContext` to include a duration probe size field and updated `AVCodecID` enum with new codec IDs for LC3 and LCEVC. Versioning information in `version.h` and `version_major.h` was updated, and XvMC support was deprecated in `xvmc.h`. * Add readme * add read me to poackages --------- Co-authored-by: Ruslan Balanukhin <[email protected]>
1 parent 31cbbbd commit baaba70

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+1999
-559
lines changed

.github/workflows/main.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ jobs:
1313
os: [ubuntu-latest, windows-latest]
1414
steps:
1515
- uses: actions/checkout@v2
16+
- uses: actions/setup-dotnet@v4
17+
with:
18+
dotnet-version: '6.0.x'
1619
- name: Install FFmpeg - linux
1720
if: matrix.os == 'ubuntu-latest'
1821
run: |
@@ -23,7 +26,7 @@ jobs:
2326
- name: Test
2427
run: |
2528
dotnet test -c Release
26-
- uses: actions/upload-artifact@v2
29+
- uses: actions/upload-artifact@v4
2730
if: matrix.os == 'windows-latest'
2831
with:
2932
path: FFmpeg.AutoGen/bin/Release/*.nupkg

Directory.Build.props

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project>
22
<PropertyGroup>
33
<PackageId>$(AssemblyName)</PackageId>
4-
<Version>7.0</Version>
4+
<Version>7.1.1.0</Version>
55
<Authors>Ruslan Balanukhin</Authors>
66
<Company>Rationale One</Company>
77
<Product>FFmpeg.AutoGen</Product>
@@ -12,6 +12,7 @@
1212
<FileVersion>$(Version)</FileVersion>
1313
<PackageTags>ffmpeg</PackageTags>
1414
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
15+
<PackageReadmeFile>README.md</PackageReadmeFile>
1516
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
1617
</PropertyGroup>
1718

@@ -21,6 +22,7 @@
2122

2223
<ItemGroup>
2324
<None Include="$(MSBuildThisFileDirectory)LICENSE.txt" Link="LICENSE.txt" Pack="true" PackagePath="LICENSE.txt" />
25+
<None Include="$(MSBuildThisFileDirectory)README.md" Link="README.md" Pack="true" PackagePath="README.md" />
2426
</ItemGroup>
2527

2628
</Project>

FFmpeg.AutoGen.Abstractions/generated/Delegates.g.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ public unsafe struct _query_func_func
1111
public static implicit operator _query_func_func(_query_func func) => new _query_func_func { Pointer = func == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(func) };
1212
}
1313

14+
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
15+
public unsafe delegate int _query_func2 (AVFilterContext* @p0, AVFilterFormatsConfig** @cfg_in, AVFilterFormatsConfig** @cfg_out);
16+
public unsafe struct _query_func2_func
17+
{
18+
public IntPtr Pointer;
19+
public static implicit operator _query_func2_func(_query_func2 func) => new _query_func2_func { Pointer = func == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(func) };
20+
}
21+
1422
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
1523
public unsafe delegate void av_buffer_create_free (void* @opaque, byte* @data);
1624
public unsafe struct av_buffer_create_free_func

FFmpeg.AutoGen.Abstractions/generated/Enums.g.cs

Lines changed: 75 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,14 @@ public enum AVChannel : int
101101
@AV_CHAN_BOTTOM_FRONT_LEFT = 39,
102102
/// <summary>See above.</summary>
103103
@AV_CHAN_BOTTOM_FRONT_RIGHT = 40,
104+
/// <summary>+90 degrees, Lss, SiL</summary>
105+
@AV_CHAN_SIDE_SURROUND_LEFT = 41,
106+
/// <summary>-90 degrees, Rss, SiR</summary>
107+
@AV_CHAN_SIDE_SURROUND_RIGHT = 42,
108+
/// <summary>+110 degrees, Lvs, TpLS</summary>
109+
@AV_CHAN_TOP_SURROUND_LEFT = 43,
110+
/// <summary>-110 degrees, Rvs, TpRS</summary>
111+
@AV_CHAN_TOP_SURROUND_RIGHT = 44,
104112
/// <summary>Channel is empty can be safely skipped.</summary>
105113
@AV_CHAN_UNUSED = 512,
106114
/// <summary>Channel contains data, but its position is unknown.</summary>
@@ -165,6 +173,24 @@ public enum AVClassCategory : int
165173
@AV_CLASS_CATEGORY_NB = 46,
166174
}
167175

176+
public enum AVCodecConfig : int
177+
{
178+
/// <summary>AVPixelFormat, terminated by AV_PIX_FMT_NONE</summary>
179+
@AV_CODEC_CONFIG_PIX_FORMAT = 0,
180+
/// <summary>AVRational, terminated by {0, 0}</summary>
181+
@AV_CODEC_CONFIG_FRAME_RATE = 1,
182+
/// <summary>int, terminated by 0</summary>
183+
@AV_CODEC_CONFIG_SAMPLE_RATE = 2,
184+
/// <summary>AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE</summary>
185+
@AV_CODEC_CONFIG_SAMPLE_FORMAT = 3,
186+
/// <summary>AVChannelLayout, terminated by {0}</summary>
187+
@AV_CODEC_CONFIG_CHANNEL_LAYOUT = 4,
188+
/// <summary>AVColorRange, terminated by AVCOL_RANGE_UNSPECIFIED</summary>
189+
@AV_CODEC_CONFIG_COLOR_RANGE = 5,
190+
/// <summary>AVColorSpace, terminated by AVCOL_SPC_UNSPECIFIED</summary>
191+
@AV_CODEC_CONFIG_COLOR_SPACE = 6,
192+
}
193+
168194
/// <summary>Identify the syntax and semantics of the bitstream. The principle is roughly: Two decoders with the same ID can decode the same streams. Two encoders with the same ID can encode compatible streams. There may be slight deviations from the principle due to implementation details.</summary>
169195
public enum AVCodecID : int
170196
{
@@ -651,6 +677,7 @@ public enum AVCodecID : int
651677
@AV_CODEC_ID_AC4 = 86119,
652678
@AV_CODEC_ID_OSQ = 86120,
653679
@AV_CODEC_ID_QOA = 86121,
680+
@AV_CODEC_ID_LC3 = 86122,
654681
/// <summary>A dummy ID pointing at the start of subtitle codecs.</summary>
655682
@AV_CODEC_ID_FIRST_SUBTITLE = 94208,
656683
@AV_CODEC_ID_DVD_SUBTITLE = 94208,
@@ -695,6 +722,7 @@ public enum AVCodecID : int
695722
@AV_CODEC_ID_TIMED_ID3 = 98313,
696723
@AV_CODEC_ID_BIN_DATA = 98314,
697724
@AV_CODEC_ID_SMPTE_2038 = 98315,
725+
@AV_CODEC_ID_LCEVC = 98316,
698726
/// <summary>codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it</summary>
699727
@AV_CODEC_ID_PROBE = 102400,
700728
/// <summary>_FAKE_ codec to indicate a raw MPEG-2 TS stream (only used by libavformat)</summary>
@@ -790,8 +818,14 @@ public enum AVColorSpace : int
790818
@AVCOL_SPC_CHROMA_DERIVED_CL = 13,
791819
/// <summary>ITU-R BT.2100-0, ICtCp</summary>
792820
@AVCOL_SPC_ICTCP = 14,
821+
/// <summary>SMPTE ST 2128, IPT-C2</summary>
822+
@AVCOL_SPC_IPT_C2 = 15,
823+
/// <summary>YCgCo-R, even addition of bits</summary>
824+
@AVCOL_SPC_YCGCO_RE = 16,
825+
/// <summary>YCgCo-R, odd addition of bits</summary>
826+
@AVCOL_SPC_YCGCO_RO = 17,
793827
/// <summary>Not part of ABI</summary>
794-
@AVCOL_SPC_NB = 15,
828+
@AVCOL_SPC_NB = 18,
795829
}
796830

797831
/// <summary>Color Transfer Characteristic. These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.2.</summary>
@@ -966,6 +1000,10 @@ public enum AVFrameSideDataType : int
9661000
@AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT = 26,
9671001
/// <summary>Provide encoder-specific hinting information about changed/unchanged portions of a frame. It can be used to pass information about which macroblocks can be skipped because they didn&apos;t change from the corresponding ones in the previous frame. This could be useful for applications which know this information in advance to speed up encoding.</summary>
9681002
@AV_FRAME_DATA_VIDEO_HINT = 27,
1003+
/// <summary>Raw LCEVC payload data, as a uint8_t array, with NAL emulation bytes intact.</summary>
1004+
@AV_FRAME_DATA_LCEVC = 28,
1005+
/// <summary>This side data must be associated with a video frame. The presence of this side data indicates that the video stream is composed of multiple views (e.g. stereoscopic 3D content, cf. H.264 Annex H or H.265 Annex G). The data is an int storing the view ID.</summary>
1006+
@AV_FRAME_DATA_VIEW_ID = 29,
9691007
}
9701008

9711009
/// <summary>Option for overlapping elliptical pixel selectors in an image.</summary>
@@ -1060,31 +1098,49 @@ public enum AVMediaType : int
10601098
@AVMEDIA_TYPE_NB = 5,
10611099
}
10621100

1063-
/// <summary>@{ AVOptions provide a generic system to declare options on arbitrary structs (&quot;objects&quot;). An option can have a help text, a type and a range of possible values. Options may then be enumerated, read and written to.</summary>
1101+
/// <summary>An option type determines: - for native access, the underlying C type of the field that an AVOption refers to; - for foreign access, the semantics of accessing the option through this API, e.g. which av_opt_get_*() and av_opt_set_*() functions can be called, or what format will av_opt_get()/av_opt_set() expect/produce.</summary>
10641102
public enum AVOptionType : int
10651103
{
1104+
/// <summary>Underlying C type is unsigned int.</summary>
10661105
@AV_OPT_TYPE_FLAGS = 1,
1106+
/// <summary>Underlying C type is int.</summary>
10671107
@AV_OPT_TYPE_INT = 2,
1108+
/// <summary>Underlying C type is int64_t.</summary>
10681109
@AV_OPT_TYPE_INT64 = 3,
1110+
/// <summary>Underlying C type is double.</summary>
10691111
@AV_OPT_TYPE_DOUBLE = 4,
1112+
/// <summary>Underlying C type is float.</summary>
10701113
@AV_OPT_TYPE_FLOAT = 5,
1114+
/// <summary>Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_malloc() family of functions.</summary>
10711115
@AV_OPT_TYPE_STRING = 6,
1116+
/// <summary>Underlying C type is AVRational.</summary>
10721117
@AV_OPT_TYPE_RATIONAL = 7,
1073-
/// <summary>offset must point to a pointer immediately followed by an int for the length</summary>
1118+
/// <summary>Underlying C type is a uint8_t* that is either NULL or points to an array allocated with the av_malloc() family of functions. The pointer is immediately followed by an int containing the array length in bytes.</summary>
10741119
@AV_OPT_TYPE_BINARY = 8,
1120+
/// <summary>Underlying C type is AVDictionary*.</summary>
10751121
@AV_OPT_TYPE_DICT = 9,
1122+
/// <summary>Underlying C type is uint64_t.</summary>
10761123
@AV_OPT_TYPE_UINT64 = 10,
1124+
/// <summary>Special option type for declaring named constants. Does not correspond to an actual field in the object, offset must be 0.</summary>
10771125
@AV_OPT_TYPE_CONST = 11,
1078-
/// <summary>offset must point to two consecutive integers</summary>
1126+
/// <summary>Underlying C type is two consecutive integers.</summary>
10791127
@AV_OPT_TYPE_IMAGE_SIZE = 12,
1128+
/// <summary>Underlying C type is enum AVPixelFormat.</summary>
10801129
@AV_OPT_TYPE_PIXEL_FMT = 13,
1130+
/// <summary>Underlying C type is enum AVSampleFormat.</summary>
10811131
@AV_OPT_TYPE_SAMPLE_FMT = 14,
1082-
/// <summary>offset must point to AVRational</summary>
1132+
/// <summary>Underlying C type is AVRational.</summary>
10831133
@AV_OPT_TYPE_VIDEO_RATE = 15,
1134+
/// <summary>Underlying C type is int64_t.</summary>
10841135
@AV_OPT_TYPE_DURATION = 16,
1136+
/// <summary>Underlying C type is uint8_t[4].</summary>
10851137
@AV_OPT_TYPE_COLOR = 17,
1138+
/// <summary>Underlying C type is int.</summary>
10861139
@AV_OPT_TYPE_BOOL = 18,
1140+
/// <summary>Underlying C type is AVChannelLayout.</summary>
10871141
@AV_OPT_TYPE_CHLAYOUT = 19,
1142+
/// <summary>Underlying C type is unsigned int.</summary>
1143+
@AV_OPT_TYPE_UINT = 20,
10881144
/// <summary>May be combined with another regular option type to declare an array option.</summary>
10891145
@AV_OPT_TYPE_FLAG_ARRAY = 65536,
10901146
}
@@ -1164,8 +1220,12 @@ public enum AVPacketSideDataType : int
11641220
@AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM = 34,
11651221
/// <summary>Ambient viewing environment metadata, as defined by H.274. This metadata should be associated with a video stream and contains data in the form of the AVAmbientViewingEnvironment struct.</summary>
11661222
@AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT = 35,
1223+
/// <summary>The number of pixels to discard from the top/bottom/left/right border of the decoded frame to obtain the sub-rectangle intended for presentation.</summary>
1224+
@AV_PKT_DATA_FRAME_CROPPING = 36,
1225+
/// <summary>Raw LCEVC payload data, as a uint8_t array, with NAL emulation bytes intact.</summary>
1226+
@AV_PKT_DATA_LCEVC = 37,
11671227
/// <summary>The number of side data types. This is not part of the public API/ABI in the sense that it may change when new side data types are added. This must stay the last enum value. If its value becomes huge, some code using it needs to be updated as it assumes it to be smaller than other limits.</summary>
1168-
@AV_PKT_DATA_NB = 36,
1228+
@AV_PKT_DATA_NB = 38,
11691229
}
11701230

11711231
/// <summary>@{</summary>
@@ -1726,12 +1786,21 @@ public enum AVSideDataParamChangeFlags : int
17261786
@AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 8,
17271787
}
17281788

1789+
public enum AVSideDataProps : int
1790+
{
1791+
/// <summary>The side data type can be used in stream-global structures. Side data types without this property are only meaningful on per-frame basis.</summary>
1792+
@AV_SIDE_DATA_PROP_GLOBAL = 1,
1793+
/// <summary>Multiple instances of this side data type can be meaningfully present in a single side data array.</summary>
1794+
@AV_SIDE_DATA_PROP_MULTI = 2,
1795+
}
1796+
17291797
public enum AVStreamGroupParamsType : int
17301798
{
17311799
@AV_STREAM_GROUP_PARAMS_NONE = 0,
17321800
@AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT = 1,
17331801
@AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION = 2,
17341802
@AV_STREAM_GROUP_PARAMS_TILE_GRID = 3,
1803+
@AV_STREAM_GROUP_PARAMS_LCEVC = 4,
17351804
}
17361805

17371806
/// <summary>@}</summary>

FFmpeg.AutoGen.Abstractions/generated/Structs.g.cs

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -165,13 +165,13 @@ public unsafe partial struct AVCodec
165165
public int @capabilities;
166166
/// <summary>maximum value for lowres supported by the decoder</summary>
167167
public byte @max_lowres;
168-
/// <summary>array of supported framerates, or NULL if any, array is terminated by {0,0}</summary>
168+
[Obsolete("use avcodec_get_supported_config()")]
169169
public AVRational* @supported_framerates;
170-
/// <summary>array of supported pixel formats, or NULL if unknown, array is terminated by -1</summary>
170+
[Obsolete("use avcodec_get_supported_config()")]
171171
public AVPixelFormat* @pix_fmts;
172-
/// <summary>array of supported audio samplerates, or NULL if unknown, array is terminated by 0</summary>
172+
[Obsolete("use avcodec_get_supported_config()")]
173173
public int* @supported_samplerates;
174-
/// <summary>array of supported sample formats, or NULL if unknown, array is terminated by -1</summary>
174+
[Obsolete("use avcodec_get_supported_config()")]
175175
public AVSampleFormat* @sample_fmts;
176176
/// <summary>AVClass for the private context</summary>
177177
public AVClass* @priv_class;
@@ -180,6 +180,7 @@ public unsafe partial struct AVCodec
180180
/// <summary>Group name of the codec implementation. This is a short symbolic name of the wrapper backing this codec. A wrapper uses some kind of external implementation for the codec, such as an external library, or a codec implementation provided by the OS or the hardware. If this field is NULL, this is a builtin, libavcodec native codec. If non-NULL, this will be the suffix in AVCodec.name in most cases (usually AVCodec.name will be of the form &quot;&lt;codec_name&gt;_&lt;wrapper_name&gt;&quot;).</summary>
181181
public byte* @wrapper_name;
182182
/// <summary>Array of supported channel layouts, terminated with a zeroed layout.</summary>
183+
[Obsolete("use avcodec_get_supported_config()")]
183184
public AVChannelLayout* @ch_layouts;
184185
}
185186

@@ -870,6 +871,9 @@ public unsafe partial struct AVFilter_formats
870871
/// <summary>Query formats supported by the filter on its inputs and outputs.</summary>
871872
[FieldOffset(0)]
872873
public _query_func_func @query_func;
874+
/// <summary>Same as query_func(), except this function writes the results into provided arrays.</summary>
875+
[FieldOffset(0)]
876+
public _query_func2_func @query_func2;
873877
/// <summary>A pointer to an array of admissible pixel formats delimited by AV_PIX_FMT_NONE. The generic code will use this list to indicate that this filter supports each of these pixel formats, provided that all inputs and outputs use the same pixel format.</summary>
874878
[FieldOffset(0)]
875879
public AVPixelFormat* @pixels_list;
@@ -1031,30 +1035,6 @@ public unsafe partial struct AVFilterLink
10311035
public AVFilterFormatsConfig @incfg;
10321036
/// <summary>Lists of supported formats / etc. supported by the output filter.</summary>
10331037
public AVFilterFormatsConfig @outcfg;
1034-
/// <summary>Graph the filter belongs to.</summary>
1035-
public AVFilterGraph* @graph;
1036-
/// <summary>Current timestamp of the link, as defined by the most recent frame(s), in link time_base units.</summary>
1037-
public long @current_pts;
1038-
/// <summary>Current timestamp of the link, as defined by the most recent frame(s), in AV_TIME_BASE units.</summary>
1039-
public long @current_pts_us;
1040-
/// <summary>Frame rate of the stream on the link, or 1/0 if unknown or variable; if left to 0/0, will be automatically copied from the first input of the source filter if it exists.</summary>
1041-
public AVRational @frame_rate;
1042-
/// <summary>Minimum number of samples to filter at once. If filter_frame() is called with fewer samples, it will accumulate them in fifo. This field and the related ones must not be changed after filtering has started. If 0, all related fields are ignored.</summary>
1043-
public int @min_samples;
1044-
/// <summary>Maximum number of samples to filter at once. If filter_frame() is called with more samples, it will split them.</summary>
1045-
public int @max_samples;
1046-
/// <summary>Number of past frames sent through the link.</summary>
1047-
public long @frame_count_in;
1048-
/// <summary>Number of past frames sent through the link.</summary>
1049-
public long @frame_count_out;
1050-
/// <summary>Number of past samples sent through the link.</summary>
1051-
public long @sample_count_in;
1052-
/// <summary>Number of past samples sent through the link.</summary>
1053-
public long @sample_count_out;
1054-
/// <summary>True if a frame is currently wanted on the output of this filter. Set when ff_request_frame() is called by the output, cleared when a frame is filtered.</summary>
1055-
public int @frame_wanted_out;
1056-
/// <summary>For hwaccel pixel formats, this should be a reference to the AVHWFramesContext describing the frames.</summary>
1057-
public AVBufferRef* @hw_frames_ctx;
10581038
}
10591039

10601040
/// <summary>Parameters of a filter&apos;s input or output pad.</summary>
@@ -1223,6 +1203,8 @@ public unsafe partial struct AVFormatContext
12231203
public AVFormatContext_io_open_func @io_open;
12241204
/// <summary>A callback for closing the streams opened with AVFormatContext.io_open().</summary>
12251205
public AVFormatContext_io_close2_func @io_close2;
1206+
/// <summary>Maximum number of bytes read from input in order to determine stream durations when using estimate_timings_from_pts in avformat_find_stream_info(). Demuxing only, set by the caller before avformat_find_stream_info(). Can be set to 0 to let avformat choose using a heuristic.</summary>
1207+
public long @duration_probesize;
12261208
}
12271209

12281210
/// <summary>This structure describes decoded (raw) audio or video data.</summary>
@@ -1841,6 +1823,15 @@ public unsafe partial struct AVRegionOfInterest
18411823
public AVRational @qoffset;
18421824
}
18431825

1826+
/// <summary>This struct describes the properties of a side data type. Its instance corresponding to a given type can be obtained from av_frame_side_data_desc().</summary>
1827+
public unsafe partial struct AVSideDataDescriptor
1828+
{
1829+
/// <summary>Human-readable side data description.</summary>
1830+
public byte* @name;
1831+
/// <summary>Side data property flags, a combination of AVSideDataProps values.</summary>
1832+
public uint @props;
1833+
}
1834+
18441835
/// <summary>Stream structure. New fields can be added to the end with minor version bumps. Removal, reordering and changes to existing fields require a major version bump. sizeof(AVStream) must not be used outside libav*.</summary>
18451836
public unsafe partial struct AVStream
18461837
{
@@ -1918,6 +1909,20 @@ public unsafe partial struct AVStreamGroup_params
19181909
public AVIAMFMixPresentation* @iamf_mix_presentation;
19191910
[FieldOffset(0)]
19201911
public AVStreamGroupTileGrid* @tile_grid;
1912+
[FieldOffset(0)]
1913+
public AVStreamGroupLCEVC* @lcevc;
1914+
}
1915+
1916+
/// <summary>AVStreamGroupLCEVC is meant to define the relation between video streams and a data stream containing LCEVC enhancement layer NALUs.</summary>
1917+
public unsafe partial struct AVStreamGroupLCEVC
1918+
{
1919+
public AVClass* @av_class;
1920+
/// <summary>Index of the LCEVC data stream in AVStreamGroup.</summary>
1921+
public uint @lcevc_index;
1922+
/// <summary>Width of the final stream for presentation.</summary>
1923+
public int @width;
1924+
/// <summary>Height of the final image for presentation.</summary>
1925+
public int @height;
19211926
}
19221927

19231928
/// <summary>AVStreamGroupTileGrid holds information on how to combine several independent images on a single canvas for presentation.</summary>

0 commit comments

Comments
 (0)