@revizly/node-av 5.2.2-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/BUILD_LINUX.md +61 -0
  2. package/LICENSE.md +22 -0
  3. package/README.md +662 -0
  4. package/build_mac_local.sh +69 -0
  5. package/dist/api/audio-frame-buffer.d.ts +205 -0
  6. package/dist/api/audio-frame-buffer.js +287 -0
  7. package/dist/api/audio-frame-buffer.js.map +1 -0
  8. package/dist/api/bitstream-filter.d.ts +820 -0
  9. package/dist/api/bitstream-filter.js +1242 -0
  10. package/dist/api/bitstream-filter.js.map +1 -0
  11. package/dist/api/constants.d.ts +44 -0
  12. package/dist/api/constants.js +45 -0
  13. package/dist/api/constants.js.map +1 -0
  14. package/dist/api/data/test_av1.ivf +0 -0
  15. package/dist/api/data/test_h264.h264 +0 -0
  16. package/dist/api/data/test_hevc.h265 +0 -0
  17. package/dist/api/data/test_mjpeg.mjpeg +0 -0
  18. package/dist/api/data/test_vp8.ivf +0 -0
  19. package/dist/api/data/test_vp9.ivf +0 -0
  20. package/dist/api/decoder.d.ts +1088 -0
  21. package/dist/api/decoder.js +1775 -0
  22. package/dist/api/decoder.js.map +1 -0
  23. package/dist/api/demuxer.d.ts +1219 -0
  24. package/dist/api/demuxer.js +2081 -0
  25. package/dist/api/demuxer.js.map +1 -0
  26. package/dist/api/device.d.ts +586 -0
  27. package/dist/api/device.js +961 -0
  28. package/dist/api/device.js.map +1 -0
  29. package/dist/api/encoder.d.ts +1132 -0
  30. package/dist/api/encoder.js +1988 -0
  31. package/dist/api/encoder.js.map +1 -0
  32. package/dist/api/filter-complex.d.ts +821 -0
  33. package/dist/api/filter-complex.js +1604 -0
  34. package/dist/api/filter-complex.js.map +1 -0
  35. package/dist/api/filter-presets.d.ts +1286 -0
  36. package/dist/api/filter-presets.js +2152 -0
  37. package/dist/api/filter-presets.js.map +1 -0
  38. package/dist/api/filter.d.ts +1234 -0
  39. package/dist/api/filter.js +1976 -0
  40. package/dist/api/filter.js.map +1 -0
  41. package/dist/api/fmp4-stream.d.ts +426 -0
  42. package/dist/api/fmp4-stream.js +739 -0
  43. package/dist/api/fmp4-stream.js.map +1 -0
  44. package/dist/api/hardware.d.ts +651 -0
  45. package/dist/api/hardware.js +1260 -0
  46. package/dist/api/hardware.js.map +1 -0
  47. package/dist/api/index.d.ts +17 -0
  48. package/dist/api/index.js +32 -0
  49. package/dist/api/index.js.map +1 -0
  50. package/dist/api/io-stream.d.ts +307 -0
  51. package/dist/api/io-stream.js +282 -0
  52. package/dist/api/io-stream.js.map +1 -0
  53. package/dist/api/muxer.d.ts +957 -0
  54. package/dist/api/muxer.js +2002 -0
  55. package/dist/api/muxer.js.map +1 -0
  56. package/dist/api/pipeline.d.ts +607 -0
  57. package/dist/api/pipeline.js +1145 -0
  58. package/dist/api/pipeline.js.map +1 -0
  59. package/dist/api/utilities/async-queue.d.ts +120 -0
  60. package/dist/api/utilities/async-queue.js +211 -0
  61. package/dist/api/utilities/async-queue.js.map +1 -0
  62. package/dist/api/utilities/audio-sample.d.ts +117 -0
  63. package/dist/api/utilities/audio-sample.js +112 -0
  64. package/dist/api/utilities/audio-sample.js.map +1 -0
  65. package/dist/api/utilities/channel-layout.d.ts +76 -0
  66. package/dist/api/utilities/channel-layout.js +80 -0
  67. package/dist/api/utilities/channel-layout.js.map +1 -0
  68. package/dist/api/utilities/electron-shared-texture.d.ts +328 -0
  69. package/dist/api/utilities/electron-shared-texture.js +503 -0
  70. package/dist/api/utilities/electron-shared-texture.js.map +1 -0
  71. package/dist/api/utilities/image.d.ts +207 -0
  72. package/dist/api/utilities/image.js +213 -0
  73. package/dist/api/utilities/image.js.map +1 -0
  74. package/dist/api/utilities/index.d.ts +12 -0
  75. package/dist/api/utilities/index.js +25 -0
  76. package/dist/api/utilities/index.js.map +1 -0
  77. package/dist/api/utilities/media-type.d.ts +49 -0
  78. package/dist/api/utilities/media-type.js +53 -0
  79. package/dist/api/utilities/media-type.js.map +1 -0
  80. package/dist/api/utilities/pixel-format.d.ts +89 -0
  81. package/dist/api/utilities/pixel-format.js +97 -0
  82. package/dist/api/utilities/pixel-format.js.map +1 -0
  83. package/dist/api/utilities/sample-format.d.ts +129 -0
  84. package/dist/api/utilities/sample-format.js +141 -0
  85. package/dist/api/utilities/sample-format.js.map +1 -0
  86. package/dist/api/utilities/scheduler.d.ts +138 -0
  87. package/dist/api/utilities/scheduler.js +98 -0
  88. package/dist/api/utilities/scheduler.js.map +1 -0
  89. package/dist/api/utilities/streaming.d.ts +186 -0
  90. package/dist/api/utilities/streaming.js +309 -0
  91. package/dist/api/utilities/streaming.js.map +1 -0
  92. package/dist/api/utilities/timestamp.d.ts +193 -0
  93. package/dist/api/utilities/timestamp.js +206 -0
  94. package/dist/api/utilities/timestamp.js.map +1 -0
  95. package/dist/api/utilities/whisper-model.d.ts +310 -0
  96. package/dist/api/utilities/whisper-model.js +528 -0
  97. package/dist/api/utilities/whisper-model.js.map +1 -0
  98. package/dist/api/utils.d.ts +19 -0
  99. package/dist/api/utils.js +39 -0
  100. package/dist/api/utils.js.map +1 -0
  101. package/dist/api/whisper.d.ts +324 -0
  102. package/dist/api/whisper.js +362 -0
  103. package/dist/api/whisper.js.map +1 -0
  104. package/dist/constants/channel-layouts.d.ts +53 -0
  105. package/dist/constants/channel-layouts.js +57 -0
  106. package/dist/constants/channel-layouts.js.map +1 -0
  107. package/dist/constants/constants.d.ts +2325 -0
  108. package/dist/constants/constants.js +1887 -0
  109. package/dist/constants/constants.js.map +1 -0
  110. package/dist/constants/decoders.d.ts +633 -0
  111. package/dist/constants/decoders.js +641 -0
  112. package/dist/constants/decoders.js.map +1 -0
  113. package/dist/constants/encoders.d.ts +295 -0
  114. package/dist/constants/encoders.js +308 -0
  115. package/dist/constants/encoders.js.map +1 -0
  116. package/dist/constants/hardware.d.ts +26 -0
  117. package/dist/constants/hardware.js +27 -0
  118. package/dist/constants/hardware.js.map +1 -0
  119. package/dist/constants/index.d.ts +5 -0
  120. package/dist/constants/index.js +6 -0
  121. package/dist/constants/index.js.map +1 -0
  122. package/dist/ffmpeg/index.d.ts +99 -0
  123. package/dist/ffmpeg/index.js +115 -0
  124. package/dist/ffmpeg/index.js.map +1 -0
  125. package/dist/ffmpeg/utils.d.ts +31 -0
  126. package/dist/ffmpeg/utils.js +68 -0
  127. package/dist/ffmpeg/utils.js.map +1 -0
  128. package/dist/ffmpeg/version.d.ts +6 -0
  129. package/dist/ffmpeg/version.js +7 -0
  130. package/dist/ffmpeg/version.js.map +1 -0
  131. package/dist/index.d.ts +4 -0
  132. package/dist/index.js +9 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/lib/audio-fifo.d.ts +399 -0
  135. package/dist/lib/audio-fifo.js +431 -0
  136. package/dist/lib/audio-fifo.js.map +1 -0
  137. package/dist/lib/binding.d.ts +228 -0
  138. package/dist/lib/binding.js +60 -0
  139. package/dist/lib/binding.js.map +1 -0
  140. package/dist/lib/bitstream-filter-context.d.ts +379 -0
  141. package/dist/lib/bitstream-filter-context.js +441 -0
  142. package/dist/lib/bitstream-filter-context.js.map +1 -0
  143. package/dist/lib/bitstream-filter.d.ts +140 -0
  144. package/dist/lib/bitstream-filter.js +154 -0
  145. package/dist/lib/bitstream-filter.js.map +1 -0
  146. package/dist/lib/codec-context.d.ts +1071 -0
  147. package/dist/lib/codec-context.js +1354 -0
  148. package/dist/lib/codec-context.js.map +1 -0
  149. package/dist/lib/codec-parameters.d.ts +616 -0
  150. package/dist/lib/codec-parameters.js +761 -0
  151. package/dist/lib/codec-parameters.js.map +1 -0
  152. package/dist/lib/codec-parser.d.ts +201 -0
  153. package/dist/lib/codec-parser.js +213 -0
  154. package/dist/lib/codec-parser.js.map +1 -0
  155. package/dist/lib/codec.d.ts +586 -0
  156. package/dist/lib/codec.js +713 -0
  157. package/dist/lib/codec.js.map +1 -0
  158. package/dist/lib/device.d.ts +291 -0
  159. package/dist/lib/device.js +324 -0
  160. package/dist/lib/device.js.map +1 -0
  161. package/dist/lib/dictionary.d.ts +333 -0
  162. package/dist/lib/dictionary.js +372 -0
  163. package/dist/lib/dictionary.js.map +1 -0
  164. package/dist/lib/error.d.ts +242 -0
  165. package/dist/lib/error.js +303 -0
  166. package/dist/lib/error.js.map +1 -0
  167. package/dist/lib/fifo.d.ts +416 -0
  168. package/dist/lib/fifo.js +453 -0
  169. package/dist/lib/fifo.js.map +1 -0
  170. package/dist/lib/filter-context.d.ts +712 -0
  171. package/dist/lib/filter-context.js +789 -0
  172. package/dist/lib/filter-context.js.map +1 -0
  173. package/dist/lib/filter-graph-segment.d.ts +160 -0
  174. package/dist/lib/filter-graph-segment.js +171 -0
  175. package/dist/lib/filter-graph-segment.js.map +1 -0
  176. package/dist/lib/filter-graph.d.ts +641 -0
  177. package/dist/lib/filter-graph.js +704 -0
  178. package/dist/lib/filter-graph.js.map +1 -0
  179. package/dist/lib/filter-inout.d.ts +198 -0
  180. package/dist/lib/filter-inout.js +257 -0
  181. package/dist/lib/filter-inout.js.map +1 -0
  182. package/dist/lib/filter.d.ts +243 -0
  183. package/dist/lib/filter.js +272 -0
  184. package/dist/lib/filter.js.map +1 -0
  185. package/dist/lib/format-context.d.ts +1254 -0
  186. package/dist/lib/format-context.js +1379 -0
  187. package/dist/lib/format-context.js.map +1 -0
  188. package/dist/lib/frame-utils.d.ts +116 -0
  189. package/dist/lib/frame-utils.js +98 -0
  190. package/dist/lib/frame-utils.js.map +1 -0
  191. package/dist/lib/frame.d.ts +1222 -0
  192. package/dist/lib/frame.js +1435 -0
  193. package/dist/lib/frame.js.map +1 -0
  194. package/dist/lib/hardware-device-context.d.ts +362 -0
  195. package/dist/lib/hardware-device-context.js +383 -0
  196. package/dist/lib/hardware-device-context.js.map +1 -0
  197. package/dist/lib/hardware-frames-context.d.ts +419 -0
  198. package/dist/lib/hardware-frames-context.js +477 -0
  199. package/dist/lib/hardware-frames-context.js.map +1 -0
  200. package/dist/lib/index.d.ts +35 -0
  201. package/dist/lib/index.js +60 -0
  202. package/dist/lib/index.js.map +1 -0
  203. package/dist/lib/input-format.d.ts +249 -0
  204. package/dist/lib/input-format.js +306 -0
  205. package/dist/lib/input-format.js.map +1 -0
  206. package/dist/lib/io-context.d.ts +696 -0
  207. package/dist/lib/io-context.js +769 -0
  208. package/dist/lib/io-context.js.map +1 -0
  209. package/dist/lib/log.d.ts +174 -0
  210. package/dist/lib/log.js +184 -0
  211. package/dist/lib/log.js.map +1 -0
  212. package/dist/lib/native-types.d.ts +946 -0
  213. package/dist/lib/native-types.js +2 -0
  214. package/dist/lib/native-types.js.map +1 -0
  215. package/dist/lib/option.d.ts +927 -0
  216. package/dist/lib/option.js +1583 -0
  217. package/dist/lib/option.js.map +1 -0
  218. package/dist/lib/output-format.d.ts +180 -0
  219. package/dist/lib/output-format.js +213 -0
  220. package/dist/lib/output-format.js.map +1 -0
  221. package/dist/lib/packet.d.ts +501 -0
  222. package/dist/lib/packet.js +590 -0
  223. package/dist/lib/packet.js.map +1 -0
  224. package/dist/lib/rational.d.ts +251 -0
  225. package/dist/lib/rational.js +278 -0
  226. package/dist/lib/rational.js.map +1 -0
  227. package/dist/lib/software-resample-context.d.ts +552 -0
  228. package/dist/lib/software-resample-context.js +592 -0
  229. package/dist/lib/software-resample-context.js.map +1 -0
  230. package/dist/lib/software-scale-context.d.ts +344 -0
  231. package/dist/lib/software-scale-context.js +366 -0
  232. package/dist/lib/software-scale-context.js.map +1 -0
  233. package/dist/lib/stream.d.ts +379 -0
  234. package/dist/lib/stream.js +526 -0
  235. package/dist/lib/stream.js.map +1 -0
  236. package/dist/lib/sync-queue.d.ts +179 -0
  237. package/dist/lib/sync-queue.js +197 -0
  238. package/dist/lib/sync-queue.js.map +1 -0
  239. package/dist/lib/types.d.ts +34 -0
  240. package/dist/lib/types.js +2 -0
  241. package/dist/lib/types.js.map +1 -0
  242. package/dist/lib/utilities.d.ts +1127 -0
  243. package/dist/lib/utilities.js +1225 -0
  244. package/dist/lib/utilities.js.map +1 -0
  245. package/dist/utils/electron.d.ts +49 -0
  246. package/dist/utils/electron.js +63 -0
  247. package/dist/utils/electron.js.map +1 -0
  248. package/dist/utils/index.d.ts +4 -0
  249. package/dist/utils/index.js +5 -0
  250. package/dist/utils/index.js.map +1 -0
  251. package/install/check.js +121 -0
  252. package/install/ffmpeg.js +66 -0
  253. package/jellyfin-ffmpeg.patch +181 -0
  254. package/package.json +129 -0
