40 #include "libavutil/intreadwrite.h"
74 int h,
int w,
int stride,
const uint32_t *pal)
79 for (y = dx+h; y > dx; y--) {
81 for (x = 0; x < w; x++) {
84 unsigned c =
AV_RB16(sptr) & ~0x8000;
85 unsigned b = c & 0x1F;
86 unsigned g = (c >> 5) & 0x1F;
89 *dst++ = (b << 3) | (b >> 2);
90 *dst++ = (g << 3) | (g >> 2);
91 *dst++ = (r << 3) | (r >> 2);
95 uint32_t
c = pal[*sptr++];
96 bytestream_put_le24(&dst, c);
100 return sptr - orig_src;
112 zret = inflateInit(&s->
zstream);
140 inflate(&s->
zstream, Z_SYNC_FLUSH);
142 if (deflateInit(&zs, 0) != Z_OK)
148 deflate(&zs, Z_SYNC_FLUSH);
151 if ((zret = inflateReset(&s->
zstream)) != Z_OK) {
160 inflate(&s->
zstream, Z_SYNC_FLUSH);
189 ret = inflate(&s->
zstream, Z_FINISH);
190 if (ret == Z_DATA_ERROR) {
193 ret = inflate(&s->
zstream, Z_FINISH);
196 if (ret != Z_OK && ret != Z_STREAM_END) {
230 zstream.zalloc = Z_NULL;
231 zstream.zfree = Z_NULL;
232 zstream.opaque = Z_NULL;
233 if (deflateInit(&zstream, 0) != Z_OK)
235 size = deflateBound(&zstream, tmpblock_size);
236 deflateEnd(&zstream);
244 int buf_size = avpkt->
size;
246 int h_blocks, v_blocks, h_part, v_part, i, j,
ret;
320 "Frame width or height differs from first frame!\n");
336 av_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
338 h_blocks, v_blocks, h_part, v_part);
344 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
347 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
350 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
352 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
378 "%dx%d invalid color depth %d\n", i, j, s->
color_depth);
385 "inter frame without keyframe\n");
395 "%dx%d diff start %d height %d\n",
423 for (k = 0; k < cur_blk_height; k++)
432 cur_blk_width, cur_blk_height,
434 i + j * (h_blocks + !!h_part)))
436 "error in decompression of block %dx%d\n", i, j);
479 #if CONFIG_FLASHSV_DECODER
494 #if CONFIG_FLASHSV2_DECODER
495 static const uint32_t ff_flashsv2_default_palette[128] = {
496 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
497 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
498 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
499 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
500 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
501 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
502 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
503 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
504 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
505 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
506 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
507 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
508 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
509 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
510 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
511 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
512 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
513 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
514 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
515 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
516 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
524 s->
pal = ff_flashsv2_default_palette;
543 AVCodec ff_flashsv2_decoder = {
549 .
init = flashsv2_decode_init,
550 .
close = flashsv2_decode_end,
#define AVERROR_PATCHWELCOME
This structure describes decoded (raw) audio or video data.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static void skip_bits_long(GetBitContext *s, int n)
static av_cold int init(AVCodecContext *avctx)
void avcodec_set_dimensions(AVCodecContext *s, int width, int height)
void av_log(void *avcl, int level, const char *fmt,...) av_printf_format(3
Send the specified message to the log if the level is less than or equal to the current av_log_level...
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (%s)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic?ac->func_descr_generic:ac->func_descr)
void av_freep(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
static av_cold int flashsv_decode_end(AVCodecContext *avctx)
packed RGB 8:8:8, 24bpp, BGRBGR...
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
const char * name
Name of the codec implementation.
int av_frame_ref(AVFrame *dst, AVFrame *src)
Setup a new reference to the data described by a given frame.
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
static int decode_hybrid(const uint8_t *sptr, uint8_t *dptr, int dx, int dy, int h, int w, int stride, const uint32_t *pal)
static int get_bits_left(GetBitContext *gb)
static av_cold int flashsv_decode_init(AVCodecContext *avctx)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Libavcodec external API header.
AVPixelFormat
Pixel format.
int flags
A combination of AV_PKT_FLAG values.
int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame)
Identical in function to av_frame_make_writable(), except it uses ff_get_buffer() to allocate the buf...
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
void * av_realloc(void *ptr, size_t size) 1(2)
Allocate or reallocate a block of memory.
int width
picture width / height.
static int flashsv2_prime(FlashSVContext *s, uint8_t *src, int size)
void * av_malloc(size_t size) av_malloc_attrib 1(1)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
static int flashsv_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
main external API structure.
static void close(AVCodecParserContext *s)
static unsigned int get_bits1(GetBitContext *s)
static int calc_deflate_block_size(int tmpblock_size)
BYTE int const BYTE int int int height
void avcodec_get_frame_defaults(AVFrame *frame)
Set the fields of the given AVFrame to default values.
static void skip_bits(GetBitContext *s, int n)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
common internal api header.
#define AVERROR_INVALIDDATA
static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt, GetBitContext *gb, int block_size, int width, int height, int x_pos, int y_pos, int blk_idx)
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
This structure stores compressed data.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
void * av_mallocz(size_t size) av_malloc_attrib 1(1)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...