libopenraw
|
00001 /* 00002 * libopenraw - rawfile.cpp 00003 * 00004 * Copyright (C) 2007 Hubert Figuiere 00005 * 00006 * This library is free software: you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public License 00008 * as published by the Free Software Foundation, either version 3 of 00009 * the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library. If not, see 00018 * <http://www.gnu.org/licenses/>. 00019 */ 00020 /* @brief C api for rawfile 00021 */ 00022 00023 #include <boost/checked_delete.hpp> 00024 #include <libopenraw/libopenraw.h> 00025 00026 00027 #include <libopenraw++/rawfile.h> 00028 #include <libopenraw++/bitmapdata.h> 00029 00030 using OpenRaw::RawFile; 00031 using OpenRaw::RawData; 00032 using OpenRaw::BitmapData; 00033 using OpenRaw::Thumbnail; 00034 00035 extern "C" { 00036 00038 #define CHECK_PTR(p,r) \ 00039 if(p == NULL) { return r; } 00040 00041 const char **or_get_file_extensions() 00042 { 00043 return RawFile::fileExtensions(); 00044 } 00045 00046 ORRawFileRef 00047 or_rawfile_new(const char* filename, or_rawfile_type type) 00048 { 00049 CHECK_PTR(filename, NULL); 00050 RawFile * rawfile = RawFile::newRawFile(filename, type); 00051 return reinterpret_cast<ORRawFileRef>(rawfile); 00052 } 00053 00054 ORRawFileRef 00055 or_rawfile_new_from_memory(const uint8_t *buffer, uint32_t len, or_rawfile_type type) 00056 { 00057 CHECK_PTR(buffer, NULL); 00058 RawFile * rawfile = RawFile::newRawFileFromMemory(buffer, len, type); 00059 return reinterpret_cast<ORRawFileRef>(rawfile); 00060 } 00061 00062 00063 or_error 00064 or_rawfile_release(ORRawFileRef rawfile) 00065 { 00066 CHECK_PTR(rawfile, OR_ERROR_NOTAREF); 00067 boost::checked_delete(reinterpret_cast<RawFile *>(rawfile)); 00068 return OR_ERROR_NONE; 00069 } 00070 00071 or_rawfile_type 00072 or_rawfile_get_type(ORRawFileRef rawfile) 00073 { 00074 CHECK_PTR(rawfile, OR_RAWFILE_TYPE_UNKNOWN); 00075 RawFile * prawfile = reinterpret_cast<RawFile *>(rawfile); 00076 return prawfile->type(); 00077 } 00078 00079 or_error 00080 or_rawfile_get_thumbnail(ORRawFileRef rawfile, uint32_t _preferred_size, 00081 ORThumbnailRef thumb) 00082 { 00083 CHECK_PTR(rawfile, OR_ERROR_NOTAREF); 00084 RawFile * prawfile = reinterpret_cast<RawFile *>(rawfile); 00085 return prawfile->getThumbnail(_preferred_size, 00086 *reinterpret_cast<Thumbnail*>(thumb)); 00087 } 00088 00089 or_error 00090 or_rawfile_get_rawdata(ORRawFileRef rawfile, ORRawDataRef rawdata, 00091 uint32_t options) 00092 { 00093 RawFile * prawfile = reinterpret_cast<RawFile *>(rawfile); 00094 CHECK_PTR(rawfile, OR_ERROR_NOTAREF); 00095 return prawfile->getRawData(*reinterpret_cast<RawData*>(rawdata), options); 00096 } 00097 00098 or_error 00099 or_rawfile_get_rendered_image(ORRawFileRef rawfile, ORBitmapDataRef bitmapdata, 00100 uint32_t options) 00101 { 00102 RawFile * prawfile = reinterpret_cast<RawFile *>(rawfile); 00103 CHECK_PTR(rawfile, OR_ERROR_NOTAREF); 00104 return prawfile->getRenderedImage(*reinterpret_cast<BitmapData*>(bitmapdata), options); 00105 } 00106 00107 int32_t 00108 or_rawfile_get_orientation(ORRawFileRef rawfile) 00109 { 00110 RawFile * prawfile = reinterpret_cast<RawFile *>(rawfile); 00111 CHECK_PTR(rawfile, 0); 00112 return prawfile->getOrientation(); 00113 } 00114 00115 }