OpenShot Library | libopenshot
0.4.0
|
Go to the documentation of this file.
23 init_effect_details();
30 init_effect_details();
34 void Deinterlace::init_effect_details()
42 info.
description =
"Remove interlacing from a video (i.e. even or odd horizontal lines)";
49 std::shared_ptr<openshot::Frame>
Deinterlace::GetFrame(std::shared_ptr<openshot::Frame> frame, int64_t frame_number)
52 int original_width = frame->GetImage()->width();
53 int original_height = frame->GetImage()->height();
56 auto image = frame->GetImage();
57 const unsigned char* pixels = image->bits();
58 int line_bytes = image->bytesPerLine();
61 int start = isOdd ? 1 : 0;
66 int rows_to_copy = (original_height -
start + 1) / 2;
69 QImage deinterlaced_image(
72 QImage::Format_RGBA8888_Premultiplied
74 unsigned char* deinterlaced_pixels = deinterlaced_image.bits();
78 #pragma omp parallel for
79 for (
int i = 0; i < rows_to_copy; i++) {
80 int row =
start + 2 * i;
81 const unsigned char* src = pixels + (row * line_bytes);
82 unsigned char* dst = deinterlaced_pixels + (i * line_bytes);
83 memcpy(dst, src, line_bytes);
87 image = std::make_shared<QImage>(deinterlaced_image.scaled(
88 original_width, original_height,
89 Qt::IgnoreAspectRatio, Qt::FastTransformation));
92 frame->AddImage(image);
111 root[
"isOdd"] = isOdd;
127 catch (
const std::exception& e)
130 throw InvalidJSON(
"JSON is invalid (missing keys or invalid data types)");
141 if (!root[
"isOdd"].isNull())
142 isOdd = root[
"isOdd"].asBool();
152 root[
"isOdd"] =
add_property_json(
"Is Odd Frame", isOdd,
"bool",
"", NULL, 0, 1,
false, requested_frame);
157 return root.toStyledString();
Json::Value add_property_json(std::string name, float value, std::string type, std::string memo, const Keyframe *keyframe, float min_value, float max_value, bool readonly, int64_t requested_frame) const
Generate JSON for a property.
const Json::Value stringToJson(const std::string value)
Json::Value JsonValue() const override
Generate Json::Value for this object.
EffectInfoStruct info
Information about the current effect.
This namespace is the default namespace for all code in the openshot library.
std::string Json() const override
Generate JSON string of this object.
Json::Value add_property_choice_json(std::string name, int value, int selected_value) const
Generate JSON choice for a property (dropdown properties)
virtual Json::Value JsonValue() const
Generate Json::Value for this object.
Deinterlace()
Default constructor, useful when using Json to load the effect properties.
std::string PropertiesJSON(int64_t requested_frame) const override
Json::Value BasePropertiesJSON(int64_t requested_frame) const
Generate JSON object of base properties (recommended to be used by all effects)
Exception for invalid JSON.
bool has_audio
Determines if this effect manipulates the audio of a frame.
float start
The position in seconds to start playing (used to trim the beginning of a clip)
std::string class_name
The class name of the effect.
std::string description
The description of this effect and what it does.
bool has_video
Determines if this effect manipulates the image of a frame.
void SetJson(const std::string value) override
Load JSON string into this object.
void SetJsonValue(const Json::Value root) override
Load Json::Value into this object.
std::shared_ptr< openshot::Frame > GetFrame(int64_t frame_number) override
This method is required for all derived classes of ClipBase, and returns a new openshot::Frame object...
std::string name
The name of the effect.
Header file for De-interlace class.
Header file for all Exception classes.
virtual void SetJsonValue(const Json::Value root)
Load Json::Value into this object.