@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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/decode.cpp +39 -18
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrypted/libav",
3
- "version": "1.0.22",
3
+ "version": "1.0.24",
4
4
  "dependencies": {
5
5
  "node-addon-api": "^8.1.0",
6
6
  "prebuild-install": "npm:@scrypted/prebuild-install@^7.1.8"
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
- char errbuf[256];
53
+ // void printAVError(int errnum)
54
+ // {
55
+ // char errbuf[256];
56
56
 
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
- }
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
- printf("Error: %s\n", errbuf);
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
- if (avcodec_receive_frame(codecContext, frame) == 0)
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
- if ((ret = avcodec_receive_frame(codecContext, frame)) == 0)
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
- result = frame;
127
+ SetError("Could not read frame");
110
128
  return;
111
129
  }
112
130
  else
113
131
  {
114
- printAVError(ret);
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