Fixed marker in veejay, fixed bugs in use of EDL per sample (might be few left - test recording)

git-svn-id: svn://code.dyne.org/veejay/trunk@382 eb8d1916-c9e9-0310-b8de-cf0c9472ead5
This commit is contained in:
Niels Elburg
2005-09-09 20:05:49 +00:00
parent 1231a89ad0
commit 6761f9e19a
3 changed files with 122 additions and 119 deletions

View File

@@ -294,7 +294,7 @@ int veejay_set_speed(veejay_t * info, int speed)
{ {
case VJ_PLAYBACK_MODE_PLAIN: case VJ_PLAYBACK_MODE_PLAIN:
len = info->edit_list->video_frames - 1; len = info->current_edit_list->video_frames - 1;
if( abs(speed) <= len ) if( abs(speed) <= len )
settings->current_playback_speed = speed; settings->current_playback_speed = speed;
else else
@@ -508,7 +508,7 @@ int veejay_init_editlist(veejay_t * info)
video_playback_setup *settings = video_playback_setup *settings =
(video_playback_setup *) info->settings; (video_playback_setup *) info->settings;
editlist *el = info->edit_list; editlist *el = info->current_edit_list;
/* Set min/max options so that it runs like it should */ /* Set min/max options so that it runs like it should */
settings->min_frame_num = 0; settings->min_frame_num = 0;
@@ -645,43 +645,41 @@ void veejay_set_sample(veejay_t * info, int sampleid)
int start,end,speed,looptype; int start,end,speed,looptype;
if ( info->uc->playback_mode == VJ_PLAYBACK_MODE_TAG) if ( info->uc->playback_mode == VJ_PLAYBACK_MODE_TAG)
{ {
if(!vj_tag_exists(sampleid)) if(!vj_tag_exists(sampleid))
{ {
veejay_msg(VEEJAY_MSG_ERROR, "Stream %d does not exist", sampleid); veejay_msg(VEEJAY_MSG_ERROR, "Stream %d does not exist", sampleid);
return; return;
} }
info->last_tag_id = sampleid; info->last_tag_id = sampleid;
info->uc->sample_id = sampleid; info->uc->sample_id = sampleid;
if(info->settings->current_playback_speed==0) if(info->settings->current_playback_speed==0)
veejay_set_speed(info, 1); veejay_set_speed(info, 1);
veejay_msg(VEEJAY_MSG_INFO, "Playing stream %d", veejay_msg(VEEJAY_MSG_INFO, "Playing stream %d",
sampleid); sampleid);
return; veejay_msg(VEEJAY_MSG_DEBUG, "EDL = %p, New EDL = %p", info->edit_list, info->current_edit_list );
info->edit_list = info->current_edit_list;
return;
} }
if( info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE) if( info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE)
{ {
editlist *edl =
sample_get_editlist( sampleid );
if(edl)
{
info->edit_list = sample_get_editlist( sampleid );
}
else
{
veejay_msg(VEEJAY_MSG_ERROR,
"Sample has not EDL data");
}
if(!sample_exists(sampleid)) if(!sample_exists(sampleid))
{ {
veejay_msg(VEEJAY_MSG_ERROR, "Sample %d does not exist", sampleid); veejay_msg(VEEJAY_MSG_ERROR, "Sample %d does not exist", sampleid);
return; return;
} }
sample_get_short_info( sampleid , &start,&end,&looptype,&speed); editlist *edl =
sample_get_editlist( sampleid );
info->edit_list = sample_get_editlist( sampleid );
veejay_msg(VEEJAY_MSG_DEBUG, "Sample EDL = %p, PM EDL = %p", info->edit_list, info->current_edit_list );
sample_get_short_info( sampleid , &start,&end,&looptype,&speed);
veejay_msg(VEEJAY_MSG_INFO, "Playing sample %d (frames %d - %d) at speed %d", veejay_msg(VEEJAY_MSG_INFO, "Playing sample %d (frames %d - %d) at speed %d",
sampleid, start,end,speed); sampleid, start,end,speed);
@@ -718,7 +716,7 @@ int veejay_create_tag(veejay_t * info, int type, char *filename,
} }
} }
int id = vj_tag_new(type, filename, index, info->edit_list, info->pixel_format, channel); int id = vj_tag_new(type, filename, index, info->current_edit_list, info->pixel_format, channel);
char descr[200]; char descr[200];
bzero(descr,200); bzero(descr,200);
vj_tag_get_by_type(type,descr); vj_tag_get_by_type(type,descr);
@@ -802,6 +800,7 @@ static int veejay_screen_update(veejay_t * info )
} }
#ifdef USE_SWSCALER #ifdef USE_SWSCALER
// scale the image if wanted // scale the image if wanted
video_playback_setup *settings = info->settings;
if(settings->zoom ) if(settings->zoom )
{ {
VJFrame src,dst; VJFrame src,dst;
@@ -817,8 +816,8 @@ static int veejay_screen_update(veejay_t * info )
} }
else else
{ {
vj_get_yuv_template( &src, info->edit_list->video_width, vj_get_yuv_template( &src, info->current_edit_list->video_width,
info->edit_list->video_height, info->current_edit_list->video_height,
info->pixel_format ); info->pixel_format );
} }
@@ -852,7 +851,7 @@ static int veejay_screen_update(veejay_t * info )
#ifdef USE_GDK_PIXBUF #ifdef USE_GDK_PIXBUF
if(vj_picture_save( info->settings->export_image, frame, if(vj_picture_save( info->settings->export_image, frame,
info->video_output_width, info->video_output_height, info->video_output_width, info->video_output_height,
info->edit_list->pixel_format ) ) info->current_edit_list->pixel_format ) )
{ {
veejay_msg(VEEJAY_MSG_INFO, veejay_msg(VEEJAY_MSG_INFO,
"Saved frame %ld to image", info->settings->current_frame_num ); "Saved frame %ld to image", info->settings->current_frame_num );
@@ -963,7 +962,7 @@ static int veejay_screen_update(veejay_t * info )
produce( produce(
info->segment, info->segment,
frame, frame,
info->edit_list->video_width*info->edit_list->video_height); info->current_edit_list->video_width*info->current_edit_list->video_height);
break; break;
case 5: case 5:
@@ -1462,7 +1461,7 @@ static int veejay_mjpeg_sync_buf(veejay_t * info, struct mjpeg_sync *bs)
int veejay_init(veejay_t * info, int x, int y,char *arg, int def_tags) int veejay_init(veejay_t * info, int x, int y,char *arg, int def_tags)
{ {
editlist *el = info->edit_list; editlist *el = info->current_edit_list;
video_playback_setup *settings = info->settings; video_playback_setup *settings = info->settings;
if(info->video_out<0) if(info->video_out<0)
{ {
@@ -1522,8 +1521,8 @@ int veejay_init(veejay_t * info, int x, int y,char *arg, int def_tags)
memset( &src,0,sizeof(VJFrame)); memset( &src,0,sizeof(VJFrame));
int w = 0; int h = 0; int w = 0; int h = 0;
vj_get_yuv_template( &src, vj_get_yuv_template( &src,
info->edit_list->video_width, info->current_edit_list->video_width,
info->edit_list->video_height, info->current_edit_list->video_height,
info->pixel_format ); info->pixel_format );
int res = vj_perform_init_cropped_output_frame( int res = vj_perform_init_cropped_output_frame(
@@ -1542,7 +1541,7 @@ int veejay_init(veejay_t * info, int x, int y,char *arg, int def_tags)
return -1; return -1;
} }
veejay_msg(VEEJAY_MSG_INFO, "Crop video %dx%d to %dx%d (top %d, bottom %d, left %d, right %d", veejay_msg(VEEJAY_MSG_INFO, "Crop video %dx%d to %dx%d (top %d, bottom %d, left %d, right %d",
info->edit_list->video_width, info->edit_list->video_height, info->current_edit_list->video_width, info->current_edit_list->video_height,
w,h, w,h,
info->settings->viewport.top, info->settings->viewport.top,
info->settings->viewport.bottom, info->settings->viewport.bottom,
@@ -1567,8 +1566,8 @@ int veejay_init(veejay_t * info, int x, int y,char *arg, int def_tags)
else else
{ {
vj_get_yuv_template( &src, vj_get_yuv_template( &src,
info->edit_list->video_width, info->current_edit_list->video_width,
info->edit_list->video_height, info->current_edit_list->video_height,
info->pixel_format ); info->pixel_format );
} }
@@ -1629,7 +1628,7 @@ int veejay_init(veejay_t * info, int x, int y,char *arg, int def_tags)
plugins_allocate(); plugins_allocate();
if(info->edit_list->has_audio) { if(info->current_edit_list->has_audio) {
if (vj_perform_init_audio(info) == 0) if (vj_perform_init_audio(info) == 0)
veejay_msg(VEEJAY_MSG_INFO, "Initialized Audio Task"); veejay_msg(VEEJAY_MSG_INFO, "Initialized Audio Task");
else else
@@ -1639,7 +1638,7 @@ int veejay_init(veejay_t * info, int x, int y,char *arg, int def_tags)
veejay_msg(VEEJAY_MSG_INFO, veejay_msg(VEEJAY_MSG_INFO,
"Initialized %d Image- and Video Effects", MAX_EFFECTS); "Initialized %d Image- and Video Effects", MAX_EFFECTS);
vj_effect_initialize(info->edit_list->video_width, info->edit_list->video_height); vj_effect_initialize(info->current_edit_list->video_width, info->current_edit_list->video_height);
info->plugin_frame = vj_perform_init_plugin_frame(info); info->plugin_frame = vj_perform_init_plugin_frame(info);
info->plugin_frame_info = vj_perform_init_plugin_frame_info(info); info->plugin_frame_info = vj_perform_init_plugin_frame_info(info);
@@ -1647,7 +1646,7 @@ int veejay_init(veejay_t * info, int x, int y,char *arg, int def_tags)
if(info->dump) vj_effect_dump(); if(info->dump) vj_effect_dump();
info->output_stream = vj_yuv4mpeg_alloc(info->edit_list, info->video_output_width, info->output_stream = vj_yuv4mpeg_alloc(info->current_edit_list, info->video_output_width,
info->video_output_height ); info->video_output_height );
if(!info->output_stream) if(!info->output_stream)
{ {
@@ -1754,13 +1753,13 @@ int veejay_init(veejay_t * info, int x, int y,char *arg, int def_tags)
veejay_msg(VEEJAY_MSG_INFO, veejay_msg(VEEJAY_MSG_INFO,
"Entering render mode (no visual output)"); "Entering render mode (no visual output)");
info->render_stream = vj_yuv4mpeg_alloc(info->edit_list, info->video_output_width,info->video_output_height); info->render_stream = vj_yuv4mpeg_alloc(info->current_edit_list, info->video_output_width,info->video_output_height);
if (vj_yuv_stream_start_write if (vj_yuv_stream_start_write
(info->render_stream, info->stream_outname, (info->render_stream, info->stream_outname,
info->edit_list) == 0) { info->current_edit_list) == 0) {
veejay_msg(VEEJAY_MSG_INFO, veejay_msg(VEEJAY_MSG_INFO,
"Rendering to [%s].", "Rendering to [%s].",
info->stream_outname); info->stream_outname);
@@ -1808,7 +1807,7 @@ int veejay_init(veejay_t * info, int x, int y,char *arg, int def_tags)
if( settings->action_scheduler.state ) if( settings->action_scheduler.state )
dummy_id = vj_tag_size()-1; dummy_id = vj_tag_size()-1;
else else
dummy_id = vj_tag_new( VJ_TAG_TYPE_COLOR, "Solid", -1, info->edit_list,info->pixel_format,-1); dummy_id = vj_tag_new( VJ_TAG_TYPE_COLOR, "Solid", -1, info->current_edit_list,info->pixel_format,-1);
if(dummy_id > 0) if(dummy_id > 0)
{ {
veejay_msg(VEEJAY_MSG_INFO, "Activating dummy mode (Stream %d)", dummy_id); veejay_msg(VEEJAY_MSG_INFO, "Activating dummy mode (Stream %d)", dummy_id);
@@ -2078,17 +2077,17 @@ static void veejay_playback_cycle(veejay_t * info)
static void Welcome(veejay_t *info) static void Welcome(veejay_t *info)
{ {
veejay_msg(VEEJAY_MSG_WARNING, "Video project settings: %ldx%ld, Norm: [%s], fps [%2.2f], %s", veejay_msg(VEEJAY_MSG_WARNING, "Video project settings: %ldx%ld, Norm: [%s], fps [%2.2f], %s",
info->edit_list->video_width, info->current_edit_list->video_width,
info->edit_list->video_height, info->current_edit_list->video_height,
info->edit_list->video_norm == 'n' ? "NTSC" : "PAL", info->current_edit_list->video_norm == 'n' ? "NTSC" : "PAL",
info->edit_list->video_fps, info->current_edit_list->video_fps,
info->edit_list->video_inter==0 ? "Not interlaced" : "Interlaced" ); info->current_edit_list->video_inter==0 ? "Not interlaced" : "Interlaced" );
if(info->audio==AUDIO_PLAY && info->edit_list->has_audio) if(info->audio==AUDIO_PLAY && info->edit_list->has_audio)
veejay_msg(VEEJAY_MSG_WARNING, " %ldHz %d Channels %dBps (%d Bit) %s %s", veejay_msg(VEEJAY_MSG_WARNING, " %ldHz %d Channels %dBps (%d Bit) %s %s",
info->edit_list->audio_rate, info->current_edit_list->audio_rate,
info->edit_list->audio_chans, info->current_edit_list->audio_chans,
info->edit_list->audio_bps, info->current_edit_list->audio_bps,
info->edit_list->audio_bits, info->current_edit_list->audio_bits,
(info->no_bezerk==0?"[Bezerk]" : " " ), (info->no_bezerk==0?"[Bezerk]" : " " ),
(info->verbose==0?" " : "[Debug]") ); (info->verbose==0?" " : "[Debug]") );
@@ -2162,7 +2161,7 @@ static void *veejay_playback_thread(void *data)
vj_perform_free(info); vj_perform_free(info);
vj_effect_shutdown(); vj_effect_shutdown();
vj_tag_close_all(); vj_tag_close_all();
vj_el_free(info->edit_list); vj_el_free(info->current_edit_list);
veejay_msg(VEEJAY_MSG_DEBUG,"Exiting playback thread"); veejay_msg(VEEJAY_MSG_DEBUG,"Exiting playback thread");
pthread_exit(NULL); pthread_exit(NULL);
@@ -2448,7 +2447,7 @@ editlist *veejay_edit_copy_to_new(veejay_t * info, editlist *el, long start, lon
uint64_t len = n2 - n1 + 1; uint64_t len = n2 - n1 + 1;
if( n1 < 0 || n2 > info->edit_list->video_frames-1) if( n1 < 0 || n2 > el->video_frames-1)
{ {
veejay_msg(VEEJAY_MSG_ERROR, "Sample start and end are outside of editlist"); veejay_msg(VEEJAY_MSG_ERROR, "Sample start and end are outside of editlist");
return NULL; return NULL;
@@ -2461,8 +2460,13 @@ editlist *veejay_edit_copy_to_new(veejay_t * info, editlist *el, long start, lon
} }
/* Copy edl */ /* Copy edl */
editlist *new_el = (editlist*) vj_malloc(sizeof(editlist));
memcpy( new_el, info->edit_list , sizeof(editlist)); editlist *new_el = vj_el_soft_clone( el );
if(!new_el)
{
veejay_msg(VEEJAY_MSG_ERROR, "Cannot soft clone EDL");
}
/* copy edl frames */ /* copy edl frames */
new_el->frame_list = new_el->frame_list =
(uint64_t *) vj_malloc( sizeof(uint64_t) * len ); (uint64_t *) vj_malloc( sizeof(uint64_t) * len );
@@ -2478,10 +2482,12 @@ editlist *veejay_edit_copy_to_new(veejay_t * info, editlist *el, long start, lon
k = 0; k = 0;
for (i = n1; i <= n2; i++) for (i = n1; i <= n2; i++)
new_el->frame_list[k++] = info->edit_list->frame_list[i]; new_el->frame_list[k++] = el->frame_list[i];
veejay_msg(VEEJAY_MSG_DEBUG, "Copied %d frames to new EDL %p from %p", k, new_el,el);
// set length // set length
new_el->video_frames = len; new_el->video_frames = len;
return new_el; return new_el;
} }
@@ -2710,7 +2716,7 @@ int veejay_edit_addmovie_sample(veejay_t * info, char *movie, int id )
return 0; return 0;
} }
// create initial edit list for sample // create initial edit list for sample (is currently playing)
if(!sample_edl) if(!sample_edl)
sample_edl = vj_el_init_with_args( files,1,info->preserve_pathnames,info->auto_deinterlace,0, sample_edl = vj_el_init_with_args( files,1,info->preserve_pathnames,info->auto_deinterlace,0,
info->edit_list->video_norm ); info->edit_list->video_norm );
@@ -2840,7 +2846,7 @@ int veejay_toggle_audio(veejay_t * info, int audio)
{ {
video_playback_setup *settings = video_playback_setup *settings =
(video_playback_setup *) info->settings; (video_playback_setup *) info->settings;
editlist *el = info->edit_list; editlist *el = info->current_edit_list;
if( !(el->has_audio) ) { if( !(el->has_audio) ) {
veejay_msg(VEEJAY_MSG_WARNING, veejay_msg(VEEJAY_MSG_WARNING,
@@ -2966,7 +2972,7 @@ static int veejay_open_video_files(veejay_t *info, char **files, int num_files,
else else
info->dummy->chroma = CHROMA422; info->dummy->chroma = CHROMA422;
info->edit_list = vj_el_dummy( 0, info->auto_deinterlace, info->dummy->chroma, info->current_edit_list = vj_el_dummy( 0, info->auto_deinterlace, info->dummy->chroma,
info->dummy->norm, info->dummy->width, info->dummy->height, info->dummy->fps ); info->dummy->norm, info->dummy->width, info->dummy->height, info->dummy->fps );
info->dummy->active = 1; info->dummy->active = 1;
@@ -2977,7 +2983,7 @@ static int veejay_open_video_files(veejay_t *info, char **files, int num_files,
if( info->dummy->arate ) if( info->dummy->arate )
{ {
editlist *el = info->edit_list; editlist *el = info->current_edit_list;
el->has_audio = 1; el->has_audio = 1;
el->play_rate = el->audio_rate = info->dummy->arate; el->play_rate = el->audio_rate = info->dummy->arate;
el->audio_chans = info->dummy->achans; el->audio_chans = info->dummy->achans;
@@ -2989,9 +2995,9 @@ static int veejay_open_video_files(veejay_t *info, char **files, int num_files,
} }
else else
{ {
info->edit_list = vj_el_init_with_args(files, num_files, info->preserve_pathnames, info->auto_deinterlace, force, override_norm); info->current_edit_list = vj_el_init_with_args(files, num_files, info->preserve_pathnames, info->auto_deinterlace, force, override_norm);
} }
info->current_edit_list = info->edit_list; info->edit_list = info->current_edit_list;
if(info->edit_list==NULL) if(info->edit_list==NULL)
{ {
@@ -3006,38 +3012,38 @@ static int veejay_open_video_files(veejay_t *info, char **files, int num_files,
} }
else else
{ {
info->pixel_format = info->edit_list->pixel_format; info->pixel_format = info->current_edit_list->pixel_format;
veejay_msg(VEEJAY_MSG_WARNING, "Using pixel format YCbCr %s found in video file ", veejay_msg(VEEJAY_MSG_WARNING, "Using pixel format YCbCr %s found in video file ",
(info->pixel_format == FMT_422 ? "4:2:2" : "4:2:0")); (info->pixel_format == FMT_422 ? "4:2:2" : "4:2:0"));
} }
vj_avcodec_init(info->edit_list , info->edit_list->pixel_format); vj_avcodec_init(info->current_edit_list , info->current_edit_list->pixel_format);
if(info->pixel_format == FMT_422 ) if(info->pixel_format == FMT_422 )
{ {
if(!vj_el_init_422_frame( info->edit_list, info->effect_frame1)) return 0; if(!vj_el_init_422_frame( info->current_edit_list, info->effect_frame1)) return 0;
if(!vj_el_init_422_frame( info->edit_list, info->effect_frame2)) return 0; if(!vj_el_init_422_frame( info->current_edit_list, info->effect_frame2)) return 0;
info->settings->sample_mode = SSM_422_444; info->settings->sample_mode = SSM_422_444;
} }
else else
{ {
if(!vj_el_init_420_frame( info->edit_list, info->effect_frame1)) return 0; if(!vj_el_init_420_frame( info->current_edit_list, info->effect_frame1)) return 0;
if(!vj_el_init_420_frame( info->edit_list, info->effect_frame2)) return 0; if(!vj_el_init_420_frame( info->current_edit_list, info->effect_frame2)) return 0;
info->settings->sample_mode = SSM_420_JPEG_TR; info->settings->sample_mode = SSM_420_JPEG_TR;
} }
info->effect_frame_info->width = info->edit_list->video_width; info->effect_frame_info->width = info->current_edit_list->video_width;
info->effect_frame_info->height= info->edit_list->video_height; info->effect_frame_info->height= info->current_edit_list->video_height;
if(info->settings->output_fps > 0.0) if(info->settings->output_fps > 0.0)
{ {
veejay_msg(VEEJAY_MSG_WARNING, "Overriding frame rate with %2.2f", veejay_msg(VEEJAY_MSG_WARNING, "Overriding frame rate with %2.2f",
info->settings->output_fps); info->settings->output_fps);
info->edit_list->video_fps = info->settings->output_fps; info->current_edit_list->video_fps = info->settings->output_fps;
} }
else else
{ {
info->settings->output_fps = info->edit_list->video_fps; info->settings->output_fps = info->current_edit_list->video_fps;
} }
return 1; return 1;
@@ -3094,21 +3100,21 @@ int veejay_open_files(veejay_t * info, char **files, int num_files, float ofps,
if( ret ) if( ret )
{ {
/* initialize tags (video4linux/yuv4mpeg stream ... ) */ /* initialize tags (video4linux/yuv4mpeg stream ... ) */
if (vj_tag_init(info->edit_list->video_width, info->edit_list->video_height, info->pixel_format) != 0) { if (vj_tag_init(info->current_edit_list->video_width, info->current_edit_list->video_height, info->pixel_format) != 0) {
veejay_msg(VEEJAY_MSG_ERROR, "Error while initializing stream manager"); veejay_msg(VEEJAY_MSG_ERROR, "Error while initializing stream manager");
return 0; return 0;
} }
sample_init( (info->edit_list->video_width * info->edit_list->video_height) ); sample_init( (info->current_edit_list->video_width * info->current_edit_list->video_height) );
/* create samples from EDL */ /* create samples from EDL */
if( info->uc->file_as_sample) if( info->uc->file_as_sample)
{ {
long i,n=info->edit_list->num_video_files; long i,n=info->current_edit_list->num_video_files;
for(i = 0; i < n; i ++ ) for(i = 0; i < n; i ++ )
{ {
long start,end; long start,end;
if(vj_el_get_file_entry( info->edit_list, &start,&end, i )) if(vj_el_get_file_entry( info->current_edit_list, &start,&end, i ))
{ {
sample_info *skel = sample_skeleton_new( start,end ); sample_info *skel = sample_skeleton_new( start,end );
sample_store(skel); sample_store(skel);

View File

@@ -2665,7 +2665,7 @@ void vj_event_send_bundles(void *ptr, const char format[], va_list ap)
{ {
int key_id = 0; int key_id = 0;
int key_mod = 0; int key_mod = 0;
int bun_len = strlen(m->bundle)-1; int bun_len = strlen(m->bundle);
char tmp[token_len]; char tmp[token_len];
bzero(tmp,token_len); bzero(tmp,token_len);
vj_event_get_key( i, &key_id, &key_mod ); vj_event_get_key( i, &key_id, &key_mod );
@@ -2678,12 +2678,15 @@ void vj_event_send_bundles(void *ptr, const char format[], va_list ap)
} }
} }
} }
fprintf(stderr, "Buf = %d\n", len );
SEND_MSG(v,buf); SEND_MSG(v,buf);
// if(buf) free(buf); // if(buf) free(buf);
} }
else else
{ {
char *buf = "0000"; char *buf = "00000";
SEND_MSG(v,buf); SEND_MSG(v,buf);
} }
} }
@@ -2943,8 +2946,7 @@ void vj_event_set_play_mode(void *ptr, const char format[], va_list ap)
void vj_event_sample_new(void *ptr, const char format[], va_list ap) void vj_event_sample_new(void *ptr, const char format[], va_list ap)
{ {
// Todo: clone EditList int new_id = 0;
veejay_t *v = (veejay_t*) ptr; veejay_t *v = (veejay_t*) ptr;
if(SAMPLE_PLAYING(v) || PLAIN_PLAYING(v)) if(SAMPLE_PLAYING(v) || PLAIN_PLAYING(v))
{ {
@@ -2959,9 +2961,6 @@ void vj_event_sample_new(void *ptr, const char format[], va_list ap)
int nframe = args[0]; int nframe = args[0];
args[0] = v->edit_list->video_frames - 1 + nframe; args[0] = v->edit_list->video_frames - 1 + nframe;
} }
//if(args[0] == 0)
// args[0] = 1;
if(args[1] == 0) if(args[1] == 0)
{ {
args[1] = v->edit_list->video_frames - 1; args[1] = v->edit_list->video_frames - 1;
@@ -2990,9 +2989,11 @@ void vj_event_sample_new(void *ptr, const char format[], va_list ap)
if(sample_store(skel)==0) if(sample_store(skel)==0)
{ {
veejay_msg(VEEJAY_MSG_INFO, "Created new sample [%d]", skel->sample_id); veejay_msg(VEEJAY_MSG_INFO, "Created new sample [%d] with EDL", skel->sample_id);
sample_set_looptype(skel->sample_id,1); sample_set_looptype(skel->sample_id,1);
new_id = skel->sample_id;
} }
} }
else else
{ {
@@ -3004,6 +3005,9 @@ void vj_event_sample_new(void *ptr, const char format[], va_list ap)
{ {
p_invalid_mode(); p_invalid_mode();
} }
vj_event_send_new_id( v, new_id);
} }
#ifdef HAVE_SDL #ifdef HAVE_SDL
void vj_event_fullscreen(void *ptr, const char format[], va_list ap ) void vj_event_fullscreen(void *ptr, const char format[], va_list ap )
@@ -3261,7 +3265,7 @@ void vj_event_sample_end(void *ptr, const char format[] , va_list ap)
{ {
v->uc->sample_end = s->current_frame_num; v->uc->sample_end = s->current_frame_num;
if( v->uc->sample_end > v->uc->sample_start) { if( v->uc->sample_end > v->uc->sample_start) {
editlist *el = veejay_edit_copy_to_new( v, v->edit_list, v->uc->sample_start,v->uc->sample_end ); editlist *el = veejay_edit_copy_to_new( v, (SAMPLE_PLAYING(v) ? v->edit_list : v->current_edit_list), v->uc->sample_start,v->uc->sample_end );
int start = 0; int start = 0;
int end = el->video_frames -1; int end = el->video_frames -1;
sample_info *skel = sample_skeleton_new(start,end); sample_info *skel = sample_skeleton_new(start,end);
@@ -3274,6 +3278,7 @@ void vj_event_sample_end(void *ptr, const char format[] , va_list ap)
{ {
veejay_msg(VEEJAY_MSG_ERROR,"%s %d: Cannot store new sample!",__FILE__,__LINE__); veejay_msg(VEEJAY_MSG_ERROR,"%s %d: Cannot store new sample!",__FILE__,__LINE__);
} }
veejay_msg(VEEJAY_MSG_DEBUG, "New el = %p (from %p)", el, v->edit_list );
} }
else else
{ {
@@ -3468,7 +3473,7 @@ void vj_event_sample_set_marker_start(void *ptr, const char format[], va_list ap
int start = 0; int end = 0; int start = 0; int end = 0;
if ( sample_get_el_position( args[0], &start, &end ) ) if ( sample_get_el_position( args[0], &start, &end ) )
{ // marker in relative positions given ! { // marker in relative positions given !
args[1] += start; // add sample's start position // args[1] += start; // add sample's start position
if( sample_set_marker_start( args[0], args[1] ) ) if( sample_set_marker_start( args[0], args[1] ) )
{ {
veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker starting position at %d", args[0],args[1]); veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker starting position at %d", args[0],args[1]);
@@ -3536,8 +3541,8 @@ void vj_event_sample_set_marker(void *ptr, const char format[], va_list ap)
int end = 0; int end = 0;
if( sample_get_el_position( args[0], &start, &end ) ) if( sample_get_el_position( args[0], &start, &end ) )
{ {
args[1] += start; // args[1] += start;
args[2] = end - args[2]; // args[2] = end - args[2];
if( sample_set_marker( args[0], args[1],args[2] ) ) if( sample_set_marker( args[0], args[1],args[2] ) )
{ {
veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker starting position at %d, ending position at %d", args[0],args[1],args[2]); veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker starting position at %d, ending position at %d", args[0],args[1],args[2]);
@@ -3996,33 +4001,24 @@ void vj_event_sample_del(void *ptr, const char format[], va_list ap)
char *s = NULL; char *s = NULL;
P_A(args,s,format,ap); P_A(args,s,format,ap);
int deleted_sample = 0; int deleted_sample = 0;
if(SAMPLE_PLAYING(v))
if(SAMPLE_PLAYING(v) && v->uc->sample_id == args[0])
{ {
if(v->uc->sample_id == args[0]) veejay_msg(VEEJAY_MSG_INFO,"Cannot delete sample while playing");
{ return;
veejay_msg(VEEJAY_MSG_INFO,"Cannot delete sample while playing"); }
}
else if(sample_del(args[0]))
{ {
if(sample_del(args[0])) veejay_msg(VEEJAY_MSG_INFO, "Deleted sample %d", args[0]);
{ deleted_sample = args[0];
veejay_msg(VEEJAY_MSG_INFO, "Deleted sample %d", args[0]); sample_verify_delete( args[0] , 0 );
deleted_sample = args[0];
sample_verify_delete( args[0] , 0 );
}
else
{
veejay_msg(VEEJAY_MSG_ERROR, "Unable to delete sample %d",args[0]);
}
}
} }
else else
{ {
p_invalid_mode(); veejay_msg(VEEJAY_MSG_ERROR, "Unable to delete sample %d",args[0]);
} }
vj_event_send_new_id( v, deleted_sample ); vj_event_send_new_id( v, deleted_sample );
} }
void vj_event_sample_copy(void *ptr, const char format[] , va_list ap) void vj_event_sample_copy(void *ptr, const char format[] , va_list ap)
@@ -4033,11 +4029,6 @@ void vj_event_sample_copy(void *ptr, const char format[] , va_list ap)
int new_sample =0; int new_sample =0;
P_A(args,s,format,ap); P_A(args,s,format,ap);
if(SAMPLE_PLAYING(v))
{
if( args[0] == 0 ) args[0] = v->uc->sample_id;
if( args[0] == -1) args[0] = sample_size()-1;
}
if( sample_exists(args[0] )) if( sample_exists(args[0] ))
{ {
new_sample = sample_copy(args[0]); new_sample = sample_copy(args[0]);
@@ -5835,7 +5826,7 @@ void vj_event_el_add_video(void *ptr, const char format[], va_list ap)
P_A(args,str,format,ap); P_A(args,str,format,ap);
if ( veejay_edit_addmovie(v,v->current_edit_list,str,start,destination,destination)) if ( veejay_edit_addmovie(v,v->edit_list,str,start,destination,destination))
{ {
veejay_msg(VEEJAY_MSG_INFO, "Appended video file %s to EditList",str); veejay_msg(VEEJAY_MSG_INFO, "Appended video file %s to EditList",str);
} }
@@ -5855,7 +5846,7 @@ void vj_event_el_add_video_sample(void *ptr, const char format[], va_list ap)
int new_sample_id = args[0]; int new_sample_id = args[0];
new_sample_id = veejay_edit_addmovie_sample(v,str,new_sample_id ); new_sample_id = veejay_edit_addmovie_sample(v,str,new_sample_id );
veejay_msg(VEEJAY_MSG_DEBUG , "New sample %d from file %s", new_sample_id, str );
vj_event_send_new_id( v,new_sample_id ); vj_event_send_new_id( v,new_sample_id );
} }
@@ -6974,7 +6965,10 @@ void vj_event_print_sample_info(veejay_t *v, int id)
} }
v->real_fps = -1; v->real_fps = -1;
vj_el_print( sample_get_editlist( id ) ); //vj_el_print( sample_get_editlist( id ) );
veejay_msg(VEEJAY_MSG_DEBUG,
"Sample has EDL %p, Plain at %p", sample_get_editlist( id ), v->current_edit_list );
veejay_msg(VEEJAY_MSG_PRINT, "\n"); veejay_msg(VEEJAY_MSG_PRINT, "\n");
@@ -7020,16 +7014,16 @@ void vj_event_send_tag_list ( void *ptr, const char format[], va_list ap )
bzero( _s_print_buf,SEND_BUF); bzero( _s_print_buf,SEND_BUF);
sprintf(_s_print_buf, "%05d",0); sprintf(_s_print_buf, "%05d",0);
if(args[0]>0) start_from_tag = args[0]; //if(args[0]>0) start_from_tag = args[0];
n = vj_tag_size()-1; n = vj_tag_size()-1;
veejay_msg(VEEJAY_MSG_DEBUG, "I have %d streams to describe", n );
if (n >= 1 ) if (n >= 1 )
{ {
char line[300]; char line[300];
bzero( _print_buf, SEND_BUF); bzero( _print_buf, SEND_BUF);
for(i=start_from_tag; i <= n; i++) for(i=0; i <= n; i++)
{ {
if(vj_tag_exists(i)) if(vj_tag_exists(i))
{ {
@@ -7056,6 +7050,7 @@ void vj_event_send_tag_list ( void *ptr, const char format[], va_list ap )
} }
sprintf(_s_print_buf, "%05d%s",strlen(_print_buf),_print_buf); sprintf(_s_print_buf, "%05d%s",strlen(_print_buf),_print_buf);
} }
veejay_msg(VEEJAY_MSG_DEBUG, "[%s]", _s_print_buf);
SEND_MSG(v,_s_print_buf); SEND_MSG(v,_s_print_buf);
} }

View File

@@ -2184,10 +2184,12 @@ void vj_perform_plain_fill_buffer(veejay_t * info, int entry)
frame[1] = primary_buffer[0]->Cb; frame[1] = primary_buffer[0]->Cb;
frame[2] = primary_buffer[0]->Cr; frame[2] = primary_buffer[0]->Cr;
if(info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE) if(info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE)
ret = vj_perform_get_frame_(info, info->uc->sample_id, settings->current_frame_num,frame ); ret = vj_perform_get_frame_(info, info->uc->sample_id, settings->current_frame_num,frame );
else else
ret = vj_el_get_video_frame(info->edit_list,settings->current_frame_num,frame,info->pixel_format); ret = vj_el_get_video_frame(info->current_edit_list,settings->current_frame_num,frame,info->pixel_format);
if (ret <= 0 ) if (ret <= 0 )