87 lines
1.7 KiB
C
87 lines
1.7 KiB
C
#ifndef _IPXE_PNM_H
|
|
#define _IPXE_PNM_H
|
|
|
|
/** @file
|
|
*
|
|
* Portable anymap format (PNM)
|
|
*
|
|
*/
|
|
|
|
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|
|
|
#include <stdint.h>
|
|
#include <ipxe/uaccess.h>
|
|
#include <ipxe/image.h>
|
|
|
|
/** PNM signature */
|
|
struct pnm_signature {
|
|
/** Magic byte ('P') */
|
|
char magic;
|
|
/** PNM type */
|
|
char type;
|
|
/** Whitespace */
|
|
char space;
|
|
} __attribute__ (( packed ));
|
|
|
|
/** PNM magic byte */
|
|
#define PNM_MAGIC 'P'
|
|
|
|
/** PNM context */
|
|
struct pnm_context {
|
|
/** PNM type */
|
|
struct pnm_type *type;
|
|
/** Current byte offset */
|
|
size_t offset;
|
|
/** Maximum length of ASCII values */
|
|
size_t ascii_len;
|
|
/** Maximum pixel value */
|
|
unsigned int max;
|
|
};
|
|
|
|
/** Default maximum length of ASCII values */
|
|
#define PNM_ASCII_LEN 16
|
|
|
|
/** PNM type */
|
|
struct pnm_type {
|
|
/** PNM type */
|
|
char type;
|
|
/** Number of scalar values per pixel */
|
|
uint8_t depth;
|
|
/** Number of pixels per composite value */
|
|
uint8_t packing;
|
|
/** Flags */
|
|
uint8_t flags;
|
|
/** Extract scalar value
|
|
*
|
|
* @v image PNM image
|
|
* @v pnm PNM context
|
|
* @ret value Value, or negative error
|
|
*/
|
|
int ( * scalar ) ( struct image *image, struct pnm_context *pnm );
|
|
/** Convert composite value to 24-bit RGB
|
|
*
|
|
* @v composite Composite value
|
|
* @v index Pixel index within this composite value
|
|
* @ret rgb 24-bit RGB value
|
|
*/
|
|
uint32_t ( * rgb ) ( uint32_t composite, unsigned int index );
|
|
};
|
|
|
|
/** PNM flags */
|
|
enum pnm_flags {
|
|
/** Bitmap format
|
|
*
|
|
* If set, this flag indicates that:
|
|
*
|
|
* - the maximum scalar value is predefined as being equal to
|
|
* (2^packing-1), and is not present within the file, and
|
|
*
|
|
* - the maximum length of ASCII values is 1.
|
|
*/
|
|
PNM_BITMAP = 0x01,
|
|
};
|
|
|
|
extern struct image_type pnm_image_type __image_type ( PROBE_NORMAL );
|
|
|
|
#endif /* _IPXE_PNM_H */
|