xbmc
DVDOverlayImage.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 "DVDOverlay.h"
12 
13 #include <stdlib.h>
14 #include <string.h>
15 
16 #include "PlatformDefs.h"
17 
19 {
20 public:
21  CDVDOverlayImage() : CDVDOverlay(DVDOVERLAY_TYPE_IMAGE)
22  {
23  }
24 
25  CDVDOverlayImage(const CDVDOverlayImage& src, int sub_x, int sub_y, int sub_w, int sub_h)
26  : CDVDOverlay(src)
27  {
28  int bpp;
29  if (!src.palette.empty())
30  {
31  bpp = 1;
32  palette = src.palette;
33  }
34  else
35  {
36  bpp = 4;
37  palette.clear();
38  }
39 
40  linesize = sub_w * bpp;
41  x = sub_x;
42  y = sub_y;
43  width = sub_w;
44  height = sub_h;
45  source_width = src.source_width;
46  source_height = src.source_height;
47 
48  pixels.resize(sub_h * linesize);
49 
50  uint8_t* s = src.data_at(sub_x, sub_y);
51  uint8_t* t = pixels.data();
52 
53  for (int row = 0; row < sub_h; ++row)
54  {
55  memcpy(t, s, linesize);
56  s += src.linesize;
57  t += linesize;
58  }
59 
60  m_textureid = 0;
61  }
62 
63  ~CDVDOverlayImage() override = default;
64 
65  std::shared_ptr<CDVDOverlay> Clone() override
66  {
67  return std::make_shared<CDVDOverlayImage>(*this);
68  }
69 
70  uint8_t* data_at(int sub_x, int sub_y) const
71  {
72  const int bpp = palette.empty() ? 4 : 1;
73  return const_cast<uint8_t*>(pixels.data() + ((sub_y - y) * linesize + (sub_x - x) * bpp));
74  }
75 
76  std::vector<uint8_t> pixels;
77  std::vector<uint32_t> palette;
78 
79  int linesize{0};
80  int x{0};
81  int y{0};
82  int width{0};
83  int height{0};
84  int source_width{0};
85  int source_height{0};
86 };
Definition: DVDOverlayImage.h:18
std::shared_ptr< CDVDOverlay > Clone() override
return a copy to VideoPlayerSubtitle in order to have hw resources cleared after rendering ...
Definition: DVDOverlayImage.h:65
Definition: DVDOverlay.h:27