node-av 1.1.0 → 1.2.0
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.
- package/README.md +51 -38
- package/dist/api/bitstream-filter.d.ts +180 -123
- package/dist/api/bitstream-filter.js +180 -125
- package/dist/api/bitstream-filter.js.map +1 -1
- package/dist/api/decoder.d.ts +279 -132
- package/dist/api/decoder.js +285 -142
- package/dist/api/decoder.js.map +1 -1
- package/dist/api/encoder.d.ts +246 -162
- package/dist/api/encoder.js +272 -208
- package/dist/api/encoder.js.map +1 -1
- package/dist/api/filter-presets.d.ts +690 -94
- package/dist/api/filter-presets.js +686 -102
- package/dist/api/filter-presets.js.map +1 -1
- package/dist/api/filter.d.ts +249 -213
- package/dist/api/filter.js +252 -242
- package/dist/api/filter.js.map +1 -1
- package/dist/api/hardware.d.ts +224 -117
- package/dist/api/hardware.js +380 -214
- package/dist/api/hardware.js.map +1 -1
- package/dist/api/index.d.ts +3 -3
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/io-stream.d.ts +65 -61
- package/dist/api/io-stream.js +43 -46
- package/dist/api/io-stream.js.map +1 -1
- package/dist/api/media-input.d.ts +242 -140
- package/dist/api/media-input.js +205 -103
- package/dist/api/media-input.js.map +1 -1
- package/dist/api/media-output.d.ts +206 -128
- package/dist/api/media-output.js +210 -128
- package/dist/api/media-output.js.map +1 -1
- package/dist/api/pipeline.d.ts +168 -38
- package/dist/api/pipeline.js +238 -14
- package/dist/api/pipeline.js.map +1 -1
- package/dist/api/types.d.ts +21 -187
- package/dist/api/utils.d.ts +1 -2
- package/dist/api/utils.js +9 -0
- package/dist/api/utils.js.map +1 -1
- package/dist/lib/audio-fifo.d.ts +127 -170
- package/dist/lib/audio-fifo.js +130 -173
- package/dist/lib/audio-fifo.js.map +1 -1
- package/dist/lib/binding.js +5 -0
- package/dist/lib/binding.js.map +1 -1
- package/dist/lib/bitstream-filter-context.d.ts +139 -184
- package/dist/lib/bitstream-filter-context.js +139 -188
- package/dist/lib/bitstream-filter-context.js.map +1 -1
- package/dist/lib/bitstream-filter.d.ts +68 -54
- package/dist/lib/bitstream-filter.js +68 -54
- package/dist/lib/bitstream-filter.js.map +1 -1
- package/dist/lib/codec-context.d.ts +316 -380
- package/dist/lib/codec-context.js +316 -381
- package/dist/lib/codec-context.js.map +1 -1
- package/dist/lib/codec-parameters.d.ts +160 -170
- package/dist/lib/codec-parameters.js +162 -172
- package/dist/lib/codec-parameters.js.map +1 -1
- package/dist/lib/codec-parser.d.ts +91 -104
- package/dist/lib/codec-parser.js +92 -103
- package/dist/lib/codec-parser.js.map +1 -1
- package/dist/lib/codec.d.ts +264 -281
- package/dist/lib/codec.js +268 -285
- package/dist/lib/codec.js.map +1 -1
- package/dist/lib/dictionary.d.ts +149 -203
- package/dist/lib/dictionary.js +158 -212
- package/dist/lib/dictionary.js.map +1 -1
- package/dist/lib/error.d.ts +96 -130
- package/dist/lib/error.js +98 -128
- package/dist/lib/error.js.map +1 -1
- package/dist/lib/filter-context.d.ts +284 -218
- package/dist/lib/filter-context.js +290 -227
- package/dist/lib/filter-context.js.map +1 -1
- package/dist/lib/filter-graph.d.ts +251 -292
- package/dist/lib/filter-graph.js +253 -294
- package/dist/lib/filter-graph.js.map +1 -1
- package/dist/lib/filter-inout.d.ts +87 -95
- package/dist/lib/filter-inout.js +87 -95
- package/dist/lib/filter-inout.js.map +1 -1
- package/dist/lib/filter.d.ts +93 -111
- package/dist/lib/filter.js +93 -111
- package/dist/lib/filter.js.map +1 -1
- package/dist/lib/format-context.d.ts +320 -428
- package/dist/lib/format-context.js +313 -385
- package/dist/lib/format-context.js.map +1 -1
- package/dist/lib/frame.d.ts +262 -405
- package/dist/lib/frame.js +263 -408
- package/dist/lib/frame.js.map +1 -1
- package/dist/lib/hardware-device-context.d.ts +149 -203
- package/dist/lib/hardware-device-context.js +149 -203
- package/dist/lib/hardware-device-context.js.map +1 -1
- package/dist/lib/hardware-frames-context.d.ts +170 -180
- package/dist/lib/hardware-frames-context.js +171 -181
- package/dist/lib/hardware-frames-context.js.map +1 -1
- package/dist/lib/index.d.ts +2 -1
- package/dist/lib/index.js +2 -2
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/input-format.d.ts +89 -117
- package/dist/lib/input-format.js +89 -117
- package/dist/lib/input-format.js.map +1 -1
- package/dist/lib/io-context.d.ts +209 -241
- package/dist/lib/io-context.js +220 -252
- package/dist/lib/io-context.js.map +1 -1
- package/dist/lib/log.d.ts +85 -119
- package/dist/lib/log.js +85 -122
- package/dist/lib/log.js.map +1 -1
- package/dist/lib/native-types.d.ts +117 -106
- package/dist/lib/native-types.js +0 -7
- package/dist/lib/native-types.js.map +1 -1
- package/dist/lib/option.d.ts +284 -241
- package/dist/lib/option.js +309 -249
- package/dist/lib/option.js.map +1 -1
- package/dist/lib/output-format.d.ts +77 -101
- package/dist/lib/output-format.js +77 -101
- package/dist/lib/output-format.js.map +1 -1
- package/dist/lib/packet.d.ts +172 -240
- package/dist/lib/packet.js +172 -241
- package/dist/lib/packet.js.map +1 -1
- package/dist/lib/rational.d.ts +0 -2
- package/dist/lib/rational.js +0 -2
- package/dist/lib/rational.js.map +1 -1
- package/dist/lib/software-resample-context.d.ts +241 -325
- package/dist/lib/software-resample-context.js +242 -326
- package/dist/lib/software-resample-context.js.map +1 -1
- package/dist/lib/software-scale-context.d.ts +129 -173
- package/dist/lib/software-scale-context.js +131 -175
- package/dist/lib/software-scale-context.js.map +1 -1
- package/dist/lib/stream.d.ts +87 -197
- package/dist/lib/stream.js +87 -197
- package/dist/lib/stream.js.map +1 -1
- package/dist/lib/utilities.d.ts +372 -181
- package/dist/lib/utilities.js +373 -182
- package/dist/lib/utilities.js.map +1 -1
- package/install/check.js +0 -1
- package/package.json +21 -12
- package/release_notes.md +43 -59
- package/CHANGELOG.md +0 -8
|
@@ -4,129 +4,74 @@ import { CodecParameters } from './codec-parameters.js';
|
|
|
4
4
|
import { OptionMember } from './option.js';
|
|
5
5
|
import { Rational } from './rational.js';
|
|
6
6
|
/**
|
|
7
|
-
* Bitstream filter context for processing
|
|
7
|
+
* Bitstream filter context for processing compressed video/audio streams.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* Applies bitstream filters to modify or analyze compressed packets without
|
|
10
|
+
* full decoding/encoding. Common uses include format conversion (e.g., H.264 MP4 to Annex B),
|
|
11
|
+
* metadata extraction, parameter set manipulation, and packet splitting/merging.
|
|
12
|
+
* Essential for stream compatibility between different containers and decoders.
|
|
12
13
|
*
|
|
13
14
|
* Direct mapping to FFmpeg's AVBSFContext.
|
|
14
15
|
*
|
|
15
16
|
* @example
|
|
16
17
|
* ```typescript
|
|
17
|
-
* import {
|
|
18
|
-
* import { AVERROR_EOF, AVERROR } from 'node-av/constants';
|
|
18
|
+
* import { BitStreamFilterContext, BitStreamFilter, Packet, FFmpegError } from 'node-av';
|
|
19
19
|
*
|
|
20
|
-
* // Create and initialize
|
|
21
|
-
* const filter = BitStreamFilter.getByName('h264_mp4toannexb');
|
|
20
|
+
* // Create and initialize H.264 stream format converter
|
|
22
21
|
* const ctx = new BitStreamFilterContext();
|
|
22
|
+
* const filter = BitStreamFilter.getByName('h264_mp4toannexb');
|
|
23
|
+
* if (!filter) {
|
|
24
|
+
* throw new Error('H.264 filter not available');
|
|
25
|
+
* }
|
|
23
26
|
*
|
|
24
|
-
* // Allocate and configure
|
|
25
27
|
* let ret = ctx.alloc(filter);
|
|
26
28
|
* FFmpegError.throwIfError(ret, 'alloc');
|
|
27
29
|
*
|
|
28
|
-
* // Copy input parameters from stream to BSF context
|
|
29
|
-
* stream.codecpar.copy(ctx.inputCodecParameters);
|
|
30
|
-
* ctx.inputTimeBase = stream.timeBase;
|
|
31
|
-
*
|
|
32
|
-
* // Initialize filter
|
|
33
30
|
* ret = ctx.init();
|
|
34
31
|
* FFmpegError.throwIfError(ret, 'init');
|
|
35
32
|
*
|
|
36
33
|
* // Process packets
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* // Send packet to filter
|
|
41
|
-
* ret = await ctx.sendPacket(inputPacket);
|
|
42
|
-
* FFmpegError.throwIfError(ret, 'sendPacket');
|
|
43
|
-
*
|
|
44
|
-
* // Receive filtered packets
|
|
45
|
-
* while (true) {
|
|
46
|
-
* const outputPacket = new Packet();
|
|
47
|
-
* const result = await ctx.receivePacket(outputPacket);
|
|
48
|
-
*
|
|
49
|
-
* if (result.eagain || result.eof) break;
|
|
50
|
-
* FFmpegError.throwIfError(result.ret || result, 'receivePacket');
|
|
51
|
-
*
|
|
52
|
-
* // Process filtered packet
|
|
53
|
-
* processPacket(outputPacket);
|
|
54
|
-
* outputPacket.unref();
|
|
55
|
-
* }
|
|
56
|
-
* }
|
|
34
|
+
* const inputPacket = new Packet();
|
|
35
|
+
* const outputPacket = new Packet();
|
|
57
36
|
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
37
|
+
* ret = await ctx.sendPacket(inputPacket);
|
|
38
|
+
* FFmpegError.throwIfError(ret, 'sendPacket');
|
|
60
39
|
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* const result = await ctx.receivePacket(outputPacket);
|
|
65
|
-
* if (result.eof) break;
|
|
66
|
-
* // Process remaining packets
|
|
40
|
+
* ret = await ctx.receivePacket(outputPacket);
|
|
41
|
+
* if (ret >= 0) {
|
|
42
|
+
* // Process filtered packet
|
|
67
43
|
* }
|
|
68
44
|
*
|
|
69
45
|
* // Cleanup
|
|
70
46
|
* ctx.free();
|
|
71
47
|
* ```
|
|
48
|
+
*
|
|
49
|
+
* @see {@link BitStreamFilter} For available filter types
|
|
50
|
+
* @see {@link Packet} For packet manipulation
|
|
72
51
|
*/
|
|
73
52
|
export class BitStreamFilterContext extends OptionMember {
|
|
74
53
|
_filter; // Cache for filter wrapper
|
|
75
|
-
/**
|
|
76
|
-
* Create a new bitstream filter context.
|
|
77
|
-
*
|
|
78
|
-
* The context is uninitialized - you must call alloc() and init() before use.
|
|
79
|
-
* No FFmpeg resources are allocated until initialization.
|
|
80
|
-
*
|
|
81
|
-
* Direct wrapper around AVBSFContext.
|
|
82
|
-
*
|
|
83
|
-
* @example
|
|
84
|
-
* ```typescript
|
|
85
|
-
* const ctx = new BitStreamFilterContext();
|
|
86
|
-
* ctx.alloc(filter);
|
|
87
|
-
* ctx.init();
|
|
88
|
-
* // Context is now ready for filtering
|
|
89
|
-
* ```
|
|
90
|
-
*/
|
|
91
54
|
constructor() {
|
|
92
55
|
super(new bindings.BitStreamFilterContext());
|
|
93
56
|
}
|
|
94
57
|
/**
|
|
95
|
-
* Check if the context
|
|
58
|
+
* Check if the context has been initialized.
|
|
96
59
|
*
|
|
97
|
-
* Returns true if init() has been called
|
|
98
|
-
*
|
|
99
|
-
* @returns True if initialized, false otherwise
|
|
60
|
+
* Returns true if init() has been successfully called.
|
|
61
|
+
* The context must be initialized before sending/receiving packets.
|
|
100
62
|
*/
|
|
101
63
|
get isInitialized() {
|
|
102
64
|
return this.native.isInitialized();
|
|
103
65
|
}
|
|
104
66
|
/**
|
|
105
|
-
* Input codec parameters
|
|
106
|
-
*
|
|
107
|
-
* Returns a reference to the BSF context's internal codec parameters.
|
|
108
|
-
* While you cannot replace this object (no setter), you can modify its contents
|
|
109
|
-
* or use it as a destination for copy operations.
|
|
67
|
+
* Input codec parameters.
|
|
110
68
|
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
* Maps to AVBSFContext->par_in.
|
|
114
|
-
*
|
|
115
|
-
* @example
|
|
116
|
-
* ```typescript
|
|
117
|
-
* // Copy parameters from input stream to BSF context
|
|
118
|
-
* if (ctx.inputCodecParameters) {
|
|
119
|
-
* stream.codecpar.copy(ctx.inputCodecParameters);
|
|
69
|
+
* Parameters describing the input stream format.
|
|
70
|
+
* These are automatically configured from the input packets in most cases.
|
|
120
71
|
*
|
|
121
|
-
*
|
|
122
|
-
* ctx.inputCodecParameters.codecType = AVMEDIA_TYPE_VIDEO;
|
|
123
|
-
* ctx.inputCodecParameters.codecId = AV_CODEC_ID_H264;
|
|
124
|
-
* }
|
|
125
|
-
* ```
|
|
72
|
+
* Direct mapping to AVBSFContext->par_in.
|
|
126
73
|
*/
|
|
127
74
|
get inputCodecParameters() {
|
|
128
|
-
// The native binding returns a CodecParameters object created with the constructor
|
|
129
|
-
// It's the native object itself, not a TypeScript wrapper
|
|
130
75
|
const nativeParams = this.native.inputCodecParameters;
|
|
131
76
|
if (!nativeParams) {
|
|
132
77
|
return null;
|
|
@@ -137,28 +82,14 @@ export class BitStreamFilterContext extends OptionMember {
|
|
|
137
82
|
return wrapper;
|
|
138
83
|
}
|
|
139
84
|
/**
|
|
140
|
-
* Output codec parameters
|
|
141
|
-
*
|
|
142
|
-
* Returns a reference to the BSF context's output codec parameters.
|
|
143
|
-
* These are automatically configured by the filter during init().
|
|
144
|
-
* You should not modify these parameters.
|
|
145
|
-
*
|
|
146
|
-
* Maps to AVBSFContext->par_out.
|
|
85
|
+
* Output codec parameters.
|
|
147
86
|
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* // After initialization, read the output parameters
|
|
151
|
-
* console.log(`Output codec: ${ctx.outputCodecParameters?.codecId}`);
|
|
87
|
+
* Parameters describing the output stream format after filtering.
|
|
88
|
+
* These reflect any changes made by the bitstream filter.
|
|
152
89
|
*
|
|
153
|
-
*
|
|
154
|
-
* if (ctx.outputCodecParameters) {
|
|
155
|
-
* ctx.outputCodecParameters.copy(nextStream.codecpar);
|
|
156
|
-
* }
|
|
157
|
-
* ```
|
|
90
|
+
* Direct mapping to AVBSFContext->par_out.
|
|
158
91
|
*/
|
|
159
92
|
get outputCodecParameters() {
|
|
160
|
-
// The native binding returns a CodecParameters object created with the constructor
|
|
161
|
-
// It's the native object itself, not a TypeScript wrapper
|
|
162
93
|
const nativeParams = this.native.outputCodecParameters;
|
|
163
94
|
if (!nativeParams) {
|
|
164
95
|
return null;
|
|
@@ -171,15 +102,10 @@ export class BitStreamFilterContext extends OptionMember {
|
|
|
171
102
|
/**
|
|
172
103
|
* Input time base.
|
|
173
104
|
*
|
|
174
|
-
* Time base
|
|
175
|
-
* Must be set before
|
|
105
|
+
* Time base of the input packets (timestamps per second).
|
|
106
|
+
* Must be set before init() for proper timestamp handling.
|
|
176
107
|
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
* @example
|
|
180
|
-
* ```typescript
|
|
181
|
-
* ctx.inputTimeBase = new Rational(1, 1000); // 1ms time base
|
|
182
|
-
* ```
|
|
108
|
+
* Direct mapping to AVBSFContext->time_base_in.
|
|
183
109
|
*/
|
|
184
110
|
get inputTimeBase() {
|
|
185
111
|
const tb = this.native.inputTimeBase;
|
|
@@ -191,16 +117,10 @@ export class BitStreamFilterContext extends OptionMember {
|
|
|
191
117
|
/**
|
|
192
118
|
* Output time base.
|
|
193
119
|
*
|
|
194
|
-
* Time base
|
|
195
|
-
*
|
|
120
|
+
* Time base of the output packets after filtering.
|
|
121
|
+
* May differ from input if the filter modifies timing.
|
|
196
122
|
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
* @example
|
|
200
|
-
* ```typescript
|
|
201
|
-
* // After initialization
|
|
202
|
-
* console.log(`Output time base: ${ctx.outputTimeBase.num}/${ctx.outputTimeBase.den}`);
|
|
203
|
-
* ```
|
|
123
|
+
* Direct mapping to AVBSFContext->time_base_out.
|
|
204
124
|
*/
|
|
205
125
|
get outputTimeBase() {
|
|
206
126
|
const tb = this.native.outputTimeBase;
|
|
@@ -211,14 +131,9 @@ export class BitStreamFilterContext extends OptionMember {
|
|
|
211
131
|
/**
|
|
212
132
|
* The bitstream filter being used.
|
|
213
133
|
*
|
|
214
|
-
* Reference to the filter
|
|
134
|
+
* Reference to the filter descriptor allocated to this context.
|
|
215
135
|
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
* @example
|
|
219
|
-
* ```typescript
|
|
220
|
-
* console.log(`Using filter: ${ctx.filter?.name}`);
|
|
221
|
-
* ```
|
|
136
|
+
* Direct mapping to AVBSFContext->filter.
|
|
222
137
|
*/
|
|
223
138
|
get filter() {
|
|
224
139
|
if (!this._filter) {
|
|
@@ -231,24 +146,33 @@ export class BitStreamFilterContext extends OptionMember {
|
|
|
231
146
|
return this._filter;
|
|
232
147
|
}
|
|
233
148
|
/**
|
|
234
|
-
* Allocate
|
|
149
|
+
* Allocate a bitstream filter context.
|
|
235
150
|
*
|
|
236
|
-
* Allocates the context for the specified filter.
|
|
237
|
-
* Must be called before
|
|
238
|
-
* After allocation, configure input parameters before calling init().
|
|
151
|
+
* Allocates and configures the context for the specified filter.
|
|
152
|
+
* Must be called before init().
|
|
239
153
|
*
|
|
240
|
-
*
|
|
154
|
+
* Direct mapping to av_bsf_alloc().
|
|
241
155
|
*
|
|
242
156
|
* @param filter - The bitstream filter to use
|
|
243
|
-
* @returns 0 on success, negative
|
|
157
|
+
* @returns 0 on success, negative AVERROR on error:
|
|
158
|
+
* - AVERROR_ENOMEM: Memory allocation failure
|
|
159
|
+
* - AVERROR_EINVAL: Invalid filter
|
|
244
160
|
*
|
|
245
161
|
* @example
|
|
246
162
|
* ```typescript
|
|
163
|
+
* import { FFmpegError } from 'node-av';
|
|
164
|
+
*
|
|
247
165
|
* const filter = BitStreamFilter.getByName('h264_mp4toannexb');
|
|
248
|
-
*
|
|
166
|
+
* if (!filter) {
|
|
167
|
+
* throw new Error('Filter not found');
|
|
168
|
+
* }
|
|
169
|
+
*
|
|
249
170
|
* const ret = ctx.alloc(filter);
|
|
250
171
|
* FFmpegError.throwIfError(ret, 'alloc');
|
|
251
172
|
* ```
|
|
173
|
+
*
|
|
174
|
+
* @see {@link init} To initialize after allocation
|
|
175
|
+
* @see {@link BitStreamFilter.getByName} To get filter by name
|
|
252
176
|
*/
|
|
253
177
|
alloc(filter) {
|
|
254
178
|
return this.native.alloc(filter.getNative());
|
|
@@ -256,20 +180,32 @@ export class BitStreamFilterContext extends OptionMember {
|
|
|
256
180
|
/**
|
|
257
181
|
* Initialize the bitstream filter context.
|
|
258
182
|
*
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
* Must be called after alloc() and parameter configuration.
|
|
183
|
+
* Initializes the filter with the configured parameters.
|
|
184
|
+
* Must be called after alloc() and before processing packets.
|
|
262
185
|
*
|
|
263
|
-
*
|
|
186
|
+
* Direct mapping to av_bsf_init().
|
|
264
187
|
*
|
|
265
|
-
* @returns 0 on success, negative
|
|
188
|
+
* @returns 0 on success, negative AVERROR on error:
|
|
189
|
+
* - AVERROR_EINVAL: Invalid parameters
|
|
190
|
+
* - AVERROR_ENOMEM: Memory allocation failure
|
|
266
191
|
*
|
|
267
192
|
* @example
|
|
268
193
|
* ```typescript
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
*
|
|
194
|
+
* import { FFmpegError } from 'node-av';
|
|
195
|
+
*
|
|
196
|
+
* // Allocate and initialize
|
|
197
|
+
* const ret1 = ctx.alloc(filter);
|
|
198
|
+
* FFmpegError.throwIfError(ret1, 'alloc');
|
|
199
|
+
*
|
|
200
|
+
* // Set parameters if needed
|
|
201
|
+
* ctx.inputTimeBase = new Rational(1, 25);
|
|
202
|
+
*
|
|
203
|
+
* const ret2 = ctx.init();
|
|
204
|
+
* FFmpegError.throwIfError(ret2, 'init');
|
|
272
205
|
* ```
|
|
206
|
+
*
|
|
207
|
+
* @see {@link alloc} Must be called first
|
|
208
|
+
* @see {@link isInitialized} To check initialization status
|
|
273
209
|
*/
|
|
274
210
|
init() {
|
|
275
211
|
return this.native.init();
|
|
@@ -278,15 +214,18 @@ export class BitStreamFilterContext extends OptionMember {
|
|
|
278
214
|
* Free the bitstream filter context.
|
|
279
215
|
*
|
|
280
216
|
* Releases all resources associated with the context.
|
|
281
|
-
* The context
|
|
217
|
+
* The context becomes invalid after calling this.
|
|
282
218
|
*
|
|
283
|
-
*
|
|
219
|
+
* Direct mapping to av_bsf_free().
|
|
284
220
|
*
|
|
285
221
|
* @example
|
|
286
222
|
* ```typescript
|
|
287
223
|
* ctx.free();
|
|
288
|
-
* // Context is now
|
|
224
|
+
* // Context is now invalid
|
|
289
225
|
* ```
|
|
226
|
+
*
|
|
227
|
+
* @see {@link Symbol.dispose} For automatic cleanup
|
|
228
|
+
* @see {@link alloc} To allocate
|
|
290
229
|
*/
|
|
291
230
|
free() {
|
|
292
231
|
this.native.free();
|
|
@@ -295,108 +234,120 @@ export class BitStreamFilterContext extends OptionMember {
|
|
|
295
234
|
/**
|
|
296
235
|
* Flush the bitstream filter.
|
|
297
236
|
*
|
|
298
|
-
* Resets the internal
|
|
299
|
-
*
|
|
237
|
+
* Resets the internal state and discards any buffered data.
|
|
238
|
+
* Useful when seeking or switching streams.
|
|
300
239
|
*
|
|
301
|
-
*
|
|
240
|
+
* Direct mapping to av_bsf_flush().
|
|
302
241
|
*
|
|
303
242
|
* @example
|
|
304
243
|
* ```typescript
|
|
305
|
-
* //
|
|
244
|
+
* // Flush when seeking
|
|
306
245
|
* ctx.flush();
|
|
307
|
-
* //
|
|
246
|
+
* // Now ready to process packets from new position
|
|
308
247
|
* ```
|
|
309
248
|
*/
|
|
310
249
|
flush() {
|
|
311
250
|
this.native.flush();
|
|
312
251
|
}
|
|
313
252
|
/**
|
|
314
|
-
* Send a packet to the filter.
|
|
315
|
-
*
|
|
316
|
-
* Submits a packet for filtering.
|
|
317
|
-
* The filter takes ownership of the packet.
|
|
318
|
-
* Pass null to signal end of stream.
|
|
253
|
+
* Send a packet to the bitstream filter.
|
|
319
254
|
*
|
|
320
|
-
*
|
|
321
|
-
*
|
|
255
|
+
* Submits a packet for filtering. The filter may buffer the packet
|
|
256
|
+
* internally and require multiple calls to receivePacket() to retrieve
|
|
257
|
+
* all output. Send null to signal end of stream.
|
|
322
258
|
*
|
|
323
|
-
*
|
|
259
|
+
* Direct mapping to av_bsf_send_packet().
|
|
324
260
|
*
|
|
325
|
-
* @param packet - Packet to filter, or null
|
|
326
|
-
* @returns
|
|
261
|
+
* @param packet - Packet to filter, or null to signal EOF
|
|
262
|
+
* @returns 0 on success, negative AVERROR on error:
|
|
263
|
+
* - AVERROR_EAGAIN: Filter needs output to be consumed first
|
|
264
|
+
* - AVERROR_EOF: Filter has been flushed
|
|
265
|
+
* - AVERROR_EINVAL: Invalid parameters
|
|
266
|
+
* - AVERROR_ENOMEM: Memory allocation failure
|
|
327
267
|
*
|
|
328
268
|
* @example
|
|
329
269
|
* ```typescript
|
|
330
|
-
*
|
|
270
|
+
* import { FFmpegError } from 'node-av';
|
|
271
|
+
* import { AVERROR_EAGAIN } from 'node-av';
|
|
272
|
+
*
|
|
331
273
|
* const ret = await ctx.sendPacket(inputPacket);
|
|
332
|
-
* if (ret
|
|
333
|
-
*
|
|
274
|
+
* if (ret === AVERROR_EAGAIN) {
|
|
275
|
+
* // Need to receive packets first
|
|
276
|
+
* const ret2 = await ctx.receivePacket(outputPacket);
|
|
277
|
+
* FFmpegError.throwIfError(ret2, 'receivePacket');
|
|
278
|
+
* } else {
|
|
279
|
+
* FFmpegError.throwIfError(ret, 'sendPacket');
|
|
334
280
|
* }
|
|
335
281
|
*
|
|
336
282
|
* // Send EOF
|
|
337
283
|
* await ctx.sendPacket(null);
|
|
338
284
|
* ```
|
|
285
|
+
*
|
|
286
|
+
* @see {@link receivePacket} To retrieve filtered packets
|
|
339
287
|
*/
|
|
340
288
|
async sendPacket(packet) {
|
|
341
289
|
return await this.native.sendPacket(packet ? packet.getNative() : null);
|
|
342
290
|
}
|
|
343
291
|
/**
|
|
344
|
-
* Receive a filtered packet.
|
|
292
|
+
* Receive a filtered packet from the bitstream filter.
|
|
345
293
|
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
* One input packet may produce multiple output packets.
|
|
294
|
+
* Retrieves a packet that has been processed by the filter.
|
|
295
|
+
* May need to be called multiple times after each sendPacket().
|
|
349
296
|
*
|
|
350
|
-
*
|
|
297
|
+
* Direct mapping to av_bsf_receive_packet().
|
|
351
298
|
*
|
|
352
299
|
* @param packet - Packet to receive filtered data into
|
|
353
|
-
* @returns
|
|
300
|
+
* @returns 0 on success, negative AVERROR on error:
|
|
301
|
+
* - AVERROR_EAGAIN: Need more input
|
|
302
|
+
* - AVERROR_EOF: No more packets available
|
|
303
|
+
* - AVERROR_EINVAL: Invalid parameters
|
|
354
304
|
*
|
|
355
305
|
* @example
|
|
356
306
|
* ```typescript
|
|
357
|
-
* import {
|
|
358
|
-
*
|
|
359
|
-
*
|
|
360
|
-
*
|
|
361
|
-
*
|
|
362
|
-
*
|
|
363
|
-
*
|
|
364
|
-
*
|
|
365
|
-
*
|
|
366
|
-
*
|
|
367
|
-
*
|
|
368
|
-
*
|
|
369
|
-
*
|
|
370
|
-
* processPacket(packet);
|
|
307
|
+
* import { FFmpegError } from 'node-av';
|
|
308
|
+
* import { AVERROR_EAGAIN, AVERROR_EOF } from 'node-av';
|
|
309
|
+
*
|
|
310
|
+
* // Receive all available packets
|
|
311
|
+
* while (true) {
|
|
312
|
+
* const ret = await ctx.receivePacket(outputPacket);
|
|
313
|
+
* if (ret === AVERROR_EAGAIN || ret === AVERROR_EOF) {
|
|
314
|
+
* break;
|
|
315
|
+
* }
|
|
316
|
+
* FFmpegError.throwIfError(ret, 'receivePacket');
|
|
317
|
+
*
|
|
318
|
+
* // Process filtered packet
|
|
319
|
+
* console.log(`Filtered packet size: ${outputPacket.size}`);
|
|
371
320
|
* }
|
|
372
321
|
* ```
|
|
322
|
+
*
|
|
323
|
+
* @see {@link sendPacket} To submit packets for filtering
|
|
373
324
|
*/
|
|
374
325
|
async receivePacket(packet) {
|
|
375
326
|
return await this.native.receivePacket(packet.getNative());
|
|
376
327
|
}
|
|
377
328
|
/**
|
|
378
|
-
* Get the underlying native object.
|
|
329
|
+
* Get the underlying native BitStreamFilterContext object.
|
|
379
330
|
*
|
|
380
|
-
*
|
|
331
|
+
* @returns The native BitStreamFilterContext binding object
|
|
381
332
|
*
|
|
382
|
-
* @returns Native BitStreamFilterContext object
|
|
383
333
|
* @internal
|
|
384
334
|
*/
|
|
385
335
|
getNative() {
|
|
386
336
|
return this.native;
|
|
387
337
|
}
|
|
388
338
|
/**
|
|
389
|
-
* Dispose of the context
|
|
339
|
+
* Dispose of the bitstream filter context.
|
|
390
340
|
*
|
|
391
|
-
*
|
|
392
|
-
*
|
|
341
|
+
* Implements the Disposable interface for automatic cleanup.
|
|
342
|
+
* Equivalent to calling free().
|
|
393
343
|
*
|
|
394
344
|
* @example
|
|
395
345
|
* ```typescript
|
|
396
346
|
* {
|
|
397
347
|
* using ctx = new BitStreamFilterContext();
|
|
398
348
|
* ctx.alloc(filter);
|
|
399
|
-
*
|
|
349
|
+
* ctx.init();
|
|
350
|
+
* // Use context...
|
|
400
351
|
* } // Automatically freed when leaving scope
|
|
401
352
|
* ```
|
|
402
353
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitstream-filter-context.js","sourceRoot":"","sources":["../../src/lib/bitstream-filter-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKzC
|
|
1
|
+
{"version":3,"file":"bitstream-filter-context.js","sourceRoot":"","sources":["../../src/lib/bitstream-filter-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,MAAM,OAAO,sBAAuB,SAAQ,YAA0C;IAC5E,OAAO,CAAmB,CAAC,2BAA2B;IAE9D;QACE,KAAK,CAAC,IAAI,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;OAKG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,oBAAoB;QACtB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;QACtD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kCAAkC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAoB,CAAC;QAC3E,OAAe,CAAC,MAAM,GAAG,YAAY,CAAC;QACvC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,qBAAqB;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;QACvD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,kCAAkC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAoB,CAAC;QAC3E,OAAe,CAAC,MAAM,GAAG,YAAY,CAAC;QACvC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,aAAa;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QACrC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,aAAa,CAAC,KAAe;QAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACjE,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,cAAc;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;QACtC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACrB,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,MAAM;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,KAAK,CAAC,MAAuB;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,IAAI;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,KAAK,CAAC,UAAU,CAAC,MAAqB;QACpC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;;OAMG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAChC,CAAC;CACF"}
|