mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-20 06:40:01 +01:00
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:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 )
|
||||||
|
|||||||
Reference in New Issue
Block a user