[vlc-commits] Qt: fix memory leak
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
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
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
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
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
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
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