OpenShot Library | libopenshot
0.2.2
|
Go to the documentation of this file.
28 #include "../include/ChunkReader.h"
33 : path(path), chunk_size(24 * 3), is_open(false), version(chunk_version), local_reader(NULL)
36 if (!does_folder_exist(path))
38 throw InvalidFile(
"Chunk folder could not be opened.", path);
41 previous_location.
number = 0;
42 previous_location.
frame = 0;
50 bool ChunkReader::does_folder_exist(
string path)
52 QDir dir(path.c_str());
57 void ChunkReader::load_json()
60 string json_path = QDir::cleanPath(QString(path.c_str()) + QDir::separator() +
"info.json").toStdString();
61 stringstream json_string;
64 ifstream myfile (json_path.c_str());
70 getline (myfile, line);
79 bool success = reader.parse( json_string.str(), root );
82 throw InvalidJSON(
"Chunk folder could not be opened.", path);
121 throw InvalidJSON(
"JSON could not be parsed (or is invalid).", path);
126 ChunkLocation ChunkReader::find_chunk_frame(int64_t requested_frame)
129 int64_t chunk_number = (requested_frame / chunk_size) + 1;
132 int64_t start_frame_of_chunk = (chunk_number - 1) * chunk_size;
133 int64_t chunk_frame_number = (requested_frame - start_frame_of_chunk) + 1;
167 string ChunkReader::get_chunk_path(int64_t chunk_number,
string folder,
string extension)
170 stringstream chunk_count_string;
171 chunk_count_string << chunk_number;
172 QString padded_count =
"%1";
173 padded_count = padded_count.arg(chunk_count_string.str().c_str(), 6,
'0');
174 if (folder.length() != 0 && extension.length() != 0)
176 return QDir::cleanPath(QString(path.c_str()) + QDir::separator() + folder.c_str() + QDir::separator() + padded_count + extension.c_str()).toStdString();
178 else if (folder.length() == 0 && extension.length() != 0)
180 return QDir::cleanPath(QString(path.c_str()) + QDir::separator() + padded_count + extension.c_str()).toStdString();
182 else if (folder.length() != 0 && extension.length() == 0)
184 return QDir::cleanPath(QString(path.c_str()) + QDir::separator() + folder.c_str()).toStdString();
199 string folder_name =
"";
203 folder_name =
"thumb";
206 folder_name =
"preview";
209 folder_name =
"final";
214 string chunk_video_path = get_chunk_path(location.
number, folder_name,
".webm");
219 cout <<
"Close READER" << endl;
221 local_reader->
Close();
227 cout <<
"Load READER: " << chunk_video_path << endl;
231 local_reader->
Open();
240 previous_location = location;
247 last_frame->number = requested_frame;
265 root[
"type"] =
"ChunkReader";
267 stringstream chunk_size_stream;
268 chunk_size_stream << chunk_size;
269 root[
"chunk_size"] = chunk_size_stream.str();
270 root[
"chunk_version"] = version;
282 bool success = reader.parse( value, root );
285 throw InvalidJSON(
"JSON could not be parsed (or is invalid)",
"");
295 throw InvalidJSON(
"JSON is invalid (missing keys or invalid data types)",
"");
306 if (!root[
"path"].isNull())
307 path = root[
"path"].asString();
308 if (!root[
"chunk_size"].isNull())
309 chunk_size = atoll(root[
"chunk_size"].asString().c_str());
310 if (!root[
"chunk_version"].isNull())
int sample_rate
The number of audio samples per second (44100 is a common sample rate)
virtual void SetJsonValue(Json::Value root)=0
Load Json::JsonValue into this object.
string Json()
Get and Set JSON methods.
This namespace is the default namespace for all code in the openshot library.
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.
bool has_video
Determines if this file has a video stream.
Fraction display_ratio
The ratio of width to height of the video stream (i.e. 640x480 has a ratio of 4/3)
virtual Json::Value JsonValue()=0
Generate Json::JsonValue for this object.
int width
The width of the video (in pixesl)
ReaderInfo info
Information about the current media file.
string acodec
The name of the audio codec used to encode / decode the video stream.
std::shared_ptr< 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.
void SetJson(string value)
Load JSON string into this object.
int den
Denominator for the fraction.
bool has_audio
Determines if this file has an audio stream.
Exception for invalid JSON.
int64_t file_size
Size of file (in bytes)
Fraction pixel_ratio
The pixel ratio of the video stream as a fraction (i.e. some pixels are not square)
void SetJsonValue(Json::Value root)
Load Json::JsonValue into this object.
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.
std::shared_ptr< Frame > GetFrame(int64_t requested_frame)
int64_t number
The chunk number.
int pixel_format
The pixel format (i.e. YUV420P, RGB24, etc...)
string vcodec
The name of the video codec used to encode / decode the video stream.
Fraction fps
Frames per second, as a fraction (i.e. 24/1 = 24 fps)
Fraction video_timebase
The video timebase determines how long each frame stays on the screen.
Json::Value JsonValue()
Generate Json::JsonValue for this object.
void Close()
Close the reader.
int video_bit_rate
The bit rate of the video stream (in bytes)
void Open()
Open File - which is called by the constructor automatically.
int64_t frame
The frame number.
int video_stream_index
The index of the video stream.
ChunkReader(string path, ChunkVersion chunk_version)
Constructor for ChunkReader. This automatically opens the chunk file or folder and loads frame 1,...
Fraction audio_timebase
The audio timebase determines how long each audio packet should be played.
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.
The lowest quality stream contained in this chunk file.
The highest quality stream contained in this chunk file.
The medium quality stream contained in this chunk file.