*/
/**
- * @file svq1enc.c
+ * @file libavcodec/svq1enc.c
* Sorenson Vector Quantizer #1 (SVQ1) video codec.
* For more information of the SVQ1 algorithm, visit:
* http://www.pcisys.net/~melanson/codecs/
int16_t (*motion_val16[3])[2];
int64_t rd_total;
+
+ uint8_t *scratchbuf;
} SVQ1Context;
static void svq1_write_header(SVQ1Context *s, int frame_type)
#define QUALITY_THRESHOLD 100
#define THRESHOLD_MULTIPLIER 0.6
-#if defined(HAVE_ALTIVEC)
+#if HAVE_ALTIVEC
#undef vector
#endif
uint8_t *decoded= decoded_plane + offset;
uint8_t *ref= ref_plane + offset;
int score[4]={0,0,0,0}, best;
- uint8_t temp[16*stride];
+ uint8_t *temp = s->scratchbuf;
if(s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb)>>3) < 3000){ //FIXME check size
av_log(s->avctx, AV_LOG_ERROR, "encoded frame too large\n");
if(!s->current_picture.data[0]){
avctx->get_buffer(avctx, &s->current_picture);
avctx->get_buffer(avctx, &s->last_picture);
+ s->scratchbuf = av_malloc(s->current_picture.linesize[0] * 16);
}
temp= s->current_picture;
flush_put_bits(&s->pb);
- return (put_bits_count(&s->pb) / 8);
+ return put_bits_count(&s->pb) / 8;
}
static av_cold int svq1_encode_end(AVCodecContext *avctx)
av_freep(&s->m.me.score_map);
av_freep(&s->mb_type);
av_freep(&s->dummy);
+ av_freep(&s->scratchbuf);
for(i=0; i<3; i++){
av_freep(&s->motion_val8[i]);
svq1_encode_init,
svq1_encode_frame,
svq1_encode_end,
- .pix_fmts= (enum PixelFormat[]){PIX_FMT_YUV410P, -1},
+ .pix_fmts= (enum PixelFormat[]){PIX_FMT_YUV410P, PIX_FMT_NONE},
+ .long_name= NULL_IF_CONFIG_SMALL("Sorenson Vector Quantizer 1"),
};