- vlc_mutex_lock( &p_sys->p_input->stream.stream_lock );
- id->p_es = input_AddES( p_sys->p_input,
- NULL, /* no program */
- 12, /* es_id */
- p_fmt->i_cat, /* UNKNOWN_ES,*/ /* es category */
- NULL, /* description */
- 0 ); /* no extra data */
-
- if( !id->p_es )
- {
- vlc_mutex_unlock( &p_sys->p_input->stream.stream_lock );
-
- msg_Err( p_stream, "cannot create es" );
- free( id );
- return NULL;
- }
- id->p_es->i_stream_id = 1;
- id->p_es->i_fourcc = p_fmt->i_codec;
- id->p_es->b_force_decoder = VLC_TRUE;
- switch( p_fmt->i_cat )
- {
- case AUDIO_ES:
- id->p_es->p_bitmapinfoheader = NULL;
- id->p_es->p_waveformatex =
- malloc( sizeof( WAVEFORMATEX ) + p_fmt->i_extra );
-#define p_wf ((WAVEFORMATEX*)id->p_es->p_waveformatex)
- p_wf->wFormatTag = WAVE_FORMAT_UNKNOWN;
- p_wf->nChannels = p_fmt->audio.i_channels;
- p_wf->nSamplesPerSec = p_fmt->audio.i_rate;
- p_wf->nAvgBytesPerSec= p_fmt->i_bitrate / 8;
- p_wf->nBlockAlign = p_fmt->audio.i_blockalign;
- p_wf->wBitsPerSample = 0;
- p_wf->cbSize = p_fmt->i_extra;
- if( p_fmt->i_extra > 0 )
- {
- memcpy( &p_wf[1],
- p_fmt->p_extra,
- p_fmt->i_extra );
- }
-#undef p_wf
- break;
- case VIDEO_ES:
- id->p_es->p_waveformatex = NULL;
- id->p_es->p_bitmapinfoheader = malloc( sizeof( BITMAPINFOHEADER ) + p_fmt->i_extra );
-#define p_bih ((BITMAPINFOHEADER*)id->p_es->p_bitmapinfoheader)
- p_bih->biSize = sizeof( BITMAPINFOHEADER ) + p_fmt->i_extra;
- p_bih->biWidth = p_fmt->video.i_width;
- p_bih->biHeight = p_fmt->video.i_height;
- p_bih->biPlanes = 0;
- p_bih->biBitCount = 0;
- p_bih->biCompression = 0;
- p_bih->biSizeImage = 0;
- p_bih->biXPelsPerMeter = 0;
- p_bih->biYPelsPerMeter = 0;
- p_bih->biClrUsed = 0;
- p_bih->biClrImportant = 0;
- if( p_fmt->i_extra > 0 )
- {
- memcpy( &p_bih[1],
- p_fmt->p_extra,
- p_fmt->i_extra );
- }
-#undef p_bih
- break;
- default:
- msg_Err( p_stream, "unknown es type" );
- free( id );
- return NULL;
- }
-
- if( input_SelectES( p_sys->p_input, id->p_es ) )