- bo_add_guid ( &bo, &asf_object_header_extention_guid );
- bo_addle_u64( &bo, i_header_ext_size );
- bo_add_guid ( &bo, &asf_guid_reserved_1 );
- bo_addle_u16( &bo, 6 );
- bo_addle_u32( &bo, i_header_ext_size - 46 );
+ const asf_track_t *p_track = vlc_array_item_at_index( p_sys->p_tracks, i );
+ const es_format_t *p_fmt = &p_track->fmt;
+
+ if( !p_track->b_extended )
+ continue;
+
+ uint64_t i_avg_duration = 0;
+ if( p_fmt->i_cat == VIDEO_ES &&
+ p_fmt->video.i_frame_rate > 0 && p_fmt->video.i_frame_rate_base > 0 )
+ i_avg_duration = ( INT64_C(10000000) * p_fmt->video.i_frame_rate_base +
+ p_fmt->video.i_frame_rate/2 ) / p_fmt->video.i_frame_rate;
+
+ bo_add_guid ( &bo, &asf_object_extended_stream_properties_guid );
+ bo_addle_u64( &bo, 88 );
+ bo_addle_u64( &bo, 0 );
+ bo_addle_u64( &bo, 0 );
+ bo_addle_u32( &bo, p_fmt->i_bitrate ); /* Bitrate */
+ bo_addle_u32( &bo, 0 ); /* Buffer size */
+ bo_addle_u32( &bo, 0 ); /* Initial buffer fullness */
+ bo_addle_u32( &bo, p_fmt->i_bitrate ); /* Alternate Bitrate */
+ bo_addle_u32( &bo, 0 ); /* Alternate Buffer size */
+ bo_addle_u32( &bo, 0 ); /* Alternate Initial buffer fullness */
+ bo_addle_u32( &bo, 0 ); /* Maximum object size (0 = unkown) */
+ bo_addle_u32( &bo, 0x02 ); /* Flags (seekable) */
+ bo_addle_u16( &bo, p_track->i_id ); /* Stream number */
+ bo_addle_u16( &bo, 0 ); /* Stream language index */
+ bo_addle_u64( &bo, i_avg_duration ); /* Average time per frame */
+ bo_addle_u16( &bo, 0 ); /* Stream name count */
+ bo_addle_u16( &bo, 0 ); /* Payload extension system count */