+ p_es->psz_rtpmap = malloc( strlen( "L8/*/*" ) + 20+1 );
+ sprintf( p_es->psz_rtpmap, "L8/%d/%d", p_fmt->audio.i_rate,
+ p_fmt->audio.i_channels );
+ break;
+ case VLC_FOURCC( 'm', 'p', 'g', 'a' ):
+ case VLC_FOURCC( 'm', 'p', '3', ' ' ):
+ p_es->i_payload_type = 14;
+ asprintf( &p_es->psz_rtpmap, "MPA/%d", p_fmt->audio.i_rate );
+ break;
+ case VLC_FOURCC( 'm', 'p', 'g', 'v' ):
+ p_es->i_payload_type = 32;
+ p_es->psz_rtpmap = strdup( "MPV/90000" );
+ break;
+ case VLC_FOURCC( 'a', '5', '2', ' ' ):
+ p_es->i_payload_type = p_media->i_payload_type++;
+ asprintf( &p_es->psz_rtpmap, "ac3/%d", p_fmt->audio.i_rate );
+ break;
+ case VLC_FOURCC( 'H', '2', '6', '3' ):
+ p_es->i_payload_type = p_media->i_payload_type++;
+ p_es->psz_rtpmap = strdup( "H263-1998/90000" );
+ break;
+ case VLC_FOURCC( 'h', '2', '6', '4' ):
+ p_es->i_payload_type = p_media->i_payload_type++;
+ p_es->psz_rtpmap = strdup( "H264/90000" );
+ p_es->psz_fmtp = NULL;
+ /* FIXME AAAAAAAAAAAARRRRRRRRGGGG copied from stream_out/rtp.c */
+ if( p_fmt->i_extra > 0 )
+ {
+ uint8_t *p_buffer = p_fmt->p_extra;
+ int i_buffer = p_fmt->i_extra;
+ char *p_64_sps = NULL;
+ char *p_64_pps = NULL;
+ char hexa[6+1];
+
+ while( i_buffer > 4 &&
+ p_buffer[0] == 0 && p_buffer[1] == 0 &&
+ p_buffer[2] == 0 && p_buffer[3] == 1 )
+ {
+ const int i_nal_type = p_buffer[4]&0x1f;
+ int i_offset;
+ int i_size = 0;
+
+ i_size = i_buffer;
+ for( i_offset = 4; i_offset+3 < i_buffer ; i_offset++)
+ {
+ if( p_buffer[i_offset] == 0 && p_buffer[i_offset+1] == 0 && p_buffer[i_offset+2] == 0 && p_buffer[i_offset+3] == 1 )
+ {
+ /* we found another startcode */
+ i_size = i_offset;
+ break;
+ }
+ }
+ if( i_nal_type == 7 )
+ {
+ p_64_sps = vlc_b64_encode_binary( &p_buffer[4], i_size - 4 );
+ sprintf_hexa( hexa, &p_buffer[5], 3 );
+ }
+ else if( i_nal_type == 8 )
+ {
+ p_64_pps = vlc_b64_encode_binary( &p_buffer[4], i_size - 4 );
+ }
+ i_buffer -= i_size;
+ p_buffer += i_size;
+ }
+ /* */
+ if( p_64_sps && p_64_pps )
+ if( asprintf( &p_es->psz_fmtp,
+ "packetization-mode=1;profile-level-id=%s;"
+ "sprop-parameter-sets=%s,%s;", hexa, p_64_sps,
+ p_64_pps ) < 0 )
+ return VLC_ENOMEM;
+ free( p_64_sps );
+ free( p_64_pps );
+ }
+ if( !p_es->psz_fmtp )
+ p_es->psz_fmtp = strdup( "packetization-mode=1" );
+ break;
+ case VLC_FOURCC( 'm', 'p', '4', 'v' ):
+ p_es->i_payload_type = p_media->i_payload_type++;
+ p_es->psz_rtpmap = strdup( "MP4V-ES/90000" );
+ if( p_fmt->i_extra > 0 )
+ {
+ char *p_hexa = malloc( 2 * p_fmt->i_extra + 1 );
+ p_es->psz_fmtp = malloc( 100 + 2 * p_fmt->i_extra );
+ sprintf_hexa( p_hexa, p_fmt->p_extra, p_fmt->i_extra );
+ sprintf( p_es->psz_fmtp,
+ "profile-level-id=3; config=%s;", p_hexa );
+ free( p_hexa );
+ }
+ break;
+ case VLC_FOURCC( 'm', 'p', '4', 'a' ):
+ p_es->i_payload_type = p_media->i_payload_type++;
+ p_es->psz_rtpmap = malloc( strlen( "mpeg4-generic/" ) + 12 );
+ sprintf( p_es->psz_rtpmap, "mpeg4-generic/%d", p_fmt->audio.i_rate );
+ if( p_fmt->i_extra > 0 )
+ {
+ char *p_hexa = malloc( 2 * p_fmt->i_extra + 1 );
+ p_es->psz_fmtp = malloc( 200 + 2 * p_fmt->i_extra );
+ sprintf_hexa( p_hexa, p_fmt->p_extra, p_fmt->i_extra );
+ sprintf( p_es->psz_fmtp,
+ "streamtype=5; profile-level-id=15; mode=AAC-hbr; "
+ "config=%s; SizeLength=13;IndexLength=3; "
+ "IndexDeltaLength=3; Profile=1;", p_hexa );
+ free( p_hexa );
+ }
+ break;
+ case VLC_FOURCC( 'm', 'p', '2', 't' ):
+ p_media->psz_mux = strdup("ts");
+ p_es->i_payload_type = 33;
+ p_es->psz_rtpmap = strdup( "MP2T/90000" );
+ break;
+ case VLC_FOURCC( 'm', 'p', '2', 'p' ):
+ p_media->psz_mux = strdup("ps");
+ p_es->i_payload_type = p_media->i_payload_type++;
+ p_es->psz_rtpmap = strdup( "MP2P/90000" );
+ break;
+ case VLC_FOURCC( 's', 'a', 'm', 'r' ):
+ p_es->i_payload_type = p_media->i_payload_type++;
+ p_es->psz_rtpmap = strdup( p_fmt->audio.i_channels == 2 ?
+ "AMR/8000/2" : "AMR/8000" );
+ p_es->psz_fmtp = strdup( "octet-align=1" );
+ break;
+ case VLC_FOURCC( 's', 'a', 'w', 'b' ):
+ p_es->i_payload_type = p_media->i_payload_type++;
+ p_es->psz_rtpmap = strdup( p_fmt->audio.i_channels == 2 ?
+ "AMR-WB/16000/2" : "AMR-WB/16000" );
+ p_es->psz_fmtp = strdup( "octet-align=1" );
+ break;