mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-23 08:09:58 +01:00
faster veejay
git-svn-id: svn://code.dyne.org/veejay/trunk@697 eb8d1916-c9e9-0310-b8de-cf0c9472ead5
This commit is contained in:
@@ -416,7 +416,7 @@ vj_decoder *_el_new_decoder( int id , int width, int height, float fps, int pixe
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
d->fmt = id;
|
d->fmt = id;
|
||||||
memset( d->tmp_buffer, 0, width * height * 4 );
|
veejay_memset( d->tmp_buffer, 0, width * height * 4 );
|
||||||
|
|
||||||
d->deinterlace_buffer[0] = (uint8_t*) vj_malloc(sizeof(uint8_t) * width * height * 3);
|
d->deinterlace_buffer[0] = (uint8_t*) vj_malloc(sizeof(uint8_t) * width * height * 3);
|
||||||
if(!d->deinterlace_buffer[0]) { if(d) free(d); return NULL; }
|
if(!d->deinterlace_buffer[0]) { if(d) free(d); return NULL; }
|
||||||
@@ -424,7 +424,7 @@ vj_decoder *_el_new_decoder( int id , int width, int height, float fps, int pixe
|
|||||||
d->deinterlace_buffer[1] = d->deinterlace_buffer[0] + (width * height );
|
d->deinterlace_buffer[1] = d->deinterlace_buffer[0] + (width * height );
|
||||||
d->deinterlace_buffer[2] = d->deinterlace_buffer[0] + (2 * width * height );
|
d->deinterlace_buffer[2] = d->deinterlace_buffer[0] + (2 * width * height );
|
||||||
|
|
||||||
memset( d->deinterlace_buffer[0], 0, width * height * 3 );
|
veejay_memset( d->deinterlace_buffer[0], 0, width * height * 3 );
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
d->ref = 1;
|
d->ref = 1;
|
||||||
@@ -886,9 +886,9 @@ static int vj_el_dummy_frame( uint8_t *dst[3], editlist *el ,int pix_fmt)
|
|||||||
{
|
{
|
||||||
const int uv_len = (el->video_width * el->video_height) / ( ( (pix_fmt==FMT_422||pix_fmt==FMT_422F) ? 2 : 4));
|
const int uv_len = (el->video_width * el->video_height) / ( ( (pix_fmt==FMT_422||pix_fmt==FMT_422F) ? 2 : 4));
|
||||||
const int len = el->video_width * el->video_height;
|
const int len = el->video_width * el->video_height;
|
||||||
memset( dst[0], 16, len );
|
veejay_memset( dst[0], 16, len );
|
||||||
memset( dst[1],128, uv_len );
|
veejay_memset( dst[1],128, uv_len );
|
||||||
memset( dst[2],128, uv_len );
|
veejay_memset( dst[2],128, uv_len );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1259,7 +1259,7 @@ int vj_el_get_audio_frame(editlist *el, uint32_t nframe, uint8_t *dst)
|
|||||||
if(el->is_empty)
|
if(el->is_empty)
|
||||||
{
|
{
|
||||||
int ns = el->audio_rate / el->video_fps;
|
int ns = el->audio_rate / el->video_fps;
|
||||||
memset( dst, 0, sizeof(uint8_t) * ns * el->audio_bps );
|
veejay_memset( dst, 0, sizeof(uint8_t) * ns * el->audio_bps );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1355,7 +1355,7 @@ int vj_el_get_audio_frame_at(editlist *el, uint32_t nframe, uint8_t *dst, int nu
|
|||||||
if (!el->has_video)
|
if (!el->has_video)
|
||||||
{
|
{
|
||||||
int size = el->audio_rate / el->video_fps * el->audio_bps;
|
int size = el->audio_rate / el->video_fps * el->audio_bps;
|
||||||
memset(dst,0,size);
|
veejay_memset(dst,0,size);
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1391,7 +1391,7 @@ editlist *vj_el_dummy(int flags, int deinterlace, int chroma, char norm, int wid
|
|||||||
{
|
{
|
||||||
editlist *el = vj_malloc(sizeof(editlist));
|
editlist *el = vj_malloc(sizeof(editlist));
|
||||||
if(!el) return NULL;
|
if(!el) return NULL;
|
||||||
memset( el, 0, sizeof(editlist));
|
veejay_memset( el, 0, sizeof(editlist));
|
||||||
el->MJPG_chroma = chroma;
|
el->MJPG_chroma = chroma;
|
||||||
el->video_norm = norm;
|
el->video_norm = norm;
|
||||||
el->is_empty = 1;
|
el->is_empty = 1;
|
||||||
@@ -1446,7 +1446,7 @@ void vj_el_close( editlist *el )
|
|||||||
editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int deinterlace, int force ,char norm , int fmt)
|
editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int deinterlace, int force ,char norm , int fmt)
|
||||||
{
|
{
|
||||||
editlist *el = vj_malloc(sizeof(editlist));
|
editlist *el = vj_malloc(sizeof(editlist));
|
||||||
memset(el, 0, sizeof(editlist));
|
veejay_memset(el, 0, sizeof(editlist));
|
||||||
FILE *fd;
|
FILE *fd;
|
||||||
char line[1024];
|
char line[1024];
|
||||||
uint64_t index_list[MAX_EDIT_LIST_FILES];
|
uint64_t index_list[MAX_EDIT_LIST_FILES];
|
||||||
@@ -1461,7 +1461,7 @@ editlist *vj_el_init_with_args(char **filename, int num_files, int flags, int de
|
|||||||
#ifdef USE_GDK_PIXBUF
|
#ifdef USE_GDK_PIXBUF
|
||||||
vj_picture_init();
|
vj_picture_init();
|
||||||
#endif
|
#endif
|
||||||
memset( el, 0, sizeof(editlist) );
|
veejay_memset( el, 0, sizeof(editlist) );
|
||||||
|
|
||||||
el->has_video = 1; //assume we get it
|
el->has_video = 1; //assume we get it
|
||||||
el->MJPG_chroma = CHROMA420;
|
el->MJPG_chroma = CHROMA420;
|
||||||
@@ -1769,7 +1769,7 @@ void vj_el_print(editlist *el)
|
|||||||
MPEG_timecode_t get_timecode(editlist *el, long num_frames)
|
MPEG_timecode_t get_timecode(editlist *el, long num_frames)
|
||||||
{
|
{
|
||||||
MPEG_timecode_t tc;
|
MPEG_timecode_t tc;
|
||||||
memset(&tc,0,sizeof(tc));
|
veejay_memset(&tc,0,sizeof(tc));
|
||||||
mpeg_timecode(&tc, num_frames,
|
mpeg_timecode(&tc, num_frames,
|
||||||
mpeg_framerate_code( mpeg_conform_framerate( el->video_fps )),
|
mpeg_framerate_code( mpeg_conform_framerate( el->video_fps )),
|
||||||
el->video_fps );
|
el->video_fps );
|
||||||
@@ -1997,7 +1997,7 @@ void vj_el_frame_cache(int n )
|
|||||||
editlist *vj_el_soft_clone(editlist *el)
|
editlist *vj_el_soft_clone(editlist *el)
|
||||||
{
|
{
|
||||||
editlist *clone = (editlist*) vj_malloc(sizeof(editlist));
|
editlist *clone = (editlist*) vj_malloc(sizeof(editlist));
|
||||||
memset( clone, 0, sizeof(editlist));
|
veejay_memset( clone, 0, sizeof(editlist));
|
||||||
if(!clone)
|
if(!clone)
|
||||||
return 0;
|
return 0;
|
||||||
clone->is_empty = el->is_empty;
|
clone->is_empty = el->is_empty;
|
||||||
|
|||||||
@@ -901,7 +901,10 @@ int sample_get_effect(int s1, int position)
|
|||||||
|
|
||||||
int sample_get_effect_any(int s1, int position) {
|
int sample_get_effect_any(int s1, int position) {
|
||||||
sample_info *sample = sample_get(s1);
|
sample_info *sample = sample_get(s1);
|
||||||
if(position >= SAMPLE_MAX_EFFECTS || position < 0 ) return -1;
|
#ifdef STRICT_CHECKING
|
||||||
|
assert( position >= 0 && position < SAMPLE_MAX_EFFECTS );
|
||||||
|
#endif
|
||||||
|
// if(position >= SAMPLE_MAX_EFFECTS || position < 0 ) return -1;
|
||||||
if(sample) {
|
if(sample) {
|
||||||
return sample->effect_chain[position]->effect_id;
|
return sample->effect_chain[position]->effect_id;
|
||||||
}
|
}
|
||||||
@@ -1064,6 +1067,18 @@ int sample_get_effect_status(int s1)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sample_var( int s1, int *type, int *fader, int *fx, int *rec, int *active )
|
||||||
|
{
|
||||||
|
sample_info *si = sample_get(s1);
|
||||||
|
if(!si) return 0;
|
||||||
|
*type = 0;
|
||||||
|
*fader = si->fader_active;
|
||||||
|
*fx = si->effect_toggle;
|
||||||
|
*rec = si->encoder_active;
|
||||||
|
*active= 1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************************************
|
/****************************************************************************************************
|
||||||
*
|
*
|
||||||
* sample_get_effect_arg( sample_nr, position, argnr )
|
* sample_get_effect_arg( sample_nr, position, argnr )
|
||||||
|
|||||||
@@ -112,17 +112,14 @@ static inline int int_tag_compare(const void *key1, const void *key2)
|
|||||||
|
|
||||||
vj_tag *vj_tag_get(int id)
|
vj_tag *vj_tag_get(int id)
|
||||||
{
|
{
|
||||||
vj_tag *tag;
|
|
||||||
hnode_t *tag_node;
|
|
||||||
if (id <= 0 || id > this_tag_id) {
|
if (id <= 0 || id > this_tag_id) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
tag_node = hash_lookup(TagHash, (void *) id);
|
hnode_t *tag_node = hash_lookup(TagHash, (void *) id);
|
||||||
if (!tag_node) {
|
if (!tag_node) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
tag = (vj_tag *) hnode_get(tag_node);
|
return (vj_tag *) hnode_get(tag_node);
|
||||||
return tag;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int vj_tag_put(vj_tag * tag)
|
int vj_tag_put(vj_tag * tag)
|
||||||
@@ -204,6 +201,13 @@ int vj_tag_init(int width, int height, int pix_fmt)
|
|||||||
vj_tag_input->height = height;
|
vj_tag_input->height = height;
|
||||||
vj_tag_input->depth = 3;
|
vj_tag_input->depth = 3;
|
||||||
vj_tag_input->pix_fmt = pix_fmt;
|
vj_tag_input->pix_fmt = pix_fmt;
|
||||||
|
|
||||||
|
|
||||||
|
if( pix_fmt == FMT_420|| pix_fmt == FMT_420F)
|
||||||
|
vj_tag_input->uv_len = (width*height) / 4;
|
||||||
|
else
|
||||||
|
vj_tag_input->uv_len = (width*height) / 2;
|
||||||
|
|
||||||
memset( &_tmp, 0, sizeof(VJFrame));
|
memset( &_tmp, 0, sizeof(VJFrame));
|
||||||
_tmp.len = width * height;
|
_tmp.len = width * height;
|
||||||
|
|
||||||
@@ -660,7 +664,6 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
vj_tag_get_by_type( tag->source_type, tag->descr);
|
vj_tag_get_by_type( tag->source_type, tag->descr);
|
||||||
|
|
||||||
/* effect chain is empty */
|
/* effect chain is empty */
|
||||||
@@ -680,7 +683,6 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el,
|
|||||||
for (j = 0; j < SAMPLE_MAX_PARAMETERS; j++) {
|
for (j = 0; j < SAMPLE_MAX_PARAMETERS; j++) {
|
||||||
tag->effect_chain[i]->arg[j] = 0;
|
tag->effect_chain[i]->arg[j] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (!vj_tag_put(tag))
|
if (!vj_tag_put(tag))
|
||||||
return -1;
|
return -1;
|
||||||
@@ -1376,7 +1378,10 @@ int vj_tag_get_v4l_properties(int t1,
|
|||||||
int vj_tag_get_effect_any(int t1, int position) {
|
int vj_tag_get_effect_any(int t1, int position) {
|
||||||
vj_tag *tag = vj_tag_get(t1);
|
vj_tag *tag = vj_tag_get(t1);
|
||||||
if (!tag) return -1;
|
if (!tag) return -1;
|
||||||
if( position >= SAMPLE_MAX_EFFECTS) return -1;
|
#ifdef STRICT_CHECKING
|
||||||
|
assert( position >= 0 && position < SAMPLE_MAX_EFFECTS );
|
||||||
|
#endif
|
||||||
|
// if( position >= SAMPLE_MAX_EFFECTS) return -1;
|
||||||
return tag->effect_chain[position]->effect_id;
|
return tag->effect_chain[position]->effect_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2039,6 +2044,18 @@ int vj_tag_encoder_active(int s1)
|
|||||||
return si->encoder_active;
|
return si->encoder_active;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int vj_tag_var(int t1, int *type, int *fader, int *fx_sta , int *rec_sta, int *active )
|
||||||
|
{
|
||||||
|
vj_tag *tag = vj_tag_get(t1);
|
||||||
|
if(!tag) return 0;
|
||||||
|
*fader = tag->fader_active;
|
||||||
|
*fx_sta = tag->effect_toggle;
|
||||||
|
*rec_sta = tag->encoder_active;
|
||||||
|
*type = tag->source_type;
|
||||||
|
*active = tag->active;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int vj_tag_record_frame(int t1, uint8_t *buffer[3], uint8_t *abuff, int audio_size) {
|
int vj_tag_record_frame(int t1, uint8_t *buffer[3], uint8_t *abuff, int audio_size) {
|
||||||
vj_tag *tag = vj_tag_get(t1);
|
vj_tag *tag = vj_tag_get(t1);
|
||||||
int buf_len = 0;
|
int buf_len = 0;
|
||||||
@@ -2103,49 +2120,44 @@ int vj_tag_get_audio_frame(int t1, uint8_t *dst_buffer)
|
|||||||
int vj_tag_get_frame(int t1, uint8_t *buffer[3], uint8_t * abuffer)
|
int vj_tag_get_frame(int t1, uint8_t *buffer[3], uint8_t * abuffer)
|
||||||
{
|
{
|
||||||
vj_tag *tag = vj_tag_get(t1);
|
vj_tag *tag = vj_tag_get(t1);
|
||||||
uint8_t *address;
|
if(!tag)
|
||||||
int dummy_color = -1;
|
return -1;
|
||||||
int width = vj_tag_input->width;
|
|
||||||
int height = vj_tag_input->height;
|
|
||||||
int uv_len = (vj_tag_input->width * vj_tag_input->height);
|
|
||||||
int len = (width * height);
|
|
||||||
char buf[10];
|
|
||||||
#ifdef USE_GDK_PIXBUF
|
|
||||||
vj_picture *p = NULL;
|
|
||||||
#endif
|
|
||||||
vj_client *v;
|
|
||||||
if(!tag) return -1;
|
|
||||||
|
|
||||||
if( vj_tag_input->pix_fmt == FMT_420|| vj_tag_input->pix_fmt == FMT_420F)
|
const int width = vj_tag_input->width;
|
||||||
uv_len = len / 4;
|
const int height = vj_tag_input->height;
|
||||||
else
|
const int uv_len = vj_tag_input->uv_len;
|
||||||
uv_len = len / 2;
|
const int len = (width * height);
|
||||||
|
|
||||||
switch (tag->source_type) {
|
|
||||||
|
switch (tag->source_type)
|
||||||
|
{
|
||||||
case VJ_TAG_TYPE_V4L:
|
case VJ_TAG_TYPE_V4L:
|
||||||
vj_unicap_grab_frame( vj_tag_input->unicap[tag->index], buffer, width,height );
|
vj_unicap_grab_frame( vj_tag_input->unicap[tag->index], buffer, width,height );
|
||||||
return 1;
|
return 1;
|
||||||
break;
|
break;
|
||||||
#ifdef USE_GDK_PIXBUF
|
#ifdef USE_GDK_PIXBUF
|
||||||
case VJ_TAG_TYPE_PICTURE:
|
case VJ_TAG_TYPE_PICTURE:
|
||||||
p = vj_tag_input->picture[tag->index];
|
{
|
||||||
|
vj_picture *p = vj_tag_input->picture[tag->index];
|
||||||
if(!p)
|
if(!p)
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR, "Picture never opened");
|
veejay_msg(VEEJAY_MSG_ERROR, "Picture never opened");
|
||||||
vj_tag_disable(t1);
|
vj_tag_disable(t1);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
address = vj_picture_get( p->pic );
|
uint8_t *address = vj_picture_get( p->pic );
|
||||||
veejay_memcpy(buffer[0],address, len);
|
veejay_memcpy(buffer[0],address, len);
|
||||||
veejay_memcpy(buffer[1],address + len, uv_len);
|
veejay_memcpy(buffer[1],address + len, uv_len);
|
||||||
veejay_memcpy(buffer[2],address + len + uv_len, uv_len);
|
veejay_memcpy(buffer[2],address + len + uv_len, uv_len);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case VJ_TAG_TYPE_AVFORMAT:
|
case VJ_TAG_TYPE_AVFORMAT:
|
||||||
if(!vj_avformat_get_video_frame( vj_tag_input->avformat[tag->index], buffer, -1,
|
if(!vj_avformat_get_video_frame( vj_tag_input->avformat[tag->index], buffer, -1,vj_tag_input->pix_fmt ))
|
||||||
vj_tag_input->pix_fmt ))
|
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VJ_TAG_TYPE_MCAST:
|
case VJ_TAG_TYPE_MCAST:
|
||||||
case VJ_TAG_TYPE_NET:
|
case VJ_TAG_TYPE_NET:
|
||||||
if(!net_thread_get_frame( tag,buffer, vj_tag_input->net[tag->index] ))
|
if(!net_thread_get_frame( tag,buffer, vj_tag_input->net[tag->index] ))
|
||||||
@@ -2156,7 +2168,6 @@ int vj_tag_get_frame(int t1, uint8_t *buffer[3], uint8_t * abuffer)
|
|||||||
return 1;
|
return 1;
|
||||||
break;
|
break;
|
||||||
case VJ_TAG_TYPE_YUV4MPEG:
|
case VJ_TAG_TYPE_YUV4MPEG:
|
||||||
// only for 4:2:0 , must convert to 4:2:2
|
|
||||||
if( vj_tag_input->pix_fmt == FMT_420 || vj_tag_input->pix_fmt == FMT_420F)
|
if( vj_tag_input->pix_fmt == FMT_420 || vj_tag_input->pix_fmt == FMT_420F)
|
||||||
{
|
{
|
||||||
if (vj_yuv_get_frame(vj_tag_input->stream[tag->index], buffer) != 0)
|
if (vj_yuv_get_frame(vj_tag_input->stream[tag->index], buffer) != 0)
|
||||||
@@ -2165,7 +2176,6 @@ int vj_tag_get_frame(int t1, uint8_t *buffer[3], uint8_t * abuffer)
|
|||||||
vj_tag_set_active(t1,0);
|
vj_tag_set_active(t1,0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2174,23 +2184,17 @@ int vj_tag_get_frame(int t1, uint8_t *buffer[3], uint8_t * abuffer)
|
|||||||
vj_tag_set_active(t1,0);
|
vj_tag_set_active(t1,0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
yuv420p_to_yuv422p2( _temp_buffer[0],
|
yuv420p_to_yuv422p2( _temp_buffer[0],_temp_buffer[1],_temp_buffer[2],buffer,width,height);
|
||||||
_temp_buffer[1],
|
|
||||||
_temp_buffer[2],
|
|
||||||
buffer, width,height);
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
return 1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
#ifdef SUPPORT_READ_DV2
|
#ifdef SUPPORT_READ_DV2
|
||||||
case VJ_TAG_TYPE_DV1394:
|
case VJ_TAG_TYPE_DV1394:
|
||||||
vj_dv1394_read_frame( vj_tag_input->dv1394[tag->index], buffer , abuffer,vj_tag_input->pix_fmt);
|
vj_dv1394_read_frame( vj_tag_input->dv1394[tag->index], buffer , abuffer,vj_tag_input->pix_fmt);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case VJ_TAG_TYPE_SHM:
|
|
||||||
veejay_msg(VEEJAY_MSG_DEBUG, "Consume shm");
|
|
||||||
consume( _tag_info->client, buffer, width * height );
|
|
||||||
return 1;
|
|
||||||
break;
|
|
||||||
case VJ_TAG_TYPE_COLOR:
|
case VJ_TAG_TYPE_COLOR:
|
||||||
_tmp.len = len;
|
_tmp.len = len;
|
||||||
_tmp.uv_len = uv_len;
|
_tmp.uv_len = uv_len;
|
||||||
@@ -2200,14 +2204,13 @@ int vj_tag_get_frame(int t1, uint8_t *buffer[3], uint8_t * abuffer)
|
|||||||
dummy_rgb_apply( &_tmp, width, height,
|
dummy_rgb_apply( &_tmp, width, height,
|
||||||
tag->color_r,tag->color_g,tag->color_b );
|
tag->color_r,tag->color_g,tag->color_b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VJ_TAG_TYPE_NONE:
|
case VJ_TAG_TYPE_NONE:
|
||||||
/* sample */
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ typedef struct {
|
|||||||
int height;
|
int height;
|
||||||
int depth;
|
int depth;
|
||||||
int pix_fmt;
|
int pix_fmt;
|
||||||
|
int uv_len;
|
||||||
} vj_tag_data;
|
} vj_tag_data;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ void find_best_memcpy()
|
|||||||
|
|
||||||
if (best) {
|
if (best) {
|
||||||
veejay_memcpy = memcpy_method[best].function;
|
veejay_memcpy = memcpy_method[best].function;
|
||||||
veejay_msg(VEEJAY_MSG_INFO, "Using %s", memcpy_method[best].name );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free( buf1 );
|
free( buf1 );
|
||||||
@@ -700,7 +699,6 @@ void find_best_memset()
|
|||||||
|
|
||||||
if (best) {
|
if (best) {
|
||||||
veejay_memset = memset_method[best].function;
|
veejay_memset = memset_method[best].function;
|
||||||
veejay_msg(VEEJAY_MSG_INFO, "Using %s", memset_method[best].name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free( buf1 );
|
free( buf1 );
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <libvjmem/vjmem.h>
|
||||||
#include "vj-common.h"
|
#include "vj-common.h"
|
||||||
|
|
||||||
#define TXT_RED "\033[0;31m"
|
#define TXT_RED "\033[0;31m"
|
||||||
@@ -101,12 +102,11 @@ void veejay_msg(int type, const char format[], ...)
|
|||||||
|
|
||||||
// parse arguments
|
// parse arguments
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
bzero(buf,256);
|
|
||||||
vsnprintf(buf, sizeof(buf) - 1, format, args);
|
vsnprintf(buf, sizeof(buf) - 1, format, args);
|
||||||
|
|
||||||
if(!_message_his_status)
|
if(!_message_his_status)
|
||||||
{
|
{
|
||||||
memset( &_message_history , 0 , sizeof(vj_msg_hist));
|
veejay_memset( &_message_history , 0 , sizeof(vj_msg_hist));
|
||||||
_message_his_status = 1;
|
_message_his_status = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ char *veejay_pop_messages(int *num_lines, int *total_len)
|
|||||||
if(len <= 0)
|
if(len <= 0)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
res = (char*) malloc(sizeof(char) * (len+1) );
|
res = (char*) vj_malloc(sizeof(char) * (len+1) );
|
||||||
if(!res)
|
if(!res)
|
||||||
return NULL;
|
return NULL;
|
||||||
bzero(res, len );
|
bzero(res, len );
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <libvjmsg/vj-common.h>
|
#include <libvjmsg/vj-common.h>
|
||||||
#include <libvjnet/vj-server.h>
|
#include <libvjnet/vj-server.h>
|
||||||
|
#include <libvjmem/vjmem.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
@@ -157,7 +158,7 @@ static int _vj_server_classic(vj_server *vjs, int port_offset)
|
|||||||
port_num = port_offset + VJ_MSG_PORT;
|
port_num = port_offset + VJ_MSG_PORT;
|
||||||
|
|
||||||
vjs->myself.sin_port = htons(port_num);
|
vjs->myself.sin_port = htons(port_num);
|
||||||
memset(&(vjs->myself.sin_zero), 0, 8);
|
veejay_memset(&(vjs->myself.sin_zero), 0, 8);
|
||||||
if (bind(vjs->handle, (struct sockaddr *) &(vjs->myself), sizeof(vjs->myself) ) == -1 )
|
if (bind(vjs->handle, (struct sockaddr *) &(vjs->myself), sizeof(vjs->myself) ) == -1 )
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR, "%s", strerror(errno));
|
veejay_msg(VEEJAY_MSG_ERROR, "%s", strerror(errno));
|
||||||
@@ -187,13 +188,13 @@ static int _vj_server_classic(vj_server *vjs, int port_offset)
|
|||||||
link[i]->in_use = 0;
|
link[i]->in_use = 0;
|
||||||
link[i]->promote = 0;
|
link[i]->promote = 0;
|
||||||
link[i]->m_queue = (vj_message**) vj_malloc(sizeof( vj_message * ) * VJ_MAX_PENDING_MSG );
|
link[i]->m_queue = (vj_message**) vj_malloc(sizeof( vj_message * ) * VJ_MAX_PENDING_MSG );
|
||||||
memset( link[i]->m_queue, 0, sizeof(vj_message*) * VJ_MAX_PENDING_MSG );
|
veejay_memset( link[i]->m_queue, 0, sizeof(vj_message*) * VJ_MAX_PENDING_MSG );
|
||||||
if(!link[i]->m_queue) return 0;
|
if(!link[i]->m_queue) return 0;
|
||||||
memset( link[i]->m_queue, 0, sizeof(vj_message*) * VJ_MAX_PENDING_MSG );
|
veejay_memset( link[i]->m_queue, 0, sizeof(vj_message*) * VJ_MAX_PENDING_MSG );
|
||||||
for( j = 0; j < VJ_MAX_PENDING_MSG; j ++ )
|
for( j = 0; j < VJ_MAX_PENDING_MSG; j ++ )
|
||||||
{
|
{
|
||||||
link[i]->m_queue[j] = (vj_message*) vj_malloc(sizeof(vj_message));
|
link[i]->m_queue[j] = (vj_message*) vj_malloc(sizeof(vj_message));
|
||||||
memset(link[i]->m_queue[j], 0, sizeof(vj_message));
|
veejay_memset(link[i]->m_queue[j], 0, sizeof(vj_message));
|
||||||
}
|
}
|
||||||
link[i]->n_queued = 0;
|
link[i]->n_queued = 0;
|
||||||
link[i]->n_retrieved = 0;
|
link[i]->n_retrieved = 0;
|
||||||
@@ -213,7 +214,7 @@ vj_server *vj_server_alloc(int port_offset, char *mcast_group_name, int type)
|
|||||||
if (!vjs)
|
if (!vjs)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
memset( vjs, 0, sizeof(vjs) );
|
veejay_memset( vjs, 0, sizeof(vjs) );
|
||||||
|
|
||||||
vjs->recv_buf = (char*) malloc(sizeof(char) * 16384 );
|
vjs->recv_buf = (char*) malloc(sizeof(char) * 16384 );
|
||||||
if(!vjs->recv_buf)
|
if(!vjs->recv_buf)
|
||||||
@@ -388,7 +389,7 @@ int vj_server_poll(vj_server * vje)
|
|||||||
return mcast_poll( proto[0]->r );
|
return mcast_poll( proto[0]->r );
|
||||||
}
|
}
|
||||||
|
|
||||||
memset( &t, 0, sizeof(t));
|
veejay_memset( &t, 0, sizeof(t));
|
||||||
|
|
||||||
FD_ZERO( &(vje->fds) );
|
FD_ZERO( &(vje->fds) );
|
||||||
FD_ZERO( &(vje->wds) );
|
FD_ZERO( &(vje->wds) );
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Veejay is a visual instrument and realtime video sampler. It allos you
|
|||||||
to "play" the video like you would play a Piano and it allows you to
|
to "play" the video like you would play a Piano and it allows you to
|
||||||
record the resulting video directly to disk for immediate playback (video sampling).
|
record the resulting video directly to disk for immediate playback (video sampling).
|
||||||
|
|
||||||
Thus, Veejay can be operated live by using the keyboard (which is 100% user definable)
|
Veejay can be operated live by using the keyboard (which is 100% user definable)
|
||||||
and remotely over network (both unicast and multicast) using an inhouse message
|
and remotely over network (both unicast and multicast) using an inhouse message
|
||||||
system that allows mapping of various protocols on top of it, including OSC.
|
system that allows mapping of various protocols on top of it, including OSC.
|
||||||
|
|
||||||
@@ -22,9 +22,8 @@ performances and/or video installations.
|
|||||||
.TP
|
.TP
|
||||||
MJPEG (either jpeg 4:2:0 or jpeg 4:2:2), YUV 4:2:0 i420/yv12 AVI, Quasar DV codec (only I-frames), MPEG4 (only I-frames)
|
MJPEG (either jpeg 4:2:0 or jpeg 4:2:2), YUV 4:2:0 i420/yv12 AVI, Quasar DV codec (only I-frames), MPEG4 (only I-frames)
|
||||||
.TP
|
.TP
|
||||||
.SH Supported video output drivers
|
.SH Supported video containers
|
||||||
.TP
|
AVI , QuickTime
|
||||||
Matrox G400/G440/G550 users can specify an (optional) output driver that uses the DirectFB library. It enables the CRTC2 (secondary head) , displaying video independently of the first head through the TV-Out.
|
|
||||||
.TP
|
.TP
|
||||||
.SH Audio
|
.SH Audio
|
||||||
.TP
|
.TP
|
||||||
@@ -56,7 +55,7 @@ write video in YCbCr (YUV 4:2:0) format to specified file. Use this with -O3.
|
|||||||
If you use 'stdout' here, veejay will be silent and write yuv4mpeg streams to STDOUT
|
If you use 'stdout' here, veejay will be silent and write yuv4mpeg streams to STDOUT
|
||||||
.TP
|
.TP
|
||||||
.B \-O/--output [012345]
|
.B \-O/--output [012345]
|
||||||
specify video output 0 = SDL (default) 1 = DirectFB 2 = SDL and DirectFB 3 = YUV4MPEG stream , 4 = System V SHM, 5 = Silent (no visual output)
|
specify video output 0 = SDL (default) 1 = DirectFB 2 = SDL and DirectFB 3 = YUV4MPEG stream , 4 = Open GL (required ARB fragment shader), 5 = Silent (no visual output)
|
||||||
.TP
|
.TP
|
||||||
.B \-s/--size NxN
|
.B \-s/--size NxN
|
||||||
Scaled video dimensions for SDL video output
|
Scaled video dimensions for SDL video output
|
||||||
@@ -111,12 +110,12 @@ Maximum number of samples to cache
|
|||||||
.B \-F/--features
|
.B \-F/--features
|
||||||
Show compiled in options
|
Show compiled in options
|
||||||
.TP
|
.TP
|
||||||
.B \-Y/--ycbcr [01]
|
.B \-Y/--ycbcr [0123]
|
||||||
Specify veejay to use either YUV 4:2:0 (0) or YUV 4:2:2 (1). By default,
|
Specify veejay to use either YUV 4:2:0 (0) , YUV 4:2:2 (1), YUV 4:2:0 JPEG (2), YUV 4:2:2 JPEG(3).
|
||||||
veejay will try to autodetect the pixel format used.
|
By default, veejay will try to select the best format.
|
||||||
.TP
|
.TP
|
||||||
.B \-d/--dummy
|
.B \-d/--dummy
|
||||||
Start veejay with no video files (dummy mode). By default it will play black video.
|
Start veejay with no video files (dummy mode). By default it will play black video (Stream 1 [F1])
|
||||||
.TP
|
.TP
|
||||||
.B \-W/--width
|
.B \-W/--width
|
||||||
Specify width of dummy video.
|
Specify width of dummy video.
|
||||||
@@ -143,74 +142,6 @@ of frames to be cached in memory from file (only valid for rawDV and AVI)
|
|||||||
Use smaller values for better performance (mapping several hundreds of
|
Use smaller values for better performance (mapping several hundreds of
|
||||||
megabytes can become a problem)
|
megabytes can become a problem)
|
||||||
.TP
|
.TP
|
||||||
.TP
|
|
||||||
.B \-w/--zoomwidth <0-4096>
|
|
||||||
For use with \-z/--zoom, specify output width
|
|
||||||
.TP
|
|
||||||
.B \-h/--zoomheight <0-4096>
|
|
||||||
For use with \-z/--zoom, specify output height
|
|
||||||
.TP
|
|
||||||
.B \-C/--zoomcrop top:bottom:left:right
|
|
||||||
For use with \-z/--zoom, crops the input image before scaling.
|
|
||||||
Set in pixels.
|
|
||||||
.TP
|
|
||||||
.B \--lgb=<0-100>
|
|
||||||
For use with \-z/--zoom, use Gaussian blur filter (luma)
|
|
||||||
.TP
|
|
||||||
.B \--cgb=<0-100>
|
|
||||||
For use with \-z/--zoom, use Gaussian blur filter (chroma)
|
|
||||||
.TP
|
|
||||||
.B \--ls=<0-100>
|
|
||||||
For use with \-z/--zoom, use Sharpen filter (luma)
|
|
||||||
.TP
|
|
||||||
.B \--cs=<0-100>
|
|
||||||
For use with \-z/--zoom, use Sharpen filter (chroma)
|
|
||||||
.TP
|
|
||||||
.B \--chs=<h>
|
|
||||||
For use with \-z/--zoom, Chroma horizontal shifting
|
|
||||||
.TP
|
|
||||||
.B \--cvs=<v>
|
|
||||||
For use with \-z/--zoom, Chroma vertical shifting
|
|
||||||
.B \-z/--zoom <num>
|
|
||||||
Use the software scaler (this affects output video). (Also see \-w and \-h)
|
|
||||||
Available modes are:
|
|
||||||
.RS
|
|
||||||
.TP
|
|
||||||
.B 1
|
|
||||||
Fast Bilinear (default)
|
|
||||||
.TP
|
|
||||||
.B 2
|
|
||||||
Bilinear
|
|
||||||
.TP
|
|
||||||
.B 3
|
|
||||||
Bicubic (good quality)
|
|
||||||
.TP
|
|
||||||
.B 4
|
|
||||||
Experimental
|
|
||||||
.TP
|
|
||||||
.B 5
|
|
||||||
Nearest Neighbour (bad quality)
|
|
||||||
.TP
|
|
||||||
.B 6
|
|
||||||
Area
|
|
||||||
.TP
|
|
||||||
.B 7
|
|
||||||
Luma bicubic / chroma bilinear
|
|
||||||
.TP
|
|
||||||
.B 8
|
|
||||||
Gauss
|
|
||||||
.TP
|
|
||||||
.B 9
|
|
||||||
sincR
|
|
||||||
.TP
|
|
||||||
.B 10
|
|
||||||
Lanczos
|
|
||||||
.TP
|
|
||||||
.B 11
|
|
||||||
Natural bicubic spline
|
|
||||||
.TP
|
|
||||||
|
|
||||||
|
|
||||||
.SH EXAMPLES
|
.SH EXAMPLES
|
||||||
.TP
|
.TP
|
||||||
.B veejay -u |less
|
.B veejay -u |less
|
||||||
@@ -228,6 +159,9 @@ and using PAL.
|
|||||||
Startup veejay, using multicast protocol on port 5000 , with autolooping
|
Startup veejay, using multicast protocol on port 5000 , with autolooping
|
||||||
and no colored verbose output
|
and no colored verbose output
|
||||||
.TP
|
.TP
|
||||||
|
.B veejay -O4 ~/my_video1.avi
|
||||||
|
Startup veejay with openGL video window
|
||||||
|
.TP
|
||||||
.SH INTERFACE COMMANDS (STDIN)
|
.SH INTERFACE COMMANDS (STDIN)
|
||||||
When you are running veejay with a SDL window you can use keybindings for
|
When you are running veejay with a SDL window you can use keybindings for
|
||||||
realtime interaction. See
|
realtime interaction. See
|
||||||
@@ -432,6 +366,10 @@ Decrease parameter 7 of selected effect
|
|||||||
.B [i]
|
.B [i]
|
||||||
Increase parameter 7 of selected effect
|
Increase parameter 7 of selected effect
|
||||||
.TP
|
.TP
|
||||||
|
.TP
|
||||||
|
.B CTRL + O
|
||||||
|
OSD status (timecode , current sample, cost and cache)
|
||||||
|
.TP
|
||||||
.B ALT + B
|
.B ALT + B
|
||||||
Take a snapshot of a video frame and put it in a seperate
|
Take a snapshot of a video frame and put it in a seperate
|
||||||
buffer (used by some effects like Difference Overlay)
|
buffer (used by some effects like Difference Overlay)
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ static float override_fps = 0.0;
|
|||||||
static int default_geometry_x = -1;
|
static int default_geometry_x = -1;
|
||||||
static int default_geometry_y = -1;
|
static int default_geometry_y = -1;
|
||||||
static int force_video_file = 0; // unused
|
static int force_video_file = 0; // unused
|
||||||
static int override_pix_fmt = 2;
|
static int override_pix_fmt = 1;
|
||||||
static int full_range = 0;
|
static int full_range = 0;
|
||||||
static char override_norm = 'p';
|
static char override_norm = 'p';
|
||||||
static int auto_loop = 0;
|
static int auto_loop = 0;
|
||||||
|
|||||||
@@ -1158,33 +1158,15 @@ int vj_event_parse_msg( veejay_t * v, char *msg )
|
|||||||
void vj_event_update_remote(void *ptr)
|
void vj_event_update_remote(void *ptr)
|
||||||
{
|
{
|
||||||
veejay_t *v = (veejay_t*)ptr;
|
veejay_t *v = (veejay_t*)ptr;
|
||||||
int cmd_poll = 0; // command port
|
|
||||||
int sta_poll = 0; // status port
|
|
||||||
int new_link = -1;
|
|
||||||
int sta_link = -1;
|
|
||||||
int msg_link = -1;
|
|
||||||
int msg_poll = 0;
|
|
||||||
int i;
|
int i;
|
||||||
cmd_poll = vj_server_poll(v->vjs[0]);
|
|
||||||
sta_poll = vj_server_poll(v->vjs[1]);
|
|
||||||
msg_poll = vj_server_poll(v->vjs[3]);
|
|
||||||
// accept connection command socket
|
|
||||||
|
|
||||||
if( cmd_poll > 0)
|
if( vj_server_poll( v->vjs[0] ) )
|
||||||
{
|
vj_server_new_connection( v->vjs[0] );
|
||||||
new_link = vj_server_new_connection ( v->vjs[0] );
|
|
||||||
}
|
|
||||||
// accept connection on status socket
|
|
||||||
if( sta_poll > 0)
|
|
||||||
{
|
|
||||||
sta_link = vj_server_new_connection ( v->vjs[1] );
|
|
||||||
}
|
|
||||||
if( msg_poll > 0)
|
|
||||||
{
|
|
||||||
msg_link = vj_server_new_connection( v->vjs[3] );
|
|
||||||
}
|
|
||||||
|
|
||||||
// see if there is any link interested in status information
|
if( vj_server_poll( v->vjs[1] ) )
|
||||||
|
vj_server_new_connection( v->vjs[1] );
|
||||||
|
if( vj_server_poll( v->vjs[3] ) )
|
||||||
|
vj_server_new_connection( v->vjs[3] );
|
||||||
|
|
||||||
for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ )
|
for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ )
|
||||||
if( vj_server_link_used( v->vjs[1], i ))
|
if( vj_server_link_used( v->vjs[1], i ))
|
||||||
@@ -1201,7 +1183,7 @@ void vj_event_update_remote(void *ptr)
|
|||||||
while( vj_server_retrieve_msg( v->vjs[2], 0, buf ) )
|
while( vj_server_retrieve_msg( v->vjs[2], 0, buf ) )
|
||||||
{
|
{
|
||||||
vj_event_parse_msg( v, buf );
|
vj_event_parse_msg( v, buf );
|
||||||
bzero( buf, MESSAGE_SIZE );
|
veejay_memset( buf, 0, MESSAGE_SIZE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1219,12 +1201,11 @@ void vj_event_update_remote(void *ptr)
|
|||||||
{
|
{
|
||||||
v->uc->current_link = i;
|
v->uc->current_link = i;
|
||||||
char buf[MESSAGE_SIZE];
|
char buf[MESSAGE_SIZE];
|
||||||
bzero(buf, MESSAGE_SIZE);
|
|
||||||
int n = 0;
|
int n = 0;
|
||||||
while( vj_server_retrieve_msg(v->vjs[0],i,buf) != 0 )
|
while( vj_server_retrieve_msg(v->vjs[0],i,buf) != 0 )
|
||||||
{
|
{
|
||||||
vj_event_parse_msg( v, buf );
|
vj_event_parse_msg( v, buf );
|
||||||
bzero( buf, MESSAGE_SIZE );
|
veejay_memset( buf,0, MESSAGE_SIZE );
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1236,7 +1217,6 @@ void vj_event_update_remote(void *ptr)
|
|||||||
_vj_server_del_client( v->vjs[3], i );
|
_vj_server_del_client( v->vjs[3], i );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1260,9 +1240,7 @@ void vj_event_update_remote(void *ptr)
|
|||||||
free( cached_gdkimage_ );
|
free( cached_gdkimage_ );
|
||||||
cached_gdkimage_ = NULL;
|
cached_gdkimage_ = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear image cache
|
// clear image cache
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void vj_event_commit_bundle( veejay_t *v, int key_num, int key_mod)
|
void vj_event_commit_bundle( veejay_t *v, int key_num, int key_mod)
|
||||||
|
|||||||
@@ -70,13 +70,20 @@ struct ycbcr_frame {
|
|||||||
int ssm;
|
int ssm;
|
||||||
};
|
};
|
||||||
|
|
||||||
// audio buffer is 16 bit signed integer
|
typedef struct {
|
||||||
|
int fader_active;
|
||||||
|
int fx_status;
|
||||||
|
int enc_active;
|
||||||
|
int type;
|
||||||
|
int active;
|
||||||
|
} varcache_t;
|
||||||
|
|
||||||
|
static varcache_t pvar_;
|
||||||
|
|
||||||
static void *effect_sampler = NULL;
|
static void *effect_sampler = NULL;
|
||||||
#ifdef USE_SWSCALER
|
#ifdef USE_SWSCALER
|
||||||
static void *crop_sampler = NULL;
|
static void *crop_sampler = NULL;
|
||||||
static VJFrame *crop_frame = NULL;
|
static VJFrame *crop_frame = NULL;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
static struct ycbcr_frame **video_output_buffer; /* scaled video output */
|
static struct ycbcr_frame **video_output_buffer; /* scaled video output */
|
||||||
static int video_output_buffer_convert = 0;
|
static int video_output_buffer_convert = 0;
|
||||||
@@ -90,7 +97,6 @@ static int cached_tag_frames[CACHE_SIZE]; /* cache a frame into the buffer only
|
|||||||
static int cached_sample_frames[CACHE_SIZE];
|
static int cached_sample_frames[CACHE_SIZE];
|
||||||
|
|
||||||
static int frame_info[64][SAMPLE_MAX_EFFECTS]; /* array holding frame lengths */
|
static int frame_info[64][SAMPLE_MAX_EFFECTS]; /* array holding frame lengths */
|
||||||
static int primary_frame_len[1]; /* array holding length of top frame */
|
|
||||||
static uint8_t *audio_buffer[SAMPLE_MAX_EFFECTS]; /* the audio buffer */
|
static uint8_t *audio_buffer[SAMPLE_MAX_EFFECTS]; /* the audio buffer */
|
||||||
static uint8_t *top_audio_buffer;
|
static uint8_t *top_audio_buffer;
|
||||||
static uint8_t *tmp_audio_buffer;
|
static uint8_t *tmp_audio_buffer;
|
||||||
@@ -124,8 +130,28 @@ static inline void vj_perform_pre_chain(veejay_t *info, VJFrame *frame);
|
|||||||
static void vj_perform_post_chain_sample(veejay_t *info, VJFrame *frame);
|
static void vj_perform_post_chain_sample(veejay_t *info, VJFrame *frame);
|
||||||
static void vj_perform_post_chain_tag(veejay_t *info, VJFrame *frame);
|
static void vj_perform_post_chain_tag(veejay_t *info, VJFrame *frame);
|
||||||
|
|
||||||
|
static void vj_perform_plain_fill_buffer(veejay_t * info, int entry);
|
||||||
|
static int vj_perform_tag_fill_buffer(veejay_t * info, int entry);
|
||||||
|
static void vj_perform_clear_cache(void);
|
||||||
|
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_apply_secundary_tag(veejay_t * info, int sample_id,int type, int chain_entry, int entry);
|
||||||
|
static int vj_perform_apply_secundary(veejay_t * info, int sample_id,int type, int chain_entry, int entry);
|
||||||
|
static int vj_perform_tag_complete_buffers(veejay_t * info, int entry,int *h);
|
||||||
|
static int vj_perform_increase_sample_frame(veejay_t * info, long num);
|
||||||
|
static int vj_perform_sample_complete_buffers(veejay_t * info, int entry, int *h);
|
||||||
static void vj_perform_use_cached_ycbcr_frame(veejay_t *info, int centry, int chain_entry, int width, int height);
|
static void vj_perform_use_cached_ycbcr_frame(veejay_t *info, int centry, int chain_entry, int width, int height);
|
||||||
|
static int vj_perform_apply_first(veejay_t *info, vjp_kf *todo_info, VJFrame **frames, VJFrameInfo *frameinfo, int e, int c, int n_frames );
|
||||||
|
static int vj_perform_render_sample_frame(veejay_t *info, uint8_t *frame[3]);
|
||||||
|
static int vj_perform_render_tag_frame(veejay_t *info, uint8_t *frame[3]);
|
||||||
|
static int vj_perform_record_commit_single(veejay_t *info, int entry);
|
||||||
|
static int vj_perform_get_subtagframe(veejay_t * info, int sub_sample, int chain_entry );
|
||||||
|
static int vj_perform_get_subframe(veejay_t * info, int sub_sample,int chain_entyr );
|
||||||
|
static int vj_perform_get_subframe_tag(veejay_t * info, int sub_sample, int chain_entry );
|
||||||
|
static void vj_perform_reverse_audio_frame(veejay_t * info, int len, uint8_t *buf );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int vj_perform_tag_is_cached(int chain_entry, int tag_id)
|
static int vj_perform_tag_is_cached(int chain_entry, int tag_id)
|
||||||
@@ -174,10 +200,10 @@ void vj_perform_clear_frame_info(int entry)
|
|||||||
* clear the cache contents pre queuing frames
|
* clear the cache contents pre queuing frames
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void vj_perform_clear_cache()
|
static void vj_perform_clear_cache()
|
||||||
{
|
{
|
||||||
memset(cached_tag_frames, 0 , CACHE_SIZE);
|
veejay_memset(cached_tag_frames, 0 , CACHE_SIZE);
|
||||||
memset(cached_sample_frames, 0, CACHE_SIZE);
|
veejay_memset(cached_sample_frames, 0, CACHE_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
@@ -187,7 +213,7 @@ void vj_perform_clear_cache()
|
|||||||
* actually fakes the queuing mechanism, it never touches the disk.
|
* actually fakes the queuing mechanism, it never touches the disk.
|
||||||
* returns 0 on sucess, -1 on error
|
* returns 0 on sucess, -1 on error
|
||||||
*/
|
*/
|
||||||
int vj_perform_increase_tag_frame(veejay_t * info, long num)
|
static int vj_perform_increase_tag_frame(veejay_t * info, long num)
|
||||||
{
|
{
|
||||||
video_playback_setup *settings = info->settings;
|
video_playback_setup *settings = info->settings;
|
||||||
settings->current_frame_num += num;
|
settings->current_frame_num += num;
|
||||||
@@ -214,7 +240,7 @@ int vj_perform_increase_tag_frame(veejay_t * info, long num)
|
|||||||
*
|
*
|
||||||
* returns 0 on sucess, -1 on error
|
* returns 0 on sucess, -1 on error
|
||||||
*/
|
*/
|
||||||
int vj_perform_increase_plain_frame(veejay_t * info, long num)
|
static int vj_perform_increase_plain_frame(veejay_t * info, long num)
|
||||||
{
|
{
|
||||||
video_playback_setup *settings = info->settings;
|
video_playback_setup *settings = info->settings;
|
||||||
//settings->current_frame_num += num;
|
//settings->current_frame_num += num;
|
||||||
@@ -249,7 +275,7 @@ int vj_perform_increase_plain_frame(veejay_t * info, long num)
|
|||||||
*
|
*
|
||||||
* returns 0 on sucess, -1 on error
|
* returns 0 on sucess, -1 on error
|
||||||
*/
|
*/
|
||||||
int vj_perform_increase_sample_frame(veejay_t * info, long num)
|
static int vj_perform_increase_sample_frame(veejay_t * info, long num)
|
||||||
{
|
{
|
||||||
video_playback_setup *settings =
|
video_playback_setup *settings =
|
||||||
(video_playback_setup *) info->settings;
|
(video_playback_setup *) info->settings;
|
||||||
@@ -345,9 +371,10 @@ static int vj_perform_alloc_row(veejay_t *info, int frame, int c, int frame_len)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vj_perform_free_row(int frame,int c)
|
static void vj_perform_free_row(int c)
|
||||||
{
|
{
|
||||||
if(frame_buffer[c]->Y) free( frame_buffer[c]->Y );
|
if(frame_buffer[c]->Y)
|
||||||
|
free( frame_buffer[c]->Y );
|
||||||
frame_buffer[c]->Y = NULL;
|
frame_buffer[c]->Y = NULL;
|
||||||
frame_buffer[c]->Cb = NULL;
|
frame_buffer[c]->Cb = NULL;
|
||||||
frame_buffer[c]->Cr = NULL;
|
frame_buffer[c]->Cr = NULL;
|
||||||
@@ -356,72 +383,68 @@ static void vj_perform_free_row(int frame,int c)
|
|||||||
cached_tag_frames[c+1] = 0;
|
cached_tag_frames[c+1] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define vj_perform_row_used(c) ( frame_buffer[c]->Y == NULL ? 0 : 1 )
|
||||||
|
/*
|
||||||
static int vj_perform_row_used(int frame, int c)
|
static int vj_perform_row_used(int frame, int c)
|
||||||
{
|
{
|
||||||
if(frame_buffer[c]->Y != NULL ) return 1;
|
if(frame_buffer[c]->Y != NULL ) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
static int vj_perform_verify_rows(veejay_t *info, int frame)
|
static int vj_perform_verify_rows(veejay_t *info, int frame)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int w = info->edit_list->video_width;
|
const int w = info->edit_list->video_width;
|
||||||
int h = info->edit_list->video_height;
|
const int h = info->edit_list->video_height;
|
||||||
int has_rows = 0;
|
int has_rows = 0;
|
||||||
float kilo_bytes = 0;
|
int v;
|
||||||
|
|
||||||
|
if( pvar_.fx_status == 0 )
|
||||||
|
return 0;
|
||||||
|
/*
|
||||||
|
|
||||||
if( info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE)
|
if( info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE)
|
||||||
{
|
{
|
||||||
if(!sample_get_effect_status(info->uc->sample_id)) return 0;
|
if(!sample_get_effect_status(info->uc->sample_id))
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(info->uc->playback_mode == VJ_PLAYBACK_MODE_TAG)
|
if(info->uc->playback_mode == VJ_PLAYBACK_MODE_TAG)
|
||||||
{
|
{
|
||||||
if(!vj_tag_get_effect_status(info->uc->sample_id)) return 0;
|
if(!vj_tag_get_effect_status(info->uc->sample_id))
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
for(c=0; c < SAMPLE_MAX_EFFECTS; c++)
|
for(c=0; c < SAMPLE_MAX_EFFECTS; c++)
|
||||||
{
|
{
|
||||||
int need_row = 0;
|
v = (info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE ?
|
||||||
int v = (info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE ?
|
|
||||||
sample_get_effect_any(info->uc->sample_id,c) : vj_tag_get_effect_any(info->uc->sample_id,c));
|
sample_get_effect_any(info->uc->sample_id,c) : vj_tag_get_effect_any(info->uc->sample_id,c));
|
||||||
if( v > 0)
|
if( v > 0)
|
||||||
{
|
|
||||||
//if(vj_effect_get_extra_frame(v))
|
|
||||||
need_row = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( need_row )
|
|
||||||
{
|
{
|
||||||
int t=0,s=0,changed=0;
|
int t=0,s=0,changed=0;
|
||||||
if(!vj_perform_row_used(frame,c))
|
if(!vj_perform_row_used(c))
|
||||||
{
|
{
|
||||||
s = vj_perform_alloc_row(info,frame,c,w*h);
|
if ( vj_perform_alloc_row( info, frame, c, w*h) <= 0 )
|
||||||
changed = 1;
|
{
|
||||||
if(s <= 0) return -1;
|
veejay_msg(VEEJAY_MSG_ERROR, "Unable to allocate memory for FX entry %d",c);
|
||||||
|
veejay_change_state( info, LAVPLAY_STATE_STOP );
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(changed) kilo_bytes += (float) (t + s) / 1024.0 ;
|
|
||||||
|
|
||||||
has_rows ++;
|
has_rows ++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// row not needed anymore ??
|
if(vj_perform_row_used(c))
|
||||||
int changed = 0;
|
vj_perform_free_row(c);
|
||||||
if(vj_perform_row_used(frame,c))
|
|
||||||
{
|
|
||||||
vj_perform_free_row(frame,c);
|
|
||||||
changed = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return has_rows;
|
return has_rows;
|
||||||
@@ -488,9 +511,6 @@ int vj_perform_init(veejay_t * info)
|
|||||||
int c;
|
int c;
|
||||||
// buffer used to store encoded frames (for plain and sample mode)
|
// buffer used to store encoded frames (for plain and sample mode)
|
||||||
performer_framelen = frame_len *2;
|
performer_framelen = frame_len *2;
|
||||||
;
|
|
||||||
primary_frame_len[0] = 0;
|
|
||||||
|
|
||||||
frame_buffer = (struct ycbcr_frame **) vj_malloc(sizeof(struct ycbcr_frame *) * SAMPLE_MAX_EFFECTS);
|
frame_buffer = (struct ycbcr_frame **) vj_malloc(sizeof(struct ycbcr_frame *) * SAMPLE_MAX_EFFECTS);
|
||||||
if(!frame_buffer) return 0;
|
if(!frame_buffer) return 0;
|
||||||
|
|
||||||
@@ -581,6 +601,8 @@ int vj_perform_init(veejay_t * info)
|
|||||||
vj_picture_init();
|
vj_picture_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
veejay_memset( &pvar_, 0, sizeof( varcache_t));
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -692,7 +714,8 @@ void vj_perform_free(veejay_t * info)
|
|||||||
vj_perform_close_audio();
|
vj_perform_close_audio();
|
||||||
|
|
||||||
for (c = 0; c < fblen; c++) {
|
for (c = 0; c < fblen; c++) {
|
||||||
if(vj_perform_row_used(0,c)) vj_perform_free_row(0,c);
|
if(vj_perform_row_used(c))
|
||||||
|
vj_perform_free_row(c);
|
||||||
if(frame_buffer[c])
|
if(frame_buffer[c])
|
||||||
{
|
{
|
||||||
if(frame_buffer[c]->Y) free(frame_buffer[c]->Y);
|
if(frame_buffer[c]->Y) free(frame_buffer[c]->Y);
|
||||||
@@ -1117,7 +1140,7 @@ void vj_perform_get_primary_frame_420p(veejay_t *info, uint8_t **frame )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int vj_perform_apply_first(veejay_t *info, vjp_kf *todo_info,
|
static int vj_perform_apply_first(veejay_t *info, vjp_kf *todo_info,
|
||||||
VJFrame **frames, VJFrameInfo *frameinfo, int e , int c, int n_frame)
|
VJFrame **frames, VJFrameInfo *frameinfo, int e , int c, int n_frame)
|
||||||
{
|
{
|
||||||
int n_a = vj_effect_get_num_params(e);
|
int n_a = vj_effect_get_num_params(e);
|
||||||
@@ -1142,7 +1165,7 @@ int vj_perform_apply_first(veejay_t *info, vjp_kf *todo_info,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vj_perform_reverse_audio_frame(veejay_t * info, int len,
|
static void vj_perform_reverse_audio_frame(veejay_t * info, int len,
|
||||||
uint8_t * buf)
|
uint8_t * buf)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -1164,7 +1187,7 @@ void vj_perform_reverse_audio_frame(veejay_t * info, int len,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_get_subtagframe(veejay_t * info, int sub_sample,
|
static int vj_perform_get_subtagframe(veejay_t * info, int sub_sample,
|
||||||
int chain_entry)
|
int chain_entry)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -1264,8 +1287,8 @@ static void vj_perform_use_cached_ycbcr_frame(veejay_t *info, int centry, int ch
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_get_subframe(veejay_t * info, int sub_sample,
|
static int vj_perform_get_subframe(veejay_t * info, int sub_sample,
|
||||||
int chain_entry, const int skip_incr)
|
int chain_entry)
|
||||||
|
|
||||||
{
|
{
|
||||||
video_playback_setup *settings = (video_playback_setup*) info->settings;
|
video_playback_setup *settings = (video_playback_setup*) info->settings;
|
||||||
@@ -1288,8 +1311,6 @@ int vj_perform_get_subframe(veejay_t * info, int sub_sample,
|
|||||||
|
|
||||||
/* offset + start >= end */
|
/* offset + start >= end */
|
||||||
if(sample_b[3] >= 0) /* sub sample plays forward */
|
if(sample_b[3] >= 0) /* sub sample plays forward */
|
||||||
{
|
|
||||||
if(!skip_incr)
|
|
||||||
{
|
{
|
||||||
if( settings->current_playback_speed != 0)
|
if( settings->current_playback_speed != 0)
|
||||||
offset += sample_b[3]; /* speed */
|
offset += sample_b[3]; /* speed */
|
||||||
@@ -1316,20 +1337,11 @@ int vj_perform_get_subframe(veejay_t * info, int sub_sample,
|
|||||||
sample_set_speed(b,0);
|
sample_set_speed(b,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sample_set_offset(a,chain_entry,offset);
|
sample_set_offset(a,chain_entry,offset);
|
||||||
return (sample_b[0] + nset);
|
return (sample_b[0] + nset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
return sample_b[0] + nset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ /* sub sample plays reverse */
|
{ /* sub sample plays reverse */
|
||||||
if(!skip_incr)
|
|
||||||
{
|
|
||||||
if(settings->current_playback_speed != 0)
|
if(settings->current_playback_speed != 0)
|
||||||
offset += sample_b[3]; /* speed */
|
offset += sample_b[3]; /* speed */
|
||||||
|
|
||||||
@@ -1359,17 +1371,12 @@ int vj_perform_get_subframe(veejay_t * info, int sub_sample,
|
|||||||
|
|
||||||
return (sample_b[1] + nset);
|
return (sample_b[1] + nset);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
return sample_b[1] + nset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_get_subframe_tag(veejay_t * info, int sub_sample,
|
static int vj_perform_get_subframe_tag(veejay_t * info, int sub_sample,
|
||||||
int chain_entry, const int skip_incr)
|
int chain_entry)
|
||||||
|
|
||||||
{
|
{
|
||||||
video_playback_setup *settings = (video_playback_setup*) info->settings;
|
video_playback_setup *settings = (video_playback_setup*) info->settings;
|
||||||
@@ -1387,8 +1394,6 @@ int vj_perform_get_subframe_tag(veejay_t * info, int sub_sample,
|
|||||||
|
|
||||||
/* offset + start >= end */
|
/* offset + start >= end */
|
||||||
if(sample[3] >= 0) /* sub sample plays forward */
|
if(sample[3] >= 0) /* sub sample plays forward */
|
||||||
{
|
|
||||||
if(!skip_incr)
|
|
||||||
{
|
{
|
||||||
if( settings->current_playback_speed != 0)
|
if( settings->current_playback_speed != 0)
|
||||||
offset += sample[3]; /* speed */
|
offset += sample[3]; /* speed */
|
||||||
@@ -1416,22 +1421,13 @@ int vj_perform_get_subframe_tag(veejay_t * info, int sub_sample,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sample_set_offset(sub_sample,chain_entry,offset);
|
sample_set_offset(sub_sample,chain_entry,offset);
|
||||||
return (sample[0] + nset);
|
return (sample[0] + nset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
return sample[0] + nset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ /* sub sample plays reverse */
|
{ /* sub sample plays reverse */
|
||||||
if(!skip_incr)
|
|
||||||
{
|
|
||||||
if(settings->current_playback_speed != 0)
|
if(settings->current_playback_speed != 0)
|
||||||
offset += sample[3]; /* speed */
|
offset += sample[3]; /* speed */
|
||||||
|
|
||||||
if ( offset < -(len) )
|
if ( offset < -(len) )
|
||||||
{
|
{
|
||||||
/* reached start position */
|
/* reached start position */
|
||||||
@@ -1458,11 +1454,6 @@ int vj_perform_get_subframe_tag(veejay_t * info, int sub_sample,
|
|||||||
|
|
||||||
return (sample[1] + nset);
|
return (sample[1] + nset);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
return sample[1] + nset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@@ -1628,8 +1619,8 @@ int vj_perform_fill_audio_buffers(veejay_t * info, uint8_t *audio_buf)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int vj_perform_apply_secundary_tag(veejay_t * info, int sample_id,
|
static int vj_perform_apply_secundary_tag(veejay_t * info, int sample_id,
|
||||||
int type, int chain_entry, int entry, const int skip_incr)
|
int type, int chain_entry, int entry )
|
||||||
{ /* second sample */
|
{ /* second sample */
|
||||||
int width = info->edit_list->video_width;
|
int width = info->edit_list->video_width;
|
||||||
int height = info->edit_list->video_height;
|
int height = info->edit_list->video_height;
|
||||||
@@ -1694,7 +1685,7 @@ int vj_perform_apply_secundary_tag(veejay_t * info, int sample_id,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case VJ_TAG_TYPE_NONE:
|
case VJ_TAG_TYPE_NONE:
|
||||||
nframe = vj_perform_get_subframe_tag(info, sample_id, chain_entry, skip_incr); // get exact frame number to decode
|
nframe = vj_perform_get_subframe_tag(info, sample_id, chain_entry); // get exact frame number to decode
|
||||||
centry = vj_perform_sample_is_cached(sample_id, chain_entry);
|
centry = vj_perform_sample_is_cached(sample_id, chain_entry);
|
||||||
if(centry == -1)
|
if(centry == -1)
|
||||||
{
|
{
|
||||||
@@ -1770,8 +1761,8 @@ static int vj_perform_get_frame_(veejay_t *info, int s1, long nframe, uint8_t *i
|
|||||||
* returns 0 on success, -1 on error
|
* returns 0 on success, -1 on error
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int vj_perform_apply_secundary(veejay_t * info, int sample_id, int type,
|
static int vj_perform_apply_secundary(veejay_t * info, int sample_id, int type,
|
||||||
int chain_entry, int entry, const int skip_incr)
|
int chain_entry, int entry)
|
||||||
{ /* second sample */
|
{ /* second sample */
|
||||||
|
|
||||||
|
|
||||||
@@ -1832,7 +1823,7 @@ int vj_perform_apply_secundary(veejay_t * info, int sample_id, int type,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VJ_TAG_TYPE_NONE:
|
case VJ_TAG_TYPE_NONE:
|
||||||
nframe = vj_perform_get_subframe(info, sample_id, chain_entry, skip_incr); // get exact frame number to decode
|
nframe = vj_perform_get_subframe(info, sample_id, chain_entry); // get exact frame number to decode
|
||||||
centry = vj_perform_sample_is_cached(sample_id, chain_entry);
|
centry = vj_perform_sample_is_cached(sample_id, chain_entry);
|
||||||
|
|
||||||
if(centry == -1)
|
if(centry == -1)
|
||||||
@@ -1890,7 +1881,7 @@ int vj_perform_apply_secundary(veejay_t * info, int sample_id, int type,
|
|||||||
* returns 0 on success
|
* returns 0 on success
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int vj_perform_tag_render_chain_entry(veejay_t *info, int chain_entry, const int skip_incr, int sampled)
|
static int vj_perform_tag_render_chain_entry(veejay_t *info, int chain_entry, int sampled)
|
||||||
{
|
{
|
||||||
int result = sampled;
|
int result = sampled;
|
||||||
VJFrame *frames[2];
|
VJFrame *frames[2];
|
||||||
@@ -1924,7 +1915,7 @@ static int vj_perform_tag_render_chain_entry(veejay_t *info, int chain_entry, co
|
|||||||
vj_tag_get_chain_source(info->uc->sample_id, // what source type
|
vj_tag_get_chain_source(info->uc->sample_id, // what source type
|
||||||
chain_entry);
|
chain_entry);
|
||||||
|
|
||||||
vj_perform_apply_secundary_tag(info,sub_id,source,chain_entry,0, skip_incr); // get it
|
vj_perform_apply_secundary_tag(info,sub_id,source,chain_entry,0 ); // get it
|
||||||
// FIXME: apply secundary ... sampling
|
// FIXME: apply secundary ... sampling
|
||||||
frames[1]->data[0] = frame_buffer[chain_entry]->Y;
|
frames[1]->data[0] = frame_buffer[chain_entry]->Y;
|
||||||
frames[1]->data[1] = frame_buffer[chain_entry]->Cb;
|
frames[1]->data[1] = frame_buffer[chain_entry]->Cb;
|
||||||
@@ -1994,7 +1985,7 @@ static int vj_perform_tag_render_chain_entry(veejay_t *info, int chain_entry, co
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vj_perform_render_chain_entry(veejay_t *info, int chain_entry, const int skip_incr, int sampled)
|
static int vj_perform_render_chain_entry(veejay_t *info, int chain_entry, int sampled)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
VJFrame *frames[2];
|
VJFrame *frames[2];
|
||||||
@@ -2030,7 +2021,7 @@ static int vj_perform_render_chain_entry(veejay_t *info, int chain_entry, const
|
|||||||
int source =
|
int source =
|
||||||
sample_get_chain_source(info->uc->sample_id, // what source type
|
sample_get_chain_source(info->uc->sample_id, // what source type
|
||||||
chain_entry);
|
chain_entry);
|
||||||
vj_perform_apply_secundary(info,sub_id,source,chain_entry,0, skip_incr); // get it
|
vj_perform_apply_secundary(info,sub_id,source,chain_entry,0); // get it
|
||||||
|
|
||||||
// FIXME: apply secundary needs sampling ?!!
|
// FIXME: apply secundary needs sampling ?!!
|
||||||
frames[1]->data[0] = frame_buffer[chain_entry]->Y;
|
frames[1]->data[0] = frame_buffer[chain_entry]->Y;
|
||||||
@@ -2124,7 +2115,7 @@ void vj_perform_get_backstore( uint8_t **frame )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_sample_complete_buffers(veejay_t * info, int entry, const int skip_incr, int *hint444)
|
static int vj_perform_sample_complete_buffers(veejay_t * info, int entry, int *hint444)
|
||||||
{
|
{
|
||||||
int chain_entry;
|
int chain_entry;
|
||||||
vjp_kf *setup;
|
vjp_kf *setup;
|
||||||
@@ -2132,8 +2123,8 @@ int vj_perform_sample_complete_buffers(veejay_t * info, int entry, const int ski
|
|||||||
VJFrameInfo *frameinfo;
|
VJFrameInfo *frameinfo;
|
||||||
video_playback_setup *settings = info->settings;
|
video_playback_setup *settings = info->settings;
|
||||||
int chain_fade =0;
|
int chain_fade =0;
|
||||||
if (sample_get_effect_status(info->uc->sample_id)!=1)
|
// if (sample_get_effect_status(info->uc->sample_id)!=1)
|
||||||
return 0; /* nothing to do */
|
// return 0; /* nothing to do */
|
||||||
setup = info->effect_info;
|
setup = info->effect_info;
|
||||||
|
|
||||||
frames[0] = info->effect_frame1;
|
frames[0] = info->effect_frame1;
|
||||||
@@ -2145,14 +2136,15 @@ int vj_perform_sample_complete_buffers(veejay_t * info, int entry, const int ski
|
|||||||
frames[0]->data[1] = primary_buffer[0]->Cb;
|
frames[0]->data[1] = primary_buffer[0]->Cb;
|
||||||
frames[0]->data[2] = primary_buffer[0]->Cr;
|
frames[0]->data[2] = primary_buffer[0]->Cr;
|
||||||
|
|
||||||
chain_fade = sample_get_fader_active(info->uc->sample_id);
|
// chain_fade = sample_get_fader_active(info->uc->sample_id);
|
||||||
if(chain_fade)
|
// if(chain_fade)
|
||||||
|
if(pvar_.fader_active)
|
||||||
vj_perform_pre_chain( info, frames[0] );
|
vj_perform_pre_chain( info, frames[0] );
|
||||||
|
|
||||||
for(chain_entry = 0; chain_entry < SAMPLE_MAX_EFFECTS; chain_entry++)
|
for(chain_entry = 0; chain_entry < SAMPLE_MAX_EFFECTS; chain_entry++)
|
||||||
{
|
{
|
||||||
vj_perform_render_chain_entry(
|
vj_perform_render_chain_entry(
|
||||||
info, chain_entry, skip_incr,0);
|
info, chain_entry, 0);
|
||||||
}
|
}
|
||||||
*hint444 = frames[0]->ssm;
|
*hint444 = frames[0]->ssm;
|
||||||
return 1;
|
return 1;
|
||||||
@@ -2167,10 +2159,10 @@ int vj_perform_sample_complete_buffers(veejay_t * info, int entry, const int ski
|
|||||||
*
|
*
|
||||||
* returns 0 on success
|
* returns 0 on success
|
||||||
*/
|
*/
|
||||||
int vj_perform_tag_complete_buffers(veejay_t * info, int entry, const int skip_incr, int *hint444 )
|
static int vj_perform_tag_complete_buffers(veejay_t * info, int entry, int *hint444 )
|
||||||
{
|
{
|
||||||
if (vj_tag_get_effect_status(info->uc->sample_id)!=1)
|
// if (vj_tag_get_effect_status(info->uc->sample_id)!=1)
|
||||||
return 0; /* nothing to do */
|
// return 0; /* nothing to do */
|
||||||
video_playback_setup *settings = info->settings;
|
video_playback_setup *settings = info->settings;
|
||||||
int chain_entry;
|
int chain_entry;
|
||||||
int chain_fade = 0;
|
int chain_fade = 0;
|
||||||
@@ -2183,15 +2175,16 @@ int vj_perform_tag_complete_buffers(veejay_t * info, int entry, const int skip_i
|
|||||||
frames[0]->data[1] = primary_buffer[0]->Cb;
|
frames[0]->data[1] = primary_buffer[0]->Cb;
|
||||||
frames[0]->data[2] = primary_buffer[0]->Cr;
|
frames[0]->data[2] = primary_buffer[0]->Cr;
|
||||||
|
|
||||||
chain_fade = vj_tag_get_fader_active(info->uc->sample_id);
|
// chain_fade = vj_tag_get_fader_active(info->uc->sample_id);
|
||||||
if(chain_fade)
|
// if(chain_fade)
|
||||||
|
if( pvar_.fader_active )
|
||||||
vj_perform_pre_chain( info, frames[0] );
|
vj_perform_pre_chain( info, frames[0] );
|
||||||
|
|
||||||
|
|
||||||
for(chain_entry = 0; chain_entry < SAMPLE_MAX_EFFECTS; chain_entry++)
|
for(chain_entry = 0; chain_entry < SAMPLE_MAX_EFFECTS; chain_entry++)
|
||||||
{
|
{
|
||||||
vj_perform_tag_render_chain_entry(
|
vj_perform_tag_render_chain_entry(
|
||||||
info, chain_entry, skip_incr, 0);
|
info, chain_entry, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
*hint444 = frames[0]->ssm;
|
*hint444 = frames[0]->ssm;
|
||||||
@@ -2199,12 +2192,7 @@ int vj_perform_tag_complete_buffers(veejay_t * info, int entry, const int skip_i
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
static void vj_perform_plain_fill_buffer(veejay_t * info, int entry)
|
||||||
* decodes plain video, does not touch frame_buffer
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
void vj_perform_plain_fill_buffer(veejay_t * info, int entry, int skip)
|
|
||||||
{
|
{
|
||||||
video_playback_setup *settings = (video_playback_setup*) info->settings;
|
video_playback_setup *settings = (video_playback_setup*) info->settings;
|
||||||
uint8_t *frame[3];
|
uint8_t *frame[3];
|
||||||
@@ -2231,7 +2219,7 @@ void vj_perform_plain_fill_buffer(veejay_t * info, int entry, int skip)
|
|||||||
|
|
||||||
|
|
||||||
static long last_rendered_frame = 0;
|
static long last_rendered_frame = 0;
|
||||||
int vj_perform_render_sample_frame(veejay_t *info, uint8_t *frame[3])
|
static int vj_perform_render_sample_frame(veejay_t *info, uint8_t *frame[3])
|
||||||
{
|
{
|
||||||
int audio_len = 0;
|
int audio_len = 0;
|
||||||
//uint8_t buf[16384];
|
//uint8_t buf[16384];
|
||||||
@@ -2251,7 +2239,7 @@ int vj_perform_render_sample_frame(veejay_t *info, uint8_t *frame[3])
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int vj_perform_render_tag_frame(veejay_t *info, uint8_t *frame[3])
|
static int vj_perform_render_tag_frame(veejay_t *info, uint8_t *frame[3])
|
||||||
{
|
{
|
||||||
long nframe = info->settings->current_frame_num;
|
long nframe = info->settings->current_frame_num;
|
||||||
int sample_id = info->uc->sample_id;
|
int sample_id = info->uc->sample_id;
|
||||||
@@ -2272,7 +2260,7 @@ int vj_perform_render_tag_frame(veejay_t *info, uint8_t *frame[3])
|
|||||||
return vj_tag_record_frame( sample_id, frame, NULL, 0);
|
return vj_tag_record_frame( sample_id, frame, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int vj_perform_record_commit_single(veejay_t *info, int entry)
|
static int vj_perform_record_commit_single(veejay_t *info, int entry)
|
||||||
{
|
{
|
||||||
//video_playback_setup *settings = info->settings;
|
//video_playback_setup *settings = info->settings;
|
||||||
|
|
||||||
@@ -2489,32 +2477,32 @@ void vj_perform_record_tag_frame(veejay_t *info, int entry) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_tag_fill_buffer(veejay_t * info, int entry)
|
static int vj_perform_tag_fill_buffer(veejay_t * info, int entry)
|
||||||
{
|
{
|
||||||
int error = 1;
|
int error = 1;
|
||||||
uint8_t *frame[3];
|
uint8_t *frame[3];
|
||||||
int type;
|
int type = pvar_.type;
|
||||||
int active;
|
int active = pvar_.active;
|
||||||
|
// int type;
|
||||||
|
// int active;
|
||||||
frame[0] = primary_buffer[0]->Y;
|
frame[0] = primary_buffer[0]->Y;
|
||||||
frame[1] = primary_buffer[0]->Cb;
|
frame[1] = primary_buffer[0]->Cb;
|
||||||
frame[2] = primary_buffer[0]->Cr;
|
frame[2] = primary_buffer[0]->Cr;
|
||||||
|
|
||||||
type = vj_tag_get_type( info->uc->sample_id );
|
// type = vj_tag_get_type( info->uc->sample_id );
|
||||||
active = vj_tag_get_active(info->uc->sample_id );
|
// active = vj_tag_get_active(info->uc->sample_id );
|
||||||
|
|
||||||
if( (type == VJ_TAG_TYPE_V4L || type == VJ_TAG_TYPE_NET || type == VJ_TAG_TYPE_MCAST || type == VJ_TAG_TYPE_PICTURE ) && active == 0)
|
if(!active)
|
||||||
{
|
{
|
||||||
|
if (type == VJ_TAG_TYPE_V4L || type == VJ_TAG_TYPE_NET || type == VJ_TAG_TYPE_MCAST || type == VJ_TAG_TYPE_PICTURE )
|
||||||
vj_tag_enable( info->uc->sample_id );
|
vj_tag_enable( info->uc->sample_id );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
if (vj_tag_get_active(info->uc->sample_id) == 1)
|
|
||||||
{
|
{
|
||||||
int tag_id = info->uc->sample_id;
|
if (vj_tag_get_frame(info->uc->sample_id, frame, NULL))
|
||||||
// get the frame
|
|
||||||
if (vj_tag_get_frame(tag_id, frame, NULL))
|
|
||||||
{
|
{
|
||||||
error = 0;
|
error = 0;
|
||||||
cached_tag_frames[0] = tag_id;
|
cached_tag_frames[0] = info->uc->sample_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2534,13 +2522,9 @@ int vj_perform_tag_fill_buffer(veejay_t * info, int entry)
|
|||||||
dummy_apply(&dumb,
|
dummy_apply(&dumb,
|
||||||
info->edit_list->video_width,
|
info->edit_list->video_width,
|
||||||
info->edit_list->video_height, VJ_EFFECT_COLOR_BLACK);
|
info->edit_list->video_height, VJ_EFFECT_COLOR_BLACK);
|
||||||
|
|
||||||
// veejay_msg(VEEJAY_MSG_DEBUG, "Error grabbing frame! Playing dummy (black)");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return (error == 1 ? -1 : 0);
|
return 1;
|
||||||
|
// return (error == 1 ? -1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* vj_perform_pre_fade:
|
/* vj_perform_pre_fade:
|
||||||
@@ -2573,7 +2557,8 @@ static void vj_perform_post_chain_sample(veejay_t *info, VJFrame *frame)
|
|||||||
uint8_t *Cr = frame->data[2];
|
uint8_t *Cr = frame->data[2];
|
||||||
|
|
||||||
int op_b;
|
int op_b;
|
||||||
int mode = sample_get_fader_active( info->uc->sample_id );
|
// int mode = sample_get_fader_active( info->uc->sample_id );
|
||||||
|
int mode = pvar_.fader_active;
|
||||||
|
|
||||||
if( !frame->ssm )
|
if( !frame->ssm )
|
||||||
vj_perform_supersample_chain( info, frame );
|
vj_perform_supersample_chain( info, frame );
|
||||||
@@ -2625,7 +2610,9 @@ static void vj_perform_post_chain_tag(veejay_t *info, VJFrame *frame)
|
|||||||
uint8_t *Cr = frame->data[2];
|
uint8_t *Cr = frame->data[2];
|
||||||
|
|
||||||
int op_b;
|
int op_b;
|
||||||
int mode = vj_tag_get_fader_active( info->uc->sample_id );
|
// int mode = vj_tag_get_fader_active( info->uc->sample_id );
|
||||||
|
|
||||||
|
int mode = pvar_.fader_active;
|
||||||
|
|
||||||
if( !frame->ssm )
|
if( !frame->ssm )
|
||||||
vj_perform_supersample_chain( info, frame );
|
vj_perform_supersample_chain( info, frame );
|
||||||
@@ -2772,14 +2759,16 @@ static int vj_perform_render_font( veejay_t *info, video_playback_setup *setting
|
|||||||
|
|
||||||
if(info->uc->playback_mode == VJ_PLAYBACK_MODE_TAG )
|
if(info->uc->playback_mode == VJ_PLAYBACK_MODE_TAG )
|
||||||
{
|
{
|
||||||
int chain_fade = vj_tag_get_fader_active(info->uc->sample_id);
|
// int chain_fade = vj_tag_get_fader_active(info->uc->sample_id);
|
||||||
if (chain_fade)
|
// if (chain_fade)
|
||||||
|
if( pvar_.fader_active )
|
||||||
vj_perform_post_chain_tag(info,frame);
|
vj_perform_post_chain_tag(info,frame);
|
||||||
}
|
}
|
||||||
else if( info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE )
|
else if( info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE )
|
||||||
{
|
{
|
||||||
int chain_fade = sample_get_fader_active(info->uc->sample_id);
|
// int chain_fade = sample_get_fader_active(info->uc->sample_id);
|
||||||
if (chain_fade)
|
// if (chain_fade)
|
||||||
|
if( pvar_.fader_active)
|
||||||
vj_perform_post_chain_sample(info,frame);
|
vj_perform_post_chain_sample(info,frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2863,53 +2852,73 @@ static int vj_perform_render_font( veejay_t *info, video_playback_setup *setting
|
|||||||
int vj_perform_queue_video_frame(veejay_t *info, int frame, const int skip_incr)
|
int vj_perform_queue_video_frame(veejay_t *info, int frame, const int skip_incr)
|
||||||
{
|
{
|
||||||
video_playback_setup *settings = info->settings;
|
video_playback_setup *settings = info->settings;
|
||||||
primary_frame_len[frame] = 0;
|
|
||||||
|
|
||||||
if(settings->offline_record)
|
if(settings->offline_record)
|
||||||
vj_perform_record_tag_frame(info,0);
|
vj_perform_record_tag_frame(info,0);
|
||||||
|
|
||||||
|
if(skip_incr)
|
||||||
|
return 1;
|
||||||
|
|
||||||
current_sampling_fmt_ = -1;
|
current_sampling_fmt_ = -1;
|
||||||
int is444 = 0;
|
int is444 = 0;
|
||||||
switch (info->uc->playback_mode) {
|
|
||||||
case VJ_PLAYBACK_MODE_SAMPLE:
|
veejay_memset( &pvar_, 0, sizeof(varcache_t));
|
||||||
vj_perform_plain_fill_buffer(info, frame, skip_incr); /* primary frame */
|
|
||||||
cached_sample_frames[0] = info->uc->sample_id;
|
switch (info->uc->playback_mode)
|
||||||
if(vj_perform_verify_rows(info,frame))
|
|
||||||
{
|
{
|
||||||
vj_perform_sample_complete_buffers(info, frame, skip_incr, &is444);
|
case VJ_PLAYBACK_MODE_SAMPLE:
|
||||||
}
|
|
||||||
|
sample_var( info->uc->sample_id, &(pvar_.type),
|
||||||
|
&(pvar_.fader_active),
|
||||||
|
&(pvar_.fx_status),
|
||||||
|
&(pvar_.enc_active),
|
||||||
|
&(pvar_.active)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
vj_perform_plain_fill_buffer(info, frame); /* primary frame */
|
||||||
|
cached_sample_frames[0] = info->uc->sample_id;
|
||||||
|
|
||||||
|
if(vj_perform_verify_rows(info,frame))
|
||||||
|
vj_perform_sample_complete_buffers(info, frame, &is444);
|
||||||
vj_perform_render_font( info, settings, is444 );
|
vj_perform_render_font( info, settings, is444 );
|
||||||
|
|
||||||
if(!skip_incr)
|
// if(sample_encoder_active(info->uc->sample_id))
|
||||||
if(sample_encoder_active(info->uc->sample_id))
|
if( pvar_.enc_active )
|
||||||
{
|
|
||||||
vj_perform_record_sample_frame(info,frame);
|
vj_perform_record_sample_frame(info,frame);
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VJ_PLAYBACK_MODE_PLAIN:
|
case VJ_PLAYBACK_MODE_PLAIN:
|
||||||
vj_perform_plain_fill_buffer(info, frame, skip_incr);
|
|
||||||
|
vj_perform_plain_fill_buffer(info, frame);
|
||||||
vj_perform_render_font(info, settings,is444);
|
vj_perform_render_font(info, settings,is444);
|
||||||
return 1;
|
return 1;
|
||||||
break;
|
break;
|
||||||
case VJ_PLAYBACK_MODE_TAG:
|
case VJ_PLAYBACK_MODE_TAG:
|
||||||
if (vj_perform_tag_fill_buffer(info, frame) == 0)
|
|
||||||
{ /* primary frame */
|
vj_tag_var( info->uc->sample_id,
|
||||||
|
&(pvar_.type),
|
||||||
|
&(pvar_.fader_active),
|
||||||
|
&(pvar_.fx_status),
|
||||||
|
&(pvar_.enc_active),
|
||||||
|
&(pvar_.active)
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
if (vj_perform_tag_fill_buffer(info, frame))
|
||||||
|
{
|
||||||
if(vj_perform_verify_rows(info,frame))
|
if(vj_perform_verify_rows(info,frame))
|
||||||
{
|
vj_perform_tag_complete_buffers(info, frame, &is444);
|
||||||
vj_perform_tag_complete_buffers(info, frame, skip_incr,&is444);
|
|
||||||
}
|
|
||||||
vj_perform_render_font(info,settings,is444);
|
vj_perform_render_font(info,settings,is444);
|
||||||
if(!skip_incr)
|
// if(vj_tag_encoder_active(info->uc->sample_id))
|
||||||
if(vj_tag_encoder_active(info->uc->sample_id))
|
if( pvar_.enc_active )
|
||||||
{
|
|
||||||
vj_perform_record_tag_frame(info,frame);
|
vj_perform_record_tag_frame(info,frame);
|
||||||
}
|
}
|
||||||
|
return 1;
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2919,11 +2928,10 @@ int vj_perform_queue_video_frame(veejay_t *info, int frame, const int skip_incr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_queue_frame(veejay_t * info, int skip_incr, int frame )
|
int vj_perform_queue_frame(veejay_t * info, int frame, int skip )
|
||||||
{
|
{
|
||||||
video_playback_setup *settings = (video_playback_setup*) info->settings;
|
video_playback_setup *settings = (video_playback_setup*) info->settings;
|
||||||
if(!skip_incr)
|
if(!skip)
|
||||||
{
|
|
||||||
switch(info->uc->playback_mode) {
|
switch(info->uc->playback_mode) {
|
||||||
case VJ_PLAYBACK_MODE_TAG:
|
case VJ_PLAYBACK_MODE_TAG:
|
||||||
vj_perform_increase_tag_frame(info, settings->current_playback_speed);
|
vj_perform_increase_tag_frame(info, settings->current_playback_speed);
|
||||||
@@ -2939,9 +2947,6 @@ int vj_perform_queue_frame(veejay_t * info, int skip_incr, int frame )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
vj_perform_clear_cache();
|
vj_perform_clear_cache();
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
__global_frame = 0;
|
__global_frame = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -13,108 +13,36 @@ VJFrame *vj_perform_init_plugin_frame(veejay_t *info);
|
|||||||
VJFrameInfo *vj_perform_init_plugin_frame_info(veejay_t *info);
|
VJFrameInfo *vj_perform_init_plugin_frame_info(veejay_t *info);
|
||||||
|
|
||||||
int vj_perform_init(veejay_t * info);
|
int vj_perform_init(veejay_t * info);
|
||||||
|
|
||||||
int vj_perform_init_audio(veejay_t * info);
|
int vj_perform_init_audio(veejay_t * info);
|
||||||
|
|
||||||
void vj_perform_free(veejay_t *info);
|
void vj_perform_free(veejay_t *info);
|
||||||
|
|
||||||
int vj_perform_audio_start(veejay_t * info);
|
int vj_perform_audio_start(veejay_t * info);
|
||||||
|
|
||||||
void vj_perform_audio_status(struct timeval tmpstmp, unsigned int nb_out,
|
void vj_perform_audio_status(struct timeval tmpstmp, unsigned int nb_out,
|
||||||
unsigned int nb_err);
|
unsigned int nb_err);
|
||||||
|
|
||||||
void vj_perform_audio_stop(veejay_t * info);
|
void vj_perform_audio_stop(veejay_t * info);
|
||||||
|
|
||||||
void vj_perform_get_primary_frame(veejay_t * info, uint8_t ** frame,
|
void vj_perform_get_primary_frame(veejay_t * info, uint8_t ** frame,
|
||||||
int entry);
|
int entry);
|
||||||
int vj_perform_send_primary_frame_s(veejay_t *info, int mcast);
|
int vj_perform_send_primary_frame_s(veejay_t *info, int mcast);
|
||||||
int vj_perform_tag_render_buffers(veejay_t * info, int processed_entry);
|
|
||||||
|
|
||||||
void vj_perform_get_primary_frame_420p(veejay_t *info, uint8_t **frame );
|
void vj_perform_get_primary_frame_420p(veejay_t *info, uint8_t **frame );
|
||||||
|
|
||||||
int vj_perform_sample_render_buffers(veejay_t * info,
|
|
||||||
int processed_entry);
|
|
||||||
|
|
||||||
int vj_perform_decode_primary(veejay_t * info, int entry);
|
|
||||||
|
|
||||||
int vj_perform_sample_decode_buffers(veejay_t * info, int entry);
|
|
||||||
|
|
||||||
int vj_perform_fill_audio_buffers(veejay_t *info, uint8_t *audio_buf);
|
int vj_perform_fill_audio_buffers(veejay_t *info, uint8_t *audio_buf);
|
||||||
|
|
||||||
int vj_perform_tag_decode_buffers(veejay_t * info, int entry);
|
int vj_perform_tag_decode_buffers(veejay_t * info, int entry);
|
||||||
|
|
||||||
int vj_perform_queue_frame(veejay_t * info, int skip_incr, int frame);
|
int vj_perform_queue_frame(veejay_t * info, int frame, int skip);
|
||||||
|
|
||||||
int vj_perform_queue_audio_frame(veejay_t * info, int frame);
|
int vj_perform_queue_audio_frame(veejay_t * info, int frame);
|
||||||
|
|
||||||
int vj_perform_queue_video_frame(veejay_t * info, int frame, int ks);
|
int vj_perform_queue_video_frame(veejay_t * info, int frame, int skip);
|
||||||
|
|
||||||
int vj_perform_pattern_decode_buffers(veejay_t * info, int entry);
|
|
||||||
|
|
||||||
int vj_perform_pattern_render_buffers(veejay_t * info, int entry);
|
|
||||||
|
|
||||||
void vj_perform_clear_frame_info(int entry);
|
void vj_perform_clear_frame_info(int entry);
|
||||||
|
|
||||||
void vj_perform_clear_cache(void);
|
|
||||||
|
|
||||||
int vj_perform_increase_tag_frame(veejay_t * info, long num);
|
|
||||||
|
|
||||||
int vj_perform_increase_plain_frame(veejay_t * info, long num);
|
|
||||||
int vj_perform_tag_fill_buffer(veejay_t * info, int entry);
|
|
||||||
|
|
||||||
int vj_perform_increase_tag_frame(veejay_t * info, long num);
|
|
||||||
|
|
||||||
int vj_perform_apply_secundary_tag(veejay_t * info, int sample_id,
|
|
||||||
int type, int chain_entry, int entry, const int a);
|
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_tag_fill_buffer(veejay_t * info, int entry);
|
|
||||||
|
|
||||||
|
|
||||||
void vj_perform_plain_fill_buffer(veejay_t * info, int entry, int skip);
|
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_tag_complete_buffers(veejay_t * info, int entry, const int skip, int *h);
|
|
||||||
|
|
||||||
int vj_perform_tag_fill_buffer(veejay_t * info, int entry);
|
|
||||||
|
|
||||||
int vj_perform_increase_sample_frame(veejay_t * info, long num);
|
|
||||||
|
|
||||||
int vj_perform_sample_complete_buffers(veejay_t * info, int entry, int skip_incr, int *h);
|
|
||||||
|
|
||||||
void vj_perform_use_cached_encoded_frame(veejay_t * info, int entry,
|
|
||||||
int centry, int chain_entry);
|
|
||||||
|
|
||||||
int vj_perform_apply_secundary_tag(veejay_t * info, int sample_id,
|
|
||||||
int type, int chain_entry, int entry, const int skip_incr);
|
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_decode_tag_secundary(veejay_t * info, int entry,
|
|
||||||
int chain_entry, int type,
|
|
||||||
int sample_id);
|
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_decode_secundary(veejay_t * info, int entry,
|
|
||||||
int chain_entry, int type, int sample_id);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void vj_perform_increase_pattern_frame(veejay_t * info, int num);
|
|
||||||
|
|
||||||
int vj_perform_apply_first(veejay_t *info, vjp_kf *todo_info, VJFrame **frames, VJFrameInfo *frameinfo, int e, int c, int n_frames );
|
|
||||||
|
|
||||||
|
|
||||||
void vj_perform_reverse_audio_frame(veejay_t * info, int len, uint8_t *buf );
|
|
||||||
|
|
||||||
int vj_perform_get_subtagframe(veejay_t * info, int sub_sample, int chain_entry );
|
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_get_subframe(veejay_t * info, int sub_sample,int chain_entyr, const int skip_incr );
|
|
||||||
|
|
||||||
int vj_perform_get_subframe_tag(veejay_t * info, int sub_sample, int chain_entry, const int skip_incr );
|
|
||||||
|
|
||||||
int vj_perform_render_sample_frame(veejay_t *info, uint8_t *frame[3]);
|
|
||||||
|
|
||||||
int vj_perform_apply_secundary(veejay_t * info, int sample_id, int type, int chain_entry, int entry, const int skip_incr );
|
|
||||||
|
|
||||||
int vj_perform_render_tag_frame(veejay_t *info, uint8_t *frame[3]);
|
|
||||||
|
|
||||||
int vj_perform_record_commit_single(veejay_t *info, int entry);
|
|
||||||
|
|
||||||
void vj_perform_record_stop(veejay_t *info);
|
void vj_perform_record_stop(veejay_t *info);
|
||||||
|
|
||||||
void vj_perform_record_sample_frame(veejay_t *info, int entry);
|
void vj_perform_record_sample_frame(veejay_t *info, int entry);
|
||||||
@@ -122,7 +50,6 @@ void vj_perform_record_sample_frame(veejay_t *info, int entry);
|
|||||||
void vj_perform_record_tag_frame(veejay_t *info, int entry);
|
void vj_perform_record_tag_frame(veejay_t *info, int entry);
|
||||||
void vj_perform_get_output_frame_420p( veejay_t *info, uint8_t **frame, int w, int h );
|
void vj_perform_get_output_frame_420p( veejay_t *info, uint8_t **frame, int w, int h );
|
||||||
|
|
||||||
|
|
||||||
int vj_perform_get_cropped_frame( veejay_t *info, uint8_t **frame, int crop );
|
int vj_perform_get_cropped_frame( veejay_t *info, uint8_t **frame, int crop );
|
||||||
int vj_perform_init_cropped_output_frame(veejay_t *info, VJFrame *src, int *dw, int *dh );
|
int vj_perform_init_cropped_output_frame(veejay_t *info, VJFrame *src, int *dw, int *dh );
|
||||||
void vj_perform_get_crop_dimensions(veejay_t *info, int *w, int *h);
|
void vj_perform_get_crop_dimensions(veejay_t *info, int *w, int *h);
|
||||||
|
|||||||
Reference in New Issue
Block a user