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 22 #ifndef AVCODEC_FITS_H 23 #define AVCODEC_FITS_H 24 25 #include <inttypes.h> 26 27 #include "libavutil/dict.h" 28 29 typedef enum FITSHeaderState { 30 STATE_SIMPLE, 31 STATE_XTENSION, 32 STATE_BITPIX, 33 STATE_NAXIS, 34 STATE_NAXIS_N, 35 STATE_PCOUNT, 36 STATE_GCOUNT, 37 STATE_REST, 38 } FITSHeaderState; 39 40 /** 41 * Structure to store the header keywords in FITS file 42 */ 43 typedef struct FITSHeader { 44 FITSHeaderState state; 45 unsigned naxis_index; 46 int bitpix; 47 int64_t blank; 48 int blank_found; 49 int naxis; 50 int naxisn[999]; 51 int pcount; 52 int gcount; 53 int groups; 54 int rgb; /**< 1 if file contains RGB image, 0 otherwise */ 55 int image_extension; 56 double bscale; 57 double bzero; 58 int data_min_found; 59 double data_min; 60 int data_max_found; 61 double data_max; 62 } FITSHeader; 63 64 65 /** 66 * Initialize a single header line 67 * @param header pointer to the header 68 * @param state current state of parsing the header 69 * @return 0 if successful otherwise AVERROR_INVALIDDATA 70 */ 71 int avpriv_fits_header_init(FITSHeader *header, FITSHeaderState state); 72 73 /** 74 * Parse a single header line 75 * @param avcl used in av_log 76 * @param header pointer to the header 77 * @param line one header line 78 * @param metadata used to store metadata while decoding 79 * @return 0 if successful otherwise AVERROR_INVALIDDATA 80 */ 81 int avpriv_fits_header_parse_line(void *avcl, FITSHeader *header, const uint8_t line[80], AVDictionary ***metadata); 82 83 #endif /* AVCODEC_FITS_H */ 84