xbmc
Picture.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "pictures/PictureScalingAlgorithm.h"
12 #include "utils/Job.h"
13 
14 #include <cstddef>
15 #include <cstdint>
16 #include <memory>
17 #include <string>
18 #include <vector>
19 
20 extern "C"
21 {
22 #include <libavutil/pixfmt.h>
23 }
24 
25 class CTexture;
26 
27 class CPicture
28 {
29 public:
30  static bool GetThumbnailFromSurface(const unsigned char* buffer, int width, int height, int stride, const std::string &thumbFile, uint8_t* &result, size_t& result_size);
31  static bool CreateThumbnailFromSurface(const unsigned char* buffer, int width, int height, int stride, const std::string &thumbFile);
32 
37  static bool CreateTiledThumb(const std::vector<std::string> &files, const std::string &thumb);
38 
39  static std::unique_ptr<CTexture> CreateTiledThumb(const std::vector<std::string>& files);
40 
41  static bool ResizeTexture(
42  const std::string& image,
43  CTexture* texture,
44  uint32_t& dest_width,
45  uint32_t& dest_height,
46  uint8_t*& result,
47  size_t& result_size,
48  CPictureScalingAlgorithm::Algorithm scalingAlgorithm = CPictureScalingAlgorithm::NoAlgorithm);
49  static bool ResizeTexture(const std::string &image, uint8_t *pixels, uint32_t width, uint32_t height, uint32_t pitch,
50  uint32_t &dest_width, uint32_t &dest_height, uint8_t* &result, size_t& result_size,
51  CPictureScalingAlgorithm::Algorithm scalingAlgorithm = CPictureScalingAlgorithm::NoAlgorithm);
52 
60  static bool CacheTexture(
61  CTexture* texture,
62  uint32_t& dest_width,
63  uint32_t& dest_height,
64  const std::string& dest,
65  CPictureScalingAlgorithm::Algorithm scalingAlgorithm = CPictureScalingAlgorithm::NoAlgorithm);
66  static bool CacheTexture(uint8_t *pixels, uint32_t width, uint32_t height, uint32_t pitch, int orientation,
67  uint32_t &dest_width, uint32_t &dest_height, const std::string &dest,
68  CPictureScalingAlgorithm::Algorithm scalingAlgorithm = CPictureScalingAlgorithm::NoAlgorithm);
69 
70  static void GetScale(unsigned int width, unsigned int height, unsigned int &out_width, unsigned int &out_height);
71  static bool ScaleImage(
72  uint8_t* in_pixels,
73  unsigned int in_width,
74  unsigned int in_height,
75  unsigned int in_pitch,
76  AVPixelFormat in_format,
77  uint8_t* out_pixels,
78  unsigned int out_width,
79  unsigned int out_height,
80  unsigned int out_pitch,
81  AVPixelFormat out_format,
82  CPictureScalingAlgorithm::Algorithm scalingAlgorithm = CPictureScalingAlgorithm::NoAlgorithm);
83 
84 private:
85  static bool OrientateImage(uint32_t*& pixels,
86  unsigned int& width,
87  unsigned int& height,
88  int orientation,
89  unsigned int& stridePixels);
90 
91  static bool FlipHorizontal(uint32_t*& pixels,
92  const unsigned int& width,
93  const unsigned int& height,
94  const unsigned int& stridePixels);
95  static bool FlipVertical(uint32_t*& pixels,
96  const unsigned int& width,
97  const unsigned int& height,
98  const unsigned int& stridePixels);
99  static bool Rotate90CCW(uint32_t*& pixels,
100  unsigned int& width,
101  unsigned int& height,
102  unsigned int& stridePixels);
103  static bool Rotate270CCW(uint32_t*& pixels,
104  unsigned int& width,
105  unsigned int& height,
106  unsigned int& stridePixels);
107  static bool Rotate180CCW(uint32_t*& pixels,
108  const unsigned int& width,
109  const unsigned int& height,
110  const unsigned int& stridePixels);
111  static bool Transpose(uint32_t*& pixels,
112  unsigned int& width,
113  unsigned int& height,
114  unsigned int& width_aligned);
115  static bool TransposeOffAxis(uint32_t*& pixels,
116  unsigned int& width,
117  unsigned int& height,
118  unsigned int& stridePixels);
119 };
120 
121 //this class calls CreateThumbnailFromSurface in a CJob, so a png file can be written without halting the render thread
122 class CThumbnailWriter : public CJob
123 {
124  public:
125  //WARNING: buffer is deleted from DoWork()
126  CThumbnailWriter(unsigned char* buffer, int width, int height, int stride, const std::string& thumbFile);
127  ~CThumbnailWriter() override;
128  bool DoWork() override;
129 
130  private:
131  unsigned char* m_buffer;
132  int m_width;
133  int m_height;
134  int m_stride;
135  std::string m_thumbFile;
136 };
137 
static bool CacheTexture(CTexture *texture, uint32_t &dest_width, uint32_t &dest_height, const std::string &dest, CPictureScalingAlgorithm::Algorithm scalingAlgorithm=CPictureScalingAlgorithm::NoAlgorithm)
Cache a texture, resizing, rotating and flipping as needed, and saving as a JPG or PNG...
Definition: Picture.cpp:201
Base class for jobs that are executed asynchronously.
Definition: Job.h:109
Base texture class, subclasses of which depend on the render spec (DX, GL etc.)
Definition: Texture.h:34
Definition: Picture.h:122
static bool CreateTiledThumb(const std::vector< std::string > &files, const std::string &thumb)
Create a tiled thumb of the given files.
Definition: Picture.cpp:349
Definition: Picture.h:27