summaryrefslogtreecommitdiff
path: root/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2011-02-15 17:20:14 -0800
committerMerov Linden <merov@lindenlab.com>2011-02-15 17:20:14 -0800
commit330031dc3025bacdcdb67b4f6ad2abba0b6fd6a2 (patch)
tree48487881a61c2cad7101a5e521cfbf09f8706e0f /indra/integration_tests/llimage_libtest/llimage_libtest.cpp
parent76cb9a7796ffce930458aae00147f8dafa4b33fb (diff)
parentcda7a0f8cf03b7a99e077043daa2d99ac16ace81 (diff)
STORM-987 : First pass, builds on Mac, no command line argument parsing yet
Diffstat (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp')
-rw-r--r--indra/integration_tests/llimage_libtest/llimage_libtest.cpp175
1 files changed, 175 insertions, 0 deletions
diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
new file mode 100644
index 0000000000..e8fe4864fb
--- /dev/null
+++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
@@ -0,0 +1,175 @@
+/**
+ * @file llimage_libtest.cpp
+ * @author Merov Linden
+ * @brief Integration test for the llimage library
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+#include "linden_common.h"
+#include "llpointer.h"
+
+#include "llimage_libtest.h"
+
+// Linden library includes
+#include "llimage.h"
+#include "llimagejpeg.h"
+#include "llimagepng.h"
+#include "llimagebmp.h"
+#include "llimagetga.h"
+#include "llimagej2c.h"
+#include "lldir.h"
+
+// system libraries
+#include <iostream>
+
+static const char USAGE[] = "\n"
+"usage:\tllimage_libtest [options]\n"
+"\n"
+" --help print this help\n"
+"\n";
+
+LLPointer<LLImageRaw> load_image(const std::string &src_filename)
+{
+ std::string exten = gDirUtilp->getExtension(src_filename);
+ U32 codec = LLImageBase::getCodecFromExtension(exten);
+
+ LLPointer<LLImageFormatted> image;
+ switch (codec)
+ {
+ case IMG_CODEC_BMP:
+ image = new LLImageBMP();
+ break;
+ case IMG_CODEC_TGA:
+ image = new LLImageTGA();
+ break;
+ case IMG_CODEC_JPEG:
+ image = new LLImageJPEG();
+ break;
+ case IMG_CODEC_J2C:
+ image = new LLImageJ2C();
+ break;
+ case IMG_CODEC_PNG:
+ image = new LLImagePNG();
+ break;
+ default:
+ return NULL;
+ }
+
+ if (!image->load(src_filename))
+ {
+ return NULL;
+ }
+
+ if( (image->getComponents() != 3) && (image->getComponents() != 4) )
+ {
+ std::cout << "Image files with less than 3 or more than 4 components are not supported\n";
+ return NULL;
+ }
+
+ LLPointer<LLImageRaw> raw_image = new LLImageRaw;
+ if (!image->decode(raw_image, 0.0f))
+ {
+ return NULL;
+ }
+
+ return raw_image;
+}
+
+bool save_image(const std::string &filepath, LLPointer<LLImageRaw> raw_image)
+{
+ std::string exten = gDirUtilp->getExtension(filepath);
+ U32 codec = LLImageBase::getCodecFromExtension(exten);
+
+ LLPointer<LLImageFormatted> image;
+ switch (codec)
+ {
+ case IMG_CODEC_BMP:
+ image = new LLImageBMP();
+ break;
+ case IMG_CODEC_TGA:
+ image = new LLImageTGA();
+ break;
+ case IMG_CODEC_JPEG:
+ image = new LLImageJPEG();
+ break;
+ case IMG_CODEC_J2C:
+ image = new LLImageJ2C();
+ break;
+ case IMG_CODEC_PNG:
+ image = new LLImagePNG();
+ break;
+ default:
+ return NULL;
+ }
+
+ if (!image->encode(raw_image, 0.0f))
+ {
+ return false;
+ }
+
+ return image->save(filepath);
+}
+
+int main(int argc, char** argv)
+{
+ // Init whatever is necessary
+ ll_init_apr();
+ LLImage::initClass();
+
+ // Analyze command line arguments
+ for (int arg=1; arg<argc; ++arg)
+ {
+ if (!strcmp(argv[arg], "--help"))
+ {
+ // always send the usage to standard out
+ std::cout << USAGE << std::endl;
+ return 0;
+ }
+
+ }
+
+ // List of (input,output) files
+
+ // Load file
+ LLPointer<LLImageRaw> raw_image = load_image("lolcat-monorail.jpg");
+ if (raw_image)
+ {
+ std::cout << "Image loaded\n" << std::endl;
+ }
+ else
+ {
+ std::cout << "Image not found\n" << std::endl;
+ }
+
+ // Save file
+ if (raw_image)
+ {
+ save_image("monorail.png",raw_image);
+ }
+
+ // Output stats on each file
+
+ // Cleanup and exit
+ LLImage::cleanupClass();
+
+ return 0;
+}