Send PTP_RC_GeneralError when cancelling object transfers.
Moved back uint64 to unsigned long to avoid variable truncation with the vitamtp library. Astyle format dds.cpp.
This commit is contained in:
@@ -61,7 +61,8 @@ void CmaClient::connectUsb()
|
||||
usbwait.lock();
|
||||
|
||||
do {
|
||||
if((vita = VitaMTP_Get_First_USB_Vita()) !=NULL) {
|
||||
if((vita = VitaMTP_Get_First_USB_Vita()) != NULL) {
|
||||
qDebug("Starting new USB connection");
|
||||
processNewConnection(vita);
|
||||
} else {
|
||||
//TODO: replace this with an event-driven setup
|
||||
@@ -93,6 +94,7 @@ void CmaClient::connectWireless()
|
||||
|
||||
do {
|
||||
if((vita = VitaMTP_Get_First_Wireless_Vita(&host, 0, CC::deviceRegistered, CC::generatePin, CC::registrationComplete)) != NULL) {
|
||||
qDebug("Starting new wireless connection");
|
||||
processNewConnection(vita);
|
||||
} else {
|
||||
mutex.lock();
|
||||
|
@@ -446,6 +446,9 @@ void CmaEvent::vitaEventSendObject(vita_event_t *event, int eventId)
|
||||
quint16 ret = VitaMTP_SendObject_Callback(device, &parentHandle, &handle, &object->metadata, &CmaEvent::readCallback);
|
||||
if(ret != PTP_RC_OK) {
|
||||
qWarning("Sending of %s failed. Code: %04X", object->metadata.name, ret);
|
||||
if(ret == PTP_ERROR_CANCEL) {
|
||||
VitaMTP_ReportResult(device, eventId, PTP_RC_GeneralError);
|
||||
}
|
||||
m_file->close();
|
||||
delete m_file;
|
||||
return;
|
||||
@@ -945,23 +948,26 @@ void CmaEvent::vitaEventCheckExistance(vita_event_t *event, int eventId)
|
||||
VitaMTP_ReportResult(device, eventId, PTP_RC_OK);
|
||||
}
|
||||
|
||||
int CmaEvent::readCallback(unsigned char *data, int64_t wantlen, int64_t *gotlen)
|
||||
int CmaEvent::readCallback(unsigned char *data, unsigned long wantlen, unsigned long *gotlen)
|
||||
{
|
||||
*gotlen = m_file->read((char *)data, wantlen);
|
||||
int ret = m_file->read((char *)data, wantlen);
|
||||
|
||||
if(*gotlen == -1) {
|
||||
return -1;
|
||||
if(ret != -1) {
|
||||
*gotlen = ret;
|
||||
ret = PTP_RC_OK;
|
||||
}
|
||||
|
||||
return PTP_RC_OK;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int CmaEvent::writeCallback(const unsigned char *data, int64_t size, int64_t *written)
|
||||
int CmaEvent::writeCallback(const unsigned char *data, unsigned long size, unsigned long *written)
|
||||
{
|
||||
int ret = m_file->write((const char *)data, size);
|
||||
|
||||
if(ret != -1) {
|
||||
*written = ret;
|
||||
ret = PTP_RC_OK;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@@ -63,9 +63,8 @@ private:
|
||||
void vitaEventSendObjectMetadataItems(vita_event_t *event, int eventId);
|
||||
void vitaEventSendNPAccountInfo(vita_event_t *event, int eventId);
|
||||
|
||||
static int readCallback(unsigned char *data, int64_t wantlen, int64_t *gotlen);
|
||||
static int writeCallback(const unsigned char *data, int64_t size, int64_t *written);
|
||||
static int readHTTPCallback(unsigned char *data, int64_t wantlen, int64_t *gotlen);
|
||||
static int readCallback(unsigned char *data, unsigned long wantlen, unsigned long *gotlen);
|
||||
static int writeCallback(const unsigned char *data, unsigned long size, unsigned long *written);
|
||||
|
||||
void processEvent();
|
||||
bool isActive();
|
||||
|
112
src/dds.cpp
112
src/dds.cpp
@@ -49,13 +49,11 @@ typedef quint8 uchar;
|
||||
#define VERTICAL 2
|
||||
#define CUBE_LAYOUT HORIZONTAL
|
||||
|
||||
struct Color8888
|
||||
{
|
||||
struct Color8888 {
|
||||
uchar r, g, b, a;
|
||||
};
|
||||
|
||||
union Color565
|
||||
{
|
||||
union Color565 {
|
||||
struct {
|
||||
ushort b : 5;
|
||||
ushort g : 6;
|
||||
@@ -223,7 +221,7 @@ static bool IsValid( const DDSHeader & header )
|
||||
}
|
||||
|
||||
|
||||
// Get supported type. We currently support 10 different types.
|
||||
// Get supported type. We currently support 10 different types.
|
||||
static DDSType GetType( const DDSHeader & header )
|
||||
{
|
||||
if( header.pf.flags & DDPF_RGB ) {
|
||||
@@ -234,8 +232,7 @@ static DDSType GetType( const DDSHeader & header )
|
||||
case 32:
|
||||
return DDS_A8R8G8B8;
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
switch( header.pf.bitcount ) {
|
||||
case 16:
|
||||
return DDS_R5G6B5;
|
||||
@@ -243,8 +240,7 @@ static DDSType GetType( const DDSHeader & header )
|
||||
return DDS_R8G8B8;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if( header.pf.flags & DDPF_FOURCC ) {
|
||||
} else if( header.pf.flags & DDPF_FOURCC ) {
|
||||
switch( header.pf.fourcc ) {
|
||||
case FOURCC_DXT1:
|
||||
return DDS_DXT1;
|
||||
@@ -388,14 +384,12 @@ static QDataStream & operator>> ( QDataStream & s, Color565 & c )
|
||||
}
|
||||
|
||||
|
||||
struct BlockDXT
|
||||
{
|
||||
struct BlockDXT {
|
||||
Color565 col0;
|
||||
Color565 col1;
|
||||
uchar row[4];
|
||||
|
||||
void GetColors( Color8888 color_array[4] )
|
||||
{
|
||||
void GetColors( Color8888 color_array[4] ) {
|
||||
color_array[0].r = (col0.c.r << 3) | (col0.c.r >> 2);
|
||||
color_array[0].g = (col0.c.g << 2) | (col0.c.g >> 4);
|
||||
color_array[0].b = (col0.c.b << 3) | (col0.c.b >> 2);
|
||||
@@ -417,8 +411,7 @@ struct BlockDXT
|
||||
color_array[3].g = (2 * color_array[1].g + color_array[0].g) / 3;
|
||||
color_array[3].b = (2 * color_array[1].b + color_array[0].b) / 3;
|
||||
color_array[3].a = 0xFF;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
// Three-color block: derive the other color.
|
||||
color_array[2].r = (color_array[0].r + color_array[1].r) / 2;
|
||||
color_array[2].g = (color_array[0].g + color_array[1].g) / 2;
|
||||
@@ -454,14 +447,12 @@ struct BlockDXTAlphaLinear {
|
||||
uchar alpha1;
|
||||
uchar bits[6];
|
||||
|
||||
void GetAlphas( uchar alpha_array[8] )
|
||||
{
|
||||
void GetAlphas( uchar alpha_array[8] ) {
|
||||
alpha_array[0] = alpha0;
|
||||
alpha_array[1] = alpha1;
|
||||
|
||||
// 8-alpha or 6-alpha block?
|
||||
if( alpha_array[0] > alpha_array[1] )
|
||||
{
|
||||
if( alpha_array[0] > alpha_array[1] ) {
|
||||
// 8-alpha block: derive the other 6 alphas.
|
||||
// 000 = alpha_0, 001 = alpha_1, others are interpolated
|
||||
|
||||
@@ -471,9 +462,7 @@ struct BlockDXTAlphaLinear {
|
||||
alpha_array[5] = ( 3 * alpha0 + 4 * alpha1) / 7; // Bit code 101
|
||||
alpha_array[6] = ( 2 * alpha0 + 5 * alpha1) / 7; // Bit code 110
|
||||
alpha_array[7] = ( alpha0 + 6 * alpha1) / 7; // Bit code 111
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
// 6-alpha block: derive the other alphas.
|
||||
// 000 = alpha_0, 001 = alpha_1, others are interpolated
|
||||
|
||||
@@ -486,27 +475,40 @@ struct BlockDXTAlphaLinear {
|
||||
}
|
||||
}
|
||||
|
||||
void GetBits( uchar bit_array[16] )
|
||||
{
|
||||
void GetBits( uchar bit_array[16] ) {
|
||||
// Split 24 packed bits into 8 bytes, 3 bits at a time.
|
||||
uint b = bits[0] | bits[1] << 8 | bits[2] << 16;
|
||||
bit_array[0] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[1] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[2] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[3] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[4] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[5] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[6] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[0] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[1] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[2] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[3] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[4] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[5] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[6] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[7] = uchar(b & 0x07);
|
||||
|
||||
b = bits[3] | bits[4] << 8 | bits[5] << 16;
|
||||
bit_array[8] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[9] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[10] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[11] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[12] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[13] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[14] = uchar(b & 0x07); b >>= 3;
|
||||
bit_array[8] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[9] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[10] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[11] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[12] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[13] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[14] = uchar(b & 0x07);
|
||||
b >>= 3;
|
||||
bit_array[15] = uchar(b & 0x07);
|
||||
}
|
||||
};
|
||||
@@ -603,7 +605,9 @@ static bool LoadDXT3( QDataStream & s, const DDSHeader & header, QImage & img )
|
||||
|
||||
static bool LoadDXT2( QDataStream & s, const DDSHeader & header, QImage & img )
|
||||
{
|
||||
if( !LoadDXT3(s, header, img) ) return false;
|
||||
if( !LoadDXT3(s, header, img) ) {
|
||||
return false;
|
||||
}
|
||||
//UndoPremultiplyAlpha(img);
|
||||
return true;
|
||||
}
|
||||
@@ -658,7 +662,9 @@ static bool LoadDXT5( QDataStream & s, const DDSHeader & header, QImage & img )
|
||||
}
|
||||
static bool LoadDXT4( QDataStream & s, const DDSHeader & header, QImage & img )
|
||||
{
|
||||
if( !LoadDXT5(s, header, img) ) return false;
|
||||
if( !LoadDXT5(s, header, img) ) {
|
||||
return false;
|
||||
}
|
||||
//UndoPremultiplyAlpha(img);
|
||||
return true;
|
||||
}
|
||||
@@ -771,7 +777,8 @@ static bool LoadATI2( QDataStream & s, const DDSHeader & header, QImage & img )
|
||||
typedef bool (* TextureLoader)( QDataStream & s, const DDSHeader & header, QImage & img );
|
||||
|
||||
// Get an appropriate texture loader for the given type.
|
||||
static TextureLoader GetTextureLoader( DDSType type ) {
|
||||
static TextureLoader GetTextureLoader( DDSType type )
|
||||
{
|
||||
switch( type ) {
|
||||
case DDS_A8R8G8B8:
|
||||
return LoadA8R8G8B8;
|
||||
@@ -826,7 +833,8 @@ static bool LoadTexture( QDataStream & s, const DDSHeader & header, QImage & img
|
||||
}
|
||||
|
||||
|
||||
static int FaceOffset( const DDSHeader & header ) {
|
||||
static int FaceOffset( const DDSHeader & header )
|
||||
{
|
||||
|
||||
DDSType type = GetType( header );
|
||||
|
||||
@@ -843,8 +851,7 @@ static int FaceOffset( const DDSHeader & header ) {
|
||||
w >>= 1;
|
||||
h >>= 1;
|
||||
} while( --mipmap );
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
int multiplier = header.pf.bitcount / 8;
|
||||
do {
|
||||
int face_size = w * h * multiplier;
|
||||
@@ -858,18 +865,18 @@ static int FaceOffset( const DDSHeader & header ) {
|
||||
}
|
||||
|
||||
#if CUBE_LAYOUT == HORIZONTAL
|
||||
static int face_offset[6][2] = { {2, 1}, {0, 1}, {1, 0}, {1, 2}, {1, 1}, {3, 1} };
|
||||
static int face_offset[6][2] = { {2, 1}, {0, 1}, {1, 0}, {1, 2}, {1, 1}, {3, 1} };
|
||||
#elif CUBE_LAYOUT == VERTICAL
|
||||
static int face_offset[6][2] = { {2, 1}, {0, 1}, {1, 0}, {1, 2}, {1, 1}, {1, 3} };
|
||||
static int face_offset[6][2] = { {2, 1}, {0, 1}, {1, 0}, {1, 2}, {1, 1}, {1, 3} };
|
||||
#endif
|
||||
static int face_flags[6] = {
|
||||
static int face_flags[6] = {
|
||||
DDSCAPS2_CUBEMAP_POSITIVEX,
|
||||
DDSCAPS2_CUBEMAP_NEGATIVEX,
|
||||
DDSCAPS2_CUBEMAP_POSITIVEY,
|
||||
DDSCAPS2_CUBEMAP_NEGATIVEY,
|
||||
DDSCAPS2_CUBEMAP_POSITIVEZ,
|
||||
DDSCAPS2_CUBEMAP_NEGATIVEZ
|
||||
};
|
||||
};
|
||||
|
||||
// Load unwrapped cube map.
|
||||
static bool LoadCubeMap( QDataStream & s, const DDSHeader & header, QImage & img )
|
||||
@@ -956,8 +963,9 @@ bool canReadDDS(QIODevice *device)
|
||||
qint64 readBytes = device->read(head, sizeof(head));
|
||||
if (readBytes != sizeof(head)) {
|
||||
if (device->isSequential()) {
|
||||
while (readBytes > 0)
|
||||
while (readBytes > 0) {
|
||||
device->ungetChar(head[readBytes-- - 1]);
|
||||
}
|
||||
} else {
|
||||
device->seek(oldPos);
|
||||
}
|
||||
@@ -965,8 +973,9 @@ bool canReadDDS(QIODevice *device)
|
||||
}
|
||||
|
||||
if (device->isSequential()) {
|
||||
while (readBytes > 0)
|
||||
while (readBytes > 0) {
|
||||
device->ungetChar(head[readBytes-- - 1]);
|
||||
}
|
||||
} else {
|
||||
device->seek(oldPos);
|
||||
}
|
||||
@@ -1018,8 +1027,7 @@ bool loadDDS(const QString &filename, QImage *image)
|
||||
|
||||
if( IsCubeMap( header ) ) {
|
||||
result = LoadCubeMap( s, header, *image );
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
result = LoadTexture( s, header, *image );
|
||||
}
|
||||
|
||||
|
@@ -30,8 +30,8 @@ QMutex HTTPDownloader::dataAvailable;
|
||||
QMutex HTTPDownloader::dataRead;
|
||||
|
||||
char *HTTPDownloader::buffer = NULL;
|
||||
qint64 HTTPDownloader::bufferSize = 0;
|
||||
qint64 HTTPDownloader::downloadLeft = 0;
|
||||
unsigned long HTTPDownloader::bufferSize = 0;
|
||||
unsigned long HTTPDownloader::downloadLeft = 0;
|
||||
|
||||
HTTPDownloader::HTTPDownloader(const QString &url, QObject *parent) :
|
||||
QObject(parent), remote_url(url), firstRead(true)
|
||||
@@ -111,7 +111,7 @@ void HTTPDownloader::readyRead()
|
||||
dataRead.unlock();
|
||||
}
|
||||
|
||||
int HTTPDownloader::readCallback(unsigned char *data, int64_t wantlen, int64_t *gotlen)
|
||||
int HTTPDownloader::readCallback(unsigned char *data, unsigned long wantlen, unsigned long *gotlen)
|
||||
{
|
||||
if(!dataAvailable.tryLock(30000)) {
|
||||
qWarning("Connection timeout while receiving data from network, aborting");
|
||||
|
@@ -40,7 +40,7 @@ signals:
|
||||
|
||||
public slots:
|
||||
void downloadFile();
|
||||
static int readCallback(unsigned char *data, int64_t wantlen, int64_t *gotlen);
|
||||
static int readCallback(unsigned char *data, unsigned long wantlen, unsigned long *gotlen);
|
||||
void metadataChanged();
|
||||
void readyRead();
|
||||
void error(QNetworkReply::NetworkError);
|
||||
@@ -58,8 +58,8 @@ private:
|
||||
volatile static qint64 m_contentLength;
|
||||
|
||||
static char *buffer;
|
||||
static qint64 bufferSize;
|
||||
static qint64 downloadLeft;
|
||||
static unsigned long bufferSize;
|
||||
static unsigned long downloadLeft;
|
||||
};
|
||||
|
||||
#endif // HTTPDOWNLOADER_H
|
||||
|
Reference in New Issue
Block a user