forked from xbmc/xbmc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TextureCacheJob.h
152 lines (130 loc) · 4.64 KB
/
TextureCacheJob.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*
* Copyright (C) 2012 Team XBMC
* http://www.xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "utils/StdString.h"
#include "utils/Job.h"
class CBaseTexture;
/*!
\ingroup textures
\brief Simple class for passing texture detail around
*/
class CTextureDetails
{
public:
CTextureDetails()
{
id = -1;
width = height = 0;
updateable = false;
};
bool operator==(const CTextureDetails &right) const
{
return (id == right.id &&
file == right.file &&
width == right.width );
};
int id;
std::string file;
std::string hash;
unsigned int width;
unsigned int height;
bool updateable;
};
/*!
\ingroup textures
\brief Job class for caching textures
Handles loading and caching of textures.
*/
class CTextureCacheJob : public CJob
{
public:
CTextureCacheJob(const CStdString &url, const CStdString &oldHash = "");
virtual ~CTextureCacheJob();
virtual const char* GetType() const { return "cacheimage"; };
virtual bool operator==(const CJob *job) const;
virtual bool DoWork();
/*! \brief retrieve a hash for the given image
Combines the size, ctime and mtime of the image file into a "unique" hash
\param url location of the image
\return a hash string for this image
*/
bool CacheTexture(CBaseTexture **texture = NULL);
CStdString m_url;
CStdString m_oldHash;
CTextureDetails m_details;
private:
friend class CEdenVideoArtUpdater;
/*! \brief retrieve a hash for the given image
Combines the size, ctime and mtime of the image file into a "unique" hash
\param url location of the image
\return a hash string for this image
*/
static CStdString GetImageHash(const CStdString &url);
/*! \brief Check whether a given URL represents an image that can be updated
We currently don't check http:// and https:// URLs for updates, under the assumption that
a image URL is much more likely to be static and the actual image at the URL is unlikely
to change, so no point checking all the time.
\param url the url to check
\return true if the image given by the URL should be checked for updates, false otehrwise
*/
bool UpdateableURL(const CStdString &url) const;
/*! \brief Decode an image URL to the underlying image, width, height and orientation
\param url wrapped URL of the image
\param width width derived from URL
\param height height derived from URL
\param additional_info additional information, such as "flipped" to flip horizontally
\return URL of the underlying image file.
*/
static CStdString DecodeImageURL(const CStdString &url, unsigned int &width, unsigned int &height, std::string &additional_info);
/*! \brief Load an image at a given target size and orientation.
Doesn't necessarily load the image at the desired size - the loader *may* decide to load it slightly larger
or smaller than the desired size for speed reasons.
\param image the URL of the image file.
\param width the desired maximum width.
\param height the desired maximum height.
\param additional_info extra info for loading, such as whether to flip horizontally.
\return a pointer to a CBaseTexture object, NULL if failed.
*/
static CBaseTexture *LoadImage(const CStdString &image, unsigned int width, unsigned int height, const std::string &additional_info);
CStdString m_cachePath;
};
/* \brief Job class for creating .dds versions of textures
*/
class CTextureDDSJob : public CJob
{
public:
CTextureDDSJob(const CStdString &original);
virtual const char* GetType() const { return "ddscompress"; };
virtual bool operator==(const CJob *job) const;
virtual bool DoWork();
CStdString m_original;
};
/* \brief Job class for storing the use count of textures
*/
class CTextureUseCountJob : public CJob
{
public:
CTextureUseCountJob(const std::vector<CTextureDetails> &textures);
virtual const char* GetType() const { return "usecount"; };
virtual bool operator==(const CJob *job) const;
virtual bool DoWork();
private:
std::vector<CTextureDetails> m_textures;
};