]> git.sesse.net Git - vlc/commitdiff
Merge branch 1.0-bugfix (early part) into master
authorRémi Denis-Courmont <remi@remlab.net>
Tue, 26 May 2009 16:37:54 +0000 (19:37 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Tue, 26 May 2009 16:38:03 +0000 (19:38 +0300)
1  2 
extras/contrib/src/Makefile
modules/misc/rtsp.c

index 6ed7935f87eedbc8255de1894a418658061798f0,f1e14465ecc70bc74148d209d4b9882f090e1db2..beb7d9d8a21422c827bc1fef8fe115967e226dc4
@@@ -656,6 -656,7 +656,7 @@@ ifdef HAVE_WIN3
        (cd $<; $(HOSTCC) make $(LUA_MAKEPLATEFORM); cd src; $(HOSTCC) make liblua.a; cd ..;$(HOSTCC) make install INSTALL_TOP=$(PREFIX); $(RANLIB) $(PREFIX)/lib/liblua.a)
        (cd $<; sed -i.orig 's@prefix= /usr/local@prefix= $(PREFIX)@' etc/lua.pc; mkdir -p $(PREFIX)/lib/pkgconfig; cp etc/lua.pc $(PREFIX)/lib/pkgconfig)
  else
+       (cd $<; patch -p1) < Patches/lua-noreadline.patch
        (cd $<; $(HOSTCC) make $(LUA_MAKEPLATEFORM) && make install INSTALL_TOP=$(PREFIX))
  endif
        touch $@
@@@ -1461,6 -1462,7 +1462,6 @@@ libmodplug-$(MODPLUG_VERSION).tar.gz
  
  libmodplug: libmodplug-$(MODPLUG_VERSION).tar.gz
        $(EXTRACT_GZ)
 -      patch -p0 < Patches/libmodplug-gccllvm42.patch
  ifdef HAVE_WIN32
        patch -p0 < Patches/libmodplug-win32.patch
        (cd $@; autoreconf)
diff --combined modules/misc/rtsp.c
index a87dc3fcf6393acfbde725b6069739be7297c02b,864d665397143f5251e51d0a0ab45b517d81a428..bec5db519047075e265cab4304b3a3674c59e09f
@@@ -219,6 -219,9 +219,9 @@@ typedef enu
      RTSP_CMD_TYPE_SEEK,
      RTSP_CMD_TYPE_REWIND,
      RTSP_CMD_TYPE_FORWARD,
+     RTSP_CMD_TYPE_ADD,
+     RTSP_CMD_TYPE_DEL,
  } rtsp_cmd_type_t;
  
  /* */
