179 lines
4.5 KiB
C++
179 lines
4.5 KiB
C++
// <edit>
|
|
#include "llviewerprecompiledheaders.h"
|
|
#include "llvfs.h"
|
|
#include "llapr.h"
|
|
#include "llvfile.h"
|
|
#include "llassetconverter.h"
|
|
#include "llviewerimagelist.h"
|
|
#include "llvorbisencode.h"
|
|
#include "llbvhloader.h"
|
|
// static
|
|
LLAssetType::EType LLAssetConverter::convert(std::string src_filename, std::string filename)
|
|
{
|
|
std::string exten = gDirUtilp->getExtension(src_filename);
|
|
LLAssetType::EType asset_type = LLAssetType::AT_NONE;
|
|
if (exten.empty())
|
|
return LLAssetType::AT_NONE;
|
|
else if(exten == "bmp")
|
|
{
|
|
asset_type = LLAssetType::AT_TEXTURE;
|
|
if (!LLViewerImageList::createUploadFile(src_filename,
|
|
filename,
|
|
IMG_CODEC_BMP ))
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
else if( exten == "tga")
|
|
{
|
|
asset_type = LLAssetType::AT_TEXTURE;
|
|
if (!LLViewerImageList::createUploadFile(src_filename,
|
|
filename,
|
|
IMG_CODEC_TGA ))
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
else if( exten == "jpg" || exten == "jpeg")
|
|
{
|
|
asset_type = LLAssetType::AT_TEXTURE;
|
|
if (!LLViewerImageList::createUploadFile(src_filename,
|
|
filename,
|
|
IMG_CODEC_JPEG ))
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
else if( exten == "png")
|
|
{
|
|
asset_type = LLAssetType::AT_TEXTURE;
|
|
if (!LLViewerImageList::createUploadFile(src_filename,
|
|
filename,
|
|
IMG_CODEC_PNG ))
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
else if(exten == "wav")
|
|
{
|
|
asset_type = LLAssetType::AT_SOUND;
|
|
if(encode_vorbis_file(src_filename, filename) != LLVORBISENC_NOERR)
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
else if(exten == "ogg")
|
|
{
|
|
asset_type = LLAssetType::AT_SOUND;
|
|
if(!copyFile(src_filename, filename))
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
//else if(exten == "tmp") FIXME
|
|
else if (exten == "bvh")
|
|
{
|
|
asset_type = LLAssetType::AT_ANIMATION;
|
|
S32 file_size;
|
|
LLAPRFile fp;
|
|
fp.open(src_filename, LL_APR_RB, LLAPRFile::global, &file_size);
|
|
if(!fp.getFileHandle()) return LLAssetType::AT_NONE;
|
|
char* file_buffer = new char[file_size + 1];
|
|
if(fp.read(file_buffer, file_size) == 0) //not sure if this is right, gotta check this one
|
|
{
|
|
fp.close();
|
|
delete[] file_buffer;
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
LLBVHLoader* loaderp = new LLBVHLoader(file_buffer);
|
|
if(!loaderp->isInitialized())
|
|
{
|
|
fp.close();
|
|
delete[] file_buffer;
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
S32 buffer_size = loaderp->getOutputSize();
|
|
U8* buffer = new U8[buffer_size];
|
|
LLDataPackerBinaryBuffer dp(buffer, buffer_size);
|
|
loaderp->serialize(dp);
|
|
LLAPRFile apr_file(filename, LL_APR_WB, LLAPRFile::global);
|
|
apr_file.write(buffer, buffer_size);
|
|
delete[] file_buffer;
|
|
delete[] buffer;
|
|
fp.close();
|
|
apr_file.close();
|
|
}
|
|
else if (exten == "animatn")
|
|
{
|
|
asset_type = LLAssetType::AT_ANIMATION;
|
|
if(!copyFile(src_filename, filename))
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
else if(exten == "jp2" || exten == "j2k" || exten == "j2c")
|
|
{
|
|
asset_type = LLAssetType::AT_TEXTURE;
|
|
if(!copyFile(src_filename, filename))
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
else if(exten == "gesture")
|
|
{
|
|
asset_type = LLAssetType::AT_GESTURE;
|
|
if(!copyFile(src_filename, filename))
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
else if(exten == "notecard")
|
|
{
|
|
asset_type = LLAssetType::AT_NOTECARD;
|
|
if(!copyFile(src_filename, filename))
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
else if(exten == "lsl")
|
|
{
|
|
asset_type = LLAssetType::AT_LSL_TEXT;
|
|
if(!copyFile(src_filename, filename))
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
else if(exten == "eyes" || exten == "gloves" || exten == "hair" || exten == "jacket" || exten == "pants" || exten == "shape" || exten == "shirt" || exten == "shoes" || exten == "skin" || exten == "skirt" || exten == "socks" || exten == "underpants" || exten == "undershirt" || exten == "bodypart" || exten == "clothing")
|
|
{
|
|
asset_type = LLAssetType::AT_CLOTHING;
|
|
if(!copyFile(src_filename, filename))
|
|
{
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
llwarns << "Unhandled extension" << llendl;
|
|
return LLAssetType::AT_NONE;
|
|
}
|
|
return asset_type;
|
|
}
|
|
BOOL LLAssetConverter::copyFile(std::string src_filename, std::string dst_filename)
|
|
{
|
|
S32 src_size;
|
|
LLAPRFile src_fp;
|
|
src_fp.open(src_filename, LL_APR_RB, LLAPRFile::global, &src_size);
|
|
if(!src_fp.getFileHandle()) return FALSE;
|
|
LLAPRFile dst_fp;
|
|
dst_fp.open(dst_filename, LL_APR_WB, LLAPRFile::global);
|
|
if(!dst_fp.getFileHandle()) return FALSE;
|
|
char* buffer = new char[src_size + 1];
|
|
src_fp.read(buffer, src_size);
|
|
dst_fp.write(buffer, src_size);
|
|
src_fp.close();
|
|
dst_fp.close();
|
|
delete[] buffer;
|
|
return TRUE;
|
|
}
|
|
// </edit>
|