[vlc-commits] Qt: fix memory leak

2015-07-03 Thread Hannes Domani
vlc | branch: master | Hannes Domani  | Fri Jul  3 14:34:01 
2015 +0200| [1637cd913030e5fccf5f5aad37ad0dc22588f8e3] | committer: Rémi 
Denis-Courmont

Qt: fix memory leak

Signed-off-by: Rémi Denis-Courmont 

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1637cd913030e5fccf5f5aad37ad0dc22588f8e3
---

 modules/gui/qt4/components/preferences_widgets.cpp |1 +
 1 file changed, 1 insertion(+)

diff --git a/modules/gui/qt4/components/preferences_widgets.cpp 
b/modules/gui/qt4/components/preferences_widgets.cpp
index 39465f2..bc6b6cc 100644
--- a/modules/gui/qt4/components/preferences_widgets.cpp
+++ b/modules/gui/qt4/components/preferences_widgets.cpp
@@ -504,6 +504,7 @@ void setfillVLCConfigCombo( const char *configname, 
intf_thread_t *p_intf,
 free( texts[i] );
 }
 free( texts );
+free( values );
 }
 
 if( p_config->psz_longtext != NULL )

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] Qt: fix memory leaks

2015-07-03 Thread Hannes Domani
vlc | branch: master | Hannes Domani  | Fri Jul  3 14:32:28 
2015 +0200| [4a0dd7a7e818ab5c7bdabfbb8ad04d77eea1b170] | committer: Rémi 
Denis-Courmont

Qt: fix memory leaks

Signed-off-by: Rémi Denis-Courmont 

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4a0dd7a7e818ab5c7bdabfbb8ad04d77eea1b170
---

 modules/gui/qt4/components/open_panels.cpp |8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/modules/gui/qt4/components/open_panels.cpp 
b/modules/gui/qt4/components/open_panels.cpp
index 5e61c71..6b88b5e 100644
--- a/modules/gui/qt4/components/open_panels.cpp
+++ b/modules/gui/qt4/components/open_panels.cpp
@@ -340,7 +340,9 @@ DiscOpenPanel::DiscOpenPanel( QWidget *_parent, 
intf_thread_t *_p_intf ) :
 };
 QComboBox *discCombo = ui.deviceCombo; /* avoid namespacing in macro */
 POPULATE_WITH_DEVS( ppsz_discdevices, discCombo );
-int temp = ui.deviceCombo->findData( config_GetPsz( p_intf, "dvd" ), 
Qt::UserRole, Qt::MatchStartsWith );
+char *psz_config = config_GetPsz( p_intf, "dvd" );
+int temp = ui.deviceCombo->findData( psz_config, Qt::UserRole, 
Qt::MatchStartsWith );
+free( psz_config );
 if( temp != -1 )
 ui.deviceCombo->setCurrentIndex( temp );
 #endif
@@ -400,7 +402,9 @@ void DiscOpenPanel::onFocus()
 SetErrorMode(oldMode);
 }
 
-int temp = ui.deviceCombo->findData( config_GetPsz( p_intf, "dvd" ), 
Qt::UserRole, Qt::MatchStartsWith );
+char *psz_config = config_GetPsz( p_intf, "dvd" );
+int temp = ui.deviceCombo->findData( psz_config, Qt::UserRole, 
Qt::MatchStartsWith );
+free( psz_config );
 if( temp != -1 )
 ui.deviceCombo->setCurrentIndex( temp );
 }

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] DCP: fix build

2015-07-03 Thread Jean-Baptiste Kempf
vlc | branch: master | Jean-Baptiste Kempf  | Fri Jul  3 
12:26:24 2015 +0200| [c44b3d3630be14136d146abf4c53534458bdc31f] | committer: 
Jean-Baptiste Kempf

DCP: fix build

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c44b3d3630be14136d146abf4c53534458bdc31f
---

 modules/access/dcp/dcpparser.h |1 -
 1 file changed, 1 deletion(-)

