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, ...).