@@ -0,0 +1,946 @@
1
+ import type { AVBufferSrcFlag, AVChromaLocation, AVCodecCap, AVCodecFlag, AVCodecFlag2, AVCodecID, AVCodecProp, AVColorPrimaries, AVColorRange, AVColorSpace, AVColorTransferCharacteristic, AVDictFlag, AVDiscard, AVDisposition, AVFifoFlag, AVFilterCmdFlag, AVFilterConstants, AVFilterFlag, AVFormatFlag, AVFrameSideDataType, AVHWDeviceType, AVHWFrameTransferDirection, AVIOFlag, AVMediaType, AVOptionFlag, AVOptionType, AVPacketFlag, AVPacketSideDataType, AVPictureType, AVPixelFormat, AVProfile, AVSampleFormat, AVSeekFlag, AVSeekWhence, AVStreamEventFlag, AVThreadType, SwsFlags } from '../constants/index.js';
2
+ import type { CodecProfile } from './codec.js';
3
+ import type { FilterPad } from './filter.js';
4
+ import type { RTSPStreamInfo } from './format-context.js';
5
+ import type { ImageOptions } from './frame-utils.js';
6
+ import type { ChannelLayout, IRational } from './types.js';
7
+ /**
8
+ * Native AVPacket binding interface
9
+ *
10
+ * Represents compressed audio/video data.
11
+ * Must be allocated before use and properly disposed after.
12
+ *
13
+ * @internal
14
+ */
15
+ export interface NativePacket extends Disposable {
16
+ readonly __brand: 'NativePacket';
17
+ readonly size: number;
18
+ streamIndex: number;
19
+ pts: bigint;
20
+ dts: bigint;
21
+ duration: bigint;
22
+ timeBase: IRational;
23
+ pos: bigint;
24
+ flags: AVPacketFlag;
25
+ data: Buffer | null;
26
+ isKeyframe: boolean;
27
+ alloc(): void;
28
+ free(): void;
29
+ ref(src: NativePacket): number;
30
+ unref(): void;
31
+ clone(): NativePacket | null;
32
+ rescaleTs(srcTb: IRational, dstTb: IRational): void;
33
+ makeRefcounted(): number;
34
+ makeWritable(): number;
35
+ getSideData(type: AVPacketSideDataType): Buffer | null;
36
+ addSideData(type: AVPacketSideDataType, data: Buffer): number;
37
+ newSideData(type: AVPacketSideDataType, size: number): Buffer;
38
+ freeSideData(): void;
39
+ [Symbol.dispose](): void;
40
+ }
41
+ /**
42
+ * Native AVFrame binding interface
43
+ *
44
+ * Represents uncompressed audio/video data.
45
+ * Must be allocated before use and properly disposed after.
46
+ *
47
+ * @internal
48
+ */
49
+ export interface NativeFrame extends Disposable {
50
+ readonly __brand: 'NativeFrame';
51
+ readonly channels: number;
52
+ readonly linesize: number[];
53
+ readonly data: Buffer[] | null;
54
+ readonly extendedData: Buffer[] | null;
55
+ readonly isWritable: boolean;
56
+ format: AVPixelFormat | AVSampleFormat;
57
+ width: number;
58
+ height: number;
59
+ nbSamples: number;
60
+ pts: bigint;
61
+ pktDts: bigint;
62
+ bestEffortTimestamp: bigint;
63
+ timeBase: IRational;
64
+ keyFrame: number;
65
+ pictType: AVPictureType;
66
+ quality: number;
67
+ sampleAspectRatio: IRational;
68
+ sampleRate: number;
69
+ channelLayout: ChannelLayout;
70
+ colorRange: AVColorRange;
71
+ colorPrimaries: AVColorPrimaries;
72
+ colorTrc: AVColorTransferCharacteristic;
73
+ colorSpace: AVColorSpace;
74
+ chromaLocation: AVChromaLocation;
75
+ hwFramesCtx: NativeHardwareFramesContext | null;
76
+ flags: number;
77
+ decodeErrorFlags: number;
78
+ duration: bigint;
79
+ repeatPict: number;
80
+ alloc(): void;
81
+ free(): void;
82
+ ref(src: NativeFrame): number;
83
+ unref(): void;
84
+ clone(): NativeFrame | null;
85
+ getBuffer(align?: number): number;
86
+ allocBuffer(): number;
87
+ makeWritable(): number;
88
+ copyProps(src: NativeFrame): number;
89
+ copy(src: NativeFrame): number;
90
+ fromBuffer(buffer: Buffer): number;
91
+ toBuffer(): Buffer;
92
+ hwframeTransferData(dst: NativeFrame, flags?: number): Promise<number>;
93
+ hwframeTransferDataSync(dst: NativeFrame, flags?: number): number;
94
+ isHwFrame(): boolean;
95
+ isSwFrame(): boolean;
96
+ getSideData(type: AVFrameSideDataType): Buffer | null;
97
+ newSideData(type: AVFrameSideDataType, size: number): Buffer;
98
+ removeSideData(type: AVFrameSideDataType): void;
99
+ getMetadata(): NativeDictionary;
100
+ applyCropping(flags?: number): number;
101
+ importIOSurface(handleData: Buffer, hwFramesCtx: NativeHardwareFramesContext): number;
102
+ importD3D11Texture(handleData: Buffer, hwDeviceCtx: NativeHardwareDeviceContext): number;
103
+ importDmaBuf(planes: {
104
+ fd: number;
105
+ stride: number;
106
+ offset: number;
107
+ size: number;
108
+ }[], width: number, height: number, modifier: bigint, swFormat: AVPixelFormat): number;
109
+ [Symbol.dispose](): void;
110
+ }
111
+ /**
112
+ * Native AVCodec binding interface
113
+ *
114
+ * Represents a codec (encoder or decoder) definition.
115
+ * This is an immutable descriptor - actual encoding/decoding happens via CodecContext.
116
+ *
117
+ * @internal
118
+ */
119
+ export interface NativeCodec {
120
+ readonly __brand: 'NativeCodec';
121
+ readonly name: string | null;
122
+ readonly longName: string | null;
123
+ readonly type: AVMediaType;
124
+ readonly id: AVCodecID;
125
+ readonly capabilities: AVCodecCap;
126
+ readonly maxLowres: number;
127
+ readonly profiles: CodecProfile[] | null;
128
+ readonly wrapper: string | null;
129
+ readonly supportedFramerates: IRational[] | null;
130
+ readonly pixelFormats: AVPixelFormat[] | null;
131
+ readonly supportedSamplerates: number[] | null;
132
+ readonly sampleFormats: AVSampleFormat[] | null;
133
+ readonly channelLayouts: ChannelLayout[] | null;
134
+ isEncoder(): boolean;
135
+ isDecoder(): boolean;
136
+ isExperimental(): boolean;
137
+ getHwConfig(index: number): {
138
+ pixFmt: AVPixelFormat;
139
+ methods: number;
140
+ deviceType: AVHWDeviceType;
141
+ } | null;
142
+ }
143
+ /**
144
+ * Native AVCodecContext binding interface
145
+ *
146
+ * The main interface for encoding and decoding operations.
147
+ * Must be opened before use and properly disposed after.
148
+ *
149
+ * @internal
150
+ */
151
+ export interface NativeCodecContext extends Disposable {
152
+ readonly __brand: 'NativeCodecContext';
153
+ readonly delay: number;
154
+ readonly hasBFrames: number;
155
+ readonly frameNumber: number;
156
+ readonly isOpen: boolean;
157
+ readonly codecTagString: string | null;
158
+ codecType: AVMediaType;
159
+ codecId: AVCodecID;
160
+ codecTag: number;
161
+ bitRate: bigint;
162
+ timeBase: IRational;
163
+ pktTimebase: IRational;
164
+ flags: AVCodecFlag;
165
+ flags2: AVCodecFlag2;
166
+ extraData: Buffer | null;
167
+ profile: AVProfile;
168
+ level: number;
169
+ threadCount: number;
170
+ threadType: AVThreadType;
171
+ width: number;
172
+ height: number;
173
+ gopSize: number;
174
+ pixelFormat: AVPixelFormat;
175
+ maxBFrames: number;
176
+ mbDecision: number;
177
+ sampleAspectRatio: IRational;
178
+ framerate: IRational;
179
+ colorRange: AVColorRange;
180
+ colorPrimaries: AVColorPrimaries;
181
+ colorTrc: AVColorTransferCharacteristic;
182
+ colorSpace: AVColorSpace;
183
+ chromaLocation: AVChromaLocation;
184
+ sampleRate: number;
185
+ channels: number;
186
+ sampleFormat: AVSampleFormat;
187
+ frameSize: number;
188
+ bitsPerCodedSample: number;
189
+ bitsPerRawSample: number;
190
+ channelLayout: ChannelLayout;
191
+ qMin: number;
192
+ qMax: number;
193
+ globalQuality: number;
194
+ rcBufferSize: number;
195
+ rcMaxRate: bigint;
196
+ rcMinRate: bigint;
197
+ hwDeviceCtx: NativeHardwareDeviceContext | null;
198
+ hwFramesCtx: NativeHardwareFramesContext | null;
199
+ extraHWFrames: number;
200
+ allocContext3(codec?: NativeCodec | null): void;
201
+ freeContext(): void;
202
+ open2(codec?: NativeCodec | null, options?: NativeDictionary | null): Promise<number>;
203
+ open2Sync(codec?: NativeCodec | null, options?: NativeDictionary | null): number;
204
+ close(): number;
205
+ parametersToContext(params: NativeCodecParameters): number;
206
+ parametersFromContext(params: NativeCodecParameters): number;
207
+ flushBuffers(): void;
208
+ sendPacket(packet: NativePacket | null): Promise<number>;
209
+ sendPacketSync(packet: NativePacket | null): number;
210
+ receiveFrame(frame: NativeFrame): Promise<number>;
211
+ receiveFrameSync(frame: NativeFrame): number;
212
+ sendFrame(frame: NativeFrame | null): Promise<number>;
213
+ sendFrameSync(frame: NativeFrame | null): number;
214
+ receivePacket(packet: NativePacket): Promise<number>;
215
+ receivePacketSync(packet: NativePacket): number;
216
+ setHardwarePixelFormat(hwFormat: AVPixelFormat, swFormat?: AVPixelFormat): void;
217
+ [Symbol.dispose](): void;
218
+ }
219
+ /**
220
+ * Native AVCodecParserContext binding interface
221
+ *
222
+ * Parser for splitting elementary streams into frames.
223
+ * Used when decoding raw streams without a container.
224
+ *
225
+ * @internal
226
+ */
227
+ export interface NativeCodecParser {
228
+ readonly __brand: 'NativeCodecParser';
229
+ repeatPict: number;
230
+ init(codecId: AVCodecID): void;
231
+ parse2(codecContext: NativeCodecContext, packet: NativePacket, data: Buffer, pts: bigint, dts: bigint, pos: number): number;
232
+ close(): void;
233
+ }
234
+ /**
235
+ * Native AVCodecParameters binding interface
236
+ *
237
+ * This struct describes the properties of an encoded stream.
238
+ * All fields are read/write.
239
+ *
240
+ * @internal
241
+ */
242
+ export interface NativeCodecParameters extends Disposable {
243
+ readonly __brand: 'NativeCodecParameters';
244
+ readonly codecTagString: string | null;
245
+ readonly extradataSize: number;
246
+ readonly nbCodedSideData: number;
247
+ readonly codecProperties: AVCodecProp;
248
+ codecType: AVMediaType;
249
+ codecId: AVCodecID;
250
+ codecTag: number;
251
+ extradata: Buffer | null;
252
+ format: AVPixelFormat | AVSampleFormat;
253
+ bitRate: bigint;
254
+ bitsPerCodedSample: number;
255
+ bitsPerRawSample: number;
256
+ profile: AVProfile;
257
+ level: number;
258
+ width: number;
259
+ height: number;
260
+ sampleAspectRatio: IRational;
261
+ frameRate: IRational;
262
+ colorRange: AVColorRange;
263
+ colorPrimaries: AVColorPrimaries;
264
+ colorTrc: AVColorTransferCharacteristic;
265
+ colorSpace: AVColorSpace;
266
+ chromaLocation: AVChromaLocation;
267
+ channelLayout: ChannelLayout;
268
+ channels: number;
269
+ sampleRate: number;
270
+ frameSize: number;
271
+ initialPadding: number;
272
+ videoDelay: number;
273
+ alloc(): void;
274
+ free(): void;
275
+ copy(dst: NativeCodecParameters): number;
276
+ fromContext(codecContext: NativeCodecContext): number;
277
+ toContext(codecContext: NativeCodecContext): number;
278
+ parseExtradata(): number;
279
+ getCodedSideData(type: AVPacketSideDataType): Buffer | null;
280
+ addCodedSideData(type: AVPacketSideDataType, data: Buffer): number;
281
+ getAllCodedSideData(): {
282
+ type: AVPacketSideDataType;
283
+ data: Buffer;
284
+ }[];
285
+ toJSON(): Record<string, any>;
286
+ [Symbol.dispose](): void;
287
+ }
288
+ /**
289
+ * Native AVDictionary binding interface
290
+ *
291
+ * Key-value store for options and metadata.
292
+ * Used throughout FFmpeg for configuration and metadata.
293
+ * Direct mapping to FFmpeg's AVDictionary.
294
+ *
295
+ * @internal
296
+ */
297
+ export interface NativeDictionary extends Disposable {
298
+ readonly __brand: 'NativeDictionary';
299
+ alloc(): void;
300
+ free(): void;
301
+ copy(dst: NativeDictionary, flags: AVDictFlag): number;
302
+ set(key: string, value: string, flags: AVDictFlag): number;
303
+ get(key: string, flags: AVDictFlag): string | null;
304
+ count(): number;
305
+ getAll(): Record<string, string>;
306
+ parseString(str: string, keyValSep: string, pairsSep: string, flags: AVDictFlag): number;
307
+ getString(keyValSep: string, pairsSep: string): string | null;
308
+ [Symbol.dispose](): void;
309
+ }
310
+ /**
311
+ * Native AVIOContext binding interface
312
+ *
313
+ * Bytestream I/O context for custom I/O.
314
+ * Used for reading/writing data from/to files, network, memory, etc.
315
+ *
316
+ * @internal
317
+ */
318
+ export interface NativeIOContext extends Disposable, AsyncDisposable {
319
+ readonly __brand: 'NativeIOContext';
320
+ allocContext(bufferSize: number, writeFlag: number): void;
321
+ allocContextWithCallbacks(bufferSize: number, writeFlag: 0 | 1, readCallback?: ((size: number) => Buffer | null | number | Promise<Buffer | null | number>) | null, writeCallback?: ((buffer: Buffer) => number | void | Promise<number | void>) | null, seekCallback?: ((offset: bigint, whence: AVSeekWhence) => bigint | number | Promise<bigint | number>) | null): void;
322
+ freeContext(): void;
323
+ open2(url: string, flags: AVIOFlag): Promise<number>;
324
+ open2Sync(url: string, flags: AVIOFlag): number;
325
+ closep(): Promise<number>;
326
+ closepSync(): number;
327
+ read(size: number): Promise<Buffer | number>;
328
+ readSync(size: number): Buffer | number;
329
+ write(buffer: Buffer): Promise<void>;
330
+ writeSync(buffer: Buffer): void;
331
+ seek(offset: bigint, whence: AVSeekWhence): Promise<bigint>;
332
+ seekSync(offset: bigint, whence: AVSeekWhence): bigint;
333
+ size(): Promise<bigint>;
334
+ sizeSync(): bigint;
335
+ flush(): Promise<void>;
336
+ flushSync(): void;
337
+ skip(offset: bigint): Promise<bigint>;
338
+ skipSync(offset: bigint): bigint;
339
+ tell(): bigint;
340
+ readonly eof: boolean;
341
+ readonly error: number;
342
+ readonly seekable: number;
343
+ readonly pos: bigint;
344
+ readonly bufferSize: number;
345
+ readonly writeFlag: boolean;
346
+ maxPacketSize: number;
347
+ direct: number;
348
+ [Symbol.dispose](): void;
349
+ [Symbol.asyncDispose](): Promise<void>;
350
+ }
351
+ /**
352
+ * Native AVInputFormat binding interface
353
+ *
354
+ * Demuxer definition.
355
+ * Describes a supported input container format.
356
+ *
357
+ * @internal
358
+ */
359
+ export interface NativeInputFormat {
360
+ readonly __brand: 'NativeInputFormat';
361
+ readonly name: string | null;
362
+ readonly longName: string | null;
363
+ readonly extensions: string | null;
364
+ readonly mimeType: string | null;
365
+ readonly flags: AVFormatFlag;
366
+ }
367
+ /**
368
+ * Native AVOutputFormat binding interface
369
+ *
370
+ * Muxer definition.
371
+ * Describes a supported output container format.
372
+ *
373
+ * @internal
374
+ */
375
+ export interface NativeOutputFormat {
376
+ readonly __brand: 'NativeOutputFormat';
377
+ readonly name: string | null;
378
+ readonly longName: string | null;
379
+ readonly extensions: string | null;
380
+ readonly mimeType: string | null;
381
+ readonly audioCodec: AVCodecID;
382
+ readonly videoCodec: AVCodecID;
383
+ readonly subtitleCodec: AVCodecID;
384
+ readonly flags: AVFormatFlag;
385
+ }
386
+ /**
387
+ * Native AVStream binding interface
388
+ *
389
+ * Stream structure.
390
+ * Contains information about one stream in a format context.
391
+ * Note: Streams are created and managed by FormatContext - no lifecycle methods.
392
+ *
393
+ * @internal
394
+ */
395
+ export interface NativeStream {
396
+ readonly __brand: 'NativeStream';
397
+ readonly parser: NativeCodecParser | null;
398
+ readonly index: number;
399
+ readonly attachedPic: NativePacket | null;
400
+ id: number;
401
+ codecpar: NativeCodecParameters;
402
+ timeBase: IRational;
403
+ startTime: bigint;
404
+ duration: bigint;
405
+ nbFrames: bigint;
406
+ disposition: AVDisposition;
407
+ discard: AVDiscard;
408
+ sampleAspectRatio: IRational;
409
+ avgFrameRate: IRational;
410
+ rFrameRate: IRational;
411
+ ptsWrapBits: number;
412
+ metadata: NativeDictionary | null;
413
+ eventFlags: AVStreamEventFlag;
414
+ }
415
+ /**
416
+ * Native AVFormatContext binding interface
417
+ *
418
+ * Main interface for demuxing and muxing operations.
419
+ * Must be allocated before use and properly disposed after.
420
+ *
421
+ * @internal
422
+ */
423
+ export interface NativeFormatContext extends AsyncDisposable {
424
+ readonly __brand: 'NativeFormatContext';
425
+ readonly startTime: bigint;
426
+ readonly duration: bigint;
427
+ readonly bitRate: bigint;
428
+ readonly iformat: NativeInputFormat | null;
429
+ readonly nbStreams: number;
430
+ readonly streams: NativeStream[] | null;
431
+ readonly nbPrograms: number;
432
+ readonly pbBytes: bigint;
433
+ readonly probeScore: number;
434
+ url: string | null;
435
+ flags: AVFormatFlag;
436
+ probesize: bigint;
437
+ maxAnalyzeDuration: bigint;
438
+ maxInterleaveDelta: bigint;
439
+ metadata: NativeDictionary | null;
440
+ oformat: NativeOutputFormat | null;
441
+ pb: NativeIOContext | null;
442
+ strictStdCompliance: number;
443
+ maxStreams: number;
444
+ allocContext(): void;
445
+ allocOutputContext2(oformat: NativeOutputFormat | null, formatName: string | null, filename: string | null): number;
446
+ freeContext(): void;
447
+ openInput(url: string, fmt: NativeInputFormat | null, options: NativeDictionary | null): Promise<number>;
448
+ openInputSync(url: string, fmt: NativeInputFormat | null, options: NativeDictionary | null): number;
449
+ closeInput(): Promise<void>;
450
+ closeInputSync(): void;
451
+ findStreamInfo(options: NativeDictionary[] | null): Promise<number>;
452
+ findStreamInfoSync(options: NativeDictionary | null): number;
453
+ readFrame(pkt: NativePacket): Promise<number>;
454
+ readFrameSync(pkt: NativePacket): number;
455
+ seekFrame(streamIndex: number, timestamp: bigint, flags: AVSeekFlag): Promise<number>;
456
+ seekFrameSync(streamIndex: number, timestamp: bigint, flags: AVSeekFlag): number;
457
+ seekFile(streamIndex: number, minTs: bigint, ts: bigint, maxTs: bigint, flags: AVSeekFlag): Promise<number>;
458
+ openOutput(): Promise<number>;
459
+ openOutputSync(): number;
460
+ closeOutput(): Promise<void>;
461
+ closeOutputSync(): void;
462
+ writeHeader(options: NativeDictionary | null): Promise<number>;
463
+ writeHeaderSync(options: NativeDictionary | null): number;
464
+ writeFrame(pkt: NativePacket | null): Promise<number>;
465
+ writeFrameSync(pkt: NativePacket | null): number;
466
+ interleavedWriteFrame(pkt: NativePacket | null): Promise<number>;
467
+ interleavedWriteFrameSync(pkt: NativePacket | null): number;
468
+ writeTrailer(): Promise<number>;
469
+ writeTrailerSync(): number;
470
+ flush(): Promise<void>;
471
+ flushSync(): void;
472
+ newStream(c: NativeCodec | null): NativeStream;
473
+ dumpFormat(index: number, url: string, isOutput: boolean): void;
474
+ findBestStream(type: AVMediaType, wantedStreamNb: number, relatedStream: number, wantDecoder: boolean, flags: number): number | {
475
+ streamIndex: number;
476
+ decoder: NativeCodec | null;
477
+ };
478
+ getRTSPStreamInfo(): RTSPStreamInfo[] | null;
479
+ sendRTSPPacket(streamIndex: number, rtpData: Buffer): Promise<number>;
480
+ sendRTSPPacketSync(streamIndex: number, rtpData: Buffer): number;
481
+ [Symbol.dispose](): void;
482
+ }
483
+ /**
484
+ * Native FFmpegError binding interface
485
+ *
486
+ * Provides error code translation and string representation.
487
+ * Maps FFmpeg error codes to human-readable messages.
488
+ *
489
+ * @internal
490
+ */
491
+ export interface NativeFFmpegError {
492
+ readonly __brand: 'NativeFFmpegError';
493
+ readonly code: number;
494
+ readonly message: string;
495
+ }
496
+ /**
497
+ * Native AudioFifo binding interface
498
+ *
499
+ * Audio FIFO buffer for sample storage and buffering.
500
+ * Provides thread-safe audio sample buffering with automatic reallocation.
501
+ *
502
+ * @internal
503
+ */
504
+ export interface NativeAudioFifo extends Disposable {
505
+ readonly __brand: 'NativeAudioFifo';
506
+ readonly size: number;
507
+ readonly space: number;
508
+ alloc(sampleFmt: AVSampleFormat, channels: number, nbSamples: number): void;
509
+ free(): void;
510
+ write(data: Buffer | Buffer[], nbSamples: number): Promise<number>;
511
+ writeSync(data: Buffer | Buffer[], nbSamples: number): number;
512
+ read(data: Buffer | Buffer[], nbSamples: number): Promise<number>;
513
+ readSync(data: Buffer | Buffer[], nbSamples: number): number;
514
+ peek(data: Buffer | Buffer[], nbSamples: number): Promise<number>;
515
+ peekSync(data: Buffer | Buffer[], nbSamples: number): number;
516
+ drain(nbSamples: number): void;
517
+ reset(): void;
518
+ realloc(nbSamples: number): number;
519
+ }
520
+ /**
521
+ * Native AVFifo binding interface
522
+ *
523
+ * Generic FIFO buffer for arbitrary data types.
524
+ * Provides queue functionality for any fixed-size elements.
525
+ *
526
+ * @internal
527
+ */
528
+ export interface NativeFifo extends Disposable {
529
+ readonly __brand: 'NativeFifo';
530
+ readonly size: number;
531
+ readonly canRead: number;
532
+ readonly canWrite: number;
533
+ readonly elemSize: number;
534
+ alloc(nbElems: number, elemSize: number, flags: AVFifoFlag): void;
535
+ free(): void;
536
+ write(buf: Buffer, nbElems: number): Promise<number>;
537
+ writeSync(buf: Buffer, nbElems: number): number;
538
+ read(buf: Buffer, nbElems: number): Promise<number>;
539
+ readSync(buf: Buffer, nbElems: number): number;
540
+ peek(buf: Buffer, nbElems: number, offset: number): Promise<number>;
541
+ peekSync(buf: Buffer, nbElems: number, offset: number): number;
542
+ grow(inc: number): number;
543
+ reset(): void;
544
+ setAutoGrowLimit(maxElems: number): void;
545
+ }
546
+ /**
547
+ * Native SwsContext binding interface
548
+ *
549
+ * Software scaling and format conversion context.
550
+ * Provides pixel format conversion and image scaling capabilities.
551
+ *
552
+ * @internal
553
+ */
554
+ export interface NativeSoftwareScaleContext extends Disposable {
555
+ readonly __brand: 'NativeSoftwareScaleContext';
556
+ allocContext(): void;
557
+ getContext(srcW: number, srcH: number, srcFormat: AVPixelFormat, dstW: number, dstH: number, dstFormat: AVPixelFormat, flags: SwsFlags): void;
558
+ initContext(): number;
559
+ freeContext(): void;
560
+ scale(srcSlice: Buffer[], srcStride: number[], srcSliceY: number, srcSliceH: number, dst: Buffer[], dstStride: number[]): Promise<number>;
561
+ scaleSync(srcSlice: Buffer[], srcStride: number[], srcSliceY: number, srcSliceH: number, dst: Buffer[], dstStride: number[]): number;
562
+ scaleFrame(dst: NativeFrame, src: NativeFrame): Promise<number>;
563
+ scaleFrameSync(dst: NativeFrame, src: NativeFrame): number;
564
+ [Symbol.dispose](): void;
565
+ }
566
+ /**
567
+ * Native FrameUtils binding interface
568
+ *
569
+ * Frame processing utilities with persistent frame pools.
570
+ * Provides crop, scale, and format conversion operations.
571
+ *
572
+ * @internal
573
+ */
574
+ export interface NativeFrameUtils extends Disposable {
575
+ readonly __brand: 'NativeFrameUtils';
576
+ process(buffer: Buffer, options: ImageOptions): Buffer;
577
+ close(): void;
578
+ }
579
+ /**
580
+ * Native SwrContext binding interface
581
+ *
582
+ * Audio resampling, sample format conversion and mixing context.
583
+ * Provides audio format conversion, resampling and channel remapping.
584
+ *
585
+ * @internal
586
+ */
587
+ export interface NativeSoftwareResampleContext extends Disposable {
588
+ readonly __brand: 'NativeSoftwareResampleContext';
589
+ alloc(): void;
590
+ allocSetOpts2(outChLayout: ChannelLayout, outSampleFmt: AVSampleFormat, outSampleRate: number, inChLayout: ChannelLayout, inSampleFmt: AVSampleFormat, inSampleRate: number): number;
591
+ init(): number;
592
+ free(): void;
593
+ close(): void;
594
+ convert(outBuffer: Buffer[] | null, outCount: number, inBuffer: Buffer[] | null, inCount: number): Promise<number>;
595
+ convertSync(outBuffer: Buffer[] | null, outCount: number, inBuffer: Buffer[] | null, inCount: number): number;
596
+ convertFrame(outFrame: NativeFrame | null, inFrame: NativeFrame | null): number;
597
+ configFrame(outFrame: NativeFrame | null, inFrame: NativeFrame | null): number;
598
+ isInitialized(): boolean;
599
+ getDelay(base: bigint): bigint;
600
+ getOutSamples(inSamples: number): number;
601
+ nextPts(pts: bigint): bigint;
602
+ setCompensation(sampleDelta: number, compensationDistance: number): number;
603
+ setChannelMapping(channelMap: number[]): number;
604
+ setMatrix(matrix: number[], stride: number): number;
605
+ dropOutput(count: number): number;
606
+ injectSilence(count: number): number;
607
+ [Symbol.dispose](): void;
608
+ }
609
+ /**
610
+ * Native AVFilter binding interface
611
+ *
612
+ * Represents a filter definition (e.g., "scale", "overlay", etc.).
613
+ * Filters are static definitions - actual processing happens via FilterContext.
614
+ *
615
+ * @internal
616
+ */
617
+ export interface NativeFilter {
618
+ readonly __brand: 'NativeFilter';
619
+ readonly name: string | null;
620
+ readonly description: string | null;
621
+ readonly inputs: FilterPad[];
622
+ readonly outputs: FilterPad[];
623
+ readonly flags: AVFilterFlag;
624
+ }
625
+ /**
626
+ * Native AVFilterContext binding interface
627
+ *
628
+ * An instance of a filter in a filter graph.
629
+ * Must be created through FilterGraph.createFilter() and properly disposed after.
630
+ *
631
+ * @internal
632
+ */
633
+ export interface NativeFilterContext extends Disposable {
634
+ readonly __brand: 'NativeFilterContext';
635
+ readonly filter: NativeFilter | null;
636
+ readonly graph: NativeFilterGraph | null;
637
+ readonly nbInputs: number;
638
+ readonly nbOutputs: number;
639
+ name: string | null;
640
+ hwDeviceCtx: NativeHardwareDeviceContext | null;
641
+ extraHWFrames: number;
642
+ init(options?: NativeDictionary | null): number;
643
+ initStr(args?: string | null): number;
644
+ link(srcPad: number, dst: NativeFilterContext, dstPad: number): number;
645
+ unlink(pad: number): void;
646
+ buffersrcAddFrame(frame: NativeFrame | null, flags?: AVBufferSrcFlag): Promise<number>;
647
+ buffersrcAddFrameSync(frame: NativeFrame | null, flags?: AVBufferSrcFlag): number;
648
+ buffersrcParametersSet(params: {
649
+ width?: number;
650
+ height?: number;
651
+ format?: number;
652
+ timeBase?: IRational;
653
+ frameRate?: IRational;
654
+ sampleAspectRatio?: IRational;
655
+ hwFramesCtx?: NativeHardwareFramesContext | null;
656
+ sampleRate?: number;
657
+ channelLayout?: bigint;
658
+ }): number;
659
+ buffersinkGetFrame(frame: NativeFrame): Promise<number>;
660
+ buffersinkGetFrameSync(frame: NativeFrame): number;
661
+ buffersinkGetWidth(): number;
662
+ buffersinkGetHeight(): number;
663
+ buffersinkGetFormat(): AVPixelFormat | AVSampleFormat;
664
+ buffersinkGetTimeBase(): IRational;
665
+ buffersinkGetFrameRate(): IRational;
666
+ buffersinkGetSampleRate(): number;
667
+ buffersinkGetChannelLayout(): ChannelLayout;
668
+ buffersinkGetSampleAspectRatio(): IRational;
669
+ buffersinkGetColorspace(): AVColorSpace;
670
+ buffersinkGetColorRange(): AVColorRange;
671
+ free(): void;
672
+ [Symbol.dispose](): void;
673
+ }
674
+ /**
675
+ * Native AVFilterGraph binding interface
676
+ *
677
+ * Container for all filters and their connections.
678
+ * Must be allocated before use and properly disposed after.
679
+ *
680
+ * @internal
681
+ */
682
+ export interface NativeFilterGraph extends Disposable {
683
+ readonly __brand: 'NativeFilterGraph';
684
+ readonly nbFilters: number;
685
+ readonly filters: NativeFilterContext[] | null;
686
+ threadType: AVFilterConstants;
687
+ nbThreads: number;
688
+ scaleSwsOpts: string | null;
689
+ aresampleSwrOpts: string | null;
690
+ alloc(): void;
691
+ free(): void;
692
+ createFilter(filter: NativeFilter, name: string, args?: string | null): NativeFilterContext | null;
693
+ allocFilter(filter: NativeFilter, name: string): NativeFilterContext | null;
694
+ getFilter(name: string): NativeFilterContext | null;
695
+ config(): Promise<number>;
696
+ configSync(): number;
697
+ parse(filters: string, inputs: NativeFilterInOut | null, outputs: NativeFilterInOut | null): number;
698
+ parse2(filters: string): number;
699
+ parsePtr(filters: string, inputs?: NativeFilterInOut | null, outputs?: NativeFilterInOut | null): number;
700
+ segmentParse(filters: string, flags?: number): NativeFilterGraphSegment | null;
701
+ validate(): number;
702
+ requestOldest(): Promise<number>;
703
+ requestOldestSync(): number;
704
+ dump(): string | null;
705
+ sendCommand(target: string, cmd: string, arg: string, flags?: AVFilterCmdFlag): number | {
706
+ response: string | null;
707
+ };
708
+ queueCommand(target: string, cmd: string, arg: string, ts: number, flags?: AVFilterCmdFlag): number;
709
+ [Symbol.dispose](): void;
710
+ }
711
+ /**
712
+ * Native AVFilterGraphSegment binding interface
713
+ *
714
+ * Represents a parsed filtergraph segment.
715
+ * Separates filter parsing from initialization.
716
+ *
717
+ * @internal
718
+ */
719
+ export interface NativeFilterGraphSegment extends Disposable {
720
+ readonly __brand: 'NativeFilterGraphSegment';
721
+ free(): void;
722
+ createFilters(flags?: number): number;
723
+ applyOpts(flags?: number): number;
724
+ apply(inputs: NativeFilterInOut, outputs: NativeFilterInOut, flags?: number): number;
725
+ [Symbol.dispose](): void;
726
+ }
727
+ /**
728
+ * Native AVFilterInOut binding interface
729
+ *
730
+ * Helper structure for parsing filter graphs.
731
+ * Used with FilterGraph.parse() to define inputs/outputs.
732
+ *
733
+ * @internal
734
+ */
735
+ export interface NativeFilterInOut extends Disposable {
736
+ readonly __brand: 'NativeFilterInOut';
737
+ name: string | null;
738
+ filterCtx: NativeFilterContext | null;
739
+ padIdx: number;
740
+ next: NativeFilterInOut | null;
741
+ alloc(): void;
742
+ free(): void;
743
+ [Symbol.dispose](): void;
744
+ }
745
+ /**
746
+ * Native AVHWDeviceContext binding interface
747
+ *
748
+ * Hardware device context for hardware acceleration.
749
+ * Direct mapping to FFmpeg's AVHWDeviceContext.
750
+ *
751
+ * @internal
752
+ */
753
+ export interface NativeHardwareDeviceContext extends Disposable {
754
+ readonly __brand: 'NativeHardwareDeviceContext';
755
+ readonly type: AVHWDeviceType;
756
+ readonly hwctx: bigint | null;
757
+ alloc(type: AVHWDeviceType): void;
758
+ init(): number;
759
+ create(type: AVHWDeviceType, device: string | null, options: any | null): number;
760
+ createDerived(source: NativeHardwareDeviceContext, type: AVHWDeviceType): number;
761
+ hwconfigAlloc(): bigint | null;
762
+ getHwframeConstraints(hwconfig?: bigint): {
763
+ validHwFormats?: AVPixelFormat[];
764
+ validSwFormats?: AVPixelFormat[];
765
+ minWidth: number;
766
+ minHeight: number;
767
+ maxWidth: number;
768
+ maxHeight: number;
769
+ } | null;
770
+ free(): void;
771
+ [Symbol.dispose](): void;
772
+ }
773
+ /**
774
+ * Native AVHWFramesContext binding interface
775
+ *
776
+ * Hardware frames context for hardware acceleration.
777
+ * Direct mapping to FFmpeg's AVHWFramesContext.
778
+ *
779
+ * @internal
780
+ */
781
+ export interface NativeHardwareFramesContext extends Disposable {
782
+ readonly __brand: 'NativeHardwareFramesContext';
783
+ readonly deviceRef: NativeHardwareDeviceContext | null;
784
+ format: AVPixelFormat;
785
+ swFormat: AVPixelFormat;
786
+ width: number;
787
+ height: number;
788
+ initialPoolSize: number;
789
+ alloc(device: NativeHardwareDeviceContext): void;
790
+ init(): number;
791
+ getBuffer(frame: NativeFrame, flags?: number): number;
792
+ transferData(dst: NativeFrame, src: NativeFrame, flags?: number): Promise<number>;
793
+ transferDataSync(dst: NativeFrame, src: NativeFrame, flags?: number): number;
794
+ transferGetFormats(direction: AVHWFrameTransferDirection): AVPixelFormat[] | number;
795
+ map(dst: NativeFrame, src: NativeFrame, flags?: number): number;
796
+ createDerived(format: AVPixelFormat, derivedDevice: NativeHardwareDeviceContext, source: NativeHardwareFramesContext, flags?: number): number;
797
+ free(): void;
798
+ [Symbol.dispose](): void;
799
+ }
800
+ /**
801
+ * Native AVBitStreamFilter binding interface
802
+ *
803
+ * Represents a bitstream filter definition for modifying packet data.
804
+ * This is an immutable descriptor - actual filtering happens via BitStreamFilterContext.
805
+ * Used for tasks like H.264 annexb conversion, adding/removing metadata, or format adjustments.
806
+ *
807
+ * @internal
808
+ */
809
+ export interface NativeBitStreamFilter {
810
+ readonly __brand: 'NativeBitStreamFilter';
811
+ readonly name: string | null;
812
+ readonly codecIds: number[] | null;
813
+ }
814
+ /**
815
+ * Native AVBSFContext binding interface
816
+ *
817
+ * The main interface for bitstream filtering operations.
818
+ * Processes packets without full decode/encode, modifying headers, metadata, or format.
819
+ * Must be allocated with a filter, initialized, and properly disposed after use.
820
+ *
821
+ * @internal
822
+ */
823
+ export interface NativeBitStreamFilterContext extends Disposable {
824
+ readonly __brand: 'NativeBitStreamFilterContext';
825
+ readonly inputCodecParameters: NativeCodecParameters | null;
826
+ readonly outputCodecParameters: NativeCodecParameters | null;
827
+ readonly outputTimeBase: IRational | null;
828
+ readonly filter: NativeBitStreamFilter | null;
829
+ inputTimeBase: IRational;
830
+ alloc(filter: NativeBitStreamFilter): number;
831
+ init(): number;
832
+ free(): void;
833
+ flush(): void;
834
+ sendPacket(packet: NativePacket | null): Promise<number>;
835
+ sendPacketSync(packet: NativePacket | null): number;
836
+ receivePacket(packet: NativePacket): Promise<number>;
837
+ receivePacketSync(packet: NativePacket): number;
838
+ isInitialized(): boolean;
839
+ [Symbol.dispose](): void;
840
+ }
841
+ /**
842
+ * Native Log binding interface
843
+ *
844
+ * Static-only class for controlling FFmpeg's logging.
845
+ * Direct mapping to av_log functions.
846
+ *
847
+ * @internal
848
+ */
849
+ export interface NativeLog {
850
+ readonly __brand: 'NativeLog';
851
+ }
852
+ /**
853
+ * Native AVOption
854
+ *
855
+ * Represents a single option metadata from FFmpeg's AVOption system.
856
+ * Retrieved via Option.next() or Option.find().
857
+ *
858
+ * @internal
859
+ */
860
+ export interface NativeOption {
861
+ readonly __brand: 'NativeOption';
862
+ readonly name: string | null;
863
+ readonly help: string | null;
864
+ readonly type: AVOptionType;
865
+ readonly defaultValue: unknown;
866
+ readonly min: number;
867
+ readonly max: number;
868
+ readonly flags: AVOptionFlag;
869
+ readonly unit: string | null;
870
+ }
871
+ /**
872
+ * Native sync queue interface
873
+ *
874
+ * FFmpeg's native sync_queue from fftools for packet synchronization.
875
+ *
876
+ * @internal
877
+ */
878
+ export interface NativeSyncQueue extends Disposable {
879
+ addStream(limiting: number): number;
880
+ send(streamIdx: number, packet: NativePacket | null): number;
881
+ receive(streamIdx: number, packet: NativePacket): number;
882
+ free(): void;
883
+ }
884
+ /**
885
+ * Device information returned by device enumeration
886
+ *
887
+ * @internal
888
+ */
889
+ export interface NativeDeviceInfo {
890
+ name: string;
891
+ description: string;
892
+ type: 'video' | 'audio' | 'screen';
893
+ isDefault: boolean;
894
+ screenX?: number;
895
+ screenY?: number;
896
+ screenWidth?: number;
897
+ screenHeight?: number;
898
+ }
899
+ /**
900
+ * Device capture mode (resolution + frame rate range)
901
+ *
902
+ * @internal
903
+ */
904
+ export interface NativeDeviceMode {
905
+ width: number;
906
+ height: number;
907
+ minFrameRate: number;
908
+ maxFrameRate: number;
909
+ pixelFormat: AVPixelFormat;
910
+ }
911
+ /**
912
+ * Audio device capture mode (sample rate + channels + sample format)
913
+ *
914
+ * @internal
915
+ */
916
+ export interface NativeAudioDeviceMode {
917
+ sampleRate: number;
918
+ channels: number;
919
+ sampleFormat: AVSampleFormat;
920
+ }
921
+ /**
922
+ * Device module static methods
923
+ *
924
+ * @internal
925
+ */
926
+ export interface NativeDeviceModule {
927
+ listDevices(): Promise<NativeDeviceInfo[]>;
928
+ listDevicesSync(): NativeDeviceInfo[];
929
+ listDeviceModes(deviceName: string): Promise<NativeDeviceMode[]>;
930
+ listDeviceModesSync(deviceName: string): NativeDeviceMode[];
931
+ listAudioDeviceModes(deviceName: string): Promise<NativeAudioDeviceMode[]>;
932
+ listAudioDeviceModesSync(deviceName: string): NativeAudioDeviceMode[];
933
+ getVideoFormat(): string;
934
+ getAudioFormat(): string;
935
+ getScreenFormat(): string;
936
+ hasScreenCapturePermission(): boolean;
937
+ requestScreenCaptureAccess(): boolean;
938
+ }
939
+ /**
940
+ * Interface for classes that wrap native objects
941
+ *
942
+ * @internal
943
+ */
944
+ export interface NativeWrapper<T> {
945
+ getNative(): T;
946
+ }