diff --git a/modules/access/dcp/dcpparser.h b/modules/access/dcp/dcpparser.h
index 4626bb8..8f95e03 100644
--- a/modules/access/dcp/dcpparser.h
+++ b/modules/access/dcp/dcpparser.h
@@ -112,7 +112,6 @@ public:
 XmlFile( demux_t * p_demux, string s_path):
 p_demux(p_demux), s_path(s_path),
 p_stream(NULL),
-p_xml(NULL),
 p_xmlReader(NULL) {}
 
 virtual ~XmlFile( );

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] audiotrack: better logs in case of error

2015-07-03 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem  | Fri Jul  3 09:38:40 
2015 +0200| [e54be6c19029b97d9d472e5d87293584917eedb5] | committer: Thomas 
Guillem

audiotrack: better logs in case of error

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e54be6c19029b97d9d472e5d87293584917eedb5
---

 modules/audio_output/audiotrack.c |6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/modules/audio_output/audiotrack.c 
b/modules/audio_output/audiotrack.c
index 9dc4b9d..7689330 100644
--- a/modules/audio_output/audiotrack.c
+++ b/modules/audio_output/audiotrack.c
@@ -228,16 +228,16 @@ InitJNIFields( audio_output_t *p_aout, JNIEnv* env )
 } while( 0 )
 #define GET_CLASS( str, critical ) do { \
 clazz = (*env)->FindClass( env, (str) ); \
-CHECK_EXCEPTION( str, critical ); \
+CHECK_EXCEPTION( "FindClass(" str ")", critical ); \
 } while( 0 )
 #define GET_ID( get, id, str, args, critical ) do { \
 jfields.id = (*env)->get( env, clazz, (str), (args) ); \
