]> git.sesse.net Git - vlc/commitdiff
Merge branch 'base' into master
authorRémi Denis-Courmont <remi@remlab.net>
Wed, 27 May 2009 15:50:03 +0000 (18:50 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Wed, 27 May 2009 15:50:08 +0000 (18:50 +0300)
extras/contrib/bootstrap
extras/contrib/src/Distributions/maemo.mak [new file with mode: 0644]
extras/contrib/src/Makefile
modules/stream_out/rtp.c

index c221e827be953ccddc59271b3ffdd5487d50f7b8..70e2ae3f1b77b9162e22c4959af25fae6ad2d0c1 100755 (executable)
@@ -267,6 +267,8 @@ case $HOST in
             # Try to match distribution
             if test -f /etc/fedora-release; then
                 cat src/Distributions/fedora.mak >> distro.mak
+            elif test -f /etc/maemo_version; then
+                cat src/Distributions/maemo.mak >> distro.mak
             else
                 # Default Unix-like systems
                 cat src/Distributions/unix.mak >> distro.mak
diff --git a/extras/contrib/src/Distributions/maemo.mak b/extras/contrib/src/Distributions/maemo.mak
new file mode 100644 (file)
index 0000000..15e50ed
--- /dev/null
@@ -0,0 +1,13 @@
+# Maemo 5
+all: \
+       .mad .a52 .dca .mpcdec .faad .lame .mpeg2 \
+       .id3tag \
+       .ogg .vorbis .vorbisenc .flac .speex .theora .kate .tiger \
+       .twolame .x264 \
+       .ebml .matroska .ffmpeg .mod \
+       .live .dvbpsi .zvbi \
+       .lua
+#.gpg-error .gcrypt .gnutls -> OpenSSL
+#.dvdcss .dvdnav -> no DVD
+#.dirac -> broken
+#.faac -> non-free
index beb7d9d8a21422c827bc1fef8fe115967e226dc4..b93e5e398287ef4ceda7848bfbce582b81d1c941 100644 (file)
@@ -133,7 +133,8 @@ endif
 FFMPEGCONF+= --enable-small --disable-debug --disable-mpegaudio-hp
 FFMPEG_CFLAGS += -DHAVE_LRINTF --std=c99
 else
-FFMPEGCONF+= --enable-libmp3lame --enable-libfaac --enable-libgsm
+FFMPEGCONF+= --enable-libmp3lame --enable-libgsm
+#--enable-libfaac
 endif
 
 ifdef HAVE_BEOS
index 909a2949dcba5d103e27d0dd80423278471aa8a9..5f8e1b3f460ef45e2d3627596abc73349ffe97eb 100644 (file)
@@ -853,10 +853,8 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
      * mux (TS/PS), then p_fmt is NULL. */
     sout_stream_sys_t *p_sys = p_stream->p_sys;
     sout_stream_id_t  *id;
-    int               i_port, cscov = -1;
+    int               cscov = -1;
     char              *psz_sdp;
-    int               i_port_audio_option = var_GetInteger( p_stream, "port-audio" );
-    int               i_port_video_option = var_GetInteger( p_stream, "port-video" );
 
     if (0xffffffff == p_sys->payload_bitmap)
     {
@@ -864,38 +862,41 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
         return NULL;
     }
 
-    id = vlc_object_create( p_stream, sizeof( sout_stream_id_t ) );
-    if( id == NULL )
-        return NULL;
-    vlc_object_attach( id, p_stream );
-
     /* Choose the port */
-    i_port = 0;
+    uint16_t i_port = 0;
     if( p_fmt == NULL )
         ;
     else
     if( p_fmt->i_cat == AUDIO_ES && p_sys->i_port_audio > 0 )
-    {
         i_port = p_sys->i_port_audio;
-        p_sys->i_port_audio = 0;
-    }
     else
     if( p_fmt->i_cat == VIDEO_ES && p_sys->i_port_video > 0 )
-    {
         i_port = p_sys->i_port_video;
-        p_sys->i_port_video = 0;
-    }
 
-    while( i_port == 0 )
+    /* We do not need the ES lock (p_sys->lock_es) here, because this is the
+     * only one thread that can *modify* the ES table. The ES lock protects
+     * the other threads from our modifications (TAB_APPEND, TAB_REMOVE). */
+    for (int i = 0; i_port && (i < p_sys->i_es); i++)
+         if (i_port == p_sys->es[i]->i_port)
+             i_port = 0; /* Port already in use! */
+    for (uint16_t p = p_sys->i_port; i_port == 0; p += 2)
     {
-        if( p_sys->i_port != i_port_audio_option
-         && p_sys->i_port != i_port_video_option )
+        if (p == 0)
         {
-            i_port = p_sys->i_port;
+            msg_Err (p_stream, "too many RTP elementary streams");
+            return NULL;
         }
-        p_sys->i_port += 2;
+        i_port = p;
+        for (int i = 0; i_port && (i < p_sys->i_es); i++)
+             if (p == p_sys->es[i]->i_port)
+                 i_port = 0;
     }
 
+    id = vlc_object_create( p_stream, sizeof( sout_stream_id_t ) );
+    if( id == NULL )
+        return NULL;
+    vlc_object_attach( id, p_stream );
+
     id->p_stream   = p_stream;
 
     /* Look for free dymanic payload type */
@@ -1309,11 +1310,6 @@ static int Del( sout_stream_t *p_stream, sout_stream_id_t *id )
     TAB_REMOVE( p_sys->i_es, p_sys->es, id );
     vlc_mutex_unlock( &p_sys->lock_es );
 
-    /* Release port */
-    if( id->i_port == var_GetInteger( p_stream, "port-audio" ) )
-        p_sys->i_port_audio = id->i_port;
-    if( id->i_port == var_GetInteger( p_stream, "port-video" ) )
-        p_sys->i_port_video = id->i_port;
     /* Release dynamic payload type */
     if (id->i_payload_type >= 96)
         p_sys->payload_bitmap &= ~(1 << (id->i_payload_type - 96));