[Ffmpeg-cvslog] CVS: ffmpeg/libavcodec avcodec.h, 1.443, 1.444 motion_est.c, 1.119, 1.120 utils.c, 1.171, 1.172
Corey Hickey
corey
Sun Jan 22 21:54:55 CET 2006
Update of /cvsroot/ffmpeg/ffmpeg/libavcodec
In directory mail:/var2/tmp/cvs-serv24568/libavcodec
Modified Files:
avcodec.h motion_est.c utils.c
Log Message:
sc_factor support for encoding.
Here's the description I'll add to the mplayer man page:
---
Causes frames with higher quantizers to be more likely to trigger a
scene change detection and make libavcodec use an I-frame (default: 1).
1-16 is a sane range.
Values between 2 and 6 may yield increasing PSNR (up to approximately
0.04 dB) and better placement of I-frames in high-motion scenes.
Higher values than 6 may give very slightly better PSNR (approximately
0.01 dB more than sc_factor=6), but noticably worse visual quality.
---
Original idea from Michael; patch by me.
Index: avcodec.h
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/avcodec.h,v
retrieving revision 1.443
retrieving revision 1.444
diff -u -d -r1.443 -r1.444
--- avcodec.h 14 Jan 2006 01:33:17 -0000 1.443
+++ avcodec.h 22 Jan 2006 20:54:51 -0000 1.444
@@ -1989,6 +1989,13 @@
* - decoding: unused
*/
int cutoff;
+
+ /**
+ * multiplied by qscale for each frame and added to scene_change_score
+ * - encoding: set by user.
+ * - decoding: unused
+ */
+ int scenechange_factor;
} AVCodecContext;
/**
Index: motion_est.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/motion_est.c,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -d -r1.119 -r1.120
--- motion_est.c 12 Jan 2006 22:43:15 -0000 1.119
+++ motion_est.c 22 Jan 2006 20:54:52 -0000 1.120
@@ -1179,7 +1179,7 @@
if (vard <= 64<<8 || vard < varc) { //FIXME
c->scene_change_score+= ff_sqrt(vard) - ff_sqrt(varc);
}else{
- c->scene_change_score+= s->qscale;
+ c->scene_change_score+= s->qscale * s->avctx->scenechange_factor;
}
return;
}
@@ -1270,7 +1270,7 @@
if (vard <= 64<<8 || vard < varc)
c->scene_change_score+= ff_sqrt(vard) - ff_sqrt(varc);
else
- c->scene_change_score+= s->qscale;
+ c->scene_change_score+= s->qscale * s->avctx->scenechange_factor;
if(mb_type == CANDIDATE_MB_TYPE_INTER){
c->sub_motion_search(s, &mx, &my, dmin, 0, 0, 0, 16);
@@ -1291,7 +1291,7 @@
if (vard <= 64<<8 || vard < varc)
c->scene_change_score+= ff_sqrt(vard) - ff_sqrt(varc);
else
- c->scene_change_score+= s->qscale;
+ c->scene_change_score+= s->qscale * s->avctx->scenechange_factor;
if (vard*2 + 200*256 > varc)
mb_type|= CANDIDATE_MB_TYPE_INTRA;
@@ -1397,7 +1397,7 @@
if (vard <= 64<<8 || vard < varc) { //FIXME
c->scene_change_score+= ff_sqrt(vard) - ff_sqrt(varc);
}else{
- c->scene_change_score+= s->qscale;
+ c->scene_change_score+= s->qscale * s->avctx->scenechange_factor;
}
}
@@ -1843,7 +1843,7 @@
/* if (vard <= 64<<8 || vard < varc) {
c->scene_change_score+= ff_sqrt(vard) - ff_sqrt(varc);
}else{
- c->scene_change_score+= s->qscale;
+ c->scene_change_score+= s->qscale * s->avctx->scenechange_factor;
}*/
return;
}
Index: utils.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/utils.c,v
retrieving revision 1.171
retrieving revision 1.172
diff -u -d -r1.171 -r1.172
--- utils.c 12 Jan 2006 22:43:17 -0000 1.171
+++ utils.c 22 Jan 2006 20:54:52 -0000 1.172
@@ -734,6 +734,7 @@
{"partp4x4", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_P4X4, INT_MIN, INT_MAX, V|E, "partitions"},
{"partp8x8", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_P8X8, INT_MIN, INT_MAX, V|E, "partitions"},
{"partb8x8", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_B8X8, INT_MIN, INT_MAX, V|E, "partitions"},
+{"sc_factor", NULL, OFFSET(scenechange_factor), FF_OPT_TYPE_INT, 6, 0, INT_MAX, V|E},
{NULL},
};
More information about the ffmpeg-cvslog
mailing list