OpenShot Library | libopenshot
0.2.5
|
Go to the documentation of this file.
31 #include "../include/ChunkReader.h"
32 #include "../include/FFmpegReader.h"
37 :
path(
path), chunk_size(24 * 3), is_open(false), version(chunk_version), local_reader(NULL)
40 if (!does_folder_exist(
path))
45 previous_location.
number = 0;
46 previous_location.
frame = 0;
54 bool ChunkReader::does_folder_exist(std::string
path)
56 QDir dir(
path.c_str());
61 void ChunkReader::load_json()
64 std::string json_path = QDir::cleanPath(QString(
path.c_str()) + QDir::separator() +
"info.json").toStdString();
65 std::stringstream json_string;
68 std::ifstream myfile (json_path.c_str());
69 std::string line =
"";
74 getline (myfile, line);
82 Json::CharReaderBuilder rbuilder;
85 bool success = Json::parseFromStream(rbuilder, json_string, &root, &errors);
88 throw InvalidJSON(
"Chunk folder could not be opened.", path);
124 catch (
const std::exception& e)
127 throw InvalidJSON(
"JSON could not be parsed (or is invalid).", path);
132 ChunkLocation ChunkReader::find_chunk_frame(int64_t requested_frame)
135 int64_t chunk_number = (requested_frame / chunk_size) + 1;
138 int64_t start_frame_of_chunk = (chunk_number - 1) * chunk_size;
139 int64_t chunk_frame_number = (requested_frame - start_frame_of_chunk) + 1;
173 std::string ChunkReader::get_chunk_path(int64_t chunk_number, std::string folder, std::string extension)
176 std::stringstream chunk_count_string;
177 chunk_count_string << chunk_number;
178 QString padded_count =
"%1";
179 padded_count = padded_count.arg(chunk_count_string.str().c_str(), 6,
'0');
180 if (folder.length() != 0 && extension.length() != 0)
182 return QDir::cleanPath(QString(
path.c_str()) + QDir::separator() + folder.c_str() + QDir::separator() + padded_count + extension.c_str()).toStdString();
184 else if (folder.length() == 0 && extension.length() != 0)
186 return QDir::cleanPath(QString(
path.c_str()) + QDir::separator() + padded_count + extension.c_str()).toStdString();
188 else if (folder.length() != 0 && extension.length() == 0)
190 return QDir::cleanPath(QString(
path.c_str()) + QDir::separator() + folder.c_str()).toStdString();
205 std::string folder_name =
"";
209 folder_name =
"thumb";
212 folder_name =
"preview";
215 folder_name =
"final";
220 std::string chunk_video_path = get_chunk_path(location.
number, folder_name,
".webm");
225 std::cout <<
"Close READER" << std::endl;
227 local_reader->
Close();
233 std::cout <<
"Load READER: " << chunk_video_path << std::endl;
236 local_reader->
Open();
245 previous_location = location;
252 last_frame->number = requested_frame;
270 root[
"type"] =
"ChunkReader";
272 std::stringstream chunk_size_stream;
273 chunk_size_stream << chunk_size;
274 root[
"chunk_size"] = chunk_size_stream.str();
275 root[
"chunk_version"] = version;
290 catch (
const std::exception& e)
293 throw InvalidJSON(
"JSON is invalid (missing keys or invalid data types)");
304 if (!root[
"path"].isNull())
305 path = root[
"path"].asString();
306 if (!root[
"chunk_size"].isNull())
307 chunk_size = std::stoll(root[
"chunk_size"].asString());
308 if (!root[
"chunk_version"].isNull())
const Json::Value stringToJson(const std::string value)
int sample_rate
The number of audio samples per second (44100 is a common sample rate)
virtual Json::Value JsonValue() const =0
Generate Json::Value for this object.
virtual std::shared_ptr< openshot::Frame > GetFrame(int64_t number)=0
virtual void SetJsonValue(const Json::Value root)=0
Load Json::Value into this object.
This namespace is the default namespace for all code in the openshot library.
openshot::ReaderInfo info
Information about the current media file.
int audio_bit_rate
The bit rate of the audio stream (in bytes)
float duration
Length of time (in seconds)
This struct holds the location of a frame within a chunk.
void SetJsonValue(const Json::Value root)
Load Json::Value into this object.
bool has_video
Determines if this file has a video stream.
int width
The width of the video (in pixesl)
std::shared_ptr< openshot::Frame > GetFrame(int64_t requested_frame)
Get an openshot::Frame object for a specific frame number of this reader.
int64_t video_length
The number of frames in the video stream.
int height
The height of the video (in pixels)
int num
Numerator for the fraction.
Exception when a required chunk is missing.
int den
Denominator for the fraction.
virtual void Open()=0
Open the reader (and start consuming resources, such as images or video files)
bool has_audio
Determines if this file has an audio stream.
Exception for invalid JSON.
int64_t file_size
Size of file (in bytes)
void SetJson(const std::string value)
Load JSON string into this object.
openshot::Fraction video_timebase
The video timebase determines how long each frame stays on the screen.
void Open()
Open the reader. This is required before you can access frames or data from the reader.
This class uses the FFmpeg libraries, to open video files and audio files, and return openshot::Frame...
Exception for files that can not be found or opened.
int audio_stream_index
The index of the audio stream.
openshot::Fraction audio_timebase
The audio timebase determines how long each audio packet should be played.
int64_t number
The chunk number.
int pixel_format
The pixel format (i.e. YUV420P, RGB24, etc...)
std::string vcodec
The name of the video codec used to encode / decode the video stream.
std::string Json() const override
Get and Set JSON methods.
void Close()
Close the reader.
openshot::Fraction fps
Frames per second, as a fraction (i.e. 24/1 = 24 fps)
int video_bit_rate
The bit rate of the video stream (in bytes)
virtual void Close()=0
Close the reader (and any resources it was consuming)
openshot::Fraction pixel_ratio
The pixel ratio of the video stream as a fraction (i.e. some pixels are not square)
int64_t frame
The frame number.
int video_stream_index
The index of the video stream.
std::string acodec
The name of the audio codec used to encode / decode the video stream.
openshot::Fraction display_ratio
The ratio of width to height of the video stream (i.e. 640x480 has a ratio of 4/3)
ChunkVersion
This enumeration allows the user to choose which version of the chunk they would like (low,...
int channels
The number of audio channels used in the audio stream.
@ THUMBNAIL
The lowest quality stream contained in this chunk file.
ChunkReader(std::string path, ChunkVersion chunk_version)
Constructor for ChunkReader. This automatically opens the chunk file or folder and loads frame 1,...
Json::Value JsonValue() const override
Generate Json::Value for this object.
@ FINAL
The highest quality stream contained in this chunk file.
@ PREVIEW
The medium quality stream contained in this chunk file.