|
|
|
@ -114,16 +114,6 @@ static int flashsv_encode_init(AVCodecContext *avctx) |
|
|
|
|
|
|
|
|
|
// Needed if zlib unused or init aborted before deflateInit
|
|
|
|
|
memset(&(s->zstream), 0, sizeof(z_stream)); |
|
|
|
|
/*
|
|
|
|
|
s->zstream.zalloc = NULL; //av_malloc;
|
|
|
|
|
s->zstream.zfree = NULL; //av_free;
|
|
|
|
|
s->zstream.opaque = NULL; |
|
|
|
|
zret = deflateInit(&(s->zstream), 9); |
|
|
|
|
if (zret != Z_OK) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
s->last_key_frame=0; |
|
|
|
|
|
|
|
|
@ -193,22 +183,7 @@ static int encode_bitstream(FlashSVContext *s, AVFrame *p, uint8_t *buf, int buf |
|
|
|
|
//ret = deflateReset(&(s->zstream));
|
|
|
|
|
if (ret != Z_OK) |
|
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "error while compressing block %dx%d\n", i, j); |
|
|
|
|
/*
|
|
|
|
|
s->zstream.next_in = s->tmpblock; |
|
|
|
|
s->zstream.avail_in = 3*ws*hs; |
|
|
|
|
s->zstream.total_in = 0; |
|
|
|
|
|
|
|
|
|
s->zstream.next_out = ptr+2; |
|
|
|
|
s->zstream.avail_out = buf_size-buf_pos-2; |
|
|
|
|
s->zstream.total_out = 0; |
|
|
|
|
|
|
|
|
|
ret = deflate(&(s->zstream), Z_FINISH); |
|
|
|
|
if ((ret != Z_OK) && (ret != Z_STREAM_END)) |
|
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "error while compressing block %dx%d\n", i, j); |
|
|
|
|
|
|
|
|
|
size = s->zstream.total_out; |
|
|
|
|
//av_log(avctx, AV_LOG_INFO, "compressed blocks: %d\n", size);
|
|
|
|
|
*/ |
|
|
|
|
bytestream_put_be16(&ptr,(unsigned int)zsize); |
|
|
|
|
buf_pos += zsize+2; |
|
|
|
|
//av_log(avctx, AV_LOG_ERROR, "buf_pos = %d\n", buf_pos);
|
|
|
|
@ -263,38 +238,6 @@ static int flashsv_encode_frame(AVCodecContext *avctx, uint8_t *buf, int buf_siz |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if 0 |
|
|
|
|
int w, h; |
|
|
|
|
int optim_sizes[16][16]; |
|
|
|
|
int smallest_size; |
|
|
|
|
//Try all possible combinations and store the encoded frame sizes
|
|
|
|
|
for (w=1 ; w<17 ; w++) { |
|
|
|
|
for (h=1 ; h<17 ; h++) { |
|
|
|
|
optim_sizes[w-1][h-1] = encode_bitstream(s, p, s->encbuffer, s->image_width*s->image_height*4, w*16, h*16, s->previous_frame); |
|
|
|
|
//av_log(avctx, AV_LOG_ERROR, "[%d][%d]size = %d\n",w,h,optim_sizes[w-1][h-1]);
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Search for the smallest framesize and encode the frame with those parameters
|
|
|
|
|
smallest_size=optim_sizes[0][0]; |
|
|
|
|
opt_w = 0; |
|
|
|
|
opt_h = 0; |
|
|
|
|
for (w=0 ; w<16 ; w++) { |
|
|
|
|
for (h=0 ; h<16 ; h++) { |
|
|
|
|
if (optim_sizes[w][h] < smallest_size) { |
|
|
|
|
smallest_size = optim_sizes[w][h]; |
|
|
|
|
opt_w = w; |
|
|
|
|
opt_h = h; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
res = encode_bitstream(s, p, buf, buf_size, (opt_w+1)*16, (opt_h+1)*16, s->previous_frame); |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "[%d][%d]optimal size = %d, res = %d|\n", opt_w, opt_h, smallest_size, res); |
|
|
|
|
|
|
|
|
|
if (buf_size < res) |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "buf_size %d < res %d\n", buf_size, res); |
|
|
|
|
|
|
|
|
|
#else |
|
|
|
|
opt_w=4; |
|
|
|
|
opt_h=4; |
|
|
|
|
|
|
|
|
@ -305,7 +248,7 @@ static int flashsv_encode_frame(AVCodecContext *avctx, uint8_t *buf, int buf_siz |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
res = encode_bitstream(s, p, buf, buf_size, opt_w*16, opt_h*16, pfptr, &I_frame); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
//save the current frame
|
|
|
|
|
if(p->linesize[0] > 0) |
|
|
|
|
memcpy(s->previous_frame, p->data[0], s->image_height*p->linesize[0]); |
|
|
|
|