psz_name[2] == '\\' && psz_name[3] == '\0' ) psz_name[2] = '\0';
#endif
- /* Override environment variable DVDCSS_METHOD with config option
- * (FIXME: this creates a small memory leak) */
+ /* Override environment variable DVDCSS_METHOD with config option */
psz_dvdcss_env = config_GetPsz( p_demux, "dvdread-css-method" );
if( psz_dvdcss_env && *psz_dvdcss_env )
+#ifdef HAVE_SETENV
+ setenv( "DVDCSS_METHOD", psz_dvdcss_env, 1 );
+#else
{
+ /* FIXME: this create a small memory leak */
char *psz_env;
-
psz_env = malloc( strlen("DVDCSS_METHOD=") +
strlen( psz_dvdcss_env ) + 1 );
if( !psz_env )
free( psz_dvdcss_env );
return VLC_ENOMEM;
}
-
sprintf( psz_env, "%s%s", "DVDCSS_METHOD=", psz_dvdcss_env );
-
putenv( psz_env );
}
+#endif
free( psz_dvdcss_env );
/* Open dvdread */
demux_sys_t *p_sys = p_demux->p_sys;
uint8_t *p = pkt;
- while( p < &pkt[i_pkt] )
+ while( p && p < &pkt[i_pkt] )
{
- int i_size = ps_pkt_size( p, &pkt[i_pkt] - p );
block_t *p_pkt;
+ int i_size = &pkt[i_pkt] - p;
+
+ if( i_size < 6 )
+ break;
+
+ i_size = ps_pkt_size( p, i_size );
if( i_size <= 0 )
{
break;
/* Add a new ES */
if( tk->fmt.i_cat == VIDEO_ES )
{
- if( p_sys->i_aspect >= 0 )
+ switch( p_sys->i_aspect )
{
- tk->fmt.video.i_aspect = p_sys->i_aspect;
+ case 1: tk->fmt.video.i_aspect = VOUT_ASPECT_FACTOR; break;
+ case 2: tk->fmt.video.i_aspect = VOUT_ASPECT_FACTOR * 4 / 3; break;
+ case 3: tk->fmt.video.i_aspect = VOUT_ASPECT_FACTOR * 16 / 9; break;
+ case 4: tk->fmt.video.i_aspect = VOUT_ASPECT_FACTOR * 221 / 10; break;
+ default:
+ tk->fmt.video.i_aspect = 0;
+ break;
}
}
else if( tk->fmt.i_cat == AUDIO_ES )