@scrypted/libav 1.0.22 → 1.0.24
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/package.json +1 -1
- package/src/decode.cpp +39 -18
package/package.json
CHANGED
package/src/decode.cpp
CHANGED
|
@@ -50,19 +50,19 @@ Napi::Value set_console_callback(const Napi::CallbackInfo &info)
|
|
|
50
50
|
return env.Null();
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
void printAVError(int errnum)
|
|
54
|
-
{
|
|
55
|
-
|
|
53
|
+
// void printAVError(int errnum)
|
|
54
|
+
// {
|
|
55
|
+
// char errbuf[256];
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
// // Convert the error code to a string
|
|
58
|
+
// if (av_strerror(errnum, errbuf, sizeof(errbuf)) < 0)
|
|
59
|
+
// {
|
|
60
|
+
// printf("Unknown error code: %d", errnum);
|
|
61
|
+
// return;
|
|
62
|
+
// }
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
}
|
|
64
|
+
// printf("Error: %s\n", errbuf);
|
|
65
|
+
// }
|
|
66
66
|
|
|
67
67
|
class ReadFrameWorker : public Napi::AsyncWorker
|
|
68
68
|
{
|
|
@@ -87,36 +87,57 @@ public:
|
|
|
87
87
|
return;
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
int ret = avcodec_receive_frame(codecContext, frame);
|
|
91
|
+
if (ret == AVERROR(EAGAIN))
|
|
91
92
|
{
|
|
93
|
+
// fall through to read more data
|
|
94
|
+
}
|
|
95
|
+
else if (ret < 0 || ret == AVERROR_EOF)
|
|
96
|
+
{
|
|
97
|
+
// printAVError(ret);
|
|
98
|
+
av_packet_free(&packet);
|
|
99
|
+
SetError("Could not read frame");
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
else
|
|
103
|
+
{
|
|
104
|
+
// printf("returning frame 0\n");
|
|
92
105
|
av_packet_free(&packet);
|
|
93
106
|
result = frame;
|
|
94
107
|
return;
|
|
95
108
|
}
|
|
96
109
|
|
|
97
110
|
// Decode video frames
|
|
98
|
-
int ret;
|
|
99
111
|
while (av_read_frame(fmt_ctx_, packet) >= 0)
|
|
100
112
|
{
|
|
101
113
|
if (packet->stream_index == videoStreamIndex)
|
|
102
114
|
{
|
|
103
|
-
printf("av packet size: %d\n", packet->size);
|
|
115
|
+
// printf("av packet size: %d\n", packet->size);
|
|
104
116
|
if ((ret = avcodec_send_packet(codecContext, packet)) == 0)
|
|
105
117
|
{
|
|
106
|
-
|
|
118
|
+
ret = avcodec_receive_frame(codecContext, frame);
|
|
119
|
+
if (ret == AVERROR(EAGAIN))
|
|
120
|
+
{
|
|
121
|
+
// fall through to read more data
|
|
122
|
+
}
|
|
123
|
+
else if (ret < 0 || ret == AVERROR_EOF)
|
|
107
124
|
{
|
|
125
|
+
// printAVError(ret);
|
|
108
126
|
av_packet_free(&packet);
|
|
109
|
-
|
|
127
|
+
SetError("Could not read frame");
|
|
110
128
|
return;
|
|
111
129
|
}
|
|
112
130
|
else
|
|
113
131
|
{
|
|
114
|
-
|
|
132
|
+
// printf("returning frame 1\n");
|
|
133
|
+
av_packet_free(&packet);
|
|
134
|
+
result = frame;
|
|
135
|
+
return;
|
|
115
136
|
}
|
|
116
137
|
}
|
|
117
138
|
else
|
|
118
139
|
{
|
|
119
|
-
printAVError(ret);
|
|
140
|
+
// printAVError(ret);
|
|
120
141
|
}
|
|
121
142
|
}
|
|
122
143
|
av_packet_unref(packet); // Reset the packet for the next frame
|