fits.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * FITS image format common prototypes and structures
  3. * Copyright (c) 2017 Paras Chadha
  4. *
  5. * This file is part of FFmpeg.
  6. *
  7. * FFmpeg is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * FFmpeg is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with FFmpeg; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. */
  21. #ifndef AVCODEC_FITS_H
  22. #define AVCODEC_FITS_H
  23. #include <inttypes.h>
  24. #include "libavutil/dict.h"
  25. typedef enum FITSHeaderState {
  26. STATE_SIMPLE,
  27. STATE_XTENSION,
  28. STATE_BITPIX,
  29. STATE_NAXIS,
  30. STATE_NAXIS_N,
  31. STATE_PCOUNT,
  32. STATE_GCOUNT,
  33. STATE_REST,
  34. } FITSHeaderState;
  35. /**
  36. * Structure to store the header keywords in FITS file
  37. */
  38. typedef struct FITSHeader {
  39. FITSHeaderState state;
  40. unsigned naxis_index;
  41. int bitpix;
  42. int64_t blank;
  43. int blank_found;
  44. int naxis;
  45. int naxisn[999];
  46. int pcount;
  47. int gcount;
  48. int groups;
  49. int rgb; /**< 1 if file contains RGB image, 0 otherwise */
  50. int image_extension;
  51. double bscale;
  52. double bzero;
  53. int data_min_found;
  54. double data_min;
  55. int data_max_found;
  56. double data_max;
  57. } FITSHeader;
  58. /**
  59. * Initialize a single header line
  60. * @param header pointer to the header
  61. * @param state current state of parsing the header
  62. * @return 0 if successful otherwise AVERROR_INVALIDDATA
  63. */
  64. int avpriv_fits_header_init(FITSHeader *header, FITSHeaderState state);
  65. /**
  66. * Parse a single header line
  67. * @param avcl used in av_log
  68. * @param header pointer to the header
  69. * @param line one header line
  70. * @param metadata used to store metadata while decoding
  71. * @return 0 if successful otherwise AVERROR_INVALIDDATA
  72. */
  73. int avpriv_fits_header_parse_line(void *avcl, FITSHeader *header, const uint8_t line[80], AVDictionary ***metadata);
  74. #endif /* AVCODEC_FITS_H */