1 /** 2 * @file 3 * @brief Header file for QtImageReader class 4 * @author Jonathan Thomas <jonathan@openshot.org> 5 * 6 * @ref License 7 */ 8 9 /* LICENSE 10 * 11 * Copyright (c) 2008-2019 OpenShot Studios, LLC 12 * <http://www.openshotstudios.com/>. This file is part of 13 * OpenShot Library (libopenshot), an open-source project dedicated to 14 * delivering high quality video editing and animation solutions to the 15 * world. For more information visit <http://www.openshot.org/>. 16 * 17 * OpenShot Library (libopenshot) is free software: you can redistribute it 18 * and/or modify it under the terms of the GNU Lesser General Public License 19 * as published by the Free Software Foundation, either version 3 of the 20 * License, or (at your option) any later version. 21 * 22 * OpenShot Library (libopenshot) is distributed in the hope that it will be 23 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 * GNU Lesser General Public License for more details. 26 * 27 * You should have received a copy of the GNU Lesser General Public License 28 * along with OpenShot Library. If not, see <http://www.gnu.org/licenses/>. 29 */ 30 31 #ifndef OPENSHOT_QIMAGE_READER_H 32 #define OPENSHOT_QIMAGE_READER_H 33 34 #include <cmath> 35 #include <ctime> 36 #include <iostream> 37 #include <omp.h> 38 #include <stdio.h> 39 #include <memory> 40 41 #include "ReaderBase.h" 42 43 namespace openshot 44 { 45 // Forward decl 46 class CacheBase; 47 48 /** 49 * @brief This class uses the Qt library, to open image files, and return 50 * openshot::Frame objects containing the image. 51 * 52 * @code 53 * // Create a reader for a video 54 * QtImageReader r("MyAwesomeImage.jpeg"); 55 * r.Open(); // Open the reader 56 * 57 * // Get frame number 1 from the video 58 * std::shared_ptr<Frame> f = r.GetFrame(1); 59 * 60 * // Now that we have an openshot::Frame object, lets have some fun! 61 * f->Display(); // Display the frame on the screen 62 * 63 * // Close the reader 64 * r.Close(); 65 * @endcode 66 */ 67 class QtImageReader : public ReaderBase 68 { 69 private: 70 QString path; 71 std::shared_ptr<QImage> image; ///> Original image (full quality) 72 std::shared_ptr<QImage> cached_image; ///> Scaled for performance 73 bool is_open; ///> Is Reader opened 74 QSize max_size; ///> Current max_size as calculated with Clip properties 75 76 /// Load an SVG file with Resvg or fallback with Qt 77 /// 78 /// @returns Success as a boolean 79 /// @param path The file path of the SVG file 80 QSize load_svg_path(QString path); 81 82 /// Calculate the max_size QSize, based on parent timeline and parent clip settings 83 QSize calculate_max_size(); 84 85 public: 86 /// @brief Constructor for QtImageReader. 87 /// 88 /// Opens the media file to inspect its properties and loads frame 1, 89 /// iff inspect_reader == true (the default). Pass a false value in 90 /// the optional parameter to defer this initial Open()/Close() cycle. 91 /// 92 /// When not inspecting the media file, it's much faster, and useful 93 /// when you are inflating the object using JSON after instantiation. 94 QtImageReader(std::string path, bool inspect_reader=true); 95 96 virtual ~QtImageReader(); 97 98 /// Close File 99 void Close() override; 100 101 /// Get the cache object used by this reader (always returns NULL for this object) GetCache()102 CacheBase* GetCache() override { return NULL; }; 103 104 /// Get an openshot::Frame object for a specific frame number of this reader. All numbers 105 /// return the same Frame, since they all share the same image data. 106 /// 107 /// @returns The requested frame (containing the image) 108 /// @param requested_frame The frame number that is requested. 109 std::shared_ptr<Frame> GetFrame(int64_t requested_frame) override; 110 111 /// Determine if reader is open or closed IsOpen()112 bool IsOpen() override { return is_open; }; 113 114 /// Return the type name of the class Name()115 std::string Name() override { return "QtImageReader"; }; 116 117 // Get and Set JSON methods 118 std::string Json() const override; ///< Generate JSON string of this object 119 void SetJson(const std::string value) override; ///< Load JSON string into this object 120 Json::Value JsonValue() const override; ///< Generate Json::Value for this object 121 void SetJsonValue(const Json::Value root) override; ///< Load Json::Value into this object 122 123 /// Open File - which is called by the constructor automatically 124 void Open() override; 125 }; 126 127 } 128 129 #endif 130