|
|
|
@ -27,23 +27,35 @@ |
|
|
|
|
#include "attributes.h" |
|
|
|
|
#include "pixfmt.h" |
|
|
|
|
|
|
|
|
|
typedef struct AVComponentDescriptor{ |
|
|
|
|
uint16_t plane :2; ///< which of the 4 planes contains the component
|
|
|
|
|
typedef struct AVComponentDescriptor { |
|
|
|
|
/**
|
|
|
|
|
* Which of the 4 planes contains the component. |
|
|
|
|
*/ |
|
|
|
|
uint16_t plane : 2; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Number of elements between 2 horizontally consecutive pixels minus 1. |
|
|
|
|
* Elements are bits for bitstream formats, bytes otherwise. |
|
|
|
|
*/ |
|
|
|
|
uint16_t step_minus1 :3; |
|
|
|
|
uint16_t step_minus1 : 3; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Number of elements before the component of the first pixel plus 1. |
|
|
|
|
* Elements are bits for bitstream formats, bytes otherwise. |
|
|
|
|
*/ |
|
|
|
|
uint16_t offset_plus1 :3; |
|
|
|
|
uint16_t shift :3; ///< number of least significant bits that must be shifted away to get the value
|
|
|
|
|
uint16_t depth_minus1 :4; ///< number of bits in the component minus 1
|
|
|
|
|
}AVComponentDescriptor; |
|
|
|
|
uint16_t offset_plus1 : 3; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Number of least significant bits that must be shifted away |
|
|
|
|
* to get the value. |
|
|
|
|
*/ |
|
|
|
|
uint16_t shift : 3; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Number of bits in the component minus 1. |
|
|
|
|
*/ |
|
|
|
|
uint16_t depth_minus1 : 4; |
|
|
|
|
} AVComponentDescriptor; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Descriptor that unambiguously describes how the bits of a pixel are |
|
|
|
@ -54,9 +66,9 @@ typedef struct AVComponentDescriptor{ |
|
|
|
|
* and all the YUV variants) AVPixFmtDescriptor just stores how values |
|
|
|
|
* are stored not what these values represent. |
|
|
|
|
*/ |
|
|
|
|
typedef struct AVPixFmtDescriptor{ |
|
|
|
|
typedef struct AVPixFmtDescriptor { |
|
|
|
|
const char *name; |
|
|
|
|
uint8_t nb_components; ///< The number of components each pixel has, (1-4)
|
|
|
|
|
uint8_t nb_components; ///< The number of components each pixel has, (1-4)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Amount to shift the luma width right to find the chroma width. |
|
|
|
@ -65,7 +77,7 @@ typedef struct AVPixFmtDescriptor{ |
|
|
|
|
* The note above is needed to ensure rounding up. |
|
|
|
|
* This value only refers to the chroma components. |
|
|
|
|
*/ |
|
|
|
|
uint8_t log2_chroma_w; ///< chroma_width = -((-luma_width )>>log2_chroma_w)
|
|
|
|
|
uint8_t log2_chroma_w; ///< chroma_width = -((-luma_width )>>log2_chroma_w)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Amount to shift the luma height right to find the chroma height. |
|
|
|
@ -83,7 +95,7 @@ typedef struct AVPixFmtDescriptor{ |
|
|
|
|
* comp[2]. |
|
|
|
|
*/ |
|
|
|
|
AVComponentDescriptor comp[4]; |
|
|
|
|
}AVPixFmtDescriptor; |
|
|
|
|
} AVPixFmtDescriptor; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Pixel format is big-endian. |
|
|
|
@ -157,8 +169,9 @@ extern attribute_deprecated const AVPixFmtDescriptor av_pix_fmt_descriptors[]; |
|
|
|
|
* component c in data[1] to dst, rather than the palette indexes in |
|
|
|
|
* data[0]. The behavior is undefined if the format is not paletted. |
|
|
|
|
*/ |
|
|
|
|
void av_read_image_line(uint16_t *dst, const uint8_t *data[4], const int linesize[4], |
|
|
|
|
const AVPixFmtDescriptor *desc, int x, int y, int c, int w, int read_pal_component); |
|
|
|
|
void av_read_image_line(uint16_t *dst, const uint8_t *data[4], |
|
|
|
|
const int linesize[4], const AVPixFmtDescriptor *desc, |
|
|
|
|
int x, int y, int c, int w, int read_pal_component); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Write the values from src to the pixel format component c of an |
|
|
|
@ -174,8 +187,9 @@ void av_read_image_line(uint16_t *dst, const uint8_t *data[4], const int linesiz |
|
|
|
|
* @param w the width of the line to write, that is the number of |
|
|
|
|
* values to write to the image line |
|
|
|
|
*/ |
|
|
|
|
void av_write_image_line(const uint16_t *src, uint8_t *data[4], const int linesize[4], |
|
|
|
|
const AVPixFmtDescriptor *desc, int x, int y, int c, int w); |
|
|
|
|
void av_write_image_line(const uint16_t *src, uint8_t *data[4], |
|
|
|
|
const int linesize[4], const AVPixFmtDescriptor *desc, |
|
|
|
|
int x, int y, int c, int w); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Return the pixel format corresponding to name. |
|
|
|
@ -208,7 +222,8 @@ const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt); |
|
|
|
|
* corresponding info string, or a negative value to print the |
|
|
|
|
* corresponding header. |
|
|
|
|
*/ |
|
|
|
|
char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt); |
|
|
|
|
char *av_get_pix_fmt_string(char *buf, int buf_size, |
|
|
|
|
enum AVPixelFormat pix_fmt); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Return the number of bits per pixel used by the pixel format |
|
|
|
@ -261,7 +276,6 @@ int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, |
|
|
|
|
*/ |
|
|
|
|
int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Utility function to swap the endianness of a pixel format. |
|
|
|
|
* |
|
|
|
@ -272,5 +286,4 @@ int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt); |
|
|
|
|
*/ |
|
|
|
|
enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* AVUTIL_PIXDESC_H */ |
|
|
|
|