78     signature = bytestream2_get_le32(&s->
gb);
 
   79     if (signature != 
MKTAG(
'8',
'B',
'P',
'S')) {
 
   84     version = bytestream2_get_be16(&s->
gb);
 
   98     s->
height = bytestream2_get_be32(&s->
gb);
 
  102                "Height > 30000 is experimental, add " 
  103                "'-strict %d' if you want to try to decode the picture.\n",
 
  108     s->
width = bytestream2_get_be32(&s->
gb);
 
  111                "Width > 30000 is experimental, add " 
  112                "'-strict %d' if you want to try to decode the picture.\n",
 
  122     color_mode = bytestream2_get_be16(&s->
gb);
 
  123     switch (color_mode) {
 
  154     len_section = bytestream2_get_be32(&s->
gb);
 
  155     if (len_section < 0) {
 
  167         for (j = HAVE_BIGENDIAN; j < 3 + HAVE_BIGENDIAN; j++)
 
  168             for (i = 0; i < 
FFMIN(256, len_section / 3); i++)
 
  169                 s->
palette[i * 4 + (HAVE_BIGENDIAN ? j : 2 - j)] = bytestream2_get_byteu(&s->
gb);
 
  170         len_section -= i * 3;
 
  175     len_section = bytestream2_get_be32(&s->
gb);
 
  176     if (len_section < 0) {
 
  188     len_section = bytestream2_get_be32(&s->
gb);
 
  189     if (len_section < 0) {
 
  228     unsigned int scanline_count;
 
  229     unsigned int sl, 
count;
 
  230     unsigned long target_index = 0;
 
  233     unsigned int repeat_count;
 
  246     for (sl = 0; sl < scanline_count; sl++) {
 
  250             rle_char = bytestream2_get_byte(&s->
gb);
 
  253                 repeat_count = rle_char * -1;
 
  265                 v = bytestream2_get_byte(&s->
gb);
 
  266                 for (p = 0; p <= repeat_count; p++) {
 
  267                     s->
tmp[target_index++] = v;
 
  269                 count += repeat_count + 1;
 
  281                 for (p = 0; p <= rle_char; p++) {
 
  282                     v = bytestream2_get_byte(&s->
gb);
 
  283                     s->
tmp[target_index++] = v;
 
  285                 count += rle_char + 1;
 
  299     int index_out, 
c, y, x, p;
 
  300     uint8_t eq_channel[4] = {2,0,1,3};
 
  324                     "Invalid bitmap file (channel_depth %d, channel_count %d)\n",
 
  334                    "Invalid indexed file (channel_depth %d, channel_count %d)\n",
 
  424         ptr = picture->
data[0];
 
  426             for (y = 0; y < s->
height; y++) {
 
  427                 for (x = 0; x < s->
width; x++) {
 
  430                         ptr[index_out + p] = *ptr_data;
 
  441             plane_number = eq_channel[
c];
 
  442             ptr = picture->
data[plane_number];
 
  443             for (y = 0; y < s->
height; y++) {
 
  445                 ptr += picture->
linesize[plane_number];
 
#define FF_COMPLIANCE_EXPERIMENTAL
Allow nonstandardized experimental things. 
 
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
 
This structure describes decoded (raw) audio or video data. 
 
ptrdiff_t const GLvoid * data
 
8 bits gray, 8 bits alpha 
 
#define AV_LOG_WARNING
Something somehow does not look correct. 
 
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context. 
 
static int decode_rle(PSDContext *s)
 
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
 
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
 
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
 
planar GBRA 4:4:4:4 64bpp, big-endian 
 
static const char signature[]
 
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature. 
 
8 bits with AV_PIX_FMT_RGB32 palette 
 
static int decode_header(PSDContext *s)
 
planar GBR 4:4:4 48bpp, big-endian 
 
enum PsdCompr compression
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
16 bits gray, 16 bits alpha (big-endian) 
 
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
 
uint64_t uncompressed_size
 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
 
static av_always_inline unsigned int bytestream2_get_bytes_left(GetByteContext *g)
 
const char * name
Name of the codec implementation. 
 
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading. 
 
enum AVPictureType pict_type
Picture type of the frame. 
 
enum PsdColorMode color_mode
 
#define AVERROR_EXPERIMENTAL
Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it...
 
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome. 
 
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
 
uint8_t palette[AVPALETTE_SIZE]
 
main external API structure. 
 
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame. 
 
Describe the class of an AVClass context structure. 
 
int palette_has_changed
Tell user application that palette has changed from previous frame. 
 
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature. 
 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
 
common internal api header. 
 
Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb...
 
planar GBRA 4:4:4:4 32bpp 
 
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
#define MKTAG(a, b, c, d)
 
This structure stores compressed data. 
 
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators. 
 
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).