bugfix enable/disable audio, report audio status to ui

git-svn-id: svn://code.dyne.org/veejay/trunk@774 eb8d1916-c9e9-0310-b8de-cf0c9472ead5
This commit is contained in:
Niels Elburg
2007-02-09 16:55:51 +00:00
parent 060bc5f61b
commit 83add4bc33
4 changed files with 40 additions and 64 deletions

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -18,8 +18,6 @@
*/
#include <config.h>
#ifdef HAVE_JACK
#include <bio2jack/bio2jack.h>
#include <libel/vj-el.h>
@@ -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