* rawvideo.c: Pseudo audio decoder; for raw video data
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
- * $Id: rawvideo.c,v 1.2 2003/04/26 12:26:46 gbazin Exp $
+ * $Id: rawvideo.c,v 1.3 2003/04/27 17:53:20 gbazin Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
switch( p_fifo->i_fourcc )
{
- case VLC_FOURCC('I','4','2','0'):
+ /* Planar YUV */
+ case VLC_FOURCC('I','4','4','4'):
case VLC_FOURCC('I','4','2','2'):
+ case VLC_FOURCC('I','4','2','0'):
+ case VLC_FOURCC('Y','V','1','2'):
+ case VLC_FOURCC('I','Y','U','V'):
+ case VLC_FOURCC('I','4','1','1'):
+ case VLC_FOURCC('I','4','1','0'):
+
+ /* Packed YUV */
case VLC_FOURCC('Y','U','Y','2'):
+ case VLC_FOURCC('U','Y','V','Y'):
+
+ /* RGB */
+ case VLC_FOURCC('R','V','3','2'):
+ case VLC_FOURCC('R','V','2','4'):
+ case VLC_FOURCC('R','V','1','6'):
+ case VLC_FOURCC('R','V','1','5'):
+
p_fifo->pf_run = RunDecoder;
return VLC_SUCCESS;
*****************************************************************************/
static int InitThread( vdec_thread_t * p_vdec )
{
- vlc_fourcc_t i_chroma;
+ picture_t *p_pic;
+ int i;
#define bih ((BITMAPINFOHEADER*)p_vdec->p_fifo->p_bitmapinfoheader)
if( bih == NULL )
return( VLC_EGENERIC );
}
- switch( p_vdec->p_fifo->i_fourcc )
- {
- case VLC_FOURCC( 'I', '4', '2', '0' ):
- i_chroma = VLC_FOURCC( 'I', '4', '2', '0' );
- p_vdec->i_raw_size = bih->biWidth * bih->biHeight * 3 / 2;
- break;
- case VLC_FOURCC( 'I', '4', '2', '2' ):
- i_chroma = VLC_FOURCC( 'I', '4', '2', '2' );
- p_vdec->i_raw_size = bih->biWidth * bih->biHeight * 2;
- break;
- case VLC_FOURCC( 'Y', 'U', 'Y', '2' ):
- i_chroma = VLC_FOURCC( 'Y', 'U', 'Y', '2' );
- p_vdec->i_raw_size = bih->biWidth * bih->biHeight * 2;
- break;
- default:
- msg_Err( p_vdec->p_fifo, "invalid codec=%4.4s", (char*)&p_vdec->p_fifo->i_fourcc );
- return( VLC_EGENERIC );
- }
-
p_vdec->p_vout = vout_Request( p_vdec->p_fifo, NULL,
bih->biWidth, bih->biHeight,
- i_chroma,
- VOUT_ASPECT_FACTOR * bih->biWidth / bih->biHeight );
+ p_vdec->p_fifo->i_fourcc,
+ VOUT_ASPECT_FACTOR * bih->biWidth /
+ bih->biHeight );
if( p_vdec->p_vout == NULL )
{
return( VLC_EGENERIC );
}
+ /* Get a 1 picture to be able to compute p_vdec->i_raw_size */
+ p_pic = vout_CreatePicture( p_vdec->p_vout, 0, 0, 0 );
+ if( p_pic == NULL )
+ {
+ msg_Err( p_vdec->p_fifo, "failled to get a vout picture" );
+ return( VLC_EGENERIC );
+ }
+
+ p_vdec->i_raw_size = 0;
+ for( i = 0; i < p_pic->i_planes; i++ )
+ {
+ p_vdec->i_raw_size += p_pic->p[i].i_lines * p_pic->p[i].i_visible_pitch
+ * p_pic->p[i].i_pixel_pitch;
+ }
+
+ vout_DestroyPicture( p_vdec->p_vout, p_pic );
+
return( VLC_SUCCESS );
#undef bih
}
* thread, and destroy a previously oppened video output thread.
*****************************************************************************
* Copyright (C) 2000-2001 VideoLAN
- * $Id: video_output.c,v 1.218 2003/04/14 22:22:32 massiot Exp $
+ * $Id: video_output.c,v 1.219 2003/04/27 17:53:20 gbazin Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
*
vlc_object_attach( p_vout, p_parent );
if( vlc_thread_create( p_vout, "video output", RunThread,
- VLC_THREAD_PRIORITY_OUTPUT, VLC_FALSE ) )
+ VLC_THREAD_PRIORITY_OUTPUT, VLC_TRUE ) )
{
msg_Err( p_vout, "out of memory" );
module_Unneed( p_vout, p_vout->p_module );
* Initialize thread
*/
p_vout->b_error = InitThread( p_vout );
+
+ /* signal the creation of the vout */
+ vlc_thread_ready( p_vout );
+
if( p_vout->b_error )
{
/* Destroy thread structures allocated by Create and InitThread */
}
/* Need to reinitialise the chroma plugin */
- p_vout->chroma.p_module->pf_deactivate( VLC_OBJECT(p_vout) );
+ if( p_vout->chroma.p_module->pf_deactivate )
+ p_vout->chroma.p_module->pf_deactivate( VLC_OBJECT(p_vout) );
p_vout->chroma.p_module->pf_activate( VLC_OBJECT(p_vout) );
}
}
* vout_pictures.c : picture management functions
*****************************************************************************
* Copyright (C) 2000 VideoLAN
- * $Id: vout_pictures.c,v 1.37 2003/04/20 12:59:02 massiot Exp $
+ * $Id: vout_pictures.c,v 1.38 2003/04/27 17:53:21 gbazin Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
/* Calculate coordinates */
switch( i_chroma )
{
+ case FOURCC_I411:
+ p_pic->p[ Y_PLANE ].i_lines = i_height;
+ p_pic->p[ Y_PLANE ].i_pitch = i_width;
+ p_pic->p[ Y_PLANE ].i_visible_pitch = p_pic->p[ Y_PLANE ].i_pitch;
+ p_pic->p[ U_PLANE ].i_lines = i_height;
+ p_pic->p[ U_PLANE ].i_pitch = i_width / 4;
+ p_pic->p[ U_PLANE ].i_visible_pitch = p_pic->p[ U_PLANE ].i_pitch;
+ p_pic->p[ V_PLANE ].i_lines = i_height;
+ p_pic->p[ V_PLANE ].i_pitch = i_width / 4;
+ p_pic->p[ V_PLANE ].i_visible_pitch = p_pic->p[ V_PLANE ].i_pitch;
+ p_pic->i_planes = 3;
+ break;
+
case FOURCC_I410:
p_pic->p[ Y_PLANE ].i_lines = i_height;
p_pic->p[ Y_PLANE ].i_pitch = i_width;
* vout_pictures.h : picture management definitions
*****************************************************************************
* Copyright (C) 2002 VideoLAN
- * $Id: vout_pictures.h,v 1.3 2002/11/28 17:35:01 sam Exp $
+ * $Id: vout_pictures.h,v 1.4 2003/04/27 17:53:21 gbazin Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
/* Packed YUV 2:1:1, Y:U:Y:V */
#define FOURCC_Y211 VLC_FOURCC('Y','2','1','1')
+/* Planar YUV 4:1:1, Y:U:V */
+#define FOURCC_I411 VLC_FOURCC('I','4','1','1')
+
/* Planar YUV 4:1:0, Y:U:V */
#define FOURCC_I410 VLC_FOURCC('I','4','1','0')