[Ffmpeg-cvslog] r7343 - in trunk: libavcodec/motion_est.c libavcodec/mpegvideo.c libavcodec/mpegvideo.h tests/rotozoom.regression.ref
michael
subversion
Thu Dec 21 16:20:03 CET 2006
Author: michael
Date: Thu Dec 21 16:20:02 2006
New Revision: 7343
Modified:
trunk/libavcodec/motion_est.c
trunk/libavcodec/mpegvideo.c
trunk/libavcodec/mpegvideo.h
trunk/tests/rotozoom.regression.ref
Log:
skip motion estimation and encoding of non direct-0,0 MBs if the next MB is skiped (mpeg4 doesnt allow such MBs and in the past we did ME and encoding until at the end we droped them, so this should be faster though i didnt benchmark it, benchmark welcome)
Modified: trunk/libavcodec/motion_est.c
==============================================================================
--- trunk/libavcodec/motion_est.c (original)
+++ trunk/libavcodec/motion_est.c Thu Dec 21 16:20:02 2006
@@ -1843,6 +1843,18 @@
get_limits(s, 16*mb_x, 16*mb_y);
c->skip=0;
+
+ if(s->codec_id == CODEC_ID_MPEG4 && s->next_picture.mbskip_table[xy]){
+ int score= direct_search(s, mb_x, mb_y); //FIXME just check 0,0
+
+ score= ((unsigned)(score*score + 128*256))>>16;
+ c->mc_mb_var_sum_temp += score;
+ s->current_picture.mc_mb_var[mb_y*s->mb_stride + mb_x] = score; //FIXME use SSE
+ s->mb_type[mb_y*s->mb_stride + mb_x]= CANDIDATE_MB_TYPE_DIRECT0;
+
+ return;
+ }
+
if(c->avctx->me_threshold){
int vard= check_input_motion(s, mb_x, mb_y, 0);
Modified: trunk/libavcodec/mpegvideo.c
==============================================================================
--- trunk/libavcodec/mpegvideo.c (original)
+++ trunk/libavcodec/mpegvideo.c Thu Dec 21 16:20:02 2006
@@ -5226,8 +5226,8 @@
}
}
- if(s->flags & CODEC_FLAG_QP_RD){
- if(best_s.mv_type==MV_TYPE_16X16 && !(best_s.mv_dir&MV_DIRECT)){
+ if((s->flags & CODEC_FLAG_QP_RD) && dmin < INT_MAX){
+ if(best_s.mv_type==MV_TYPE_16X16){ //FIXME move 4mv after QPRD
const int last_qp= backup_s.qscale;
int qpi, qp, dc[6];
DCTELEM ac[6][16];
@@ -5283,6 +5283,14 @@
encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb,
&dmin, &next_block, mx, my);
}
+ if(mb_type&CANDIDATE_MB_TYPE_DIRECT0){
+ backup_s.dquant = 0;
+ s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT;
+ s->mb_intra= 0;
+ ff_mpeg4_set_direct_mv(s, 0, 0);
+ encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb,
+ &dmin, &next_block, 0, 0);
+ }
s->current_picture.qscale_table[xy]= best_s.qscale;
copy_context_after_encode(s, &best_s, -1);
Modified: trunk/libavcodec/mpegvideo.h
==============================================================================
--- trunk/libavcodec/mpegvideo.h (original)
+++ trunk/libavcodec/mpegvideo.h Thu Dec 21 16:20:02 2006
@@ -402,6 +402,8 @@
#define CANDIDATE_MB_TYPE_BACKWARD_I 0x400
#define CANDIDATE_MB_TYPE_BIDIR_I 0x800
+#define CANDIDATE_MB_TYPE_DIRECT0 0x1000
+
int block_index[6]; ///< index to current MB in block based arrays with edges
int block_wrap[6];
uint8_t *dest[3];
Modified: trunk/tests/rotozoom.regression.ref
==============================================================================
--- trunk/tests/rotozoom.regression.ref (original)
+++ trunk/tests/rotozoom.regression.ref Thu Dec 21 16:20:02 2006
@@ -67,18 +67,18 @@
6455232 ./data/a-huffyuv.avi
dde5895817ad9d219f79a52d0bdfb001 *./data/out.yuv
stddev: 0.00 PSNR:99.99 bytes:7602176
-1fd3bddc95fa01ee4c4b383373803c67 *./data/a-mpeg4-rc.avi
-227936 ./data/a-mpeg4-rc.avi
-fa9079e35ff819c39656de95319846fb *./data/out.yuv
+968ca132d8cf46f84e657abcf8473b7c *./data/a-mpeg4-rc.avi
+227934 ./data/a-mpeg4-rc.avi
+895773fe8250c806a0d1592a6dd12401 *./data/out.yuv
stddev: 4.24 PSNR:35.56 bytes:7602176
9001cf571eb7f26fa5592bdec6538583 *./data/a-mpeg4-adv.avi
173590 ./data/a-mpeg4-adv.avi
699edf05648fdc42196b7bebef9be269 *./data/out.yuv
stddev: 4.84 PSNR:34.41 bytes:7602176
-7006aa0ad8643348ec0d6d87bf03202c *./data/a-mpeg4-qprd.avi
-235016 ./data/a-mpeg4-qprd.avi
-224969c07440a23b376521c484936e75 *./data/out.yuv
-stddev: 4.24 PSNR:35.56 bytes:7602176
+edd969be2816c13ae078b7a0416a5715 *./data/a-mpeg4-qprd.avi
+234852 ./data/a-mpeg4-qprd.avi
+51fa46add28e145c1a5ce6b27a4c57b8 *./data/out.yuv
+stddev: 4.24 PSNR:35.57 bytes:7602176
7ecfbb848740d316e2fcf573b32cb848 *./data/a-mpeg4-adap.avi
205454 ./data/a-mpeg4-adap.avi
c9225addf2e620e0094d26e805693af1 *./data/out.yuv
More information about the ffmpeg-cvslog
mailing list