mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-24 00:30:01 +01:00
update baltan effect
This commit is contained in:
@@ -29,6 +29,8 @@
|
||||
|
||||
#define PLANES 50
|
||||
|
||||
|
||||
//Inspired by BaltanTV
|
||||
vj_effect *baltantv_init(int w, int h)
|
||||
{
|
||||
vj_effect *ve = (vj_effect *) vj_calloc(sizeof(vj_effect));
|
||||
@@ -39,21 +41,14 @@ vj_effect *baltantv_init(int w, int h)
|
||||
ve->limits[0][0] = 2;
|
||||
ve->limits[1][0] = PLANES;
|
||||
ve->limits[0][1] = 0;
|
||||
ve->limits[1][1] = 1;
|
||||
ve->defaults[0] = 8;
|
||||
ve->defaults[1] = 0;
|
||||
ve->limits[1][1] = PLANES/2;
|
||||
ve->defaults[0] = 4;
|
||||
ve->defaults[1] = 1;
|
||||
ve->description = "BaltanTV (EffecTV)";
|
||||
ve->sub_format = -1;
|
||||
ve->extra_frame = 0;
|
||||
ve->has_user = 0;
|
||||
ve->param_description = vje_build_param_list( ve->num_params, "Stride", "Mode" );
|
||||
|
||||
|
||||
ve->hints = vje_init_value_hint_list( ve->num_params );
|
||||
|
||||
vje_build_value_hint_list( ve->hints, ve->limits[1][1], 1, "Decaying", "Normal" );
|
||||
|
||||
|
||||
ve->param_description = vje_build_param_list( ve->num_params, "Stride", "Shift" );
|
||||
return ve;
|
||||
}
|
||||
|
||||
@@ -63,6 +58,12 @@ typedef struct {
|
||||
uint8_t *planetableY_;
|
||||
int8_t *planetableU_;
|
||||
int8_t *planetableV_;
|
||||
|
||||
uint8_t *currentY;
|
||||
int8_t *currentU;
|
||||
int8_t *currentV;
|
||||
|
||||
int stride;
|
||||
} baltantv_t;
|
||||
|
||||
void *baltantv_malloc(int w, int h)
|
||||
@@ -87,11 +88,16 @@ void *baltantv_malloc(int w, int h)
|
||||
if(!b->planetableV_) {
|
||||
free(b->planetableY_);
|
||||
free(b->planetableU_);
|
||||
free(b);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
veejay_memset( b->planetableU_, 0, PLANES * (w*h));
|
||||
veejay_memset( b->planetableV_, 0, PLANES * (w*h));
|
||||
b->currentY = (uint8_t*) vj_calloc(sizeof(uint8_t) * w * h );
|
||||
b->currentU = (int8_t*) vj_malloc(sizeof(int8_t) * w * h );
|
||||
b->currentV = (int8_t*) vj_malloc(sizeof(int8_t) * w * h );
|
||||
|
||||
veejay_memset( b->planetableU_, 128, w * h );
|
||||
veejay_memset( b->planetableV_, 128, w * h );
|
||||
|
||||
return (void*) b;
|
||||
}
|
||||
@@ -102,12 +108,15 @@ void baltantv_free(void *ptr)
|
||||
free(b->planetableY_);
|
||||
free(b->planetableU_);
|
||||
free(b->planetableV_);
|
||||
free(b->currentY);
|
||||
free(b->currentU);
|
||||
free(b->currentV);
|
||||
free(b);
|
||||
}
|
||||
|
||||
void baltantv_apply( void *ptr, VJFrame *frame, int *args) {
|
||||
int stride = args[0];
|
||||
int mode = args[1];
|
||||
int shift = args[1];
|
||||
|
||||
unsigned int i,cf;
|
||||
const int len = frame->len;
|
||||
@@ -121,95 +130,61 @@ void baltantv_apply( void *ptr, VJFrame *frame, int *args) {
|
||||
uint8_t *pDstY = b->planetableY_ + (b->plane_ * len);
|
||||
int8_t *pDstU = b->planetableU_ + (b->plane_ * uv_len);
|
||||
int8_t *pDstV = b->planetableV_ + (b->plane_ * uv_len);
|
||||
|
||||
uint8_t *cY = b->currentY;
|
||||
int8_t *cU = b->currentU;
|
||||
int8_t *cV = b->currentV;
|
||||
|
||||
uint32_t y;
|
||||
int32_t u,v;
|
||||
|
||||
|
||||
if( b->stride != stride ) {
|
||||
b->plane_ = 0;
|
||||
b->stride = stride;
|
||||
}
|
||||
|
||||
for( i = 0; i < len ; i ++ ) {
|
||||
pDstY[i] = (Y[i] >> 2 );
|
||||
pDstY[i] = Y[i];
|
||||
cY[i] = Y[i];
|
||||
}
|
||||
for( i = 0; i < uv_len; i ++ ) {
|
||||
pDstU[i] = ((U[i]-128)) >> 2;
|
||||
pDstV[i] = ((V[i]-128)) >> 2;
|
||||
pDstU[i] = (U[i]-128);
|
||||
pDstV[i] = (V[i]-128);
|
||||
}
|
||||
|
||||
cf = b->plane_ & (stride-1);
|
||||
uint8_t *pSrcY[4];
|
||||
int8_t *pSrcU[4];
|
||||
int8_t *pSrcV[4];
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
int offset = (b->plane_ - i + stride) % PLANES;
|
||||
offset = (offset + PLANES) % PLANES;
|
||||
pSrcY[i] = b->planetableY_ + (offset * len);
|
||||
pSrcU[i] = b->planetableU_ + (offset * uv_len);
|
||||
pSrcV[i] = b->planetableV_ + (offset * uv_len);
|
||||
}
|
||||
|
||||
uint32_t ySum, uSum, vSum;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
ySum = cY[i] + pSrcY[0][i] + pSrcY[1][i] + pSrcY[2][i] + pSrcY[3][i];
|
||||
Y[i] = (uint8_t)(ySum / 5);
|
||||
|
||||
uint8_t *pSrcY[4] = {
|
||||
b->planetableY_ + (cf * len),
|
||||
b->planetableY_ + ((cf+stride) * len),
|
||||
b->planetableY_ + ((cf+stride*2) * len),
|
||||
b->planetableY_ + ((cf+stride*3) * len)
|
||||
};
|
||||
int8_t *pSrcU[4] = {
|
||||
b->planetableU_ + (cf * uv_len),
|
||||
b->planetableU_ + ((cf+stride) * uv_len),
|
||||
b->planetableU_ + ((cf+stride*2) * uv_len),
|
||||
b->planetableU_ + ((cf+stride*3) * uv_len)
|
||||
};
|
||||
int8_t *pSrcV[4] = {
|
||||
b->planetableV_ + (cf * uv_len),
|
||||
b->planetableV_ + ((cf+stride) * uv_len),
|
||||
b->planetableV_ + ((cf+stride*2) * uv_len),
|
||||
b->planetableV_ + ((cf+stride*3) * uv_len)
|
||||
};
|
||||
uSum = pSrcU[0][i] + pSrcU[1][i] + pSrcU[2][i] + pSrcU[3][i];
|
||||
U[i] = 128 + (uSum / 4);
|
||||
|
||||
|
||||
if( mode == 0 )
|
||||
{
|
||||
for( i = 0; i < len; i ++ )
|
||||
{
|
||||
y = pSrcY[0][i] +
|
||||
pSrcY[1][i] +
|
||||
pSrcY[2][i] +
|
||||
pSrcY[3][i];
|
||||
Y[i] = (y>>2);
|
||||
pDstY[i] = (y >> 2 );
|
||||
}
|
||||
for( i = 0; i < uv_len; i ++ )
|
||||
{
|
||||
u = pSrcU[0][i] +
|
||||
pSrcU[1][i] +
|
||||
pSrcU[2][i] +
|
||||
pSrcU[3][i];
|
||||
U[i] = 128 + (u>>2);
|
||||
pDstU[i] = (u >> 2 );
|
||||
}
|
||||
for( i = 0; i < uv_len; i ++ )
|
||||
{
|
||||
v = pSrcV[0][i] +
|
||||
pSrcV[1][i] +
|
||||
pSrcV[2][i] +
|
||||
pSrcV[3][i];
|
||||
V[i] =128 + (v>>2);
|
||||
pDstV[i] = (v >> 2 );
|
||||
}
|
||||
vSum = pSrcV[0][i] + pSrcV[1][i] + pSrcV[2][i] + pSrcV[3][i];
|
||||
V[i] = 128 + (vSum / 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
for( i = 0; i < len ; i++ )
|
||||
{
|
||||
Y[i] = (pSrcY[0][i] +
|
||||
pSrcY[1][i] +
|
||||
pSrcY[2][i] +
|
||||
pSrcY[3][i]) >> 2;
|
||||
}
|
||||
for( i = 0; i < uv_len ; i++ )
|
||||
{
|
||||
U[i] = 128 +( (pSrcU[0][i] +
|
||||
pSrcU[1][i] +
|
||||
pSrcU[2][i] +
|
||||
pSrcU[3][i]) >> 2);
|
||||
}
|
||||
for( i = 0; i < uv_len ; i++ )
|
||||
{
|
||||
V[i] = 128 + ((pSrcV[0][i] +
|
||||
pSrcV[1][i] +
|
||||
pSrcV[2][i] +
|
||||
pSrcV[3][i]) >> 2);
|
||||
}
|
||||
|
||||
}
|
||||
int offset = (b->plane_ + shift + PLANES) % PLANES;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
b->planetableY_[offset * len + i] = Y[i];
|
||||
}
|
||||
for (int i = 0; i < uv_len; ++i) {
|
||||
b->planetableU_[offset * uv_len + i] = U[i] - 128;
|
||||
b->planetableV_[offset * uv_len + i] = V[i] - 128;
|
||||
}
|
||||
|
||||
b->plane_ ++;
|
||||
|
||||
b->plane_ = b->plane_ & (PLANES-1);
|
||||
b->plane_ = b->plane_ % stride;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user