]> git.sesse.net Git - vlc/blobdiff - modules/misc/stats/decoder.c
Support H.264 SEI recovery points.
[vlc] / modules / misc / stats / decoder.c
index db11673b3b04ab766a68d0f7790ef3776bd80814..9039371107b11040845baf3d4acc484f92d9e808 100644 (file)
@@ -1,10 +1,10 @@
 /*****************************************************************************
  * decoder.c: stats decoder plugin for vlc.
  *****************************************************************************
- * Copyright (C) 2002 the VideoLAN team
- * $Id$
+ * Copyright (C) 2002-2008 the VideoLAN team
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
+ *          Pierre d'Herbemont <pdherbemont@videolan.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -28,7 +28,7 @@
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
+#include <vlc_common.h>
 #include <vlc_codec.h>
 
 #include "stats.h"
@@ -52,6 +52,13 @@ int OpenDecoder ( vlc_object_t *p_this )
     p_dec->pf_decode_audio = NULL;
     p_dec->pf_decode_sub = NULL;
 
+    /* */
+    es_format_Init( &p_dec->fmt_out, VIDEO_ES, VLC_CODEC_I420 );
+    p_dec->fmt_out.video.i_width = 100;
+    p_dec->fmt_out.video.i_height = 100;
+    p_dec->fmt_out.video.i_sar_num = 1;
+    p_dec->fmt_out.video.i_sar_den = 1;
+
     return VLC_SUCCESS;
 }
 
@@ -60,21 +67,35 @@ int OpenDecoder ( vlc_object_t *p_this )
  ****************************************************************************/
 static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
 {
-    decoder_sys_t *p_sys = p_dec->p_sys;
     block_t *p_block;
+    picture_t * p_pic = NULL;
 
     if( !pp_block || !*pp_block ) return NULL;
     p_block = *pp_block;
 
+    p_pic = decoder_NewPicture( p_dec );
+
     if( p_block->i_buffer == kBufferSize )
     {
-        msg_Dbg( p_dec, "got %d ms offset", (mdate() - *(mtime_t *)p_block->p_buffer) / 1000 );
+        msg_Dbg( p_dec, "got %"PRIu64" ms",
+                 *(mtime_t *)p_block->p_buffer  / 1000 );
+        msg_Dbg( p_dec, "got %"PRIu64" ms offset",
+                 (mdate() - *(mtime_t *)p_block->p_buffer) / 1000 );
+        *(mtime_t *)(p_pic->p->p_pixels) = *(mtime_t *)p_block->p_buffer;
     }
     else
-        msg_Dbg( p_dec, "got offset of size %d", p_block->i_buffer );
+    {
+        msg_Dbg( p_dec, "got a packet not from stats demuxer" );
+        *(mtime_t *)(p_pic->p->p_pixels) = mdate();
+    }
+
+    p_pic->date = p_block->i_pts > VLC_TS_INVALID ?
+            p_block->i_pts : p_block->i_dts;
+    p_pic->b_force = true;
 
     block_Release( p_block );
-    return NULL;
+    *pp_block = NULL;
+    return p_pic;
 }
 
 /*****************************************************************************