42 header->image_extension = 0;
45 header->data_min_found = 0;
46 header->data_max_found = 0;
68 for (
i = 0;
i < 8 && ptr8[
i] !=
' ';
i++) {
75 while (
i < 80 && ptr8[
i] ==
' ') {
82 if (ptr8[
i-1] ==
'\'') {
83 for (;
i < 80 && ptr8[
i] !=
'\'';
i++) {
87 }
else if (ptr8[
i-1] ==
'(') {
88 for (;
i < 80 && ptr8[
i] !=
')';
i++) {
93 for (;
i < 80 && ptr8[
i] !=
' ' && ptr8[
i] !=
'/';
i++) {
103#define CHECK_KEYWORD(key) \
104 if (strcmp(keyword, key)) { \
105 av_log(avcl, AV_LOG_ERROR, "expected %s keyword, found %s = %s\n", key, keyword, value); \
106 return AVERROR_INVALIDDATA; \
109#define CHECK_VALUE(key, val) \
110 if (sscanf(value, "%d", &header->val) != 1) { \
111 av_log(avcl, AV_LOG_ERROR, "invalid value of %s keyword, %s = %s\n", key, keyword, value); \
112 return AVERROR_INVALIDDATA; \
120 char keyword[10],
value[72],
c;
127 if (
value[0] ==
'F') {
129 }
else if (
value[0] !=
'T') {
139 if (!strcmp(
value,
"'IMAGE '")) {
140 header->image_extension = 1;
153 case 64:
case -64:
break;
175 ret = sscanf(keyword,
"NAXIS%d", &dim_no);
176 if (ret != 1 || dim_no !=
header->naxis_index + 1) {
193 if (!strcmp(keyword,
"BLANK") && sscanf(
value,
"%"SCNd64
"", &t) == 1) {
196 }
else if (!strcmp(keyword,
"BSCALE") && sscanf(
value,
"%lf", &d) == 1) {
200 }
else if (!strcmp(keyword,
"BZERO") && sscanf(
value,
"%lf", &d) == 1) {
202 }
else if (!strcmp(keyword,
"CTYPE3") && !strncmp(
value,
"'RGB", 4)) {
204 }
else if (!strcmp(keyword,
"DATAMAX") && sscanf(
value,
"%lf", &d) == 1) {
205 header->data_max_found = 1;
207 }
else if (!strcmp(keyword,
"DATAMIN") && sscanf(
value,
"%lf", &d) == 1) {
208 header->data_min_found = 1;
210 }
else if (!strcmp(keyword,
"END")) {
212 }
else if (!strcmp(keyword,
"GROUPS") && sscanf(
value,
"%c", &
c) == 1) {
214 }
else if (!strcmp(keyword,
"GCOUNT") && sscanf(
value,
"%"SCNd64
"", &t) == 1) {
215 if (t < 0 || t > INT_MAX)
218 }
else if (!strcmp(keyword,
"PCOUNT") && sscanf(
value,
"%"SCNd64
"", &t) == 1) {
219 if (t < 0 || t > INT_MAX)
static int FUNC metadata(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadata *current)
#define i(width, name, range_min, range_max)
static struct @346255127015250356166251341105367306144006377143 state
#define CHECK_VALUE(key, val)
int avpriv_fits_header_init(FITSHeader *header, FITSHeaderState state)
Initialize a single header line.
static int read_keyword_value(const uint8_t *ptr8, char *keyword, char *value)
Extract keyword and value from a header line (80 bytes) and store them in keyword and value strings r...
#define CHECK_KEYWORD(key)
int avpriv_fits_header_parse_line(void *avcl, FITSHeader *header, const uint8_t line[80], AVDictionary ***metadata)
Parse a single header line.
static int dict_set_if_not_null(AVDictionary ***metadata, char *keyword, char *value)
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static const uint8_t header[24]