summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authormichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-12-09 09:12:23 +0000
committermichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-12-09 09:12:23 +0000
commit3c1b43deb67550d99156b590c9a46b7f96c6cf6e (patch)
tree0f4bcae27c6ff82b120ce17b5db1168af86d4df8 /libmpcodecs
parentcd1d63b19de4cbde3cc411a5ad3f6fc37308760f (diff)
downloadmpv-3c1b43deb67550d99156b590c9a46b7f96c6cf6e.tar.bz2
mpv-3c1b43deb67550d99156b590c9a46b7f96c6cf6e.tar.xz
ffmpeg cleanup/messup support
fixing a typo in vstats (found by Markus Liebl <lieblm at web dot de>) printing qscale statistics git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8412 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/vd_ffmpeg.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c
index 80fb72b805..10b253a0da 100644
--- a/libmpcodecs/vd_ffmpeg.c
+++ b/libmpcodecs/vd_ffmpeg.c
@@ -53,6 +53,9 @@ typedef struct {
int best_csp;
int b_age;
int ip_age[2];
+ int qp_stat[32];
+ double qp_sum;
+ double inv_qp_sum;
} vd_ffmpeg_ctx;
//#ifdef FF_POSTPROCESS
@@ -245,6 +248,17 @@ static int init(sh_video_t *sh){
static void uninit(sh_video_t *sh){
vd_ffmpeg_ctx *ctx = sh->context;
AVCodecContext *avctx = ctx->avctx;
+
+ if(lavc_param_vstats){
+ int i;
+ for(i=1; i<32; i++){
+ printf("QP: %d, count: %d\n", i, ctx->qp_stat[i]);
+ }
+ printf("Arithmetic mean of QP: %2.4f, Harmonic mean of QP: %2.4f\n",
+ ctx->qp_sum / avctx->coded_picture->coded_picture_number,
+ 1.0/(ctx->inv_qp_sum / avctx->coded_picture->coded_picture_number)
+ );
+ }
if (avcodec_close(avctx) < 0)
mp_msg(MSGT_DECVIDEO,MSGL_ERR, MSGTR_CantCloseCodec);
@@ -429,13 +443,19 @@ else
ctx->ip_age[1]++;
ctx->b_age=1;
}
-//pic->age= 256*256*256*64;
-//printf("G%X %X\n", pic->linesize[0], pic->data[0]);
+#if LIBAVCODEC_BUILD >= 4644
+ pic->type= FF_BUFFER_TYPE_USER;
+#endif
return 0;
}
static void release_buffer(struct AVCodecContext *avctx, AVVideoFrame *pic){
int i;
+
+#if LIBAVCODEC_BUILD >= 4644
+ assert(pic->type == FF_BUFFER_TYPE_USER);
+#endif
+
for(i=0; i<4; i++){
pic->data[i]= NULL;
}
@@ -528,7 +548,7 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
all_len+=len;
all_frametime+=sh->frametime;
- fprintf(fvstats, "frame= %5d q= %f2.0d f_size= %6d s_size= %8.0fkB ",
+ fprintf(fvstats, "frame= %5d q= %2.2f f_size= %6d s_size= %8.0fkB ",
++frame_number, pic->quality, len, (double)all_len/1024);
fprintf(fvstats, "time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ",
all_frametime, (double)(len*8)/sh->frametime/1000.0,
@@ -547,6 +567,11 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
fprintf(fvstats, "type= B\n");
break;
}
+
+ ctx->qp_stat[(int)(pic->quality+0.5)]++;
+ ctx->qp_sum += pic->quality;
+ ctx->inv_qp_sum += 1.0/pic->quality;
+
break;
}
#endif