+ /* Get the private data for the codec */
+ while( 1 )
+ {
+ IWMCodecPrivateData *p_privdata;
+ VIDEOINFOHEADER *p_vih;
+ uint8_t *p_data = 0;
+ uint32_t i_data = 0, i_vih;
+
+ i_err = p_dmo->vt->QueryInterface( (IUnknown *)p_dmo,
+ &IID_IWMCodecPrivateData,
+ (void **)&p_privdata );
+ if( i_err ) break;
+
+ i_err = p_privdata->vt->SetPartialOutputType( p_privdata, &dmo_type );
+ if( i_err )
+ {
+ msg_Err( p_enc, "SetPartialOutputType() failed" );
+ p_privdata->vt->Release( (IUnknown *)p_privdata );
+ break;
+ }
+
+ i_err = p_privdata->vt->GetPrivateData( p_privdata, NULL, &i_data );
+ if( i_err )
+ {
+ msg_Err( p_enc, "GetPrivateData() failed" );
+ p_privdata->vt->Release( (IUnknown *)p_privdata );
+ break;
+ }
+
+ p_data = malloc( i_data );
+ i_err = p_privdata->vt->GetPrivateData( p_privdata, p_data, &i_data );
+
+ /* Update the media type with the private data */
+ i_vih = dmo_type.cbFormat + i_data;
+ p_vih = CoTaskMemAlloc( i_vih );
+ memcpy( p_vih, dmo_type.pbFormat, dmo_type.cbFormat );
+ memcpy( ((uint8_t *)p_vih) + dmo_type.cbFormat, p_data, i_data );
+ DMOFreeMediaType( &dmo_type );
+ dmo_type.pbFormat = p_vih;
+ dmo_type.cbFormat = i_vih;
+
+ msg_Dbg( p_enc, "found extra data: %i", i_data );
+ p_enc->fmt_out.i_extra = i_data;
+ p_enc->fmt_out.p_extra = p_data;
+ break;
+ }
+