@scrypted/libav 1.0.136 → 1.0.138

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.
@@ -9,7 +9,7 @@
9
9
  "type": "node",
10
10
  "request": "launch",
11
11
  "args": [
12
- "${workspaceRoot}/test/decode-opencl-filter.ts"
12
+ "${workspaceRoot}/test/read-receive-send-receive.ts"
13
13
  ],
14
14
  "preLaunchTask": "npm: build",
15
15
  "runtimeArgs": [
@@ -24,6 +24,7 @@
24
24
  "queue": "cpp",
25
25
  "stack": "cpp",
26
26
  "scale_eval.h": "c",
27
- "filters.h": "c"
27
+ "filters.h": "c",
28
+ "ratio": "cpp"
28
29
  }
29
30
  }
package/binding.gyp CHANGED
@@ -3,6 +3,7 @@
3
3
  {
4
4
  "target_name": "addon",
5
5
  "sources": [
6
+ "src/bsf.cpp",
6
7
  "src/formatcontext.cpp",
7
8
  "src/codeccontext.cpp",
8
9
  "src/packet.cpp",
package/lib/flags.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export declare enum AVPacketFlags {
2
+ AV_PKT_FLAG_KEY = 1,
3
+ AV_PKT_FLAG_CORRUPT = 2,
4
+ AV_PKT_FLAG_DISCARD = 4,
5
+ AV_PKT_FLAG_TRUSTED = 8,
6
+ AV_PKT_FLAG_DISPOSABLE = 16
7
+ }
8
+ export declare enum AVFrameFlags {
9
+ AV_FRAME_FLAG_KEY = 1,
10
+ AV_FRAME_FLAG_CORRUPT = 2,
11
+ AV_FRAME_FLAG_DISCARD = 4,
12
+ AV_FRAME_FLAG_TRUSTED = 8,
13
+ AV_FRAME_FLAG_DISPOSABLE = 16
14
+ }
package/lib/flags.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AVFrameFlags = exports.AVPacketFlags = void 0;
4
+ var AVPacketFlags;
5
+ (function (AVPacketFlags) {
6
+ AVPacketFlags[AVPacketFlags["AV_PKT_FLAG_KEY"] = 1] = "AV_PKT_FLAG_KEY";
7
+ AVPacketFlags[AVPacketFlags["AV_PKT_FLAG_CORRUPT"] = 2] = "AV_PKT_FLAG_CORRUPT";
8
+ AVPacketFlags[AVPacketFlags["AV_PKT_FLAG_DISCARD"] = 4] = "AV_PKT_FLAG_DISCARD";
9
+ AVPacketFlags[AVPacketFlags["AV_PKT_FLAG_TRUSTED"] = 8] = "AV_PKT_FLAG_TRUSTED";
10
+ AVPacketFlags[AVPacketFlags["AV_PKT_FLAG_DISPOSABLE"] = 16] = "AV_PKT_FLAG_DISPOSABLE";
11
+ })(AVPacketFlags || (exports.AVPacketFlags = AVPacketFlags = {}));
12
+ var AVFrameFlags;
13
+ (function (AVFrameFlags) {
14
+ AVFrameFlags[AVFrameFlags["AV_FRAME_FLAG_KEY"] = 1] = "AV_FRAME_FLAG_KEY";
15
+ AVFrameFlags[AVFrameFlags["AV_FRAME_FLAG_CORRUPT"] = 2] = "AV_FRAME_FLAG_CORRUPT";
16
+ AVFrameFlags[AVFrameFlags["AV_FRAME_FLAG_DISCARD"] = 4] = "AV_FRAME_FLAG_DISCARD";
17
+ AVFrameFlags[AVFrameFlags["AV_FRAME_FLAG_TRUSTED"] = 8] = "AV_FRAME_FLAG_TRUSTED";
18
+ AVFrameFlags[AVFrameFlags["AV_FRAME_FLAG_DISPOSABLE"] = 16] = "AV_FRAME_FLAG_DISPOSABLE";
19
+ })(AVFrameFlags || (exports.AVFrameFlags = AVFrameFlags = {}));
20
+ //# sourceMappingURL=flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.js","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":";;;AAAA,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,uEAAwB,CAAA;IACxB,+EAA4B,CAAA;IAC5B,+EAA4B,CAAA;IAC5B,+EAA4B,CAAA;IAC5B,sFAA+B,CAAA;AACjC,CAAC,EANW,aAAa,6BAAb,aAAa,QAMxB;AAED,IAAY,YAMX;AAND,WAAY,YAAY;IACtB,yEAA0B,CAAA;IAC1B,iFAA8B,CAAA;IAC9B,iFAA8B,CAAA;IAC9B,iFAA8B,CAAA;IAC9B,wFAAiC,CAAA;AACnC,CAAC,EANW,YAAY,4BAAZ,YAAY,QAMvB"}
package/lib/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './flags';
1
2
  export declare function isLoaded(): boolean;
2
3
  export declare function getAddonPath(installPath?: string): string;
3
4
  export declare function getFFmpegPath(installPath?: string): string;
@@ -10,6 +11,8 @@ export interface AVFrame extends AVTimeBase {
10
11
  readonly pixelFormat: string;
11
12
  readonly hardwareDeviceType: string;
12
13
  readonly softwareFormat: string;
14
+ pictType: number;
15
+ flags: number;
13
16
  timeBaseNum: number;
14
17
  timeBaseDen: number;
15
18
  pts: number;
@@ -25,6 +28,8 @@ export interface AVFrame extends AVTimeBase {
25
28
  opts?: {
26
29
  [key: string]: string | number;
27
30
  };
31
+ gopSize?: number;
32
+ keyIntMin?: number;
28
33
  }): AVCodecContext;
29
34
  }
30
35
  export interface AVFilter {
@@ -34,9 +39,17 @@ export interface AVFilter {
34
39
  addFrame(frame: AVFrame, index?: number): void;
35
40
  getFrame(index?: number): AVFrame;
36
41
  }
42
+ export interface AVBitstreamFilter {
43
+ [Symbol.dispose](): void;
44
+ destroy(): void;
45
+ setOption(name: string, value: string): void;
46
+ sendPacket(packet: AVPacket): void;
47
+ receivePacket(): AVPacket;
48
+ copyParameters(formatContext: AVFormatContext, streamIndex: number): void;
49
+ }
37
50
  export interface AVPacket {
38
51
  readonly streamIndex: number;
39
- readonly isKeyFrame: boolean;
52
+ flags: number;
40
53
  readonly size: number;
41
54
  readonly pts: number;
42
55
  readonly dts: number;
@@ -54,6 +67,8 @@ export interface AVCodecContext extends AVTimeBase {
54
67
  readonly pixelFormat: string;
55
68
  readonly hardwarePixelFormat: string;
56
69
  readonly vendorInfo: Record<string, any>;
70
+ keyIntMin: number;
71
+ gopSize: number;
57
72
  [Symbol.dispose](): void;
58
73
  destroy(): void;
59
74
  sendPacket(packet: AVPacket): Promise<boolean>;
@@ -101,6 +116,7 @@ export declare function createAVFilter(options: {
101
116
  outCount?: number;
102
117
  }): AVFilter;
103
118
  export declare function createAVFrame(width: number, height: number, pixelFormat: string, fillBlack?: boolean): AVFrame;
119
+ export declare function createAVBitstreamFilter(filter: string): AVBitstreamFilter;
104
120
  export declare function getBinaryUrl(): string;
105
121
  export declare function toJpeg(frame: AVFrame, quality: number): Promise<Buffer<ArrayBufferLike>>;
106
122
  export declare function toBuffer(frame: AVFrame): Promise<Buffer<ArrayBufferLike>>;
package/lib/index.js CHANGED
@@ -1,4 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
3
17
  if (value !== null && value !== void 0) {
4
18
  if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
@@ -66,6 +80,7 @@ exports.setAVLogLevel = setAVLogLevel;
66
80
  exports.createAVFormatContext = createAVFormatContext;
67
81
  exports.createAVFilter = createAVFilter;
68
82
  exports.createAVFrame = createAVFrame;
83
+ exports.createAVBitstreamFilter = createAVBitstreamFilter;
69
84
  exports.getBinaryUrl = getBinaryUrl;
70
85
  exports.toJpeg = toJpeg;
71
86
  exports.toBuffer = toBuffer;
@@ -76,6 +91,7 @@ const fs_1 = __importDefault(require("fs"));
76
91
  const path_1 = __importDefault(require("path"));
77
92
  const tar_1 = require("tar");
78
93
  const package_json_1 = __importDefault(require("../package.json"));
94
+ __exportStar(require("./flags"), exports);
79
95
  let addon;
80
96
  function isLoaded() {
81
97
  return !!addon;
@@ -166,6 +182,9 @@ function createAVFilter(options) {
166
182
  function createAVFrame(width, height, pixelFormat, fillBlack = true) {
167
183
  return new (loadAddon().AVFrame)(width, height, pixelFormat, fillBlack);
168
184
  }
185
+ function createAVBitstreamFilter(filter) {
186
+ return new (loadAddon().AVBitstreamFilter)(filter);
187
+ }
169
188
  function getBinaryUrl() {
170
189
  const libc = process.env.LIBC || process.env.npm_config_libc ||
171
190
  (detect_libc_1.default.isNonGlibcLinuxSync() && detect_libc_1.default.familySync()) || '';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"root":["../src/index.ts"],"version":"5.8.2"}
1
+ {"root":["../src/flags.ts","../src/index.ts"],"version":"5.8.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrypted/libav",
3
- "version": "1.0.136",
3
+ "version": "1.0.138",
4
4
  "dependencies": {
5
5
  "detect-libc": "^2.0.3",
6
6
  "follow-redirects": "^1.15.9",
package/src/bsf.cpp ADDED
@@ -0,0 +1,205 @@
1
+ #include "bsf.h"
2
+ #include "packet.h"
3
+ #include "formatcontext.h"
4
+
5
+ Napi::FunctionReference AVBitstreamFilter::constructor;
6
+
7
+ Napi::Object AVBitstreamFilter::Init(Napi::Env env, Napi::Object exports)
8
+ {
9
+ Napi::HandleScope scope(env);
10
+
11
+ Napi::Function func = DefineClass(env, "AVBitstreamFilter", {
12
+
13
+ InstanceMethod(Napi::Symbol::WellKnown(env, "dispose"), &AVBitstreamFilter::Destroy),
14
+
15
+ InstanceMethod("destroy", &AVBitstreamFilter::Destroy),
16
+
17
+ InstanceMethod("setOption", &AVBitstreamFilter::SetOption),
18
+
19
+ InstanceMethod("sendPacket", &AVBitstreamFilter::SendPacket),
20
+
21
+ InstanceMethod("copyParameters", &AVBitstreamFilter::CopyParameters),
22
+
23
+ InstanceMethod("receivePacket", &AVBitstreamFilter::ReceivePacket)});
24
+
25
+ constructor = Napi::Persistent(func);
26
+ constructor.SuppressDestruct();
27
+
28
+ exports.Set("AVBitstreamFilter", func);
29
+
30
+ return exports;
31
+ }
32
+
33
+ AVBitstreamFilter::AVBitstreamFilter(const Napi::CallbackInfo &info)
34
+ : Napi::ObjectWrap<AVBitstreamFilter>(info), bsfContext(nullptr)
35
+ {
36
+ bsfContext = nullptr;
37
+
38
+ Napi::Env env = info.Env();
39
+
40
+ if (info.Length() < 1 || !info[0].IsString())
41
+ {
42
+ Napi::TypeError::New(env, "String expected for argument 0: filter name").ThrowAsJavaScriptException();
43
+ return;
44
+ }
45
+
46
+ std::string filterName = info[0].As<Napi::String>().Utf8Value();
47
+
48
+ const AVBitStreamFilter *filter = av_bsf_get_by_name(filterName.c_str());
49
+ if (!filter)
50
+ {
51
+ Napi::Error::New(env, "Bitstream filter not found").ThrowAsJavaScriptException();
52
+ return;
53
+ }
54
+
55
+ int ret = av_bsf_alloc(filter, &bsfContext);
56
+ if (ret < 0)
57
+ {
58
+ Napi::Error::New(env, AVErrorString(ret)).ThrowAsJavaScriptException();
59
+ return;
60
+ }
61
+ }
62
+
63
+ AVBitstreamFilter::~AVBitstreamFilter()
64
+ {
65
+ }
66
+
67
+ Napi::Object AVBitstreamFilter::NewInstance(Napi::Env env, AVBSFContext *bsfContext)
68
+ {
69
+ Napi::EscapableHandleScope scope(env);
70
+ Napi::Object obj = constructor.New({});
71
+ AVBitstreamFilter *instance = Napi::ObjectWrap<AVBitstreamFilter>::Unwrap(obj);
72
+ instance->bsfContext = bsfContext;
73
+ return scope.Escape(napi_value(obj)).ToObject();
74
+ }
75
+
76
+ Napi::Value AVBitstreamFilter::SendPacket(const Napi::CallbackInfo &info)
77
+ {
78
+ if (info.Length() < 1 || !info[0].IsObject())
79
+ {
80
+ Napi::TypeError::New(info.Env(), "Packet object expected").ThrowAsJavaScriptException();
81
+ return info.Env().Undefined();
82
+ }
83
+
84
+ AVPacketObject *packetObject = Napi::ObjectWrap<AVPacketObject>::Unwrap(info[0].As<Napi::Object>());
85
+
86
+ int ret = av_bsf_send_packet(bsfContext, packetObject->packet);
87
+ if (ret < 0)
88
+ {
89
+ Napi::Error::New(info.Env(), AVErrorString(ret)).ThrowAsJavaScriptException();
90
+ return info.Env().Undefined();
91
+ }
92
+
93
+ return info.Env().Undefined();
94
+ }
95
+
96
+ Napi::Value AVBitstreamFilter::ReceivePacket(const Napi::CallbackInfo &info)
97
+ {
98
+ AVPacket *packet = av_packet_alloc();
99
+ if (!packet)
100
+ {
101
+ Napi::Error::New(info.Env(), "Could not allocate packet").ThrowAsJavaScriptException();
102
+ return info.Env().Undefined();
103
+ }
104
+
105
+ int ret = av_bsf_receive_packet(bsfContext, packet);
106
+ if (ret == AVERROR(EAGAIN))
107
+ {
108
+ av_packet_free(&packet);
109
+ return info.Env().Undefined();
110
+ }
111
+ if (ret < 0)
112
+ {
113
+ av_packet_free(&packet);
114
+ Napi::Error::New(info.Env(), AVErrorString(ret)).ThrowAsJavaScriptException();
115
+ return info.Env().Undefined();
116
+ }
117
+
118
+ Napi::Object packetObject = AVPacketObject::NewInstance(info.Env(), packet);
119
+ return packetObject;
120
+ }
121
+
122
+ Napi::Value AVBitstreamFilter::SetOption(const Napi::CallbackInfo &info)
123
+ {
124
+ if (!bsfContext)
125
+ {
126
+ Napi::TypeError::New(info.Env(), "Bitstream Filter object is null").ThrowAsJavaScriptException();
127
+ return info.Env().Undefined();
128
+ }
129
+
130
+ Napi::Env env = info.Env();
131
+
132
+ if (info.Length() < 1 || !info[0].IsObject())
133
+ {
134
+ Napi::TypeError::New(env, "Object expected for argument 0: options").ThrowAsJavaScriptException();
135
+ return info.Env().Undefined();
136
+ }
137
+
138
+ Napi::Object options = info[0].As<Napi::Object>();
139
+
140
+ // convert this options to a AVDictionary
141
+ AVDictionary *optionsDict = nullptr;
142
+
143
+ Napi::Array keys = options.GetPropertyNames();
144
+ for (unsigned int i = 0; i < keys.Length(); i++)
145
+ {
146
+ Napi::Value key = keys.Get(i);
147
+ Napi::Value value = options.Get(key.ToString());
148
+
149
+ if (value.IsString())
150
+ {
151
+ std::string keyStr = key.ToString();
152
+ std::string valueStr = value.ToString();
153
+
154
+ av_dict_set(&optionsDict, keyStr.c_str(), valueStr.c_str(), 0);
155
+ }
156
+ }
157
+
158
+ int ret = av_opt_set_dict2(bsfContext, &optionsDict, AV_OPT_SEARCH_CHILDREN);
159
+ if (ret < 0)
160
+ {
161
+ Napi::Error::New(env, AVErrorString(ret)).ThrowAsJavaScriptException();
162
+ return info.Env().Undefined();
163
+ }
164
+
165
+ return info.Env().Undefined();
166
+ }
167
+
168
+ Napi::Value AVBitstreamFilter::Destroy(const Napi::CallbackInfo &info)
169
+ {
170
+ if (bsfContext)
171
+ {
172
+ av_bsf_free(&bsfContext);
173
+ bsfContext = nullptr;
174
+ }
175
+ return info.Env().Undefined();
176
+ }
177
+
178
+ Napi::Value AVBitstreamFilter::CopyParameters(const Napi::CallbackInfo &info)
179
+ {
180
+ if (!bsfContext)
181
+ {
182
+ Napi::TypeError::New(info.Env(), "Bitstream Filter object is null").ThrowAsJavaScriptException();
183
+ return info.Env().Undefined();
184
+ }
185
+
186
+ // get the AVFormatContext object and stream index
187
+ if (info.Length() < 2 || !info[0].IsObject() || !info[1].IsNumber())
188
+ {
189
+ Napi::TypeError::New(info.Env(), "Object expected for argument 0: formatContext and Number expected for argument 1: streamIndex").ThrowAsJavaScriptException();
190
+ return info.Env().Undefined();
191
+ }
192
+
193
+ AVFormatContextObject *formatContextObject = Napi::ObjectWrap<AVFormatContextObject>::Unwrap(info[0].As<Napi::Object>());
194
+ int streamIndex = info[1].As<Napi::Number>().Int32Value();
195
+
196
+ AVStream *stream = formatContextObject->fmt_ctx_->streams[streamIndex];
197
+
198
+ int ret = avcodec_parameters_copy(bsfContext->par_in, stream->codecpar);
199
+ if (ret < 0)
200
+ {
201
+ Napi::Error::New(info.Env(), AVErrorString(ret)).ThrowAsJavaScriptException();
202
+ return info.Env().Undefined();
203
+ }
204
+ return info.Env().Undefined();
205
+ }
package/src/bsf.h ADDED
@@ -0,0 +1,35 @@
1
+ #pragma once
2
+
3
+ #include <napi.h>
4
+
5
+ extern "C"
6
+ {
7
+ #include <libavfilter/avfilter.h>
8
+ #include <libavfilter/buffersrc.h>
9
+ #include <libavfilter/buffersink.h>
10
+ #include <libavutil/opt.h>
11
+ #include <libavcodec/bsf.h>
12
+ }
13
+
14
+ #include "error.h"
15
+
16
+ class AVBitstreamFilter : public Napi::ObjectWrap<AVBitstreamFilter>
17
+ {
18
+ public:
19
+ static Napi::Object Init(Napi::Env env, Napi::Object exports);
20
+
21
+ AVBitstreamFilter(const Napi::CallbackInfo &info);
22
+ ~AVBitstreamFilter();
23
+
24
+ static Napi::Object NewInstance(Napi::Env env, AVBSFContext *bsfContext);
25
+ AVBSFContext *bsfContext;
26
+
27
+ private:
28
+ static Napi::FunctionReference constructor;
29
+
30
+ Napi::Value Destroy(const Napi::CallbackInfo &info);
31
+ Napi::Value SetOption(const Napi::CallbackInfo &info);
32
+ Napi::Value SendPacket(const Napi::CallbackInfo &info);
33
+ Napi::Value ReceivePacket(const Napi::CallbackInfo &info);
34
+ Napi::Value CopyParameters(const Napi::CallbackInfo &info);
35
+ };
@@ -67,6 +67,10 @@ Napi::Object AVCodecContextObject::Init(Napi::Env env, Napi::Object exports)
67
67
 
68
68
  AVCodecContextObject::InstanceAccessor("vendorInfo", &AVCodecContextObject::GetVendorInfo, nullptr),
69
69
 
70
+ AVCodecContextObject::InstanceAccessor("keyIntMin", &AVCodecContextObject::GetKeyIntMin, &AVCodecContextObject::SetKeyIntMin),
71
+
72
+ AVCodecContextObject::InstanceAccessor("gopSize", &AVCodecContextObject::GetGopSize, &AVCodecContextObject::SetGopSize),
73
+
70
74
  InstanceMethod(Napi::Symbol::WellKnown(env, "dispose"), &AVCodecContextObject::Destroy),
71
75
 
72
76
  InstanceMethod("destroy", &AVCodecContextObject::Destroy),
@@ -532,3 +536,63 @@ Napi::Value AVCodecContextObject::GetVendorInfo(const Napi::CallbackInfo &info)
532
536
  return obj;
533
537
  #endif
534
538
  }
539
+
540
+ Napi::Value AVCodecContextObject::GetKeyIntMin(const Napi::CallbackInfo &info)
541
+ {
542
+ Napi::Env env = info.Env();
543
+
544
+ if (!codecContext)
545
+ {
546
+ return env.Undefined();
547
+ }
548
+
549
+ return Napi::Number::New(env, codecContext->keyint_min);
550
+ }
551
+
552
+ void AVCodecContextObject::SetKeyIntMin(const Napi::CallbackInfo &info, const Napi::Value &value)
553
+ {
554
+ Napi::Env env = info.Env();
555
+
556
+ if (!codecContext)
557
+ {
558
+ return;
559
+ }
560
+
561
+ if (!value.IsNumber())
562
+ {
563
+ Napi::TypeError::New(env, "keyIntMin must be a number").ThrowAsJavaScriptException();
564
+ return;
565
+ }
566
+
567
+ codecContext->keyint_min = value.As<Napi::Number>().Int32Value();
568
+ }
569
+
570
+ Napi::Value AVCodecContextObject::GetGopSize(const Napi::CallbackInfo &info)
571
+ {
572
+ Napi::Env env = info.Env();
573
+
574
+ if (!codecContext)
575
+ {
576
+ return env.Undefined();
577
+ }
578
+
579
+ return Napi::Number::New(env, codecContext->gop_size);
580
+ }
581
+
582
+ void AVCodecContextObject::SetGopSize(const Napi::CallbackInfo &info, const Napi::Value &value)
583
+ {
584
+ Napi::Env env = info.Env();
585
+
586
+ if (!codecContext)
587
+ {
588
+ return;
589
+ }
590
+
591
+ if (!value.IsNumber())
592
+ {
593
+ Napi::TypeError::New(env, "gopSize must be a number").ThrowAsJavaScriptException();
594
+ return;
595
+ }
596
+
597
+ codecContext->gop_size = value.As<Napi::Number>().Int32Value();
598
+ }
@@ -32,6 +32,10 @@ public:
32
32
  enum AVHWDeviceType hw_device_value;
33
33
 
34
34
  private:
35
+ Napi::Value GetKeyIntMin(const Napi::CallbackInfo &info);
36
+ void SetKeyIntMin(const Napi::CallbackInfo &info, const Napi::Value &value);
37
+ Napi::Value GetGopSize(const Napi::CallbackInfo &info);
38
+ void SetGopSize(const Napi::CallbackInfo &info, const Napi::Value &value);
35
39
  Napi::Value GetTimeBaseNum(const Napi::CallbackInfo &info);
36
40
  Napi::Value GetTimeBaseDen(const Napi::CallbackInfo &info);
37
41
  Napi::Value GetHardwareDevice(const Napi::CallbackInfo &info);
package/src/flags.ts ADDED
@@ -0,0 +1,15 @@
1
+ export enum AVPacketFlags {
2
+ AV_PKT_FLAG_KEY = 0x0001,
3
+ AV_PKT_FLAG_CORRUPT = 0x0002,
4
+ AV_PKT_FLAG_DISCARD = 0x0004,
5
+ AV_PKT_FLAG_TRUSTED = 0x0008,
6
+ AV_PKT_FLAG_DISPOSABLE = 0x0010,
7
+ }
8
+
9
+ export enum AVFrameFlags {
10
+ AV_FRAME_FLAG_KEY = 0x0001,
11
+ AV_FRAME_FLAG_CORRUPT = 0x0002,
12
+ AV_FRAME_FLAG_DISCARD = 0x0004,
13
+ AV_FRAME_FLAG_TRUSTED = 0x0008,
14
+ AV_FRAME_FLAG_DISPOSABLE = 0x0010,
15
+ }
@@ -23,9 +23,11 @@ extern "C"
23
23
  #include <thread>
24
24
  #include <v8.h>
25
25
 
26
+ #include "formatcontext.h"
26
27
  #include "filter.h"
27
28
  #include "codeccontext.h"
28
29
  #include "packet.h"
30
+ #include "bsf.h"
29
31
 
30
32
  static Napi::FunctionReference logCallbackRef;
31
33
 
@@ -99,30 +101,6 @@ void printAVError(int errnum)
99
101
  printf("Error: %s\n", errbuf);
100
102
  }
101
103
 
102
- class AVFormatContextObject : public Napi::ObjectWrap<AVFormatContextObject>
103
- {
104
- public:
105
- static Napi::Object Init(Napi::Env env, Napi::Object exports);
106
- AVFormatContextObject(const Napi::CallbackInfo &info);
107
- ~AVFormatContextObject(); // Explicitly declare the destructor
108
- static Napi::FunctionReference constructor;
109
- AVFormatContext *fmt_ctx_;
110
- Napi::ThreadSafeFunction callbackRef;
111
-
112
- private:
113
- Napi::Value Open(const Napi::CallbackInfo &info);
114
- Napi::Value Close(const Napi::CallbackInfo &info);
115
- Napi::Value CreateDecoder(const Napi::CallbackInfo &info);
116
- Napi::Value GetMetadata(const Napi::CallbackInfo &info);
117
- Napi::Value ReadFrame(const Napi::CallbackInfo &info);
118
- Napi::Value ReceiveFrame(const Napi::CallbackInfo &info);
119
- Napi::Value Create(const Napi::CallbackInfo &info);
120
- Napi::Value NewStream(const Napi::CallbackInfo &info);
121
- Napi::Value WriteFrame(const Napi::CallbackInfo &info);
122
- Napi::Value GetStreams(const Napi::CallbackInfo &info);
123
- Napi::Value CreateSDP(const Napi::CallbackInfo &info);
124
- };
125
-
126
104
  class ReadFrameWorker : public Napi::AsyncWorker
127
105
  {
128
106
  public:
@@ -818,6 +796,7 @@ Napi::Object Init(Napi::Env env, Napi::Object exports)
818
796
  AVFrameObject::Init(env, exports);
819
797
  AVCodecContextObject::Init(env, exports);
820
798
  AVFormatContextObject::Init(env, exports);
799
+ AVBitstreamFilter::Init(env, exports);
821
800
 
822
801
  exports.Set(Napi::String::New(env, "setLogLevel"), Napi::Function::New(env, setLogLevel));
823
802
  return exports;
@@ -0,0 +1,45 @@
1
+ #include <napi.h>
2
+ extern "C"
3
+ {
4
+ #include <libavcodec/avcodec.h>
5
+ #include <libavformat/avformat.h>
6
+ #include <libavutil/hwcontext.h>
7
+ #include <libavutil/frame.h>
8
+ #include <libavfilter/buffersink.h>
9
+ #include <libavfilter/buffersrc.h>
10
+ #include <libavfilter/avfilter.h>
11
+ #include <libavutil/opt.h>
12
+ #include <libavutil/avutil.h>
13
+ // rtpenc.h header uses a weird restrict keyword
14
+ #ifndef restrict
15
+ #define restrict
16
+ #include <libavformat/rtpenc.h>
17
+ #undef restrict
18
+ #else
19
+ #include <libavformat/rtpenc.h>
20
+ #endif
21
+ }
22
+
23
+ class AVFormatContextObject : public Napi::ObjectWrap<AVFormatContextObject>
24
+ {
25
+ public:
26
+ static Napi::Object Init(Napi::Env env, Napi::Object exports);
27
+ AVFormatContextObject(const Napi::CallbackInfo &info);
28
+ ~AVFormatContextObject(); // Explicitly declare the destructor
29
+ static Napi::FunctionReference constructor;
30
+ AVFormatContext *fmt_ctx_;
31
+ Napi::ThreadSafeFunction callbackRef;
32
+
33
+ private:
34
+ Napi::Value Open(const Napi::CallbackInfo &info);
35
+ Napi::Value Close(const Napi::CallbackInfo &info);
36
+ Napi::Value CreateDecoder(const Napi::CallbackInfo &info);
37
+ Napi::Value GetMetadata(const Napi::CallbackInfo &info);
38
+ Napi::Value ReadFrame(const Napi::CallbackInfo &info);
39
+ Napi::Value ReceiveFrame(const Napi::CallbackInfo &info);
40
+ Napi::Value Create(const Napi::CallbackInfo &info);
41
+ Napi::Value NewStream(const Napi::CallbackInfo &info);
42
+ Napi::Value WriteFrame(const Napi::CallbackInfo &info);
43
+ Napi::Value GetStreams(const Napi::CallbackInfo &info);
44
+ Napi::Value CreateSDP(const Napi::CallbackInfo &info);
45
+ };
package/src/frame.cpp CHANGED
@@ -46,6 +46,10 @@ Napi::Object AVFrameObject::Init(Napi::Env env, Napi::Object exports)
46
46
 
47
47
  AVFrameObject::InstanceAccessor("softwareFormat", &AVFrameObject::GetSoftware, NULL),
48
48
 
49
+ AVFrameObject::InstanceAccessor("flags", &AVFrameObject::GetFlags, &AVFrameObject::SetFlags),
50
+
51
+ AVFrameObject::InstanceAccessor("pictType", &AVFrameObject::GetPictType, &AVFrameObject::SetPictType),
52
+
49
53
  InstanceMethod(Napi::Symbol::WellKnown(env, "dispose"), &AVFrameObject::Destroy),
50
54
 
51
55
  InstanceMethod("destroy", &AVFrameObject::Destroy),
@@ -227,6 +231,17 @@ Napi::Value AVFrameObject::CreateEncoder(const Napi::CallbackInfo &info)
227
231
  c->time_base.num = timeBaseNum;
228
232
  c->time_base.den = timeBaseDen;
229
233
 
234
+ Napi::Value gopSizeValue = options.Get("gopSize");
235
+ if (gopSizeValue.IsNumber()) {
236
+ c->gop_size = gopSizeValue.As<Napi::Number>().Int32Value();
237
+ }
238
+
239
+ Napi::Value keyintMinValue = options.Get("keyIntMin");
240
+ if (keyintMinValue.IsNumber()) {
241
+ c->keyint_min = keyintMinValue.As<Napi::Number>().Int32Value();
242
+ }
243
+
244
+
230
245
  Napi::Value opts = options.Get("opts");
231
246
  if (opts.IsObject())
232
247
  {
@@ -535,6 +550,7 @@ Napi::Value AVFrameObject::GetSoftware(const Napi::CallbackInfo &info)
535
550
  {
536
551
  return env.Undefined();
537
552
  }
553
+
538
554
  if (frame_->hw_frames_ctx)
539
555
  {
540
556
  AVHWFramesContext *frames_ctx = (AVHWFramesContext *)(frame_->hw_frames_ctx->data);
@@ -542,4 +558,56 @@ Napi::Value AVFrameObject::GetSoftware(const Napi::CallbackInfo &info)
542
558
  return Napi::String::New(env, format.c_str());
543
559
  }
544
560
  return env.Null();
545
- }
561
+ }
562
+
563
+ Napi::Value AVFrameObject::GetFlags(const Napi::CallbackInfo &info)
564
+ {
565
+ Napi::Env env = info.Env();
566
+ if (!frame_)
567
+ {
568
+ return env.Undefined();
569
+ }
570
+ return Napi::Number::New(env, frame_->flags);
571
+ }
572
+
573
+ void AVFrameObject::SetFlags(const Napi::CallbackInfo &info, const Napi::Value &value)
574
+ {
575
+ Napi::Env env = info.Env();
576
+ if (!frame_)
577
+ {
578
+ Napi::Error::New(env, "Frame object is null").ThrowAsJavaScriptException();
579
+ return;
580
+ }
581
+ if (!value.IsNumber())
582
+ {
583
+ Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException();
584
+ return;
585
+ }
586
+ frame_->flags = value.As<Napi::Number>().Int32Value();
587
+ }
588
+
589
+ Napi::Value AVFrameObject::GetPictType(const Napi::CallbackInfo &info)
590
+ {
591
+ Napi::Env env = info.Env();
592
+ if (!frame_)
593
+ {
594
+ return env.Undefined();
595
+ }
596
+ return Napi::Number::New(env, frame_->pict_type);
597
+ }
598
+
599
+ void AVFrameObject::SetPictType(const Napi::CallbackInfo &info, const Napi::Value &value)
600
+ {
601
+ Napi::Env env = info.Env();
602
+ if (!frame_)
603
+ {
604
+ Napi::Error::New(env, "Frame object is null").ThrowAsJavaScriptException();
605
+ return;
606
+ }
607
+ if (!value.IsNumber())
608
+ {
609
+ Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException();
610
+ return;
611
+ }
612
+ frame_->pict_type = (enum AVPictureType)value.As<Napi::Number>().Int32Value();
613
+ }
package/src/frame.h CHANGED
@@ -43,9 +43,13 @@ private:
43
43
  void SetDTS(const Napi::CallbackInfo &info, const Napi::Value &value);
44
44
  Napi::Value GetHardware(const Napi::CallbackInfo &info);
45
45
  Napi::Value GetSoftware(const Napi::CallbackInfo &info);
46
+ Napi::Value GetFlags(const Napi::CallbackInfo &info);
47
+ void SetFlags(const Napi::CallbackInfo &info, const Napi::Value &value);
48
+ Napi::Value GetPictType(const Napi::CallbackInfo &info);
49
+ void SetPictType(const Napi::CallbackInfo &info, const Napi::Value &value);
46
50
 
47
51
  Napi::Value Destroy(const Napi::CallbackInfo &info);
48
52
  Napi::Value CreateEncoder(const Napi::CallbackInfo &info);
49
53
  Napi::Value ToBuffer(const Napi::CallbackInfo &info);
50
54
  Napi::Value FromBuffer(const Napi::CallbackInfo &info);
51
- };
55
+ };
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@ import { IncomingMessage } from 'http';
6
6
  import path from 'path';
7
7
  import { x as tarx } from 'tar';
8
8
  import packageJson from '../package.json';
9
+ export * from './flags';
9
10
 
10
11
  let addon: any;
11
12
 
@@ -103,7 +104,9 @@ export interface AVFrame extends AVTimeBase {
103
104
  readonly pixelFormat: string;
104
105
  readonly hardwareDeviceType: string;
105
106
  readonly softwareFormat: string;
107
+ pictType: number;
106
108
 
109
+ flags: number;
107
110
  timeBaseNum: number;
108
111
  timeBaseDen: number;
109
112
  pts: number;
@@ -120,6 +123,8 @@ export interface AVFrame extends AVTimeBase {
120
123
  opts?: {
121
124
  [key: string]: string | number,
122
125
  },
126
+ gopSize?: number;
127
+ keyIntMin?: number;
123
128
  }): AVCodecContext;
124
129
  }
125
130
 
@@ -131,9 +136,18 @@ export interface AVFilter {
131
136
  getFrame(index?: number): AVFrame;
132
137
  }
133
138
 
139
+ export interface AVBitstreamFilter {
140
+ [Symbol.dispose](): void;
141
+ destroy(): void;
142
+ setOption(name: string, value: string): void;
143
+ sendPacket(packet: AVPacket): void;
144
+ receivePacket(): AVPacket;
145
+ copyParameters(formatContext: AVFormatContext, streamIndex: number): void;
146
+ }
147
+
134
148
  export interface AVPacket {
135
149
  readonly streamIndex: number;
136
- readonly isKeyFrame: boolean;
150
+ flags: number;
137
151
  readonly size: number;
138
152
  readonly pts: number;
139
153
  readonly dts: number;
@@ -153,6 +167,8 @@ export interface AVCodecContext extends AVTimeBase {
153
167
  readonly pixelFormat: string;
154
168
  readonly hardwarePixelFormat: string;
155
169
  readonly vendorInfo: Record<string, any>;
170
+ keyIntMin: number;
171
+ gopSize: number;
156
172
 
157
173
  [Symbol.dispose](): void;
158
174
  destroy(): void;
@@ -224,6 +240,10 @@ export function createAVFrame(
224
240
  return new (loadAddon().AVFrame)(width, height, pixelFormat, fillBlack);
225
241
  }
226
242
 
243
+ export function createAVBitstreamFilter(filter: string): AVBitstreamFilter {
244
+ return new (loadAddon().AVBitstreamFilter)(filter);
245
+ }
246
+
227
247
  export function getBinaryUrl() {
228
248
  const libc = process.env.LIBC || process.env.npm_config_libc ||
229
249
  (detectLibc.isNonGlibcLinuxSync() && detectLibc.familySync()) || ''
package/src/packet.cpp CHANGED
@@ -23,27 +23,16 @@ Napi::Object AVPacketObject::Init(Napi::Env env, Napi::Object exports)
23
23
  Napi::HandleScope scope(env);
24
24
 
25
25
  Napi::Function func = DefineClass(env, "AVPacketObject", {
26
-
27
- AVPacketObject::InstanceAccessor("isKeyFrame", &AVPacketObject::GetIsKeyFrame, nullptr),
28
-
26
+ AVPacketObject::InstanceAccessor("flags", &AVPacketObject::GetFlags, &AVPacketObject::SetFlags),
29
27
  AVPacketObject::InstanceAccessor("pts", &AVPacketObject::GetPTS, nullptr),
30
-
31
28
  AVPacketObject::InstanceAccessor("dts", &AVPacketObject::GetDTS, nullptr),
32
-
33
29
  AVPacketObject::InstanceAccessor("duration", &AVPacketObject::GetDuration, nullptr),
34
-
35
30
  AVPacketObject::InstanceAccessor("size", &AVPacketObject::GetSize, nullptr),
36
-
37
31
  AVPacketObject::InstanceAccessor("streamIndex", &AVPacketObject::GetStreamIndex, nullptr),
38
-
39
32
  InstanceMethod(Napi::Symbol::WellKnown(env, "dispose"), &AVPacketObject::Destroy),
40
-
41
33
  InstanceMethod("clone", &AVPacketObject::Clone),
42
-
43
34
  InstanceMethod("destroy", &AVPacketObject::Destroy),
44
-
45
35
  InstanceMethod("getData", &AVPacketObject::GetData),
46
-
47
36
  });
48
37
 
49
38
  constructor = Napi::Persistent(func);
@@ -104,11 +93,25 @@ Napi::Value AVPacketObject::Destroy(const Napi::CallbackInfo &info)
104
93
 
105
94
  return info.Env().Undefined();
106
95
  }
96
+ Napi::Value AVPacketObject::GetFlags(const Napi::CallbackInfo &info)
97
+ {
98
+ return Napi::Number::New(info.Env(), packet ? packet->flags : 0);
99
+ }
107
100
 
108
- Napi::Value AVPacketObject::GetIsKeyFrame(const Napi::CallbackInfo &info)
101
+ void AVPacketObject::SetFlags(const Napi::CallbackInfo &info, const Napi::Value &value)
109
102
  {
110
- bool keyFrame = packet ? packet->flags & AV_PKT_FLAG_KEY : false;
111
- return Napi::Boolean::New(info.Env(), keyFrame);
103
+ if (!packet)
104
+ {
105
+ return;
106
+ }
107
+
108
+ if (!value.IsNumber())
109
+ {
110
+ Napi::TypeError::New(info.Env(), "Number expected for flags").ThrowAsJavaScriptException();
111
+ return;
112
+ }
113
+
114
+ packet->flags = value.As<Napi::Number>().Int32Value();
112
115
  }
113
116
 
114
117
  Napi::Value AVPacketObject::GetPTS(const Napi::CallbackInfo &info)
package/src/packet.h CHANGED
@@ -27,7 +27,8 @@ public:
27
27
  ~AVPacketObject();
28
28
  Napi::Value Clone(const Napi::CallbackInfo &info);
29
29
  Napi::Value Destroy(const Napi::CallbackInfo &info);
30
- Napi::Value GetIsKeyFrame(const Napi::CallbackInfo &info);
30
+ Napi::Value GetFlags(const Napi::CallbackInfo &info);
31
+ void SetFlags(const Napi::CallbackInfo &info, const Napi::Value &value);
31
32
  Napi::Value GetPTS(const Napi::CallbackInfo &info);
32
33
  Napi::Value GetDTS(const Napi::CallbackInfo &info);
33
34
  Napi::Value GetDuration(const Napi::CallbackInfo &info);