-CHECK_EXCEPTION( #get, critical ); \
+CHECK_EXCEPTION( #get "(" #id ")", critical ); \
 } while( 0 )
 #define GET_CONST_INT( id, str, critical ) do { \
 field = NULL; \
 field = (*env)->GetStaticFieldID( env, clazz, (str), "I" ); \
-CHECK_EXCEPTION( #id, critical ); \
+CHECK_EXCEPTION( "GetStaticFieldID(" #id ")", critical ); \
 if( field ) \
 { \
 jfields.id = (*env)->GetStaticIntField( env, clazz, field ); \

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] audiotrack: fix head position before Android 4.4

2015-07-03 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem  | Fri Jul  3 09:48:11 
2015 +0200| [b8e2c28e8db894109e862fa73cd6654794cb8065] | committer: Thomas 
Guillem

audiotrack: fix head position before Android 4.4

Fix the workaround in AudioTrack_ResetPlaybackHeadPosition. Don't wait for an
unknown time that the position stabilizes but reset the AudioTrack object.

The audiotrack head position shouldn't be ahead of the module position anymore.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b8e2c28e8db894109e862fa73cd6654794cb8065
---

 modules/audio_output/audiotrack.c |   60 -
 1 file changed, 25 insertions(+), 35 deletions(-)

diff --git a/modules/audio_output/audiotrack.c 
b/modules/audio_output/audiotrack.c
index 07ca81e..9f9ac97 100644
--- a/modules/audio_output/audiotrack.c
+++ b/modules/audio_output/audiotrack.c
@@ -68,9 +68,8 @@ struct aout_sys_t {
 int i_size;
 } audiotrack_args;
 
-/* Used by AudioTrack_GetPosition / AudioTrack_getPlaybackHeadPosition */
+/* Used by AudioTrack_getPlaybackHeadPosition */
 struct {
-uint64_t i_initial;
 uint32_t i_wrap_count;
 uint32_t i_last;
 } headpos;
@@ -442,7 +441,7 @@ frames_to_bytes( aout_sys_t *p_sys, uint64_t i_frames )
  * Get the AudioTrack position
  *
  * The doc says that the position is reset to zero after flush but it's not
- * true for all devices or Android versions. Use AudioTrack_GetPosition 
instead.
+ * true for all devices or Android versions.
  */
 static uint64_t
 AudioTrack_getPlaybackHeadPosition( JNIEnv *env, audio_output_t *p_aout )
@@ -471,18 +470,6 @@ AudioTrack_getPlaybackHeadPosition( JNIEnv *env, 
audio_output_t *p_aout )
 }
 
 /**
- * Get the AudioTrack position since the last flush or stop
- */
-static uint64_t
-AudioTrack_GetPosition( JNIEnv *env, audio_output_t *p_aout )
-{
-aout_sys_t *p_sys = p_aout->sys;
-
-return AudioTrack_getPlaybackHeadPosition( env, p_aout )
-- p_sys->headpos.i_initial;
-}
-
-/**
  * Reset AudioTrack position
  *
  * Called after flush, or start
@@ -490,24 +477,9 @@ AudioTrack_GetPosition( JNIEnv *env, audio_output_t 
*p_aout )
 static void
 AudioTrack_ResetPlaybackHeadPosition( JNIEnv *env, audio_output_t *p_aout )
 {
+(void) env;
 aout_sys_t *p_sys = p_aout->sys;
 
-if( p_sys->p_audiotrack )
-p_sys->headpos.i_initial = AudioTrack_getPlaybackHeadPosition( env, 
p_aout );
-else
-p_sys->headpos.i_initial = 0;
-
-/* HACK: On some broken devices, head position is still moving after a
- * flush or a stop. So, wait for the head position to be stabilized. */
-if( unlikely( p_sys->headpos.i_initial != 0 ) )
-{
-uint64_t i_last_pos;
-do {
-i_last_pos = p_sys->headpos.i_initial;
-msleep( 5 );
-p_sys->headpos.i_initial = JNI_AT_CALL_INT( 
getPlaybackHeadPosition );
-} while( p_sys->headpos.i_initial != i_last_pos );
-}
 p_sys->headpos.i_last = 0;
 p_sys->headpos.i_wrap_count = 0;
 }
@@ -549,7 +521,7 @@ AudioTrack_GetSmoothPositionUs( JNIEnv *env, audio_output_t 
*p_aout )
 /* Fetch an AudioTrack position every SMOOTHPOS_INTERVAL_US (30ms) */
 if( i_now - p_sys->smoothpos.i_last_time >= SMOOTHPOS_INTERVAL_US )
 {
-i_audiotrack_us = FRAMES_TO_US( AudioTrack_GetPosition( env, p_aout ) 
);
+i_audiotrack_us = FRAMES_TO_US( AudioTrack_getPlaybackHeadPosition( 
env, p_aout ) );
 
 p_sys->smoothpos.i_last_time = i_now;
 
@@ -1117,12 +1089,14 @@ AudioTrack_Write( JNIEnv *env, audio_output_t *p_aout, 
block_t *p_buffer,
 uint64_t i_samples_pending;
 
 i_data = p_buffer->i_buffer - i_buffer_offset;
-i_audiotrack_pos = AudioTrack_GetPosition( env, p_aout );
+i_audiotrack_pos = AudioTrack_getPlaybackHeadPosition( env, p_aout );
+
+assert( i_audiotrack_pos <= p_sys->i_samples_written );
 if( i_audiotrack_pos > p_sys->i_samples_written )
 {
-msg_Warn( p_aout, "audiotrack position is ahead. Should NOT happen" );
-AudioTrack_ResetPlaybackHeadPosition( env, p_aout );
+msg_Err( p_aout, "audiotrack position is ahead. Should NOT happen" );
 p_sys->i_samples_written = 0;
+p_sys->b_error = true;
 return 0;
 }
 i_samples_pending = p_sys->i_samples_written - i_audiotrack_pos;
@@ -1448,6 +1422,22 @@ Flush( audio_output_t *p_aout, bool b_wait )
 return;
 JNI_AT_CALL_VOID( flush );
 }
+
+/* HACK: Before Android 4.4, the head position is not reset to zero and is
+ * still moving after a flush or a stop. This prevents to get a precise
+ * head position and there is no way to know when it stabilizes. Therefore
+ * recreate an AudioTrack object in that case. The AudioTimestamp class was
+ * added in API Level 19, so if this class is not found, the Android
+ * Version is 4.3 or before */
+if( !jfields.AudioTimestamp.clazz && p_sys->i_samples_written > 0 )
+ 

[vlc-commits] audiotrack: add AudioTrack_Reset

2015-07-03 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem  | Fri Jul  3 09:47:54 
2015 +0200| [b83d1386d7ef2817a83c41dde370fefd5a1aaa3a] | committer: Thomas 
Guillem

audiotrack: add AudioTrack_Reset

Refactor AudioTrack creation, and add a function that destroy and recreate an
AudioTrack object using the previous arguments.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b83d1386d7ef2817a83c41dde370fefd5a1aaa3a
---

 modules/audio_output/audiotrack.c |  139 -
 1 file changed, 89 insertions(+), 50 deletions(-)

diff --git a/modules/audio_output/audiotrack.c 
b/modules/audio_output/audiotrack.c
index 29c77dd..07ca81e 100644
--- a/modules/audio_output/audiotrack.c
+++ b/modules/audio_output/audiotrack.c
@@ -61,6 +61,13 @@ struct aout_sys_t {
 jobject p_bytebuffer; /* ByteBuffer ref (for WriteV21) */
 audio_sample_format_t fmt; /* fmt setup by Start */
 
+struct {
+unsigned int i_rate;
+int i_channel_config;
+int i_format;
+int i_size;
+} audiotrack_args;
+
 /* Used by AudioTrack_GetPosition / AudioTrack_getPlaybackHeadPosition */
 struct {
 uint64_t i_initial;
@@ -727,19 +734,69 @@ AudioTrack_GetChanOrder( uint16_t i_physical_channels, 
uint32_t p_chans_out[] )
 }
 
 /**
+ * Create an Android AudioTrack.
+ * returns -1 on error, 0 on success.
+ */
+static int
+AudioTrack_New( JNIEnv *env, audio_output_t *p_aout, unsigned int i_rate,
+int i_channel_config, int i_format, int i_size )
+{
+aout_sys_t *p_sys = p_aout->sys;
+jobject p_audiotrack = JNI_AT_NEW( jfields.AudioManager.STREAM_MUSIC,
+   i_rate, i_channel_config, i_format,
+   i_size, jfields.AudioTrack.MODE_STREAM 
);
+if( CHECK_AT_EXCEPTION( "AudioTrack" ) || !p_audiotrack )
+{
+msg_Warn( p_aout, "AudioTrack Init failed" ) ;
+return -1;
+}
+if( JNI_CALL_INT( p_audiotrack, jfields.AudioTrack.getState )
+!= jfields.AudioTrack.STATE_INITIALIZED )
+{
+JNI_CALL_VOID( p_audiotrack, jfields.AudioTrack.release );
+(*env)->DeleteLocalRef( env, p_audiotrack );
+msg_Err( p_aout, "AudioTrack getState failed" );
+return -1;
+}
+
+p_sys->p_audiotrack = (*env)->NewGlobalRef( env, p_audiotrack );
+(*env)->DeleteLocalRef( env, p_audiotrack );
+if( !p_sys->p_audiotrack )
+return -1;
+
+return 0;
+}
+
+/**
+ * Destroy and recreate an Android AudioTrack using the same arguments.
+ * returns -1 on error, 0 on success.
+ */
+static int
+AudioTrack_Reset( JNIEnv *env, audio_output_t *p_aout )
+{
+aout_sys_t *p_sys = p_aout->sys;
+
+JNI_AT_CALL_VOID( release );
+(*env)->DeleteGlobalRef( env, p_sys->p_audiotrack );
+return AudioTrack_New( env, p_aout, p_sys->audiotrack_args.i_rate,
+   p_sys->audiotrack_args.i_channel_config,
+   p_sys->audiotrack_args.i_format,
+   p_sys->audiotrack_args.i_size );
+}
+
+/**
  * Configure and create an Android AudioTrack.
- * returns NULL on configuration error
+ * returns -1 on configuration error, 0 on success.
  */
-static jobject
-AudioTrack_New( JNIEnv *env, audio_output_t *p_aout,
-unsigned int i_rate,
-vlc_fourcc_t i_vlc_format,
-uint16_t i_physical_channels,
-int i_bytes_per_frame,
-int *p_audiotrack_size )
+static int
+AudioTrack_Create( JNIEnv *env, audio_output_t *p_aout,
+   unsigned int i_rate,
+   vlc_fourcc_t i_vlc_format,
+   uint16_t i_physical_channels,
+   int i_bytes_per_frame )
 {
+aout_sys_t *p_sys = p_aout->sys;
 int i_size, i_min_buffer_size, i_channel_config, i_format;
-jobject p_audiotrack;
 
 switch( i_vlc_format )
 {
@@ -785,7 +842,7 @@ AudioTrack_New( JNIEnv *env, audio_output_t *p_aout,
 if( i_min_buffer_size <= 0 )
 {
 msg_Warn( p_aout, "getMinBufferSize returned an invalid size" ) ;
-return NULL;
+return -1;
 }
 if( i_vlc_format == VLC_CODEC_SPDIFB )
 i_size = ( i_min_buffer_size / AOUT_SPDIF_SIZE + 1 ) * AOUT_SPDIF_SIZE;
@@ -805,25 +862,16 @@ AudioTrack_New( JNIEnv *env, audio_output_t *p_aout,
 }
 
 /* create AudioTrack object */
-p_audiotrack = JNI_AT_NEW( jfields.AudioManager.STREAM_MUSIC, i_rate,
-   i_channel_config, i_format, i_size,
-   jfields.AudioTrack.MODE_STREAM );
-if( CHECK_AT_EXCEPTION( "AudioTrack" ) || !p_audiotrack )
-{
-msg_Warn( p_aout, "AudioTrack Init failed" ) ;
-return NULL;
-}
-if( JNI_CALL_INT( p_audiotrack, jfields.AudioTrack.getState )
-!= jfields.AudioTrack.STATE_INITIALIZED )
-{
-JNI_CALL_VOID( p_audiotrack, jfields.AudioTrack.release );
-(*env)->DeleteLocalRef( env, p_audiotra

[vlc-commits] audiotrack: always try to fetch AudioTimestamp clazz

2015-07-03 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem  | Fri Jul  3 09:38:13 
2015 +0200| [9cd3560bdd978f1a971b2e253807248a6d7bc13d] | committer: Thomas 
Guillem

audiotrack: always try to fetch AudioTimestamp clazz

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9cd3560bdd978f1a971b2e253807248a6d7bc13d
---

 modules/audio_output/audiotrack.c |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/modules/audio_output/audiotrack.c 
b/modules/audio_output/audiotrack.c
index 7689330..29c77dd 100644
--- a/modules/audio_output/audiotrack.c
+++ b/modules/audio_output/audiotrack.c
@@ -268,10 +268,8 @@ InitJNIFields( audio_output_t *p_aout, JNIEnv* env )
 } else
 GET_ID( GetMethodID, AudioTrack.write, "write", "([BII)I", true );
 
-#ifdef AUDIOTRACK_HW_LATENCY
 GET_ID( GetMethodID, AudioTrack.getTimestamp,
 "getTimestamp", "(Landroid/media/AudioTimestamp;)Z", false );
-#endif
 GET_ID( GetMethodID, AudioTrack.getPlaybackHeadPosition,
 "getPlaybackHeadPosition", "()I", true );
 
@@ -984,6 +982,7 @@ Start( audio_output_t *p_aout, audio_sample_format_t 
*restrict p_fmt )
 }
 p_sys->i_max_audiotrack_samples = BYTES_TO_FRAMES( i_audiotrack_size );
 
+#ifdef AUDIOTRACK_HW_LATENCY
 if( jfields.AudioTimestamp.clazz )
 {
 /* create AudioTimestamp object */
@@ -1000,6 +999,7 @@ Start( audio_output_t *p_aout, audio_sample_format_t 
*restrict p_fmt )
 return VLC_EGENERIC;
 }
 }
+#endif
 
 if( p_sys->fmt.i_format == VLC_CODEC_FL32 )
 {

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits