mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-14 11:50:02 +01:00
@@ -277,7 +277,8 @@ static int v4l2_vidioc_qbuf( v4l2info *v )
|
|||||||
v->buffer.index = i;
|
v->buffer.index = i;
|
||||||
|
|
||||||
if( -1 == vioctl( v->fd, VIDIOC_QBUF, &(v->buffer)) ) {
|
if( -1 == vioctl( v->fd, VIDIOC_QBUF, &(v->buffer)) ) {
|
||||||
veejay_msg(0, "v4l2: first VIDIOC_QBUF failed with %s", strerror(errno));
|
if( errno != ENODEV )
|
||||||
|
veejay_msg(0, "v4l2: first VIDIOC_QBUF failed with %s", strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -288,7 +289,8 @@ static int v4l2_stop_video_capture( v4l2info *v )
|
|||||||
{
|
{
|
||||||
if(v->is_streaming) {
|
if(v->is_streaming) {
|
||||||
if( -1 == vioctl( v->fd, VIDIOC_STREAMOFF, &(v->buftype)) ) {
|
if( -1 == vioctl( v->fd, VIDIOC_STREAMOFF, &(v->buftype)) ) {
|
||||||
veejay_msg(0,"v4l2: unable to stop streaming:%d, %s",errno,strerror(errno));
|
if( errno != ENODEV )
|
||||||
|
veejay_msg(0,"v4l2: unable to stop streaming:%d, %s",errno,strerror(errno));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
v->is_streaming = 0;
|
v->is_streaming = 0;
|
||||||
@@ -801,14 +803,22 @@ static void v4l2_set_output_pointers( v4l2info *v, void *src )
|
|||||||
|
|
||||||
VJFrame *v4l2_get_dst( void *vv, uint8_t *Y, uint8_t *U, uint8_t *V, uint8_t *A ) {
|
VJFrame *v4l2_get_dst( void *vv, uint8_t *Y, uint8_t *U, uint8_t *V, uint8_t *A ) {
|
||||||
v4l2info *v = (v4l2info*) vv;
|
v4l2info *v = (v4l2info*) vv;
|
||||||
|
v4l2_thread_info *i = (v4l2_thread_info *) v->video_info;
|
||||||
|
|
||||||
|
if(i->stop)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if(v->threaded)
|
if(v->threaded)
|
||||||
lock_(v->video_info);
|
lock_(i);
|
||||||
|
|
||||||
v->host_frame->data[0] = Y;
|
v->host_frame->data[0] = Y;
|
||||||
v->host_frame->data[1] = U;
|
v->host_frame->data[1] = U;
|
||||||
v->host_frame->data[2] = V;
|
v->host_frame->data[2] = V;
|
||||||
v->host_frame->data[3] = A;
|
v->host_frame->data[3] = A;
|
||||||
|
|
||||||
if(v->threaded)
|
if(v->threaded)
|
||||||
unlock_(v->video_info);
|
unlock_(i);
|
||||||
|
|
||||||
return v->host_frame;
|
return v->host_frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1209,8 +1219,9 @@ static int v4l2_pull_frame_intern( v4l2info *v )
|
|||||||
if( v->rw == 0 ) {
|
if( v->rw == 0 ) {
|
||||||
|
|
||||||
if( -1 == vioctl( v->fd, VIDIOC_DQBUF, &(v->buffer))) {
|
if( -1 == vioctl( v->fd, VIDIOC_DQBUF, &(v->buffer))) {
|
||||||
veejay_msg(0, "v4l2: VIDIOC_DQBUF: %s", strerror(errno));
|
if( errno == ENODEV ) {
|
||||||
if( errno != EIO ) {
|
veejay_msg(0, "v4l2: %s (anymore)", strerror(errno));
|
||||||
|
} else if( errno != EIO ) {
|
||||||
veejay_msg(0,"v4l2: unable to grab a frame: %d, %s",errno,strerror(errno));
|
veejay_msg(0,"v4l2: unable to grab a frame: %d, %s",errno,strerror(errno));
|
||||||
}
|
}
|
||||||
v4l2_stop_video_capture(v);
|
v4l2_stop_video_capture(v);
|
||||||
@@ -1302,7 +1313,7 @@ int v4l2_pull_frame(void *vv,VJFrame *dst)
|
|||||||
|
|
||||||
v4l2info *v = (v4l2info*) vv;
|
v4l2info *v = (v4l2info*) vv;
|
||||||
|
|
||||||
if( (v->rw == 1 && v->pause_read ) || (v->rw == 0 && !v->is_streaming) )
|
if( (dst == NULL || v->rw == 1 && v->pause_read ) || (v->rw == 0 && !v->is_streaming) )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if( v->scaler == NULL ) {
|
if( v->scaler == NULL ) {
|
||||||
@@ -1447,7 +1458,7 @@ void v4l2_close( void *d )
|
|||||||
|
|
||||||
if( v->buffers ) {
|
if( v->buffers ) {
|
||||||
free(v->buffers);
|
free(v->buffers);
|
||||||
v->host_frame = NULL;
|
v->buffers = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(v);
|
free(v);
|
||||||
@@ -2058,7 +2069,8 @@ static void *v4l2_grabber_thread( void *v )
|
|||||||
|
|
||||||
while( 1 ) {
|
while( 1 ) {
|
||||||
int err = (v4l2->rw);
|
int err = (v4l2->rw);
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if( i->stop ) {
|
if( i->stop ) {
|
||||||
veejay_msg(VEEJAY_MSG_DEBUG, "v4l2: Closing video capture device");
|
veejay_msg(VEEJAY_MSG_DEBUG, "v4l2: Closing video capture device");
|
||||||
goto v4l2_grabber_exit;
|
goto v4l2_grabber_exit;
|
||||||
@@ -2086,6 +2098,18 @@ static void *v4l2_grabber_thread( void *v )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = v4l2_poll( v4l2, 1, 200 );
|
||||||
|
if( ret > 0 ) {
|
||||||
|
if(!v4l2_pull_frame_intern( v4l2 ) )
|
||||||
|
err = -1;
|
||||||
|
else
|
||||||
|
i->retries = max_retries;
|
||||||
|
}
|
||||||
|
else if ( ret == -1 ) {
|
||||||
|
err = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
while( ( err = v4l2_poll( v4l2, 1, 200 ) ) < 0 ) {
|
while( ( err = v4l2_poll( v4l2, 1, 200 ) ) < 0 ) {
|
||||||
if( !(err == -1) ) {
|
if( !(err == -1) ) {
|
||||||
break;
|
break;
|
||||||
@@ -2093,6 +2117,7 @@ static void *v4l2_grabber_thread( void *v )
|
|||||||
}
|
}
|
||||||
if( err > 0 && !v4l2_pull_frame_intern( v4l2 ) )
|
if( err > 0 && !v4l2_pull_frame_intern( v4l2 ) )
|
||||||
err = -1;
|
err = -1;
|
||||||
|
*/
|
||||||
|
|
||||||
if( err == -1 ) {
|
if( err == -1 ) {
|
||||||
if( i->retries < 0 ) {
|
if( i->retries < 0 ) {
|
||||||
@@ -2101,6 +2126,7 @@ static void *v4l2_grabber_thread( void *v )
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
i->retries --;
|
i->retries --;
|
||||||
|
nanosleep(&req, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2163,7 +2189,7 @@ int v4l2_thread_pull( v4l2_thread_info *i , VJFrame *dst )
|
|||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
lock_(i);
|
lock_(i);
|
||||||
if(i->stop) {
|
if(i->stop || dst == NULL) {
|
||||||
unlock_(i);
|
unlock_(i);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ static int vj_perform_post_chain_tag(veejay_t *info, VJFrame *frame);
|
|||||||
static void seq_play_sample( veejay_t *info, int n, int t);
|
static void seq_play_sample( veejay_t *info, int n, int t);
|
||||||
static int vj_perform_valid_sequence( veejay_t *info, int *type );
|
static int vj_perform_valid_sequence( veejay_t *info, int *type );
|
||||||
static void vj_perform_plain_fill_buffer(veejay_t * info, int *result);
|
static void vj_perform_plain_fill_buffer(veejay_t * info, int *result);
|
||||||
static int vj_perform_tag_fill_buffer(veejay_t * info);
|
static void vj_perform_tag_fill_buffer(veejay_t * info);
|
||||||
static void vj_perform_clear_cache(void);
|
static void vj_perform_clear_cache(void);
|
||||||
static int vj_perform_increase_tag_frame(veejay_t * info, long num);
|
static int vj_perform_increase_tag_frame(veejay_t * info, long num);
|
||||||
static int vj_perform_increase_plain_frame(veejay_t * info, long num);
|
static int vj_perform_increase_plain_frame(veejay_t * info, long num);
|
||||||
@@ -2944,7 +2944,6 @@ void vj_perform_record_offline_tag_frame(veejay_t *info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void vj_perform_record_tag_frame(veejay_t *info) {
|
void vj_perform_record_tag_frame(veejay_t *info) {
|
||||||
video_playback_setup *settings = info->settings;
|
|
||||||
uint8_t *frame[4];
|
uint8_t *frame[4];
|
||||||
int res = 1;
|
int res = 1;
|
||||||
int stream_id = info->uc->sample_id;
|
int stream_id = info->uc->sample_id;
|
||||||
@@ -3004,7 +3003,7 @@ void vj_perform_record_tag_frame(veejay_t *info) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vj_perform_tag_fill_buffer(veejay_t * info)
|
static void vj_perform_tag_fill_buffer(veejay_t * info)
|
||||||
{
|
{
|
||||||
int error = 1;
|
int error = 1;
|
||||||
uint8_t *frame[4];
|
uint8_t *frame[4];
|
||||||
@@ -3028,7 +3027,7 @@ static int vj_perform_tag_fill_buffer(veejay_t * info)
|
|||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
vj_frame_copy(feedback_buffer,frame,strides);
|
vj_frame_copy(feedback_buffer,frame,strides);
|
||||||
return 1;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!active)
|
if(!active)
|
||||||
@@ -3061,8 +3060,6 @@ static int vj_perform_tag_fill_buffer(veejay_t * info)
|
|||||||
{
|
{
|
||||||
info->uc->take_bg = vj_perform_take_bg(info,info->effect_frame1);
|
info->uc->take_bg = vj_perform_take_bg(info,info->effect_frame1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vj_perform_pre_chain(veejay_t *info, VJFrame *frame)
|
static void vj_perform_pre_chain(veejay_t *info, VJFrame *frame)
|
||||||
@@ -3321,14 +3318,16 @@ int vj_perform_queue_audio_frame(veejay_t *info)
|
|||||||
if(el->has_audio)
|
if(el->has_audio)
|
||||||
{
|
{
|
||||||
num_samples = vj_tag_get_audio_frame(info->uc->sample_id, a_buf);
|
num_samples = vj_tag_get_audio_frame(info->uc->sample_id, a_buf);
|
||||||
if(num_samples <= 0 )
|
}
|
||||||
{
|
|
||||||
num_samples = pred_len;
|
if(num_samples <= 0 )
|
||||||
veejay_memset(a_buf, 0, num_samples * bps );
|
{
|
||||||
}
|
num_samples = pred_len;
|
||||||
|
veejay_memset(a_buf, 0, num_samples * bps );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
vj_jack_continue( settings->current_playback_speed );
|
vj_jack_continue( settings->current_playback_speed );
|
||||||
|
|
||||||
vj_perform_play_audio( settings, a_buf, (num_samples * bps ));
|
vj_perform_play_audio( settings, a_buf, (num_samples * bps ));
|
||||||
@@ -3852,16 +3851,14 @@ int vj_perform_queue_video_frame(veejay_t *info, const int skip_incr)
|
|||||||
if( (info->seq->active && info->seq->rec_id) || info->settings->offline_record )
|
if( (info->seq->active && info->seq->rec_id) || info->settings->offline_record )
|
||||||
pvar_.enc_active = 1;
|
pvar_.enc_active = 1;
|
||||||
|
|
||||||
|
vj_perform_tag_fill_buffer(info);
|
||||||
|
|
||||||
if (vj_perform_tag_fill_buffer(info))
|
if(vj_perform_verify_rows(info))
|
||||||
{
|
vj_perform_tag_complete_buffers(info, &is444);
|
||||||
if(vj_perform_verify_rows(info))
|
|
||||||
vj_perform_tag_complete_buffers(info, &is444);
|
|
||||||
|
|
||||||
cur_out = vj_perform_render_magic( info, info->settings, is444 );
|
cur_out = vj_perform_render_magic( info, info->settings, is444 );
|
||||||
}
|
res = 1;
|
||||||
res = 1;
|
break;
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user