# define LOADER
#else
# include <objbase.h>
+# include <vlc_charset.h>
#endif
#ifdef LOADER
set_capability( "decoder", 1 )
set_callbacks( DecoderOpen, DecoderClose )
set_category( CAT_INPUT )
- set_subcategory( SUBCAT_INPUT_SCODEC )
+ set_subcategory( SUBCAT_INPUT_VCODEC )
# define ENC_CFG_PREFIX "sout-dmo-"
add_submodule ()
p_dec->fmt_out.video.i_bits_per_pixel = i_bpp;
/* If an aspect-ratio was specified in the input format then force it */
- if( p_dec->fmt_in.video.i_aspect )
+ if( p_dec->fmt_in.video.i_sar_num > 0 &&
+ p_dec->fmt_in.video.i_sar_den > 0 )
{
- p_dec->fmt_out.video.i_aspect = p_dec->fmt_in.video.i_aspect;
+ p_dec->fmt_out.video.i_sar_num = p_dec->fmt_in.video.i_sar_num;
+ p_dec->fmt_out.video.i_sar_den = p_dec->fmt_in.video.i_sar_den;
}
else
{
- p_dec->fmt_out.video.i_aspect = VOUT_ASPECT_FACTOR *
- p_dec->fmt_out.video.i_width / p_dec->fmt_out.video.i_height;
+ p_dec->fmt_out.video.i_sar_num = 1;
+ p_dec->fmt_out.video.i_sar_den = 1;
}
p_bih = &p_vih->bmiHeader;
while( ( S_OK == p_enum_dmo->vt->Next( p_enum_dmo, 1, &clsid_dmo,
&psz_dmo_name, &i_dummy /* NULL doesn't work */ ) ) )
{
- char psz_temp[MAX_PATH];
- wcstombs( psz_temp, psz_dmo_name, MAX_PATH );
+ char *psz_temp = FromWide( psz_dmo_name );
msg_Dbg( p_this, "found DMO: %s", psz_temp );
CoTaskMemFree( psz_dmo_name );
&IID_IMediaObject, (void **)pp_dmo ) )
{
msg_Warn( p_this, "can't create DMO: %s", psz_temp );
+ free( psz_temp );
*pp_dmo = 0;
}
- else break;
+ else
+ {
+ free( psz_temp );
+ break;
+ }
}
p_enum_dmo->vt->Release( (IUnknown *)p_enum_dmo );
}
i_err = GetClass( codecs_table[i_codec].p_guid, &IID_IClassFactory,
- (void**)&cFactory );
+ &cFactory );
if( i_err || cFactory == NULL )
{
msg_Dbg( p_this, "no such class object" );
}
i_err = cFactory->vt->CreateInstance( cFactory, 0, &IID_IUnknown,
- (void**)&cObject );
+ &cObject );
cFactory->vt->Release( (IUnknown*)cFactory );
if( i_err || !cObject )
{
return VLC_EGENERIC;
}
i_err = cObject->vt->QueryInterface( cObject, &IID_IMediaObject,
- (void**)pp_dmo );
+ pp_dmo );
cObject->vt->Release( (IUnknown*)cObject );
if( i_err || !*pp_dmo )
{
p_block = *pp_block;
/* Won't work with streams with B-frames, but do we have any ? */
- if( p_block && p_block->i_pts <= 0 ) p_block->i_pts = p_block->i_dts;
+ if( p_block && p_block->i_pts <= VLC_TS_INVALID )
+ p_block->i_pts = p_block->i_dts;
/* Date management */
- if( p_block && p_block->i_pts > 0 &&
+ if( p_block && p_block->i_pts > VLC_TS_INVALID &&
p_block->i_pts != date_Get( &p_sys->end_date ) )
{
date_Set( &p_sys->end_date, p_block->i_pts );
memcpy( p_aout_buffer->p_buffer,
block_out.p_buffer, block_out.i_buffer );
/* Date management */
- p_aout_buffer->start_date = date_Get( &p_sys->end_date );
- p_aout_buffer->end_date =
- date_Increment( &p_sys->end_date, i_samples );
+ p_aout_buffer->i_pts = date_Get( &p_sys->end_date );
+ p_aout_buffer->i_length =
+ date_Increment( &p_sys->end_date, i_samples )
+ - p_aout_buffer->i_pts;
}
p_out->vt->Release( (IUnknown *)p_out );
i_err = p_dmo->vt->QueryInterface( (IUnknown *)p_dmo,
&IID_IWMCodecPrivateData,
- (void **)&p_privdata );
+ &p_privdata );
if( i_err ) break;
i_err = p_privdata->vt->SetPartialOutputType( p_privdata, &dmo_type );
else
{
aout_buffer_t *p_aout_buffer = (aout_buffer_t *)p_data;
- p_block_in = block_New( p_enc, p_aout_buffer->i_nb_bytes );
+ p_block_in = block_New( p_enc, p_aout_buffer->i_buffer );
memcpy( p_block_in->p_buffer, p_aout_buffer->p_buffer,
p_block_in->i_buffer );
- i_pts = p_aout_buffer->start_date;
+ i_pts = p_aout_buffer->i_pts;
}
/* Feed input to the DMO */