73 int h,
int w,
int stride,
const uint32_t *pal)
78 for (y = dx + h; y > dx; y--) {
80 for (x = 0; x < w; x++) {
83 unsigned c =
AV_RB16(sptr) & ~0x8000;
84 unsigned b = c & 0x1F;
85 unsigned g = (c >> 5) & 0x1F;
88 *dst++ = (b << 3) | (b >> 2);
89 *dst++ = (g << 3) | (g >> 2);
90 *dst++ = (r << 3) | (r >> 2);
94 uint32_t c = pal[*sptr++];
95 bytestream_put_le24(&dst, c);
99 return sptr - orig_src;
124 zret = inflateInit(&s->
zstream);
153 inflate(&s->
zstream, Z_SYNC_FLUSH);
160 deflate(&zs, Z_SYNC_FLUSH);
163 if ((zret = inflateReset(&s->
zstream)) != Z_OK) {
172 inflate(&s->
zstream, Z_SYNC_FLUSH);
185 int ret = inflateReset(&s->
zstream);
201 ret = inflate(&s->
zstream, Z_FINISH);
202 if (ret == Z_DATA_ERROR) {
205 ret = inflate(&s->
zstream, Z_FINISH);
208 if (ret != Z_OK && ret != Z_STREAM_END) {
245 zstream.zalloc = Z_NULL;
246 zstream.zfree = Z_NULL;
247 zstream.opaque = Z_NULL;
248 if (deflateInit(&zstream, 0) != Z_OK)
250 size = deflateBound(&zstream, tmpblock_size);
251 deflateEnd(&zstream);
259 int buf_size = avpkt->
size;
261 int h_blocks, v_blocks, h_part, v_part, i, j, ret;
304 "Cannot allocate decompression buffer.\n");
311 "Cannot determine deflate buffer size.\n");
332 "Frame width or height differs from first frame!\n");
346 (h_blocks + !!h_part) *
sizeof(s->
blocks[0]))) < 0)
350 av_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
352 h_blocks, v_blocks, h_part, v_part);
360 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
363 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
366 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
368 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
394 "%dx%d invalid color depth %d\n",
402 "Inter frame without keyframe\n");
409 "Block parameters invalid: %d + %d > %d\n",
414 "%dx%d diff start %d height %d\n",
433 "no data available for zlib priming\n");
443 for (k = 0; k < cur_blk_height; k++) {
453 cur_blk_width, cur_blk_height,
455 i + j * (h_blocks + !!h_part)))
457 "error in decompression of block %dx%d\n", i, j);
486 #if CONFIG_FLASHSV_DECODER
501 #if CONFIG_FLASHSV2_DECODER
502 static const uint32_t ff_flashsv2_default_palette[128] = {
503 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
504 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
505 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
506 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
507 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
508 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
509 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
510 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
511 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
512 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
513 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
514 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
515 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
516 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
517 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
518 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
519 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
520 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
521 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
522 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
523 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
531 s->
pal = ff_flashsv2_default_palette;
550 AVCodec ff_flashsv2_decoder = {
556 .
init = flashsv2_decode_init,
557 .
close = flashsv2_decode_end,
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
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)
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 *arg)
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)
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
int av_reallocp(void *ptr, size_t size)
Allocate or reallocate a block of memory.
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(). ...
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
#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.
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
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...
int width
picture width / height.
static int flashsv2_prime(FlashSVContext *s, uint8_t *src, int size)
packed RGB 8:8:8, 24bpp, BGRBGR...
static int flashsv_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
#define AVERROR_PATCHWELCOME
Not yet implemented in Libav, patches welcome.
Libavcodec external API header.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
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)
static void skip_bits(GetBitContext *s, int n)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
common internal api header.
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
static av_cold int init(AVCodecParserContext *s)
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)
AVPixelFormat
Pixel format.
This structure stores compressed data.