Skip to content

Commit 54d7562

Browse files
committed
Skip scaling of QtImageReader and FFmpegReader only
1 parent c6f1794 commit 54d7562

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/Clip.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ Clip::Clip(ReaderBase* new_reader) : resampler(NULL), reader(new_reader), alloca
149149
if (reader) {
150150
End(reader->info.duration);
151151
reader->ParentClip(this);
152+
reader_type = reader->Name();
152153
// Init reader info struct
153154
init_reader_settings();
154155
}
@@ -208,6 +209,7 @@ Clip::Clip(std::string path) : resampler(NULL), reader(NULL), allocated_reader(N
208209
if (reader) {
209210
End(reader->info.duration);
210211
reader->ParentClip(this);
212+
reader_type = reader->Name();
211213
allocated_reader = reader;
212214
// Init reader info struct
213215
init_reader_settings();
@@ -482,6 +484,15 @@ void Clip::reverse_buffer(juce::AudioBuffer<float>* buffer)
482484
reversed = nullptr;
483485
}
484486

487+
bool Clip::shouldScale() const
488+
{
489+
if (scale == SCALE_NONE && (reader_type == "QtImageReader" || reader_type == "FFmpegReader")) {
490+
return false;
491+
}
492+
493+
return true;
494+
}
495+
485496
// Adjust the audio and image of a time mapped frame
486497
void Clip::get_time_mapped_frame(std::shared_ptr<Frame> frame, int64_t frame_number)
487498
{
@@ -1461,7 +1472,7 @@ QTransform Clip::get_transform(std::shared_ptr<Frame> frame, int width, int heig
14611472

14621473
float scaled_source_width = source_size.width();
14631474
float scaled_source_height = source_size.height();
1464-
if (scale != SCALE_NONE) {
1475+
if (shouldScale()) {
14651476
scaled_source_width *= sx;
14661477
scaled_source_height *= sy;
14671478
}
@@ -1532,7 +1543,7 @@ QTransform Clip::get_transform(std::shared_ptr<Frame> frame, int width, int heig
15321543
transform.translate(-origin_x_offset,-origin_y_offset);
15331544
}
15341545
// SCALE CLIP (if needed)
1535-
if (scale != SCALE_NONE) {
1546+
if (shouldScale()) {
15361547
float source_width_scale = (float(source_size.width()) / float(source_image->width())) * sx;
15371548
float source_height_scale = (float(source_size.height()) / float(source_image->height())) * sy;
15381549
if (!isEqual(source_width_scale, 1.0) || !isEqual(source_height_scale, 1.0)) {

src/Clip.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ namespace openshot {
120120
/// (reader member variable itself may have been replaced)
121121
openshot::ReaderBase* allocated_reader;
122122

123+
/// The type of reader passed to the clip
124+
std::string reader_type;
125+
123126
/// Adjust frame number minimum value
124127
int64_t adjust_frame_number_minimum(int64_t frame_number);
125128

@@ -150,6 +153,10 @@ namespace openshot {
150153
/// Reverse an audio buffer
151154
void reverse_buffer(juce::AudioBuffer<float>* buffer);
152155

156+
/// When scale mode is SCALE_NONE, we don't need to scale QtImageReader/FFmpegReader again
157+
/// because those readers already scaled before.
158+
bool shouldScale() const;
159+
153160

154161
public:
155162
openshot::GravityType gravity; ///< The gravity of a clip determines where it snaps to its parent

0 commit comments

Comments
 (0)