ImfCRgbaFile.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. //
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. // Copyright (c) Contributors to the OpenEXR Project.
  4. //
  5. #ifndef INCLUDED_IMF_C_RGBA_FILE_H
  6. #define INCLUDED_IMF_C_RGBA_FILE_H
  7. #include "ImfExport.h"
  8. #include <stdlib.h>
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. /*
  13. ** Interpreting unsigned shorts as 16-bit floating point numbers
  14. */
  15. typedef unsigned short ImfHalf;
  16. IMF_EXPORT
  17. void ImfFloatToHalf (float f,
  18. ImfHalf *h);
  19. IMF_EXPORT
  20. void ImfFloatToHalfArray (int n,
  21. const float f[/*n*/],
  22. ImfHalf h[/*n*/]);
  23. IMF_EXPORT
  24. float ImfHalfToFloat (ImfHalf h);
  25. IMF_EXPORT
  26. void ImfHalfToFloatArray (int n,
  27. const ImfHalf h[/*n*/],
  28. float f[/*n*/]);
  29. /*
  30. ** RGBA pixel; memory layout must be the same as struct Imf::Rgba.
  31. */
  32. struct ImfRgba
  33. {
  34. ImfHalf r;
  35. ImfHalf g;
  36. ImfHalf b;
  37. ImfHalf a;
  38. };
  39. typedef struct ImfRgba ImfRgba;
  40. /*
  41. ** Magic number; this must be the same as Imf::MAGIC
  42. */
  43. #define IMF_MAGIC 20000630
  44. /*
  45. ** Version number; this must be the same as Imf::EXR_VERSION
  46. */
  47. #define IMF_VERSION_NUMBER 2
  48. /*
  49. ** Line order; values must the the same as in Imf::LineOrder.
  50. */
  51. #define IMF_INCREASING_Y 0
  52. #define IMF_DECREASING_Y 1
  53. #define IMF_RANDOM_Y 2
  54. /*
  55. ** Compression types; values must be the same as in Imf::Compression.
  56. */
  57. #define IMF_NO_COMPRESSION 0
  58. #define IMF_RLE_COMPRESSION 1
  59. #define IMF_ZIPS_COMPRESSION 2
  60. #define IMF_ZIP_COMPRESSION 3
  61. #define IMF_PIZ_COMPRESSION 4
  62. #define IMF_PXR24_COMPRESSION 5
  63. #define IMF_B44_COMPRESSION 6
  64. #define IMF_B44A_COMPRESSION 7
  65. #define IMF_DWAA_COMPRESSION 8
  66. #define IMF_DWAB_COMPRESSION 9
  67. /*
  68. ** Channels; values must be the same as in Imf::RgbaChannels.
  69. */
  70. #define IMF_WRITE_R 0x01
  71. #define IMF_WRITE_G 0x02
  72. #define IMF_WRITE_B 0x04
  73. #define IMF_WRITE_A 0x08
  74. #define IMF_WRITE_Y 0x10
  75. #define IMF_WRITE_C 0x20
  76. #define IMF_WRITE_RGB 0x07
  77. #define IMF_WRITE_RGBA 0x0f
  78. #define IMF_WRITE_YC 0x30
  79. #define IMF_WRITE_YA 0x18
  80. #define IMF_WRITE_YCA 0x38
  81. /*
  82. ** Level modes; values must be the same as in Imf::LevelMode
  83. */
  84. #define IMF_ONE_LEVEL 0
  85. #define IMF_MIPMAP_LEVELS 1
  86. #define IMF_RIPMAP_LEVELS 2
  87. /*
  88. ** Level rounding modes; values must be the same as in Imf::LevelRoundingMode
  89. */
  90. #define IMF_ROUND_DOWN 0
  91. #define IMF_ROUND_UP 1
  92. /*
  93. ** RGBA file header
  94. */
  95. struct ImfHeader;
  96. typedef struct ImfHeader ImfHeader;
  97. IMF_EXPORT
  98. ImfHeader * ImfNewHeader (void);
  99. IMF_EXPORT
  100. void ImfDeleteHeader (ImfHeader *hdr);
  101. IMF_EXPORT
  102. ImfHeader * ImfCopyHeader (const ImfHeader *hdr);
  103. IMF_EXPORT
  104. void ImfHeaderSetDisplayWindow (ImfHeader *hdr,
  105. int xMin, int yMin,
  106. int xMax, int yMax);
  107. IMF_EXPORT
  108. void ImfHeaderDisplayWindow (const ImfHeader *hdr,
  109. int *xMin, int *yMin,
  110. int *xMax, int *yMax);
  111. IMF_EXPORT
  112. void ImfHeaderSetDataWindow (ImfHeader *hdr,
  113. int xMin, int yMin,
  114. int xMax, int yMax);
  115. IMF_EXPORT
  116. void ImfHeaderDataWindow (const ImfHeader *hdr,
  117. int *xMin, int *yMin,
  118. int *xMax, int *yMax);
  119. IMF_EXPORT
  120. void ImfHeaderSetPixelAspectRatio (ImfHeader *hdr,
  121. float pixelAspectRatio);
  122. IMF_EXPORT
  123. float ImfHeaderPixelAspectRatio (const ImfHeader *hdr);
  124. IMF_EXPORT
  125. void ImfHeaderSetScreenWindowCenter (ImfHeader *hdr,
  126. float x, float y);
  127. IMF_EXPORT
  128. void ImfHeaderScreenWindowCenter (const ImfHeader *hdr,
  129. float *x, float *y);
  130. IMF_EXPORT
  131. void ImfHeaderSetScreenWindowWidth (ImfHeader *hdr,
  132. float width);
  133. IMF_EXPORT
  134. float ImfHeaderScreenWindowWidth (const ImfHeader *hdr);
  135. IMF_EXPORT
  136. void ImfHeaderSetLineOrder (ImfHeader *hdr,
  137. int lineOrder);
  138. IMF_EXPORT
  139. int ImfHeaderLineOrder (const ImfHeader *hdr);
  140. IMF_EXPORT
  141. void ImfHeaderSetCompression (ImfHeader *hdr,
  142. int compression);
  143. IMF_EXPORT
  144. int ImfHeaderCompression (const ImfHeader *hdr);
  145. IMF_EXPORT
  146. int ImfHeaderSetIntAttribute (ImfHeader *hdr,
  147. const char name[],
  148. int value);
  149. IMF_EXPORT
  150. int ImfHeaderIntAttribute (const ImfHeader *hdr,
  151. const char name[],
  152. int *value);
  153. IMF_EXPORT
  154. int ImfHeaderSetFloatAttribute (ImfHeader *hdr,
  155. const char name[],
  156. float value);
  157. IMF_EXPORT
  158. int ImfHeaderSetDoubleAttribute (ImfHeader *hdr,
  159. const char name[],
  160. double value);
  161. IMF_EXPORT
  162. int ImfHeaderFloatAttribute (const ImfHeader *hdr,
  163. const char name[],
  164. float *value);
  165. IMF_EXPORT
  166. int ImfHeaderDoubleAttribute (const ImfHeader *hdr,
  167. const char name[],
  168. double *value);
  169. IMF_EXPORT
  170. int ImfHeaderSetStringAttribute (ImfHeader *hdr,
  171. const char name[],
  172. const char value[]);
  173. IMF_EXPORT
  174. int ImfHeaderStringAttribute (const ImfHeader *hdr,
  175. const char name[],
  176. const char **value);
  177. IMF_EXPORT
  178. int ImfHeaderSetBox2iAttribute (ImfHeader *hdr,
  179. const char name[],
  180. int xMin, int yMin,
  181. int xMax, int yMax);
  182. IMF_EXPORT
  183. int ImfHeaderBox2iAttribute (const ImfHeader *hdr,
  184. const char name[],
  185. int *xMin, int *yMin,
  186. int *xMax, int *yMax);
  187. IMF_EXPORT
  188. int ImfHeaderSetBox2fAttribute (ImfHeader *hdr,
  189. const char name[],
  190. float xMin, float yMin,
  191. float xMax, float yMax);
  192. IMF_EXPORT
  193. int ImfHeaderBox2fAttribute (const ImfHeader *hdr,
  194. const char name[],
  195. float *xMin, float *yMin,
  196. float *xMax, float *yMax);
  197. IMF_EXPORT
  198. int ImfHeaderSetV2iAttribute (ImfHeader *hdr,
  199. const char name[],
  200. int x, int y);
  201. IMF_EXPORT
  202. int ImfHeaderV2iAttribute (const ImfHeader *hdr,
  203. const char name[],
  204. int *x, int *y);
  205. IMF_EXPORT
  206. int ImfHeaderSetV2fAttribute (ImfHeader *hdr,
  207. const char name[],
  208. float x, float y);
  209. IMF_EXPORT
  210. int ImfHeaderV2fAttribute (const ImfHeader *hdr,
  211. const char name[],
  212. float *x, float *y);
  213. IMF_EXPORT
  214. int ImfHeaderSetV3iAttribute (ImfHeader *hdr,
  215. const char name[],
  216. int x, int y, int z);
  217. IMF_EXPORT
  218. int ImfHeaderV3iAttribute (const ImfHeader *hdr,
  219. const char name[],
  220. int *x, int *y, int *z);
  221. IMF_EXPORT
  222. int ImfHeaderSetV3fAttribute (ImfHeader *hdr,
  223. const char name[],
  224. float x, float y, float z);
  225. IMF_EXPORT
  226. int ImfHeaderV3fAttribute (const ImfHeader *hdr,
  227. const char name[],
  228. float *x, float *y, float *z);
  229. IMF_EXPORT
  230. int ImfHeaderSetM33fAttribute (ImfHeader *hdr,
  231. const char name[],
  232. const float m[3][3]);
  233. IMF_EXPORT
  234. int ImfHeaderM33fAttribute (const ImfHeader *hdr,
  235. const char name[],
  236. float m[3][3]);
  237. IMF_EXPORT
  238. int ImfHeaderSetM44fAttribute (ImfHeader *hdr,
  239. const char name[],
  240. const float m[4][4]);
  241. IMF_EXPORT
  242. int ImfHeaderM44fAttribute (const ImfHeader *hdr,
  243. const char name[],
  244. float m[4][4]);
  245. /*
  246. ** RGBA output file
  247. */
  248. struct ImfOutputFile;
  249. typedef struct ImfOutputFile ImfOutputFile;
  250. IMF_EXPORT
  251. ImfOutputFile * ImfOpenOutputFile (const char name[],
  252. const ImfHeader *hdr,
  253. int channels);
  254. IMF_EXPORT
  255. int ImfCloseOutputFile (ImfOutputFile *out);
  256. IMF_EXPORT
  257. int ImfOutputSetFrameBuffer (ImfOutputFile *out,
  258. const ImfRgba *base,
  259. size_t xStride,
  260. size_t yStride);
  261. IMF_EXPORT
  262. int ImfOutputWritePixels (ImfOutputFile *out,
  263. int numScanLines);
  264. IMF_EXPORT
  265. int ImfOutputCurrentScanLine (const ImfOutputFile *out);
  266. IMF_EXPORT
  267. const ImfHeader * ImfOutputHeader (const ImfOutputFile *out);
  268. IMF_EXPORT
  269. int ImfOutputChannels (const ImfOutputFile *out);
  270. /*
  271. ** Tiled RGBA output file
  272. */
  273. struct ImfTiledOutputFile;
  274. typedef struct ImfTiledOutputFile ImfTiledOutputFile;
  275. IMF_EXPORT
  276. ImfTiledOutputFile * ImfOpenTiledOutputFile (const char name[],
  277. const ImfHeader *hdr,
  278. int channels,
  279. int xSize, int ySize,
  280. int mode, int rmode);
  281. IMF_EXPORT
  282. int ImfCloseTiledOutputFile (ImfTiledOutputFile *out);
  283. IMF_EXPORT
  284. int ImfTiledOutputSetFrameBuffer (ImfTiledOutputFile *out,
  285. const ImfRgba *base,
  286. size_t xStride,
  287. size_t yStride);
  288. IMF_EXPORT
  289. int ImfTiledOutputWriteTile (ImfTiledOutputFile *out,
  290. int dx, int dy,
  291. int lx, int ly);
  292. IMF_EXPORT
  293. int ImfTiledOutputWriteTiles (ImfTiledOutputFile *out,
  294. int dxMin, int dxMax,
  295. int dyMin, int dyMax,
  296. int lx, int ly);
  297. IMF_EXPORT
  298. const ImfHeader * ImfTiledOutputHeader (const ImfTiledOutputFile *out);
  299. IMF_EXPORT
  300. int ImfTiledOutputChannels (const ImfTiledOutputFile *out);
  301. IMF_EXPORT
  302. int ImfTiledOutputTileXSize (const ImfTiledOutputFile *out);
  303. IMF_EXPORT
  304. int ImfTiledOutputTileYSize (const ImfTiledOutputFile *out);
  305. IMF_EXPORT
  306. int ImfTiledOutputLevelMode (const ImfTiledOutputFile *out);
  307. IMF_EXPORT
  308. int ImfTiledOutputLevelRoundingMode
  309. (const ImfTiledOutputFile *out);
  310. /*
  311. ** RGBA input file
  312. */
  313. struct ImfInputFile;
  314. typedef struct ImfInputFile ImfInputFile;
  315. IMF_EXPORT
  316. ImfInputFile * ImfOpenInputFile (const char name[]);
  317. IMF_EXPORT
  318. int ImfCloseInputFile (ImfInputFile *in);
  319. IMF_EXPORT
  320. int ImfInputSetFrameBuffer (ImfInputFile *in,
  321. ImfRgba *base,
  322. size_t xStride,
  323. size_t yStride);
  324. IMF_EXPORT
  325. int ImfInputReadPixels (ImfInputFile *in,
  326. int scanLine1,
  327. int scanLine2);
  328. IMF_EXPORT
  329. const ImfHeader * ImfInputHeader (const ImfInputFile *in);
  330. IMF_EXPORT
  331. int ImfInputChannels (const ImfInputFile *in);
  332. IMF_EXPORT
  333. const char * ImfInputFileName (const ImfInputFile *in);
  334. /*
  335. ** Tiled RGBA input file
  336. */
  337. struct ImfTiledInputFile;
  338. typedef struct ImfTiledInputFile ImfTiledInputFile;
  339. IMF_EXPORT
  340. ImfTiledInputFile * ImfOpenTiledInputFile (const char name[]);
  341. IMF_EXPORT
  342. int ImfCloseTiledInputFile (ImfTiledInputFile *in);
  343. IMF_EXPORT
  344. int ImfTiledInputSetFrameBuffer (ImfTiledInputFile *in,
  345. ImfRgba *base,
  346. size_t xStride,
  347. size_t yStride);
  348. IMF_EXPORT
  349. int ImfTiledInputReadTile (ImfTiledInputFile *in,
  350. int dx, int dy,
  351. int lx, int ly);
  352. IMF_EXPORT
  353. int ImfTiledInputReadTiles (ImfTiledInputFile *in,
  354. int dxMin, int dxMax,
  355. int dyMin, int dyMax,
  356. int lx, int ly);
  357. IMF_EXPORT
  358. const ImfHeader * ImfTiledInputHeader (const ImfTiledInputFile *in);
  359. IMF_EXPORT
  360. int ImfTiledInputChannels (const ImfTiledInputFile *in);
  361. IMF_EXPORT
  362. const char * ImfTiledInputFileName (const ImfTiledInputFile *in);
  363. IMF_EXPORT
  364. int ImfTiledInputTileXSize (const ImfTiledInputFile *in);
  365. IMF_EXPORT
  366. int ImfTiledInputTileYSize (const ImfTiledInputFile *in);
  367. IMF_EXPORT
  368. int ImfTiledInputLevelMode (const ImfTiledInputFile *in);
  369. IMF_EXPORT
  370. int ImfTiledInputLevelRoundingMode
  371. (const ImfTiledInputFile *in);
  372. /*
  373. ** Lookup tables
  374. */
  375. struct ImfLut;
  376. typedef struct ImfLut ImfLut;
  377. IMF_EXPORT
  378. ImfLut * ImfNewRound12logLut (int channels);
  379. IMF_EXPORT
  380. ImfLut * ImfNewRoundNBitLut (unsigned int n, int channels);
  381. IMF_EXPORT
  382. void ImfDeleteLut (ImfLut *lut);
  383. IMF_EXPORT
  384. void ImfApplyLut (ImfLut *lut,
  385. ImfRgba *data,
  386. int nData,
  387. int stride);
  388. /*
  389. ** Most recent error message
  390. */
  391. IMF_EXPORT
  392. const char * ImfErrorMessage (void);
  393. #ifdef __cplusplus
  394. } /* extern "C" */
  395. #endif
  396. #endif