From 2bd94a6ca420385fa09301076f1eafc9b77fdd48 Mon Sep 17 00:00:00 2001
From: Laurent Aimar <fenrir@videolan.org>
Date: Fri, 19 Sep 2003 21:53:48 +0000
Subject: [PATCH]  * playlist.c : unlock playlist before calling vout_Destroy
 (for osx)  * mp4: send complete atom for amr to the decoder.

---
 modules/demux/mp4/mp4.c | 15 ++++++++++-----
 src/playlist/playlist.c | 16 +++++++++++-----
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index 7626f36b388f..71d9596095b0 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -2,7 +2,7 @@
  * mp4.c : MP4 file input module for vlc
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: mp4.c,v 1.38 2003/09/13 17:42:16 fenrir Exp $
+ * $Id: mp4.c,v 1.39 2003/09/19 21:53:48 fenrir Exp $
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -1047,14 +1047,19 @@ static int  TrackCreateES   ( input_thread_t   *p_input,
             case VLC_FOURCC( 'V', 'P', '3', '1' ):
             case VLC_FOURCC( '3', 'I', 'V', '1' ):
             case VLC_FOURCC( 'Z', 'y', 'G', 'o' ):
-                i_decoder_specific_info_len = p_sample->data.p_sample_vide->i_qt_image_description;
-                p_decoder_specific_info     = p_sample->data.p_sample_vide->p_qt_image_description;
+                i_decoder_specific_info_len =
+                    p_sample->data.p_sample_vide->i_qt_image_description;
+                p_decoder_specific_info =
+                    p_sample->data.p_sample_vide->p_qt_image_description;
                 break;
             case VLC_FOURCC( 'Q', 'D', 'M', 'C' ):
             case VLC_FOURCC( 'Q', 'D', 'M', '2' ):
             case VLC_FOURCC( 'Q', 'c', 'l', 'p' ):
-                i_decoder_specific_info_len = p_sample->data.p_sample_soun->i_qt_description;
-                p_decoder_specific_info     = p_sample->data.p_sample_soun->p_qt_description;
+            case VLC_FOURCC( 's', 'a', 'm', 'r' ):
+                i_decoder_specific_info_len =
+                    p_sample->data.p_sample_soun->i_qt_description;
+                p_decoder_specific_info =
+                    p_sample->data.p_sample_soun->p_qt_description;
                 break;
             default:
                 break;
diff --git a/src/playlist/playlist.c b/src/playlist/playlist.c
index fd7207f7acec..c36aa79f2872 100644
--- a/src/playlist/playlist.c
+++ b/src/playlist/playlist.c
@@ -2,7 +2,7 @@
  * playlist.c : Playlist management functions
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
- * $Id: playlist.c,v 1.52 2003/09/15 00:01:49 fenrir Exp $
+ * $Id: playlist.c,v 1.53 2003/09/19 21:53:48 fenrir Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -386,8 +386,8 @@ int playlist_Sort( playlist_t * p_playlist , int i_type )
             i_test = strcasecmp( p_playlist->pp_items[i]->psz_name,
                                  p_playlist->pp_items[i_small]->psz_name );
 
-            if( i_type == SORT_NORMAL  && i_test < 0 ||
-                i_type == SORT_REVERSE && i_test > 0 )
+            if( ( i_type == SORT_NORMAL  && i_test < 0 ) ||
+                ( i_type == SORT_REVERSE && i_test > 0 ) )
             {
                 i_small = i;
             }
@@ -677,10 +677,14 @@ static void RunThread ( playlist_t *p_playlist )
             }
             else if( p_playlist->p_input->stream.control.i_status != INIT_S )
             {
+                vlc_mutex_unlock( &p_playlist->object_lock );
                 ObjectGarbageCollector( p_playlist, VLC_OBJECT_VOUT,
-                                        &b_vout_destroyed, &i_vout_destroyed_date );
+                                        &b_vout_destroyed,
+                                        &i_vout_destroyed_date );
                 ObjectGarbageCollector( p_playlist, VLC_OBJECT_SOUT,
-                                        &b_sout_destroyed, &i_sout_destroyed_date );
+                                        &b_sout_destroyed,
+                                        &i_sout_destroyed_date );
+                vlc_mutex_lock( &p_playlist->object_lock );
             }
         }
         else if( p_playlist->i_status != PLAYLIST_STOPPED )
@@ -690,10 +694,12 @@ static void RunThread ( playlist_t *p_playlist )
         }
         else if( p_playlist->i_status == PLAYLIST_STOPPED )
         {
+            vlc_mutex_unlock( &p_playlist->object_lock );
             ObjectGarbageCollector( p_playlist, VLC_OBJECT_SOUT,
                                     &b_sout_destroyed, &i_sout_destroyed_date );
             ObjectGarbageCollector( p_playlist, VLC_OBJECT_VOUT,
                                     &b_vout_destroyed, &i_vout_destroyed_date );
+            vlc_mutex_lock( &p_playlist->object_lock );
         }
         vlc_mutex_unlock( &p_playlist->object_lock );
 
-- 
GitLab