-
Notifications
You must be signed in to change notification settings - Fork 76
Expand file tree
/
Copy pathdemux.h
More file actions
90 lines (74 loc) · 2.9 KB
/
demux.h
File metadata and controls
90 lines (74 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
Aerostat Beam Coder - Node.js native bindings for FFmpeg.
Copyright (C) 2019 Streampunk Media Ltd.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
https://www.streampunk.media/ mailto:furnace@streampunk.media
14 Ormiscaig, Aultbea, Achnasheen, IV22 2JJ U.K.
*/
#ifndef DEMUX_H
#define DEMUX_H
extern "C" {
#include <libavformat/avformat.h>
#include <libavutil/opt.h>
#include <libavutil/dict.h>
#include <libavutil/pixfmt.h>
#include <libavutil/attributes.h>
#include <libavutil/pixdesc.h>
}
#include "beamcoder_util.h"
#include "packet.h"
#include "format.h"
#include "node_api.h"
#include "adaptor.h"
void demuxerExecute(napi_env env, void* data);
void demuxerComplete(napi_env env, napi_status asyncStatus, void* data);
napi_value demuxer(napi_env env, napi_callback_info info);
void readFrameExecute(napi_env env, void* data);
void readFrameComplete(napi_env env, napi_status asyncStatus, void* data);
napi_value readFrame(napi_env env, napi_callback_info info);
void seekFrameExecute(napi_env env, void *data);
void seekFrameComplete(napi_env env, napi_status asyncStatus, void *data);
napi_value seekFrame(napi_env env, napi_callback_info info);
void demuxerFinalizer(napi_env env, void* data, void* hint);
void readBufferFinalizer(napi_env env, void* data, void* hint);
napi_value forceCloseInput(napi_env env, napi_callback_info info);
napi_value interrupt(napi_env env, napi_callback_info info);
int interrupt_callback(void *opaque);
struct demuxerCarrier : carrier {
const char* filename = nullptr;
Adaptor *adaptor = nullptr;
AVFormatContext* format = nullptr;
AVInputFormat* iformat = nullptr;
AVDictionary* options = nullptr;
~demuxerCarrier() {
if (format != nullptr) { avformat_close_input(&format); }
if (options != nullptr) { av_dict_free(&options); }
}
};
struct readFrameCarrier : carrier {
fmtCtxRef* formatRef = nullptr;
Adaptor *adaptor = nullptr;
AVPacket* packet = av_packet_alloc();
~readFrameCarrier() {
if (packet != nullptr) av_packet_free(&packet);
}
};
struct seekFrameCarrier : carrier {
fmtCtxRef* formatRef = nullptr;
int streamIndex = -1;
int64_t timestamp = 0;
// weird semantic - backward actually means 'find nearest key frame before timestamp'
// setting as default as more natural
int flags = AVSEEK_FLAG_BACKWARD;
~seekFrameCarrier() { }
};
#endif // DEMUX_H