38 #define ZMBV_KEYFRAME 1 39 #define ZMBV_DELTAPAL 2 86 uint8_t *src2,
int stride2,
int bw,
int bh,
91 uint16_t histogram[256] = {0};
92 int bw_bytes = bw * c->
bypp;
95 for(j = 0; j < bh; j++){
96 for(i = 0; i < bw_bytes; i++){
97 int t = src[
i] ^ src2[
i];
105 *xored = (histogram[0] < bw_bytes * bh);
108 if (!*xored)
return 0;
111 for(i = 0; i < 256; i++)
121 int pstride,
int x,
int y,
int *mx,
int *my,
int *xored)
123 int dx, dy, txored, tv, bv, bw, bh;
132 bv =
block_cmp(c, src, sstride, prev, pstride, bw, bh, xored);
138 tv =
block_cmp(c, src, sstride, prev + mx0 * c->
bypp + my0 * pstride, pstride, bw, bh, &txored);
151 if(!dx && !dy)
continue;
152 if(dx == mx0 && dy == my0)
continue;
153 tv =
block_cmp(c, src, sstride, prev + dx * c->
bypp + dy * pstride, pstride, bw, bh, &txored);
167 const AVFrame *pict,
int *got_packet)
170 const AVFrame *
const p = pict;
175 int work_size = 0, pkt_size;
183 #if FF_API_CODED_FRAME 191 chpal = !keyframe && palptr && memcmp(palptr, c->
pal2, 1024);
197 for(i = 0; i < 256; i++){
199 c->
work_buf[work_size++] = tpal[0] ^ c->
pal[i * 3 + 0];
200 c->
work_buf[work_size++] = tpal[1] ^ c->
pal[i * 3 + 1];
201 c->
work_buf[work_size++] = tpal[2] ^ c->
pal[i * 3 + 2];
202 c->
pal[i * 3 + 0] = tpal[0];
203 c->
pal[i * 3 + 1] = tpal[1];
204 c->
pal[i * 3 + 2] = tpal[2];
206 memcpy(c->
pal2, palptr, 1024);
210 for(i = 0; i < 256; i++){
214 memcpy(c->
pal2, palptr, 1024);
217 for(i = 0; i < avctx->
height; i++){
223 int x, y, bh2, bw2, xored;
231 memset(c->
work_buf + work_size, 0, (bw * bh * 2 + 3) & ~3);
232 work_size += (bw * bh * 2 + 3) & ~3;
239 tsrc = src + x * c->
bypp;
240 tprev = prev + x * c->
bypp;
243 mv[0] = (mx * 2) | !!xored;
247 for(j = 0; j < bh2; j++){
248 for(i = 0; i < bw2 * c->
bypp; i++)
249 c->
work_buf[work_size++] = tsrc[i] ^ tprev[i];
262 for(i = 0; i < avctx->
height; i++){
263 memcpy(prev, src, avctx->
width * c->
bypp);
272 c->
zstream.avail_in = work_size;
283 pkt_size = c->
zstream.total_out + 1 + 6*keyframe;
328 int prev_size, prev_offset;
343 #ifdef ZMBV_ENABLE_24BPP 348 #endif //ZMBV_ENABLE_24BPP 379 if(lvl < 0 || lvl > 9){
385 memset(&c->
zstream, 0,
sizeof(z_stream));
387 ((avctx->
width + ZMBV_BLOCK - 1) / ZMBV_BLOCK) * ((avctx->
height + ZMBV_BLOCK - 1) / ZMBV_BLOCK) * 2 + 4;
422 zret = deflateInit(&c->
zstream, lvl);
443 #ifdef ZMBV_ENABLE_24BPP 445 #endif //ZMBV_ENABLE_24BPP
This structure describes decoded (raw) audio or video data.
static av_cold int init(AVCodecContext *avctx)
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined ...
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static av_cold int encode_end(AVCodecContext *avctx)
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
8 bits with AV_PIX_FMT_RGB32 palette
int me_range
maximum motion estimation search range in subpel units If 0 then no limit.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
#define i(width, name, range_min, range_max)
#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. ...
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
const char * name
Name of the codec implementation.
int flags
A combination of AV_PKT_FLAG values.
enum AVPictureType pict_type
Picture type of the frame.
int width
picture width / height.
packed RGB 8:8:8, 24bpp, BGRBGR...
static const int8_t mv[256][2]
#define AV_LOG_INFO
Standard information.
Libavcodec external API header.
int score_tab[ZMBV_BLOCK *ZMBV_BLOCK *4+1]
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
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.
packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet)
static enum AVPixelFormat pix_fmts[]
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
#define FF_DISABLE_DEPRECATION_WARNINGS
common internal api header.
common internal and external API header
attribute_deprecated AVFrame * coded_frame
the picture in the bitstream
static void deflate(uint8_t *dst, const uint8_t *p1, int width, int threshold, const uint8_t *coordinates[], int coord, int maxc)
#define FF_ENABLE_DEPRECATION_WARNINGS
int key_frame
1 -> keyframe, 0-> not
static int block_cmp(ZmbvEncContext *c, 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.
AVPixelFormat
Pixel format.
This structure stores compressed data.
int keyint_min
minimum GOP size