nsse weight
Originally committed as revision 3205 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
e6a2ac3474
commit
d4c5d2adf3
@ -17,7 +17,7 @@ extern "C" {
|
||||
|
||||
#define FFMPEG_VERSION_INT 0x000408
|
||||
#define FFMPEG_VERSION "0.4.8"
|
||||
#define LIBAVCODEC_BUILD 4715
|
||||
#define LIBAVCODEC_BUILD 4716
|
||||
|
||||
#define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT
|
||||
#define LIBAVCODEC_VERSION FFMPEG_VERSION
|
||||
@ -1591,11 +1591,18 @@ typedef struct AVCodecContext {
|
||||
int mb_threshold;
|
||||
|
||||
/**
|
||||
*
|
||||
* precision of the intra dc coefficient - 8.
|
||||
* - encoding: set by user
|
||||
* - decoding: unused
|
||||
*/
|
||||
int intra_dc_precision;
|
||||
|
||||
/**
|
||||
* noise vs. sse weight for the nsse comparsion function.
|
||||
* - encoding: set by user
|
||||
* - decoding: unused
|
||||
*/
|
||||
int nsse_weight;
|
||||
} AVCodecContext;
|
||||
|
||||
|
||||
|
@ -2587,11 +2587,11 @@ static int pix_abs8_xy2_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size,
|
||||
return s;
|
||||
}
|
||||
|
||||
static int nsse16_c(/*MpegEncContext*/ void *c, uint8_t *s1, uint8_t *s2, int stride, int h){
|
||||
static int nsse16_c(MpegEncContext *c, uint8_t *s1, uint8_t *s2, int stride, int h){
|
||||
int score1=0;
|
||||
int score2=0;
|
||||
int x,y;
|
||||
|
||||
|
||||
for(y=0; y<h; y++){
|
||||
for(x=0; x<16; x++){
|
||||
score1+= (s1[x ] - s2[x ])*(s1[x ] - s2[x ]);
|
||||
@ -2607,11 +2607,12 @@ static int nsse16_c(/*MpegEncContext*/ void *c, uint8_t *s1, uint8_t *s2, int st
|
||||
s1+= stride;
|
||||
s2+= stride;
|
||||
}
|
||||
|
||||
return score1 + ABS(score2)*8;
|
||||
|
||||
if(c) return score1 + ABS(score2)*c->avctx->nsse_weight;
|
||||
else return score1 + ABS(score2)*8;
|
||||
}
|
||||
|
||||
static int nsse8_c(/*MpegEncContext*/ void *c, uint8_t *s1, uint8_t *s2, int stride, int h){
|
||||
static int nsse8_c(MpegEncContext *c, uint8_t *s1, uint8_t *s2, int stride, int h){
|
||||
int score1=0;
|
||||
int score2=0;
|
||||
int x,y;
|
||||
@ -2632,7 +2633,8 @@ static int nsse8_c(/*MpegEncContext*/ void *c, uint8_t *s1, uint8_t *s2, int str
|
||||
s2+= stride;
|
||||
}
|
||||
|
||||
return score1 + ABS(score2)*8;
|
||||
if(c) return score1 + ABS(score2)*c->avctx->nsse_weight;
|
||||
else return score1 + ABS(score2)*8;
|
||||
}
|
||||
|
||||
static int try_8x8basis_c(int16_t rem[64], int16_t weight[64], int16_t basis[64], int scale){
|
||||
|
@ -223,7 +223,6 @@ static inline int get_penalty_factor(MpegEncContext *s, int type){
|
||||
switch(type&0xFF){
|
||||
default:
|
||||
case FF_CMP_SAD:
|
||||
case FF_CMP_NSSE:
|
||||
return s->lambda>>FF_LAMBDA_SHIFT;
|
||||
case FF_CMP_DCT:
|
||||
return (3*s->lambda)>>(FF_LAMBDA_SHIFT+1);
|
||||
@ -232,6 +231,7 @@ static inline int get_penalty_factor(MpegEncContext *s, int type){
|
||||
case FF_CMP_RD:
|
||||
case FF_CMP_PSNR:
|
||||
case FF_CMP_SSE:
|
||||
case FF_CMP_NSSE:
|
||||
return s->lambda2>>FF_LAMBDA_SHIFT;
|
||||
case FF_CMP_BIT:
|
||||
return 1;
|
||||
|
@ -3917,9 +3917,9 @@ static int sse_mb(MpegEncContext *s){
|
||||
|
||||
if(w==16 && h==16)
|
||||
if(s->avctx->mb_cmp == FF_CMP_NSSE){
|
||||
return s->dsp.nsse[0](NULL, s->new_picture.data[0] + s->mb_x*16 + s->mb_y*s->linesize*16, s->dest[0], s->linesize, 16)
|
||||
+s->dsp.nsse[1](NULL, s->new_picture.data[1] + s->mb_x*8 + s->mb_y*s->uvlinesize*8,s->dest[1], s->uvlinesize, 8)
|
||||
+s->dsp.nsse[1](NULL, s->new_picture.data[2] + s->mb_x*8 + s->mb_y*s->uvlinesize*8,s->dest[2], s->uvlinesize, 8);
|
||||
return s->dsp.nsse[0](s, s->new_picture.data[0] + s->mb_x*16 + s->mb_y*s->linesize*16, s->dest[0], s->linesize, 16)
|
||||
+s->dsp.nsse[1](s, s->new_picture.data[1] + s->mb_x*8 + s->mb_y*s->uvlinesize*8,s->dest[1], s->uvlinesize, 8)
|
||||
+s->dsp.nsse[1](s, s->new_picture.data[2] + s->mb_x*8 + s->mb_y*s->uvlinesize*8,s->dest[2], s->uvlinesize, 8);
|
||||
}else{
|
||||
return s->dsp.sse[0](NULL, s->new_picture.data[0] + s->mb_x*16 + s->mb_y*s->linesize*16, s->dest[0], s->linesize, 16)
|
||||
+s->dsp.sse[1](NULL, s->new_picture.data[1] + s->mb_x*8 + s->mb_y*s->uvlinesize*8,s->dest[1], s->uvlinesize, 8)
|
||||
|
Loading…
Reference in New Issue
Block a user