typedef GUID guid_t;
#define MAX_ASF_TRACKS 128
+#define ASF_DATA_PACKET_SIZE 4096
/*****************************************************************************
* Module descriptor
p_sys->b_write_header = VLC_TRUE;
p_sys->i_track = 0;
- p_sys->i_packet_size = 4096;
+ p_sys->i_packet_size = ASF_DATA_PACKET_SIZE;
p_sys->i_packet_count= 0;
/* Generate a random fid */
i_ci_size += 8 + 2 * strlen( p_sys->track[i].psz_name );
if( p_sys->track[i].i_cat == AUDIO_ES ) i_ci_size += 4;
else if( p_sys->track[i].i_cat == VIDEO_ES ) i_ci_size += 6;
+
+ /* Error correction data field */
+ if( p_sys->track[i].b_audio_correction ) i_size += 8;
}
/* size of the content description object */
i_header_ext_size = i_cm_size ? i_cm_size + 46 : 0;
i_size += i_ci_size + i_cd_size + i_header_ext_size ;
- /* Error correction data field */
- if( tk->b_audio_correction ) i_size += 8;
if( p_sys->b_asf_http )
{
tk = &p_sys->track[i];
bo_add_guid ( &bo, &asf_object_stream_properties_guid );
-
- if( tk->b_audio_correction ) /* Error correction data field */
- bo_addle_u64( &bo, 78 + tk->i_extra + 8 );
- else
- bo_addle_u64( &bo, 78 + tk->i_extra );
+ bo_addle_u64( &bo, 78 + tk->i_extra + (tk->b_audio_correction ? 8:0) );
if( tk->i_cat == AUDIO_ES )
{
/* add payload (header size = 17) */
i_payload = __MIN( i_data - i_pos,
p_sys->i_packet_size - p_sys->i_pk_used - 17 );
+
+ if( tk->b_audio_correction && p_sys->i_pk_frame && i_payload < i_data )
+ {
+ /* Don't know why yet but WMP doesn't like splitted WMA packets */
+ *last = asf_packet_flush( p_mux );
+ last = &(*last)->p_next;
+ continue;
+ }
+
bo_add_u8 ( &bo, !(data->i_flags & BLOCK_FLAG_TYPE_P ||
data->i_flags & BLOCK_FLAG_TYPE_B) ?
0x80 | tk->i_id : tk->i_id );