@@@ -226,7 -229,7 +229,7 @@@ typedef struc
  {
      int i_type;
      int i_media_id;
-     //vod_media_t *p_media;
+     vod_media_t *p_media;
      char *psz_session;
      char *psz_arg;
      double f_arg;
  
  static vod_media_t *MediaNew( vod_t *, const char *, input_item_t * );
  static void         MediaDel( vod_t *, vod_media_t * );
+ static void         MediaAskDel ( vod_t *, vod_media_t * );
  static int          MediaAddES( vod_t *, vod_media_t *, es_format_t * );
  static void         MediaDelES( vod_t *, vod_media_t *, es_format_t * );
  
@@@ -313,7 -317,7 +317,7 @@@ static int Open( vlc_object_t *p_this 
      p_sys->i_media_id = 0;
  
      p_vod->pf_media_new = MediaNew;
-     p_vod->pf_media_del = MediaDel;
+     p_vod->pf_media_del = MediaAskDel;
      p_vod->pf_media_add_es = MediaAddES;
      p_vod->pf_media_del_es = MediaDelES;
  
@@@ -361,6 -365,8 +365,8 @@@ static void Close( vlc_object_t * p_thi
           p_block_cmd = block_FifoGet( p_sys->p_fifo_cmd );
           memcpy( &cmd, p_block_cmd->p_buffer, sizeof(cmd) );
           block_Release( p_block_cmd );
+          if ( cmd.i_type == RTSP_CMD_TYPE_DEL )
+              MediaDel(p_vod, cmd.p_media);
           free( cmd.psz_session );
           free( cmd.psz_arg );
      }
@@@ -453,10 -459,6 +459,6 @@@ static vod_media_t *MediaNew( vod_t *p_
  
      p_media->p_vod = p_vod;
  
-     vlc_mutex_lock( &p_sys->lock_media );
-     TAB_APPEND( p_sys->i_media, p_sys->media, p_media );
-     vlc_mutex_unlock( &p_sys->lock_media );
      vlc_mutex_init( &p_media->lock );
      p_media->psz_session_name = strdup("");
      p_media->psz_session_description = strdup("");
      }
      vlc_mutex_unlock( &p_item->lock );
  
+     CommandPush( p_vod, RTSP_CMD_TYPE_ADD, p_media, NULL, 0.0, NULL );
      return p_media;
  }
  
+ static void MediaAskDel ( vod_t *p_vod, vod_media_t *p_media )
+ {
+     CommandPush( p_vod, RTSP_CMD_TYPE_DEL, p_media, NULL, 0.0, NULL );
+ }
  static void MediaDel( vod_t *p_vod, vod_media_t *p_media )
  {
      vod_sys_t *p_sys = p_vod->p_sys;
@@@ -538,7 -546,7 +546,7 @@@ static int MediaAddES( vod_t *p_vod, vo
  
      switch( p_fmt->i_codec )
      {
 -        case VLC_FOURCC( 's', '1', '6', 'b' ):
 +        case VLC_CODEC_S16B:
              if( p_fmt->audio.i_channels == 1 && p_fmt->audio.i_rate == 44100 )
              {
                  p_es->i_payload_type = 11;
                            p_fmt->audio.i_channels ) == -1 )
                  p_es->psz_rtpmap = NULL;
              break;
 -        case VLC_FOURCC( 'u', '8', ' ', ' ' ):
 +        case VLC_CODEC_U8:
              p_es->i_payload_type = p_media->i_payload_type++;
              if( asprintf( &p_es->psz_rtpmap, "L8/%d/%d", p_fmt->audio.i_rate,
                            p_fmt->audio.i_channels ) == -1 )
                  p_es->psz_rtpmap = NULL;
              break;
 -        case VLC_FOURCC( 'm', 'p', 'g', 'a' ):
 -        case VLC_FOURCC( 'm', 'p', '3', ' ' ):
 +        case VLC_CODEC_MPGA:
              p_es->i_payload_type = 14;
              p_es->psz_rtpmap = strdup( "MPA/90000" );
              break;
 -        case VLC_FOURCC( 'm', 'p', 'g', 'v' ):
 +        case VLC_CODEC_MPGV:
              p_es->i_payload_type = 32;
              p_es->psz_rtpmap = strdup( "MPV/90000" );
              break;
 -        case VLC_FOURCC( 'a', '5', '2', ' ' ):
 +        case VLC_CODEC_A52:
              p_es->i_payload_type = p_media->i_payload_type++;
              if( asprintf( &p_es->psz_rtpmap, "ac3/%d", p_fmt->audio.i_rate ) == -1 )
                  p_es->psz_rtpmap = NULL;
              break;
 -        case VLC_FOURCC( 'H', '2', '6', '3' ):
 +        case VLC_CODEC_H263:
              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' ):
 +        case VLC_CODEC_H264:
              p_es->i_payload_type = p_media->i_payload_type++;
              p_es->psz_rtpmap = strdup( "H264/90000" );
              p_es->psz_fmtp = NULL;
              if( !p_es->psz_fmtp )
                  p_es->psz_fmtp = strdup( "packetization-mode=1" );
              break;
 -        case VLC_FOURCC( 'm', 'p', '4', 'v' ):
 +        case VLC_CODEC_MP4V:
              p_es->i_payload_type = p_media->i_payload_type++;
              p_es->psz_rtpmap = strdup( "MP4V-ES/90000" );
              if( p_fmt->i_extra > 0 )
                  free( p_hexa );
              }
              break;
 -        case VLC_FOURCC( 'm', 'p', '4', 'a' ):
 +        case VLC_CODEC_MP4A:
              p_es->i_payload_type = p_media->i_payload_type++;
              if( asprintf( &p_es->psz_rtpmap, "mpeg4-generic/%d", p_fmt->audio.i_rate ) == -1 )
                  p_es->psz_rtpmap = NULL;
              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' ):
 +        case VLC_CODEC_AMR_NB:
              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' ):
 +        case VLC_CODEC_AMR_WB:
              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" );
@@@ -808,6 -817,7 +816,7 @@@ static void CommandPush( vod_t *p_vod, 
  
      memset( &cmd, 0, sizeof(cmd) );
      cmd.i_type = i_type;
+     cmd.p_media = p_media;
      if( p_media )
          cmd.i_media_id = p_media->id;
      if( psz_session )
@@@ -844,6 -854,20 +853,20 @@@ static void* CommandThread( vlc_object_
          if( cmd.i_type == RTSP_CMD_TYPE_NONE )
              break;
  
+         if ( cmd.i_type == RTSP_CMD_TYPE_ADD )
+         {
+             vlc_mutex_lock( &p_sys->lock_media );
+             TAB_APPEND( p_sys->i_media, p_sys->media, cmd.p_media );
+             vlc_mutex_unlock( &p_sys->lock_media );
+             goto next;
+         }
+         if ( cmd.i_type == RTSP_CMD_TYPE_DEL )
+         {
+             MediaDel(p_vod, cmd.p_media);
+             goto next;
+         }
          /* */
          vlc_mutex_lock( &p_sys->lock_media );
          for( i = 0; i < p_sys->i_media; i++ )
                  break;
          }
          if( i >= p_sys->i_media )
+         {
+             vlc_mutex_unlock( &p_sys->lock_media );
              goto next;
+         }
          p_media = p_sys->media[i];
  
          switch( cmd.i_type )
          default:
              break;
          }
+         vlc_mutex_unlock( &p_sys->lock_media );
  
      next:
-         vlc_mutex_unlock( &p_sys->lock_media );
          free( cmd.psz_session );
          free( cmd.psz_arg );
      }