@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,586 @@
1
+ import { Rational } from './rational.js';
2
+ import type { AVCodecCap, AVCodecID, AVHWDeviceType, AVMediaType, AVPixelFormat, AVSampleFormat } from '../constants/constants.js';
3
+ import type { FFDecoderCodec } from '../constants/decoders.js';
4
+ import type { FFEncoderCodec } from '../constants/encoders.js';
5
+ import type { FFHWDeviceType } from '../constants/hardware.js';
6
+ import type { NativeCodec, NativeWrapper } from './native-types.js';
7
+ import type { ChannelLayout } from './types.js';
8
+ /**
9
+ * Codec profile definition
10
+ */
11
+ export interface CodecProfile {
12
+ /** Profile ID (FF_PROFILE_*) */
13
+ profile: number;
14
+ /** Human-readable profile name */
15
+ name?: string;
16
+ }
17
+ /**
18
+ * Codec descriptor for audio/video encoding and decoding.
19
+ *
20
+ * Represents an encoder or decoder implementation that can process media data.
21
+ * Contains codec capabilities, supported formats, and hardware acceleration information.
22
+ * Used to create codec contexts for actual encoding/decoding operations.
23
+ * Supports both software and hardware-accelerated codecs.
24
+ *
25
+ * Direct mapping to FFmpeg's AVCodec.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * import { Codec, FFmpegError } from 'node-av';
30
+ * import { AV_CODEC_ID_H264, FF_ENCODER_LIBX264 } from 'node-av/constants';
31
+ *
32
+ * // Find decoder by ID
33
+ * const decoder = Codec.findDecoder(AV_CODEC_ID_H264);
34
+ * if (!decoder) {
35
+ * throw new Error('H.264 decoder not available');
36
+ * }
37
+ *
38
+ * // Find encoder by name
39
+ * const encoder = Codec.findEncoderByName(FF_ENCODER_LIBX264);
40
+ * if (!encoder) {
41
+ * throw new Error('libx264 encoder not available');
42
+ * }
43
+ *
44
+ * // Check capabilities
45
+ * console.log(`Codec: ${decoder.name}`);
46
+ * console.log(`Type: ${decoder.type}`);
47
+ * console.log(`Hardware: ${decoder.hasHardwareAcceleration()}`);
48
+ *
49
+ * // Get supported pixel formats
50
+ * const formats = decoder.pixelFormats;
51
+ * if (formats) {
52
+ * console.log(`Supported formats: ${formats.join(', ')}`);
53
+ * }
54
+ * ```
55
+ *
56
+ * @see [AVCodec](https://ffmpeg.org/doxygen/trunk/structAVCodec.html) - FFmpeg Doxygen
57
+ * @see {@link CodecContext} For encoding/decoding operations
58
+ */
59
+ export declare class Codec implements NativeWrapper<NativeCodec> {
60
+ private native;
61
+ /**
62
+ * @param native - The native codec instance
63
+ *
64
+ * @internal
65
+ */
66
+ constructor(native: NativeCodec);
67
+ /**
68
+ * Find a decoder by codec ID.
69
+ *
70
+ * Searches for a decoder that can decode the specified codec format.
71
+ *
72
+ * Direct mapping to avcodec_find_decoder().
73
+ *
74
+ * @param id - Codec ID to search for
75
+ *
76
+ * @returns Decoder if found, null otherwise
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * import { AV_CODEC_ID_H264, AV_CODEC_ID_AAC } from 'node-av/constants';
81
+ *
82
+ * // Find H.264 video decoder
83
+ * const h264 = Codec.findDecoder(AV_CODEC_ID_H264);
84
+ * if (h264) {
85
+ * console.log(`Found: ${h264.name}`);
86
+ * }
87
+ *
88
+ * // Find AAC audio decoder
89
+ * const aac = Codec.findDecoder(AV_CODEC_ID_AAC);
90
+ * ```
91
+ *
92
+ * @see {@link findDecoderByName} To find by name
93
+ * @see {@link findEncoder} To find encoders
94
+ */
95
+ static findDecoder(id: AVCodecID): Codec | null;
96
+ /**
97
+ * Find a decoder by name.
98
+ *
99
+ * Searches for a specific decoder implementation by name.
100
+ * Useful when multiple decoders exist for the same codec.
101
+ *
102
+ * Direct mapping to avcodec_find_decoder_by_name().
103
+ *
104
+ * @param name - Decoder name
105
+ *
106
+ * @returns Decoder if found, null otherwise
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * // Find specific H.264 decoder
111
+ * const decoder = Codec.findDecoderByName('h264_cuvid');
112
+ * if (decoder) {
113
+ * console.log('Found NVIDIA hardware decoder');
114
+ * }
115
+ *
116
+ * // Find software decoder
117
+ * const sw = Codec.findDecoderByName('h264');
118
+ * ```
119
+ *
120
+ * @see {@link findDecoder} To find by codec ID
121
+ */
122
+ static findDecoderByName(name: FFDecoderCodec): Codec | null;
123
+ /**
124
+ * Find an encoder by codec ID.
125
+ *
126
+ * Searches for an encoder that can encode to the specified codec format.
127
+ *
128
+ * Direct mapping to avcodec_find_encoder().
129
+ *
130
+ * @param id - Codec ID to search for
131
+ *
132
+ * @returns Encoder if found, null otherwise
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * import { AV_CODEC_ID_H264, AV_CODEC_ID_AAC } from 'node-av/constants';
137
+ *
138
+ * // Find H.264 video encoder
139
+ * const h264 = Codec.findEncoder(AV_CODEC_ID_H264);
140
+ * if (h264) {
141
+ * console.log(`Found: ${h264.name}`);
142
+ * }
143
+ *
144
+ * // Find AAC audio encoder
145
+ * const aac = Codec.findEncoder(AV_CODEC_ID_AAC);
146
+ * ```
147
+ *
148
+ * @see {@link findEncoderByName} To find by name
149
+ * @see {@link findDecoder} To find decoders
150
+ */
151
+ static findEncoder(id: AVCodecID): Codec | null;
152
+ /**
153
+ * Find an encoder by name.
154
+ *
155
+ * Searches for a specific encoder implementation by name.
156
+ * Useful when multiple encoders exist for the same codec.
157
+ *
158
+ * Direct mapping to avcodec_find_encoder_by_name().
159
+ *
160
+ * @param name - Encoder name
161
+ *
162
+ * @returns Encoder if found, null otherwise
163
+ *
164
+ * @example
165
+ * ```typescript
166
+ * // Find specific H.264 encoder
167
+ * const x264 = Codec.findEncoderByName(FF_ENCODER_LIBX264);
168
+ * if (x264) {
169
+ * console.log('Found x264 encoder');
170
+ * }
171
+ *
172
+ * // Find hardware encoder
173
+ * const nvenc = Codec.findEncoderByName('h264_nvenc');
174
+ * ```
175
+ *
176
+ * @see {@link findEncoder} To find by codec ID
177
+ */
178
+ static findEncoderByName(name: FFEncoderCodec): Codec | null;
179
+ /**
180
+ * Get list of all available codecs.
181
+ *
182
+ * Returns all registered codecs (both encoders and decoders).
183
+ *
184
+ * @returns Array of all available codecs
185
+ *
186
+ * @example
187
+ * ```typescript
188
+ * // List all codecs
189
+ * const codecs = Codec.getCodecList();
190
+ * console.log(`Total codecs: ${codecs.length}`);
191
+ *
192
+ * // Filter encoders
193
+ * const encoders = codecs.filter(c => c.isEncoder());
194
+ * console.log(`Encoders: ${encoders.length}`);
195
+ *
196
+ * // Filter hardware codecs
197
+ * const hw = codecs.filter(c => c.hasHardwareAcceleration());
198
+ * console.log(`Hardware codecs: ${hw.length}`);
199
+ * ```
200
+ *
201
+ * @see {@link iterateCodecs} For memory-efficient iteration
202
+ */
203
+ static getCodecList(): Codec[];
204
+ /**
205
+ * Iterate through available codecs.
206
+ *
207
+ * Memory-efficient way to iterate through all codecs.
208
+ * Uses an opaque pointer to track iteration state.
209
+ *
210
+ * Direct mapping to av_codec_iterate().
211
+ *
212
+ * @param opaque - Iteration state (null to start)
213
+ *
214
+ * @returns Next codec and state, or null when done
215
+ *
216
+ * @example
217
+ * ```typescript
218
+ * // Iterate all codecs
219
+ * let iter = null;
220
+ * let result;
221
+ * while ((result = Codec.iterateCodecs(iter))) {
222
+ * console.log(`Codec: ${result.codec.name}`);
223
+ * iter = result.opaque;
224
+ * }
225
+ * ```
226
+ *
227
+ * @see {@link getCodecList} For simple array access
228
+ */
229
+ static iterateCodecs(opaque?: bigint | null): {
230
+ codec: Codec;
231
+ opaque: bigint;
232
+ } | null;
233
+ /**
234
+ * Codec name.
235
+ *
236
+ * Short name identifier for the codec (e.g., 'h264', 'aac').
237
+ *
238
+ * Direct mapping to AVCodec->name.
239
+ */
240
+ get name(): string | null;
241
+ /**
242
+ * Codec long name.
243
+ *
244
+ * Human-readable description of the codec.
245
+ *
246
+ * Direct mapping to AVCodec->long_name.
247
+ */
248
+ get longName(): string | null;
249
+ /**
250
+ * Media type.
251
+ *
252
+ * Type of media this codec processes (video, audio, subtitle, etc.).
253
+ *
254
+ * Direct mapping to AVCodec->type.
255
+ */
256
+ get type(): AVMediaType;
257
+ /**
258
+ * Codec ID.
259
+ *
260
+ * Unique identifier for the codec format.
261
+ *
262
+ * Direct mapping to AVCodec->id.
263
+ */
264
+ get id(): AVCodecID;
265
+ /**
266
+ * Codec capabilities.
267
+ *
268
+ * Bitfield of AV_CODEC_CAP_* flags indicating codec features.
269
+ *
270
+ * Direct mapping to AVCodec->capabilities.
271
+ */
272
+ get capabilities(): AVCodecCap;
273
+ /**
274
+ * Check if codec has specific capabilities.
275
+ *
276
+ * Tests whether all specified capabilities are present using bitwise AND.
277
+ *
278
+ * @param caps - One or more capability values to check
279
+ *
280
+ * @returns true if all specified capabilities are present, false otherwise
281
+ *
282
+ * @example
283
+ * ```typescript
284
+ * import { AV_CODEC_CAP_HARDWARE } from 'node-av/constants';
285
+ *
286
+ * if (codec.hasCapabilities(AV_CODEC_CAP_HARDWARE)) {
287
+ * console.log('This codec supports hardware acceleration');
288
+ * }
289
+ * ```
290
+ *
291
+ * @see {@link capabilities} For direct capabilities access
292
+ */
293
+ hasCapabilities(...caps: AVCodecCap[]): boolean;
294
+ /**
295
+ * Maximum lowres value.
296
+ *
297
+ * Maximum value for lowres decoding (0 = no lowres support).
298
+ *
299
+ * Direct mapping to AVCodec->max_lowres.
300
+ */
301
+ get maxLowres(): number;
302
+ /**
303
+ * Supported profiles.
304
+ *
305
+ * Array of profiles this codec can handle (e.g., baseline, main, high).
306
+ *
307
+ * Direct mapping to AVCodec->profiles.
308
+ */
309
+ get profiles(): CodecProfile[] | null;
310
+ /**
311
+ * Wrapper name.
312
+ *
313
+ * Name of the codec wrapper, if this is a wrapper codec.
314
+ *
315
+ * Direct mapping to AVCodec->wrapper_name.
316
+ */
317
+ get wrapper(): string | null;
318
+ /**
319
+ * Supported frame rates.
320
+ *
321
+ * Array of frame rates this video codec supports.
322
+ * Null for audio codecs or if all rates are supported.
323
+ *
324
+ * Direct mapping to AVCodec->supported_framerates.
325
+ */
326
+ get supportedFramerates(): Rational[] | null;
327
+ /**
328
+ * Supported pixel formats.
329
+ *
330
+ * Array of pixel formats this video codec supports.
331
+ * Null for audio codecs.
332
+ *
333
+ * Direct mapping to AVCodec->pix_fmts.
334
+ */
335
+ get pixelFormats(): AVPixelFormat[] | null;
336
+ /**
337
+ * Supported sample rates.
338
+ *
339
+ * Array of sample rates this audio codec supports.
340
+ * Null for video codecs or if all rates are supported.
341
+ *
342
+ * Direct mapping to AVCodec->supported_samplerates.
343
+ */
344
+ get supportedSamplerates(): number[] | null;
345
+ /**
346
+ * Supported sample formats.
347
+ *
348
+ * Array of sample formats this audio codec supports.
349
+ * Null for video codecs.
350
+ *
351
+ * Direct mapping to AVCodec->sample_fmts.
352
+ */
353
+ get sampleFormats(): AVSampleFormat[] | null;
354
+ /**
355
+ * Supported channel layouts.
356
+ *
357
+ * Array of channel layouts this audio codec supports.
358
+ * Null for video codecs.
359
+ *
360
+ * Direct mapping to AVCodec->ch_layouts.
361
+ */
362
+ get channelLayouts(): ChannelLayout[] | null;
363
+ /**
364
+ * Check if codec is an encoder.
365
+ *
366
+ * @returns True if this codec can encode
367
+ *
368
+ * @example
369
+ * ```typescript
370
+ * const codec = Codec.findEncoderByName(FF_ENCODER_LIBX264);
371
+ * if (codec?.isEncoder()) {
372
+ * console.log('This is an encoder');
373
+ * }
374
+ * ```
375
+ *
376
+ * @see {@link isDecoder} To check for decoders
377
+ */
378
+ isEncoder(): boolean;
379
+ /**
380
+ * Check if codec is a decoder.
381
+ *
382
+ * @returns True if this codec can decode
383
+ *
384
+ * @example
385
+ * ```typescript
386
+ * const codec = Codec.findDecoder(AV_CODEC_ID_H264);
387
+ * if (codec?.isDecoder()) {
388
+ * console.log('This is a decoder');
389
+ * }
390
+ * ```
391
+ *
392
+ * @see {@link isEncoder} To check for encoders
393
+ */
394
+ isDecoder(): boolean;
395
+ /**
396
+ * Check if codec is experimental.
397
+ *
398
+ * Experimental codecs require explicit opt-in to use.
399
+ *
400
+ * @returns True if codec is marked experimental
401
+ *
402
+ * @example
403
+ * ```typescript
404
+ * if (codec.isExperimental()) {
405
+ * console.warn('This codec is experimental');
406
+ * // Need to set strict_std_compliance = -2
407
+ * }
408
+ * ```
409
+ */
410
+ isExperimental(): boolean;
411
+ /**
412
+ * Check if codec supports hardware acceleration.
413
+ *
414
+ * Checks if the codec has any hardware configuration.
415
+ *
416
+ * @returns True if hardware acceleration is available
417
+ *
418
+ * @example
419
+ * ```typescript
420
+ * const codec = Codec.findDecoderByName('h264_cuvid');
421
+ * if (codec?.hasHardwareAcceleration()) {
422
+ * console.log('Hardware acceleration available');
423
+ * }
424
+ * ```
425
+ *
426
+ * @see {@link getSupportedDeviceTypes} For specific device types
427
+ */
428
+ hasHardwareAcceleration(): boolean;
429
+ /**
430
+ * Check if codec supports specific device type.
431
+ *
432
+ * @param deviceType - Hardware device type to check
433
+ *
434
+ * @returns True if device type is supported
435
+ *
436
+ * @example
437
+ * ```typescript
438
+ * import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
439
+ *
440
+ * if (codec.supportsDevice(AV_HWDEVICE_TYPE_CUDA)) {
441
+ * console.log('Supports NVIDIA CUDA');
442
+ * }
443
+ * ```
444
+ *
445
+ * @see {@link getSupportedDeviceTypes} For all supported types
446
+ */
447
+ supportsDevice(deviceType: AVHWDeviceType | FFHWDeviceType): boolean;
448
+ /**
449
+ * Check if decoder supports hardware acceleration.
450
+ *
451
+ * @param deviceType - Optional specific device type
452
+ *
453
+ * @returns True if hardware decoding is supported
454
+ *
455
+ * @example
456
+ * ```typescript
457
+ * import { AV_HWDEVICE_TYPE_VIDEOTOOLBOX } from 'node-av/constants';
458
+ *
459
+ * // Check any hardware support
460
+ * if (codec.isHardwareAcceleratedDecoder()) {
461
+ * console.log('Hardware decoding available');
462
+ * }
463
+ *
464
+ * // Check specific device
465
+ * if (codec.isHardwareAcceleratedDecoder(AV_HWDEVICE_TYPE_VIDEOTOOLBOX)) {
466
+ * console.log('VideoToolbox decoding available');
467
+ * }
468
+ * ```
469
+ */
470
+ isHardwareAcceleratedDecoder(deviceType?: AVHWDeviceType | FFHWDeviceType): boolean;
471
+ /**
472
+ * Check if encoder supports hardware acceleration.
473
+ *
474
+ * @param deviceType - Optional specific device type
475
+ *
476
+ * @returns True if hardware encoding is supported
477
+ *
478
+ * @example
479
+ * ```typescript
480
+ * import { AV_HWDEVICE_TYPE_VAAPI } from 'node-av/constants';
481
+ *
482
+ * // Check any hardware support
483
+ * if (codec.isHardwareAcceleratedEncoder()) {
484
+ * console.log('Hardware encoding available');
485
+ * }
486
+ *
487
+ * // Check specific device
488
+ * if (codec.isHardwareAcceleratedEncoder(AV_HWDEVICE_TYPE_VAAPI)) {
489
+ * console.log('VAAPI encoding available');
490
+ * }
491
+ * ```
492
+ */
493
+ isHardwareAcceleratedEncoder(deviceType?: AVHWDeviceType | FFHWDeviceType): boolean;
494
+ /**
495
+ * Get supported hardware device types.
496
+ *
497
+ * Returns all hardware acceleration types this codec supports.
498
+ *
499
+ * @returns Array of supported device types
500
+ *
501
+ * @example
502
+ * ```typescript
503
+ * const devices = codec.getSupportedDeviceTypes();
504
+ * console.log('Supported devices:', devices.map(d => {
505
+ * switch(d) {
506
+ * case AV_HWDEVICE_TYPE_CUDA: return 'CUDA';
507
+ * case AV_HWDEVICE_TYPE_VAAPI: return 'VAAPI';
508
+ * default: return 'Unknown';
509
+ * }
510
+ * }));
511
+ * ```
512
+ *
513
+ * @see {@link supportsDevice} To check specific device
514
+ */
515
+ getSupportedDeviceTypes(): AVHWDeviceType[];
516
+ /**
517
+ * Get hardware method flags for device type.
518
+ *
519
+ * Returns the hardware configuration methods for a specific device.
520
+ *
521
+ * @param deviceType - Device type to query
522
+ *
523
+ * @returns Method flags, or null if not supported
524
+ *
525
+ * @example
526
+ * ```typescript
527
+ * import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
528
+ *
529
+ * const methods = codec.getHardwareMethod(AV_HWDEVICE_TYPE_CUDA);
530
+ * if (methods) {
531
+ * if (methods & AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX) {
532
+ * console.log('Supports device context');
533
+ * }
534
+ * }
535
+ * ```
536
+ */
537
+ getHardwareMethod(deviceType: AVHWDeviceType | FFHWDeviceType): number | null;
538
+ /**
539
+ * Get hardware configuration at index.
540
+ *
541
+ * Retrieves hardware acceleration configuration details.
542
+ *
543
+ * Direct mapping to avcodec_get_hw_config().
544
+ *
545
+ * @param index - Configuration index
546
+ *
547
+ * @returns Hardware configuration, or null if index out of range
548
+ *
549
+ * @example
550
+ * ```typescript
551
+ * // Enumerate all hardware configs
552
+ * for (let i = 0; ; i++) {
553
+ * const config = codec.getHwConfig(i);
554
+ * if (!config) break;
555
+ *
556
+ * console.log(`Config ${i}:`);
557
+ * console.log(` Pixel format: ${config.pixFmt}`);
558
+ * console.log(` Device type: ${config.deviceType}`);
559
+ * console.log(` Methods: 0x${config.methods.toString(16)}`);
560
+ * }
561
+ * ```
562
+ */
563
+ getHwConfig(index: number): {
564
+ pixFmt: AVPixelFormat;
565
+ methods: number;
566
+ deviceType: AVHWDeviceType;
567
+ } | null;
568
+ /**
569
+ * Get the underlying native Codec object.
570
+ *
571
+ * @returns The native Codec binding object
572
+ *
573
+ * @internal
574
+ */
575
+ getNative(): NativeCodec;
576
+ /**
577
+ * Create codec from native instance.
578
+ *
579
+ * @param native - Native codec instance
580
+ *
581
+ * @returns Codec wrapper or null
582
+ *
583
+ * @internal
584
+ */
585
+ static fromNative(native: NativeCodec | null): Codec | null;
586
+ }