]> git.sesse.net Git - vlc/blobdiff - modules/codec/invmem.c
Merge commit 'origin/1.0-bugfix'
[vlc] / modules / codec / invmem.c
index 060894af7e5c763501799e2c0e41334903fd500d..2990644f16584d2b5b0a6157e52bb36f124f5167 100644 (file)
@@ -151,9 +151,8 @@ static int OpenDecoder( vlc_object_t *p_this )
     }
 
     /* Set output properties */
-    p_dec->fmt_out.i_cat = VIDEO_ES;
-    //p_dec->fmt_out.i_codec = VLC_FOURCC('R','G','B','A');
-    p_dec->fmt_out.i_codec = VLC_FOURCC('R','V','2','4');
+    //p_dec->fmt_out.i_codec = VLC_CODEC_RGBA;
+    p_dec->fmt_out.i_codec = VLC_CODEC_RGB24;
     p_dec->fmt_out.video.i_width = p_dec->p_sys->i_width;
     p_dec->fmt_out.video.i_height = p_dec->p_sys->i_height;
     p_dec->fmt_out.video.i_aspect = VOUT_ASPECT_FACTOR * p_dec->p_sys->i_width / p_dec->p_sys->i_height;
@@ -164,8 +163,7 @@ static int OpenDecoder( vlc_object_t *p_this )
 
     p_sys->i_pitch = p_sys->i_width*3 + p_sys->i_width%4;
 
-    // create new picture
-    p_sys->p_pic = p_dec->pf_vout_buffer_new( p_dec );
+    p_sys->p_pic = NULL;
 
     /* Set callbacks */
     p_dec->pf_decode_video = DecodeBlock;
@@ -181,16 +179,21 @@ static 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;
 
     if( !pp_block || !*pp_block ) return NULL;
 
+    p_block = *pp_block;
+
     // create new picture
-    picture_Release( p_sys->p_pic );
-    p_sys->p_pic = p_dec->pf_vout_buffer_new( p_dec );
+    if( p_sys->p_pic != NULL )
+        picture_Release( p_sys->p_pic );
+    p_sys->p_pic = decoder_NewPicture( p_dec );
     p_sys->p_pic->b_force = true;
     p_sys->p_pic->p->i_pitch = p_dec->p_sys->i_pitch;
+    p_sys->p_pic->date = p_block->i_pts > 0 ? p_block->i_pts : p_block->i_dts;
 
-   // lock input and copy to picture
+    // lock input and copy to picture
     p_sys->p_pic->p->p_pixels = p_sys->pf_lock( p_dec->p_sys->p_data );
 
     // unlock input
@@ -208,5 +211,8 @@ static void CloseDecoder( vlc_object_t *p_this )
     decoder_t *p_dec = (decoder_t *)p_this;
     decoder_sys_t *p_sys = p_dec->p_sys;
 
+    if( p_sys->p_pic != NULL )
+        picture_Release( p_sys->p_pic );
+
     free( p_sys );
 }