From 83add4bc338b73094b8f8591d90c5812fde4db07 Mon Sep 17 00:00:00 2001 From: Niels Elburg Date: Fri, 9 Feb 2007 16:55:51 +0000 Subject: [PATCH] bugfix enable/disable audio, report audio status to ui git-svn-id: svn://code.dyne.org/veejay/trunk@774 eb8d1916-c9e9-0310-b8de-cf0c9472ead5 --- veejay-current/veejay/vj-event.c | 66 +++++++----------------------- veejay-current/veejay/vj-jack.h | 6 +++ veejay-current/veejay/vj-perform.c | 6 ++- veejay-current/veejay/vj-pjack.c | 26 +++++++----- 4 files changed, 40 insertions(+), 64 deletions(-) diff --git a/veejay-current/veejay/vj-event.c b/veejay-current/veejay/vj-event.c index 0acfdbc0..60ef0117 100644 --- a/veejay-current/veejay/vj-event.c +++ b/veejay-current/veejay/vj-event.c @@ -6684,50 +6684,26 @@ void vj_event_output_y4m_stop(void *ptr, const char format[], va_list ap) void vj_event_enable_audio(void *ptr, const char format[], va_list ap) { veejay_t *v = (veejay_t*)ptr; - if(v->edit_list->has_audio) +#ifdef HAVE_JACK + if( v->audio == NO_AUDIO ) { - if(v->audio != AUDIO_PLAY) - { - if( vj_perform_audio_start(v) ) - { - v->audio = AUDIO_PLAY; - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot start Jack "); - } - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Already playing audio"); - } + vj_jack_enable(); + v->audio = AUDIO_PLAY; } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Video has no audio"); - } - +#endif } void vj_event_disable_audio(void *ptr, const char format[], va_list ap) { veejay_t *v = (veejay_t *)ptr; - if(v->edit_list->has_audio) +#ifdef HAVE_JACK + if( v->audio != NO_AUDIO ) { - if(v->audio == AUDIO_PLAY) - { - vj_perform_audio_stop(v); - v->audio = NO_AUDIO; - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Not playing audio"); - } - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Video has no audio"); + vj_jack_disable(); + v->audio = NO_AUDIO; + vj_jack_reset(); } +#endif } @@ -7751,7 +7727,7 @@ void vj_event_send_video_information ( void *ptr, const char format[], va_lis editlist *el = ( SAMPLE_PLAYING(v) ? sample_get_editlist( v->uc->sample_id ) : v->current_edit_list ); - snprintf(info_msg,sizeof(info_msg)-1, "%04d %04d %01d %c %02.3f %1d %04d %06ld %02d %03ld %08ld", + snprintf(info_msg,sizeof(info_msg)-1, "%04d %04d %01d %c %02.3f %1d %04d %06ld %02d %03ld %08ld %1d", el->video_width, el->video_height, el->video_inter, @@ -7762,25 +7738,11 @@ void vj_event_send_video_information ( void *ptr, const char format[], va_lis el->audio_rate, el->audio_chans, el->num_video_files, - el->video_frames + el->video_frames, + v->audio ); sprintf( _s_print_buf, "%03d%s",strlen(info_msg), info_msg); - veejay_msg(VEEJAY_MSG_DEBUG, - "%p , %04d %04d %01d %c %02.3f %1d %04d %06ld %02d %03ld %08ld", - el, - el->video_width, - el->video_height, - el->video_inter, - el->video_norm, - el->video_fps, - el->has_audio, - el->audio_bits, - el->audio_rate, - el->audio_chans, - el->num_video_files, - el->video_frames - ); SEND_MSG(v,_s_print_buf); } diff --git a/veejay-current/veejay/vj-jack.h b/veejay-current/veejay/vj-jack.h index 103539c4..2ed4ff89 100644 --- a/veejay-current/veejay/vj-jack.h +++ b/veejay-current/veejay/vj-jack.h @@ -35,6 +35,8 @@ int vj_jack_pause(); int vj_jack_resume(); +void vj_jack_reset(); + int vj_jack_play(void *data, int len); int vj_jack_set_volume(int volume); @@ -45,6 +47,10 @@ int vj_jack_resume(); long vj_jack_get_status(long int *sec, long int *usec); +void vj_jack_enable(); + +void vj_jack_disable(); + int vj_jack_get_space(); int vj_jack_continue(int speed); diff --git a/veejay-current/veejay/vj-perform.c b/veejay-current/veejay/vj-perform.c index a8ba84a0..6d14e858 100644 --- a/veejay-current/veejay/vj-perform.c +++ b/veejay-current/veejay/vj-perform.c @@ -939,9 +939,13 @@ void vj_perform_audio_status(struct timeval tmpstmp, unsigned int nb_out, void vj_perform_audio_stop(veejay_t * info) { if (info->edit_list->has_audio) { - //audio_shutdown(); #ifdef HAVE_JACK vj_jack_stop(); + if(resample_jack) + { + audio_resample_close(resample_jack); + resample_jack = NULL; + } #endif info->audio = NO_AUDIO; } diff --git a/veejay-current/veejay/vj-pjack.c b/veejay-current/veejay/vj-pjack.c index e841ca34..defec4a9 100644 --- a/veejay-current/veejay/vj-pjack.c +++ b/veejay-current/veejay/vj-pjack.c @@ -18,8 +18,6 @@ */ #include - - #ifdef HAVE_JACK #include #include @@ -28,7 +26,6 @@ static int bits_per_sample = 0; static unsigned long audio_rate = 0; static int audio_channels = 0; static int audio_bps = 0; -static int buffer_len = 0; static unsigned long v_rate = 0; extern void veejay_msg(int type, const char format[], ...); @@ -95,9 +92,8 @@ int vj_jack_init(editlist *el) audio_bps = audio_rate * audio_channels; - buffer_len = vj_jack_get_space(); - - veejay_msg(2,"Jack: %ld, %d Hz/ %d Channels %d Bit ", jack_rate,audio_rate,audio_channels,bits_per_sample); + veejay_msg(2,"Jack: %ld, %d Hz/ %d Channels %d Bit, Buffering max %d bytes ", jack_rate,audio_rate,audio_channels,bits_per_sample, + vj_jack_get_space()); ret = 1; @@ -148,11 +144,21 @@ int vj_jack_stop() return 1; } -int vj_jack_reset() +void vj_jack_enable() +{ + if( JACK_GetState(driver) == STOPPED ) + JACK_SetState(driver, PLAYING ); +} + +void vj_jack_disable() +{ + JACK_SetState( driver, STOPPED ); +} + + +void vj_jack_reset() { JACK_Reset(driver); - buffer_len = 0; - return 1; } int vj_jack_c_play(void *data, int len, int entry) @@ -191,8 +197,6 @@ int vj_jack_get_space() long vj_jack_get_status(long int *sec, long int *usec) { -//JACK_GetPosition(int deviceID, enum pos_enum position, int type); - return JACK_OutputStatus( driver, sec, usec); } #endif