free( psz_filter_chain );
}
- if( p_vout->fmt_render.i_chroma != p_fmt->i_chroma ||
+ if( p_vout->fmt_render.i_chroma != vlc_fourcc_GetCodec( VIDEO_ES, p_fmt->i_chroma ) ||
p_vout->fmt_render.i_width != p_fmt->i_width ||
p_vout->fmt_render.i_height != p_fmt->i_height ||
p_vout->p->b_filter_change )
{
msg_Dbg( p_this, "reusing provided vout" );
- spu_Attach( p_vout->p_spu, p_this, true );
-
+ spu_Attach( p_vout->p_spu, VLC_OBJECT(p_vout), false );
vlc_object_detach( p_vout );
+
vlc_object_attach( p_vout, p_this );
+ spu_Attach( p_vout->p_spu, VLC_OBJECT(p_vout), true );
}
}
unsigned int i_width = p_fmt->i_width;
unsigned int i_height = p_fmt->i_height;
- vlc_fourcc_t i_chroma = p_fmt->i_chroma;
+ vlc_fourcc_t i_chroma = vlc_fourcc_GetCodec( VIDEO_ES, p_fmt->i_chroma );
unsigned int i_aspect = p_fmt->i_aspect;
config_chain_t *p_cfg;
/* Initialize subpicture unit */
p_vout->p_spu = spu_Create( p_vout );
- spu_Attach( p_vout->p_spu, p_parent, true );
/* Attach the new object now so we can use var inheritance below */
vlc_object_attach( p_vout, p_parent );
+ /* */
spu_Init( p_vout->p_spu );
+ spu_Attach( p_vout->p_spu, VLC_OBJECT(p_vout), true );
+
/* Take care of some "interface/control" related initialisations */
vout_IntfInit( p_vout );
vlc_mutex_unlock( &p_vout->change_lock );
}
+spu_t *vout_GetSpu( vout_thread_t *p_vout )
+{
+ return p_vout->p_spu;
+}
+
/*****************************************************************************
* InitThread: initialize video output thread
*****************************************************************************
if( !vout_ChromaCmp( p_output->i_chroma, p_render->i_chroma ) )
return false;
- if( p_output->i_chroma != FOURCC_RV15 &&
- p_output->i_chroma != FOURCC_RV16 &&
- p_output->i_chroma != FOURCC_RV24 &&
- p_output->i_chroma != FOURCC_RV32 )
+ if( p_output->i_chroma != VLC_CODEC_RGB15 &&
+ p_output->i_chroma != VLC_CODEC_RGB16 &&
+ p_output->i_chroma != VLC_CODEC_RGB24 &&
+ p_output->i_chroma != VLC_CODEC_RGB32 )
return true;
return p_output->i_rmask == p_render->i_rmask &&
}
}
- /* Link pictures back to their heap */
- for( i = 0 ; i < I_RENDERPICTURES ; i++ )
- {
- PP_RENDERPICTURE[ i ]->p_heap = &p_vout->render;
- }
-
- for( i = 0 ; i < I_OUTPUTPICTURES ; i++ )
- {
- PP_OUTPUTPICTURE[ i ]->p_heap = &p_vout->output;
- }
-
return VLC_SUCCESS;
}
picture_Copy( p_pic, p_directbuffer );
+ p_pic->format.i_sar_num = p_vout->fmt_out.i_sar_num;
+ p_pic->format.i_sar_den = p_vout->fmt_out.i_sar_den;
+
p_pic->p_next = p_vout->p->snapshot.p_picture;
p_vout->p->snapshot.p_picture = p_pic;
p_vout->p->snapshot.i_request--;
}
/* following functions are local */
-static int ReduceHeight( int i_ratio )
-{
- int i_dummy = VOUT_ASPECT_FACTOR;
- int i_pgcd = 1;
-
- if( !i_ratio )
- {
- return i_pgcd;
- }
-
- /* VOUT_ASPECT_FACTOR is (2^7 * 3^3 * 5^3), we just check for 2, 3 and 5 */
- while( !(i_ratio & 1) && !(i_dummy & 1) )
- {
- i_ratio >>= 1;
- i_dummy >>= 1;
- i_pgcd <<= 1;
- }
-
- while( !(i_ratio % 3) && !(i_dummy % 3) )
- {
- i_ratio /= 3;
- i_dummy /= 3;
- i_pgcd *= 3;
- }
-
- while( !(i_ratio % 5) && !(i_dummy % 5) )
- {
- i_ratio /= 5;
- i_dummy /= 5;
- i_pgcd *= 5;
- }
-
- return i_pgcd;
-}
-
static void AspectRatio( int i_aspect, int *i_aspect_x, int *i_aspect_y )
{
- unsigned int i_pgcd = ReduceHeight( i_aspect );
+ const int i_pgcd = i_aspect ? GCD( i_aspect, VOUT_ASPECT_FACTOR ) : 1;
*i_aspect_x = i_aspect / i_pgcd;
*i_aspect_y = VOUT_ASPECT_FACTOR / i_pgcd;
}
const mtime_t i_start = mdate();
const mtime_t i_stop = i_start + INT64_C(1000) * p_vout->p->i_title_timeout;
+ if( i_stop <= i_start )
+ return
+
vlc_assert_locked( &p_vout->change_lock );
vout_ShowTextAbsolute( p_vout, DEFAULT_CHAN,
const deinterlace_mode_t *p_mode;
for( p_mode = &p_deinterlace_mode[0]; p_mode->psz_mode; p_mode++ )
{
- if( !strcmp( p_mode->psz_mode, newval.psz_string ?: "" ) )
+ if( !strcmp( p_mode->psz_mode,
+ newval.psz_string ? newval.psz_string : "" ) )
break;
}
if( !p_mode->psz_mode )
for( int i = 0; p_deinterlace_mode[i].psz_mode; i++ )
{
val.psz_string = (char*)p_deinterlace_mode[i].psz_mode;
- text.psz_string = (char*)_(p_deinterlace_mode[i].psz_description);
+ text.psz_string = (char*)vlc_gettext(p_deinterlace_mode[i].psz_description);
var_Change( p_vout, "deinterlace", VLC_VAR_ADDCHOICE, &val, &text );
}
var_AddCallback( p_vout, "deinterlace", DeinterlaceCallback, NULL );
else if( DeinterlaceIsPresent( p_vout, false ) )
psz_mode = var_CreateGetNonEmptyString( p_vout, "sout-deinterlace-mode" );
}
- var_SetString( p_vout, "deinterlace", psz_mode ?: "" );
+ var_SetString( p_vout, "deinterlace", psz_mode ? psz_mode : "" );
free( psz_mode );
}