30 #include "libavutil/common.h"
31 #include "libavutil/intreadwrite.h"
37 #define ZMBV_KEYFRAME 1
38 #define ZMBV_DELTAPAL 2
65 int bw,
int bh,
int *xored)
72 for(j = 0; j < bh; j++){
73 for(i = 0; i < bw; i++){
74 int t = src[i] ^ src2[i];
82 for(i = 1; i < 256; i++)
92 int pstride,
int x,
int y,
int *mx,
int *my,
int *xored)
94 int dx, dy, tx, ty, tv, bv, bw, bh;
99 bv =
block_cmp(src, sstride, prev, pstride, bw, bh, xored);
103 if(tx == x && ty == y)
continue;
106 tv =
block_cmp(src, sstride, prev + dx + dy*pstride, pstride, bw, bh, xored);
119 const AVFrame *pict,
int *got_packet)
127 int work_size = 0, pkt_size;
137 chpal = !keyframe && memcmp(p->
data[1], c->
pal2, 1024);
139 palptr = (uint32_t*)p->
data[1];
144 for(i = 0; i < 256; i++){
146 c->
work_buf[work_size++] = tpal[0] ^ c->
pal[i * 3 + 0];
147 c->
work_buf[work_size++] = tpal[1] ^ c->
pal[i * 3 + 1];
148 c->
work_buf[work_size++] = tpal[2] ^ c->
pal[i * 3 + 2];
149 c->
pal[i * 3 + 0] = tpal[0];
150 c->
pal[i * 3 + 1] = tpal[1];
151 c->
pal[i * 3 + 2] = tpal[2];
156 for(i = 0; i < 256; i++){
162 for(i = 0; i < avctx->
height; i++){
165 work_size += avctx->
width;
168 int x,
y, bh2, bw2, xored;
176 memset(c->
work_buf + work_size, 0, (bw * bh * 2 + 3) & ~3);
177 work_size += (bw * bh * 2 + 3) & ~3;
188 mv[0] = (mx << 1) | !!xored;
192 for(j = 0; j < bh2; j++){
193 for(i = 0; i < bw2; i++)
194 c->
work_buf[work_size++] = tsrc[i] ^ tprev[i];
207 for(i = 0; i < avctx->
height; i++){
208 memcpy(prev, src, avctx->
width);
217 c->
zstream.avail_in = work_size;
223 if(deflate(&c->
zstream, Z_SYNC_FLUSH) != Z_OK){
228 pkt_size = c->
zstream.total_out + 1 + 6*keyframe;
275 if(lvl < 0 || lvl > 9){
281 memset(&c->
zstream, 0,
sizeof(z_stream));
283 ((avctx->
width + ZMBV_BLOCK - 1) / ZMBV_BLOCK) * ((avctx->
height + ZMBV_BLOCK - 1) / ZMBV_BLOCK) * 2 + 4;
306 zret = deflateInit(&c->
zstream, lvl);
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
Check AVPacket size and/or allocate data.
This structure describes decoded (raw) audio or video data.
static av_cold int init(AVCodecContext *avctx)
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...
static av_cold int encode_end(AVCodecContext *avctx)
Uninit zmbv encoder.
void av_freep(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
int me_range
maximum motion estimation search range in subpel units If 0 then no limit.
const char * name
Name of the codec implementation.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static av_cold int encode_init(AVCodecContext *avctx)
Init zmbv encoder.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Libavcodec external API header.
AVPixelFormat
Pixel format.
int flags
A combination of AV_PKT_FLAG values.
enum AVPictureType pict_type
Picture type of the frame.
int width
picture width / height.
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 ...
int AC3_NAME() encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
static const int8_t mv[256][2]
static int zmbv_me(ZmbvEncContext *c, uint8_t *src, int sstride, uint8_t *prev, int pstride, int x, int y, int *mx, int *my, int *xored)
Motion estimation function TODO make better ME decisions.
main external API structure.
static void close(AVCodecParserContext *s)
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
common internal api header.
static int score_tab[256]
int key_frame
1 -> keyframe, 0-> not
static int block_cmp(uint8_t *src, int stride, uint8_t *src2, int stride2, int bw, int bh, int *xored)
Block comparing function XXX should be optimized and moved to DSPContext TODO handle out of edge ME...
8 bit with PIX_FMT_RGB32 palette
This structure stores compressed data.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int keyint_min
minimum GOP size