31 #ifndef OPENSHOT_FFMPEG_READER_H
32 #define OPENSHOT_FFMPEG_READER_H
63 bool is_near(
AudioLocation location,
int samples_per_frame, int64_t amount);
97 AVFormatContext *pFormatCtx;
98 int i, videoStream, audioStream;
99 AVCodecContext *pCodecCtx, *aCodecCtx;
100 AVStream *pStream, *aStream;
104 bool is_duration_known;
105 bool check_interlace;
107 bool has_missing_frames;
108 bool use_omp_threads;
112 map<int64_t, int64_t> processing_video_frames;
113 multimap<int64_t, int64_t> processing_audio_frames;
114 map<int64_t, int64_t> processed_video_frames;
115 map<int64_t, int64_t> processed_audio_frames;
116 multimap<int64_t, int64_t> missing_video_frames;
117 multimap<int64_t, int64_t> missing_video_frames_source;
118 multimap<int64_t, int64_t> missing_audio_frames;
119 multimap<int64_t, int64_t> missing_audio_frames_source;
120 map<int64_t, int> checked_frames;
128 int64_t num_packets_since_video_frame;
129 int64_t num_checks_since_final;
130 std::shared_ptr<Frame> last_video_frame;
134 int64_t seeking_frame;
137 int64_t seek_audio_frame_found;
138 int64_t seek_video_frame_found;
140 int64_t audio_pts_offset;
141 int64_t video_pts_offset;
143 int64_t largest_frame_processed;
144 int64_t current_video_frame;
150 bool CheckSeek(
bool is_video);
153 bool CheckMissingFrame(int64_t requested_frame);
156 void CheckWorkingFrames(
bool end_of_stream, int64_t requested_frame);
159 int64_t ConvertFrameToAudioPTS(int64_t frame_number);
162 int64_t ConvertFrameToVideoPTS(int64_t frame_number);
165 int64_t ConvertVideoPTStoFrame(int64_t pts);
168 std::shared_ptr<Frame> CreateFrame(int64_t requested_frame);
180 int64_t GetSmallestVideoFrame();
183 int64_t GetSmallestAudioFrame();
186 int64_t GetVideoPTS();
189 bool IsPartialFrame(int64_t requested_frame);
192 void ProcessVideoPacket(int64_t requested_frame);
195 void ProcessAudioPacket(int64_t requested_frame, int64_t target_frame,
int starting_sample);
198 std::shared_ptr<Frame> ReadStream(int64_t requested_frame);
201 void RemoveAVFrame(AVFrame*);
204 void RemoveAVPacket(AVPacket*);
207 void Seek(int64_t requested_frame);
210 void UpdatePTSOffset(
bool is_video);
213 void UpdateAudioInfo();
216 void UpdateVideoInfo();
248 std::shared_ptr<Frame> GetFrame(int64_t requested_frame);
254 string Name() {
return "FFmpegReader"; };
258 void SetJson(
string value);
259 Json::Value JsonValue();
260 void SetJsonValue(Json::Value root);