Files
oak-editor/project/footage.h
T

112 lines
2.4 KiB
C++

/***
Olive - Non-Linear Video Editor
Copyright (C) 2019 Olive Team
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 <http://www.gnu.org/licenses/>.
***/
#ifndef FOOTAGE_H
#define FOOTAGE_H
extern "C" {
#include <libavformat/avformat.h>
}
#include <memory>
#include <QString>
#include <QVector>
#include <QMetaType>
#include <QVariant>
#include <QMutex>
#include <QPixmap>
#include <QIcon>
#include "project/marker.h"
enum VideoInterlacingMode {
VIDEO_PROGRESSIVE,
VIDEO_TOP_FIELD_FIRST,
VIDEO_BOTTOM_FIELD_FIRST
};
class Sequence;
class Clip;
class PreviewGenerator;
struct FootageStream {
int file_index;
int video_width;
int video_height;
bool infinite_length;
double video_frame_rate;
int video_interlacing;
int video_auto_interlacing;
int audio_channels;
int audio_layout;
int audio_frequency;
bool enabled;
// preview thumbnail/waveform
bool preview_done;
QImage video_preview;
QIcon video_preview_square;
QVector<char> audio_preview;
void make_square_thumb();
};
struct Footage {
Footage();
~Footage();
// footage metadata
QString url;
QString name;
int64_t length;
QVector<FootageStream> video_tracks;
QVector<FootageStream> audio_tracks;
int save_id;
bool ready;
bool invalid;
double speed;
bool alpha_is_premultiplied;
int start_number;
// proxy config
bool proxy;
QString proxy_path;
// thumbnail/waveform generation
PreviewGenerator* preview_gen;
QMutex ready_lock;
// in/out points
bool using_inout;
long in;
long out;
// markers
QVector<Marker> markers;
// functions
long get_length_in_frames(double frame_rate);
FootageStream *get_stream_from_file_index(bool video, int index);
void reset();
};
using FootagePtr = std::shared_ptr<Footage>;
#endif // FOOTAGE_H