Subversion Repositories external

Compare Revisions

Ignore whitespace Rev 368 → Rev 369

/branches/automake-1_1_5/cinelerra/hvirtual/quicktime/cmodel_float.c
New file
0,0 → 1,741
#include "cmodel_permutation.h"
#include "colormodels.h"
#include "workarounds.h"
 
// ********************************** RGB FLOAT -> *******************************
 
 
 
static inline void transfer_RGB_FLOAT_to_RGB8(unsigned char *(*output), float *input)
{
unsigned char r, g, b;
r = (unsigned char)(CLIP(input[0], 0, 1) * 0x3);
g = (unsigned char)(CLIP(input[1], 0, 1) * 0x7);
b = (unsigned char)(CLIP(input[2], 0, 1) * 0x3);
 
*(*output) = (r << 6) +
(g << 2) +
b;
(*output)++;
}
 
static inline void transfer_RGB_FLOAT_to_BGR565(unsigned char *(*output), float *input)
{
unsigned char r, g, b;
r = (unsigned char)(CLIP(input[0], 0, 1) * 0x1f);
g = (unsigned char)(CLIP(input[1], 0, 1) * 0x3f);
b = (unsigned char)(CLIP(input[2], 0, 1) * 0x1f);
 
*(uint16_t*)(*output) = (b << 11) |
(g << 5) |
r;
(*output) += 2;
}
 
static inline void transfer_RGB_FLOAT_to_RGB565(unsigned char *(*output), float *input)
{
unsigned char r, g, b;
r = (unsigned char)(CLIP(input[0], 0, 1) * 0x1f);
g = (unsigned char)(CLIP(input[1], 0, 1) * 0x3f);
b = (unsigned char)(CLIP(input[2], 0, 1) * 0x1f);
 
*(uint16_t*)(*output) = (r << 11) |
(g << 5) |
b;
(*output) += 2;
}
 
static inline void transfer_RGB_FLOAT_to_BGR888(unsigned char *(*output),
float *input)
{
unsigned char r = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
unsigned char g = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
unsigned char b = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
*(*output)++ = b;
*(*output)++ = g;
*(*output)++ = r;
}
 
static inline void transfer_RGB_FLOAT_to_RGB888(unsigned char *(*output),
float *input)
{
unsigned char r = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
unsigned char g = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
unsigned char b = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
*(*output)++ = r;
*(*output)++ = g;
*(*output)++ = b;
}
 
static inline void transfer_RGB_FLOAT_to_RGBA8888(unsigned char *(*output),
float *input)
{
unsigned char r = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
unsigned char g = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
unsigned char b = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
*(*output)++ = r;
*(*output)++ = g;
*(*output)++ = b;
*(*output)++ = 0xff;
}
 
static inline void transfer_RGB_FLOAT_to_RGBA_FLOAT(float *(*output),
float *input)
{
*(*output)++ = input[0];
*(*output)++ = input[1];
*(*output)++ = input[2];
*(*output)++ = 1.0;
}
 
static inline void transfer_RGB_FLOAT_to_BGR8888(unsigned char *(*output),
float *input)
{
unsigned char r = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
unsigned char g = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
unsigned char b = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
*(*output)++ = b;
*(*output)++ = g;
*(*output)++ = r;
(*output)++;
}
 
static inline void transfer_RGB_FLOAT_to_YUV888(unsigned char *(*output),
float *input)
{
int y, u, v, r, g, b;
r = (int)(CLIP(input[0], 0, 1) * 0xffff);
g = (int)(CLIP(input[1], 0, 1) * 0xffff);
b = (int)(CLIP(input[2], 0, 1) * 0xffff);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
*(*output)++ = y >> 8;
*(*output)++ = u >> 8;
*(*output)++ = v >> 8;
}
 
static inline void transfer_RGB_FLOAT_to_YUVA8888(unsigned char *(*output),
float *input)
{
int y, u, v, r, g, b;
 
r = (int)(CLIP(input[0], 0, 1) * 0xffff);
g = (int)(CLIP(input[1], 0, 1) * 0xffff);
b = (int)(CLIP(input[2], 0, 1) * 0xffff);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
*(*output)++ = y >> 8;
*(*output)++ = u >> 8;
*(*output)++ = v >> 8;
*(*output)++ = 255;
}
 
static inline void transfer_RGB_FLOAT_to_YUV161616(uint16_t *(*output),
float *input)
{
int y, u, v, r, g, b;
r = (int)(CLIP(input[0], 0, 1) * 0xffff);
g = (int)(CLIP(input[1], 0, 1) * 0xffff);
b = (int)(CLIP(input[2], 0, 1) * 0xffff);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
*(*output)++ = quicktime_copy(y);
*(*output)++ = quicktime_copy(u);
*(*output)++ = quicktime_copy(v);
}
 
static inline void transfer_RGB_FLOAT_to_YUVA16161616(uint16_t *(*output),
float *input)
{
int y, u, v, r, g, b;
 
r = (int)(CLIP(input[0], 0, 1) * 0xffff);
g = (int)(CLIP(input[1], 0, 1) * 0xffff);
b = (int)(CLIP(input[2], 0, 1) * 0xffff);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
*(*output)++ = quicktime_copy(y);
*(*output)++ = quicktime_copy(u);
*(*output)++ = quicktime_copy(v);
*(*output)++ = 0xffff;
}
 
 
static inline void transfer_RGB_FLOAT_to_YUV101010(unsigned char *(*output),
float *input)
{
int r, g, b;
int y, u, v;
 
r = (int)(CLIP(input[0], 0, 1) * 0xffff);
g = (int)(CLIP(input[1], 0, 1) * 0xffff);
b = (int)(CLIP(input[2], 0, 1) * 0xffff);
RGB_TO_YUV16(y, u, v, r, g, b);
WRITE_YUV101010(y, u, v);
}
 
static inline void transfer_RGB_FLOAT_to_VYU888(unsigned char *(*output),
float *input)
{
int y, u, v, r, g, b;
r = (int)(CLIP(input[0], 0, 1) * 0xffff);
g = (int)(CLIP(input[1], 0, 1) * 0xffff);
b = (int)(CLIP(input[2], 0, 1) * 0xffff);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
*(*output)++ = v >> 8;
*(*output)++ = y >> 8;
*(*output)++ = u >> 8;
}
 
static inline void transfer_RGB_FLOAT_to_UYVA8888(unsigned char *(*output),
float *input)
{
int y, u, v, r, g, b;
 
r = (int)(CLIP(input[0], 0, 1) * 0xffff);
g = (int)(CLIP(input[1], 0, 1) * 0xffff);
b = (int)(CLIP(input[2], 0, 1) * 0xffff);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
*(*output)++ = u >> 8;
*(*output)++ = y >> 8;
*(*output)++ = v >> 8;
*(*output)++ = 0xff;
}
 
 
static inline void transfer_RGB_FLOAT_to_YUV420P_YUV422P(unsigned char *output_y,
unsigned char *output_u,
unsigned char *output_v,
float *input,
int output_column)
{
int y, u, v, r, g, b;
r = (int)(CLIP(input[0], 0, 1) * 0xffff);
g = (int)(CLIP(input[1], 0, 1) * 0xffff);
b = (int)(CLIP(input[2], 0, 1) * 0xffff);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
output_y[output_column] = y >> 8;
output_u[output_column / 2] = u >> 8;
output_v[output_column / 2] = v >> 8;
}
 
static inline void transfer_RGB_FLOAT_to_YUV444P(unsigned char *output_y,
unsigned char *output_u,
unsigned char *output_v,
float *input,
int output_column)
{
int y, u, v, r, g, b;
r = (int)(CLIP(input[0], 0, 1) * 0xffff);
g = (int)(CLIP(input[1], 0, 1) * 0xffff);
b = (int)(CLIP(input[2], 0, 1) * 0xffff);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
output_y[output_column] = y >> 8;
output_u[output_column] = u >> 8;
output_v[output_column] = v >> 8;
}
 
 
 
 
 
 
 
 
 
 
// ****************************** RGBA FLOAT -> *********************************
 
static inline void transfer_RGBA_FLOAT_to_RGB8(unsigned char *(*output),
float *input)
{
uint32_t r, g, b, a;
a = (uint32_t)(CLIP(input[3], 0, 1) * 0x10000);
r = (uint32_t)(CLIP(input[0], 0, 1) * 0xff * a);
g = (uint32_t)(CLIP(input[1], 0, 1) * 0xff * a);
b = (uint32_t)(CLIP(input[2], 0, 1) * 0xff * a);
 
*(*output) = (unsigned char)(((r & 0xc00000) >> 16) +
((g & 0xe00000) >> 18) +
((b & 0xe00000) >> 21));
(*output)++;
}
 
static inline void transfer_RGBA_FLOAT_to_BGR565(unsigned char *(*output),
float *input)
{
uint32_t r, g, b, a;
a = (uint32_t)(CLIP(input[3], 0, 1) * 0x10000);
r = (uint32_t)(CLIP(input[0], 0, 1) * 0xff * a);
g = (uint32_t)(CLIP(input[1], 0, 1) * 0xff * a);
b = (uint32_t)(CLIP(input[2], 0, 1) * 0xff * a);
 
*(uint16_t*)(*output) = (uint16_t)(((b & 0xf80000) >> 8) +
((g & 0xfc0000) >> 13) +
((r & 0xf80000) >> 19));
(*output) += 2;
}
 
static inline void transfer_RGBA_FLOAT_to_RGB565(unsigned char *(*output),
float *input)
{
uint32_t r, g, b, a;
a = (uint32_t)(CLIP(input[3], 0, 1) * 0x10000);
r = (uint32_t)(CLIP(input[0], 0, 1) * 0xff * a);
g = (uint32_t)(CLIP(input[1], 0, 1) * 0xff * a);
b = (uint32_t)(CLIP(input[2], 0, 1) * 0xff * a);
 
*(uint16_t*)(*output) = (uint16_t)(((r & 0xf80000) >> 8) +
((g & 0xfc0000) >> 13) +
((b & 0xf80000) >> 19));
(*output) += 2;
}
 
static inline void transfer_RGBA_FLOAT_to_BGR888(unsigned char *(*output),
float *input)
{
uint32_t r, g, b, a;
a = (uint32_t)(CLIP(input[3], 0, 1) * 0xff);
r = (uint32_t)(CLIP(input[0], 0, 1) * a);
g = (uint32_t)(CLIP(input[1], 0, 1) * a);
b = (uint32_t)(CLIP(input[2], 0, 1) * a);
 
*(*output)++ = (unsigned char)b;
*(*output)++ = (unsigned char)g;
*(*output)++ = (unsigned char)r;
}
 
static inline void transfer_RGBA_FLOAT_to_RGB888(unsigned char *(*output),
float *input)
{
uint32_t r, g, b, a;
a = (uint32_t)(CLIP(input[3], 0, 1) * 0xff);
r = (uint32_t)(CLIP(input[0], 0, 1) * a);
g = (uint32_t)(CLIP(input[1], 0, 1) * a);
b = (uint32_t)(CLIP(input[2], 0, 1) * a);
 
*(*output)++ = (unsigned char)r;
*(*output)++ = (unsigned char)g;
*(*output)++ = (unsigned char)b;
}
 
static inline void transfer_RGBA_FLOAT_to_RGB_FLOAT(float *(*output),
float *input)
{
float a;
a = input[3];
 
*(*output)++ = input[0] * a;
*(*output)++ = input[1] * a;
*(*output)++ = input[2] * a;
}
 
 
static inline void transfer_RGBA_FLOAT_to_RGBA8888(unsigned char *(*output),
float *input)
{
*(*output)++ = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
*(*output)++ = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
*(*output)++ = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
*(*output)++ = (unsigned char)(CLIP(input[3], 0, 1) * 0xff);
}
 
 
static inline void transfer_RGBA_FLOAT_to_BGR8888(unsigned char *(*output),
float *input)
{
uint32_t r, g, b, a;
a = (uint32_t)(CLIP(input[3], 0, 1) * 0xff);
r = (uint32_t)(CLIP(input[0], 0, 1) * a);
g = (uint32_t)(CLIP(input[1], 0, 1) * a);
b = (uint32_t)(CLIP(input[2], 0, 1) * a);
 
*(*output)++ = (unsigned char)(b);
*(*output)++ = (unsigned char)(g);
*(*output)++ = (unsigned char)(r);
*(*output)++;
}
 
static inline void transfer_RGBA_FLOAT_to_YUV888(unsigned char *(*output),
float *input)
{
int y, u, v, r, g, b, a;
a = (int)(CLIP(input[3], 0, 1) * 0x101);
r = (int)(CLIP(input[0], 0, 1) * 0xff * a);
g = (int)(CLIP(input[1], 0, 1) * 0xff * a);
b = (int)(CLIP(input[2], 0, 1) * 0xff * a);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
*(*output)++ = y >> 8;
*(*output)++ = u >> 8;
*(*output)++ = v >> 8;
}
 
static inline void transfer_RGBA_FLOAT_to_YUVA8888(unsigned char *(*output),
float *input)
{
int y, u, v, r, g, b, a;
 
a = (int)(CLIP(input[3], 0, 1) * 0xff);
r = (int)(CLIP(input[0], 0, 1) * 0xffff);
g = (int)(CLIP(input[1], 0, 1) * 0xffff);
b = (int)(CLIP(input[2], 0, 1) * 0xffff);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
*(*output)++ = y >> 8;
*(*output)++ = u >> 8;
*(*output)++ = v >> 8;
*(*output)++ = a;
}
 
static inline void transfer_RGBA_FLOAT_to_YUV161616(uint16_t *(*output),
float *input)
{
int y, u, v, r, g, b, a;
 
a = (int)(CLIP(input[3], 0, 1) * 0x101);
r = (int)(CLIP(input[0], 0, 1) * 0xff * a);
g = (int)(CLIP(input[1], 0, 1) * 0xff * a);
b = (int)(CLIP(input[2], 0, 1) * 0xff * a);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
// GCC 3.3 optimization error
*(*output)++ = quicktime_copy(y);
*(*output)++ = quicktime_copy(u);
*(*output)++ = quicktime_copy(v);
}
 
static inline void transfer_RGBA_FLOAT_to_YUVA16161616(uint16_t *(*output),
float *input)
{
int y, u, v, r, g, b, a;
 
r = (int)(CLIP(input[0], 0, 1) * 0xffff);
g = (int)(CLIP(input[1], 0, 1) * 0xffff);
b = (int)(CLIP(input[2], 0, 1) * 0xffff);
a = (int)(CLIP(input[3], 0, 1) * 0xffff);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
// GCC 3.3 optimization error
*(*output)++ = quicktime_copy(y);
*(*output)++ = quicktime_copy(u);
*(*output)++ = quicktime_copy(v);
*(*output)++ = quicktime_copy(a);
}
 
static inline void transfer_RGBA_FLOAT_to_YUV101010(unsigned char *(*output),
float *input)
{
int y, u, v, r, g, b, a;
 
a = (int)(CLIP(input[3], 0, 1) * 0x101);
r = (int)(CLIP(input[0], 0, 1) * 0xff * a);
g = (int)(CLIP(input[1], 0, 1) * 0xff * a);
b = (int)(CLIP(input[2], 0, 1) * 0xff * a);
 
RGB_TO_YUV16(y, u, v, r, g, b);
WRITE_YUV101010(y, u, v);
}
 
 
static inline void transfer_RGBA_FLOAT_to_YUV420P_YUV422P(unsigned char *output_y,
unsigned char *output_u,
unsigned char *output_v,
float *input,
int output_column)
{
int y, u, v, r, g, b, a;
a = (int)(CLIP(input[3], 0, 1) * 0x101);
r = (int)(CLIP(input[0], 0, 1) * 0xff * a);
g = (int)(CLIP(input[1], 0, 1) * 0xff * a);
b = (int)(CLIP(input[2], 0, 1) * 0xff * a);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
output_y[output_column] = y >> 8;
output_u[output_column / 2] = u >> 8;
output_v[output_column / 2] = v >> 8;
}
 
static inline void transfer_RGBA_FLOAT_to_YUV444P(unsigned char *output_y,
unsigned char *output_u,
unsigned char *output_v,
float *input,
int output_column)
{
int y, u, v, r, g, b, a;
a = (int)(CLIP(input[3], 0, 1) * 0x101);
r = (int)(CLIP(input[0], 0, 1) * 0xff * a);
g = (int)(CLIP(input[1], 0, 1) * 0xff * a);
b = (int)(CLIP(input[2], 0, 1) * 0xff * a);
 
RGB_TO_YUV16(y, u, v, r, g, b);
 
output_y[output_column] = y >> 8;
output_u[output_column] = u >> 8;
output_v[output_column] = v >> 8;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#define TRANSFER_DEFAULT(output, \
input, \
y_in_offset, \
u_in_offset, \
v_in_offset, \
input_column) \
{ \
register int i, j; \
\
switch(in_colormodel) \
{ \
case BC_RGB_FLOAT: \
switch(out_colormodel) \
{ \
case BC_RGB8: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_RGB8((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_BGR565: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_BGR565((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_RGB565: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_RGB565((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_BGR888: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_BGR888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_BGR8888: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_BGR8888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_RGB888: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_RGB888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_RGBA8888: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_RGBA8888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_RGBA_FLOAT: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_RGBA_FLOAT((float**)(output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV888: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_YUV888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUVA8888: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_YUVA8888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV161616: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_YUV161616((uint16_t**)(output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUVA16161616: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_YUVA16161616((uint16_t**)(output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV101010: \
TRANSFER_FRAME_HEAD \
transfer_RGB_FLOAT_to_YUV101010((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV420P: \
TRANSFER_YUV420P_OUT_HEAD \
transfer_RGB_FLOAT_to_YUV420P_YUV422P(output_y, \
output_u, \
output_v, \
(float*)(input), \
j); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV422P: \
TRANSFER_YUV422P_OUT_HEAD \
transfer_RGB_FLOAT_to_YUV420P_YUV422P(output_y, \
output_u, \
output_v, \
(float*)(input), \
j); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV444P: \
TRANSFER_YUV444P_OUT_HEAD \
transfer_RGB_FLOAT_to_YUV444P(output_y, \
output_u, \
output_v, \
(float*)(input), \
j); \
TRANSFER_FRAME_TAIL \
break; \
} \
break; \
\
case BC_RGBA_FLOAT: \
switch(out_colormodel) \
{ \
case BC_RGB8: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_RGB8((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_BGR565: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_BGR565((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_RGB565: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_RGB565((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_BGR888: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_BGR888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_BGR8888: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_BGR8888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_RGB888: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_RGB888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_RGB_FLOAT: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_RGB_FLOAT((float**)(output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_RGBA8888: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_RGBA8888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV888: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_YUV888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUVA8888: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_YUVA8888((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV161616: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_YUV161616((uint16_t**)(output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUVA16161616: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_YUVA16161616((uint16_t**)(output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV101010: \
TRANSFER_FRAME_HEAD \
transfer_RGBA_FLOAT_to_YUV101010((output), (float*)(input)); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV420P: \
TRANSFER_YUV420P_OUT_HEAD \
transfer_RGBA_FLOAT_to_YUV420P_YUV422P(output_y, \
output_u, \
output_v, \
(float*)(input), \
j); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV422P: \
TRANSFER_YUV422P_OUT_HEAD \
transfer_RGBA_FLOAT_to_YUV420P_YUV422P(output_y, \
output_u, \
output_v, \
(float*)(input), \
j); \
TRANSFER_FRAME_TAIL \
break; \
case BC_YUV444P: \
TRANSFER_YUV444P_OUT_HEAD \
transfer_RGBA_FLOAT_to_YUV444P(output_y, \
output_u, \
output_v, \
(float*)(input), \
j); \
TRANSFER_FRAME_TAIL \
break; \
} \
break; \
} \
}
 
 
 
void cmodel_float(PERMUTATION_ARGS)
{
if(scale)
{
TRANSFER_DEFAULT(&output_row,
input_row + column_table[j] * in_pixelsize,
0,
0,
0,
0);
}
else
{
TRANSFER_DEFAULT(&output_row,
input_row + j * in_pixelsize,
0,
0,
0,
0);
}
}
 
/branches/automake-1_1_5/cinelerra/hvirtual/quicktime/Makefile.faac
New file
0,0 → 1,23
FAAC_OBJS := \
$(OBJDIR)/$(FAAC_DIR)/libfaac/aacquant.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/backpred.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/bitstream.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/channels.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/fft.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/filtbank.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/frame.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/huffman.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/ltp.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/midside.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/psychkni.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/tns.o \
$(OBJDIR)/$(FAAC_DIR)/libfaac/util.o
 
 
 
FAAC_CFLAGS := $(CFLAGS) -I$(FAAC_DIR) -I$(FAAC_DIR)/libfaac -I$(FAAC_DIR)/include -DHAVE_CONFIG_H
 
DIRS += $(OBJDIR)/$(FAAC_DIR) $(OBJDIR)/$(FAAC_DIR)/libfaac
 
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/quicktime/depend.faac
New file
0,0 → 1,15
$(OBJDIR)/$(FAAC_DIR)/libfaac/aacquant.o: $(FAAC_DIR)/libfaac/aacquant.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/backpred.o: $(FAAC_DIR)/libfaac/backpred.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/bitstream.o: $(FAAC_DIR)/libfaac/bitstream.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/channels.o: $(FAAC_DIR)/libfaac/channels.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/fft.o: $(FAAC_DIR)/libfaac/fft.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/filtbank.o: $(FAAC_DIR)/libfaac/filtbank.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/frame.o: $(FAAC_DIR)/libfaac/frame.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/huffman.o: $(FAAC_DIR)/libfaac/huffman.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/ltp.o: $(FAAC_DIR)/libfaac/ltp.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/midside.o: $(FAAC_DIR)/libfaac/midside.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/psychkni.o: $(FAAC_DIR)/libfaac/psychkni.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/tns.o: $(FAAC_DIR)/libfaac/tns.c
$(OBJDIR)/$(FAAC_DIR)/libfaac/util.o: $(FAAC_DIR)/libfaac/util.c
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/guicast/images/xmeter_white_png.h
New file
0,0 → 1,23
#ifndef XMETER_WHITE_PNG_H
#define XMETER_WHITE_PNG_H
 
static unsigned char xmeter_white_png[] =
{
0x00, 0x00, 0x00, 0xd7,
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x06, 0x00, 0x00, 0x00, 0xb8, 0x12, 0xac,
0x71, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9,
0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00,
0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45,
0x07, 0xd4, 0x06, 0x0b, 0x05, 0x21, 0x03, 0x0e, 0x67, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x1d, 0x74,
0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74,
0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50,
0xef, 0x64, 0x25, 0x6e, 0x00, 0x00, 0x00, 0x3b, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0xd7,
0x31, 0x11, 0x00, 0x30, 0x0c, 0xc3, 0x40, 0xa5, 0x17, 0x0c, 0xe1, 0x8f, 0xaf, 0x24, 0x52, 0x12,
0xdd, 0x2c, 0x31, 0xf8, 0xcd, 0x2e, 0x60, 0x09, 0xaa, 0x01, 0x96, 0x1b, 0x81, 0x2d, 0x86, 0x43,
0x58, 0x82, 0x05, 0x0b, 0x16, 0x2c, 0x58, 0xb0, 0x60, 0xc1, 0x82, 0x05, 0x7f, 0xdb, 0xd3, 0x61,
0x6f, 0xe9, 0x01, 0x31, 0xf1, 0x04, 0x1d, 0xd8, 0x15, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x49,
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/guicast/images/ymeter_white_png.h
New file
0,0 → 1,23
#ifndef YMETER_WHITE_PNG_H
#define YMETER_WHITE_PNG_H
 
static unsigned char ymeter_white_png[] =
{
0x00, 0x00, 0x00, 0xd5,
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x08, 0x06, 0x00, 0x00, 0x00, 0xb9, 0x38, 0xe0,
0x49, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9,
0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00,
0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45,
0x07, 0xd4, 0x06, 0x0b, 0x05, 0x21, 0x02, 0x79, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x1d, 0x74,
0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74,
0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50,
0xef, 0x64, 0x25, 0x6e, 0x00, 0x00, 0x00, 0x39, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0xd7,
0x41, 0x11, 0x00, 0x20, 0x0c, 0xc4, 0xc0, 0x1c, 0x83, 0x06, 0xfc, 0xeb, 0xc3, 0x44, 0xab, 0x01,
0xfa, 0x4d, 0xfe, 0x2b, 0x20, 0x01, 0x8a, 0xcf, 0x36, 0x40, 0x71, 0x9f, 0x61, 0x38, 0x2c, 0x06,
0x89, 0xc5, 0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0x62, 0xb1, 0x78, 0x86, 0x33, 0xd9, 0xc1,
0x06, 0x06, 0x82, 0x04, 0x77, 0xbc, 0xf4, 0xc2, 0x37, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
0x44, 0xae, 0x42, 0x60, 0x82
};
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/guicast/images/xmeter_white.png
New file
0,0 → 1,4
‰PNG

+IHDR<¸¬qbKGDùC» pHYs  šœtIMEÔ !gŠtEXtCommentCreated with The GIMPïd%n;IDATxÚí×10 Ã@¥ Ꮿ$RÝ,1øÍ.` ª–-†CX‚ ,X°`Á‚ÛÓaoé1ñØ.IEND®B`‚
\ No newline at end of file
/branches/automake-1_1_5/cinelerra/hvirtual/guicast/images/ymeter_white.png
New file
0,0 → 1,4
‰PNG

+IHDR<¹8àIbKGDùC» pHYs  šœtIMEÔ !y`0tEXtCommentCreated with The GIMPïd%n9IDATxÚí×A ÄÀƒüëÃD«úMþ+ ŠÏ6@qŸa8,‰Åb±X,‹Åb±x†3ÙÁ‚w¼ôÂ7IEND®B`‚
\ No newline at end of file
/branches/automake-1_1_5/cinelerra/hvirtual/guicast/bcwindowevents.inc
New file
0,0 → 1,9
#ifndef BCWINDOWEVENTS_INC
#define BCWINDOWEVENTS_INC
 
class BC_WindowEvents;
 
 
 
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/guicast/bcwindowevents.C
New file
0,0 → 1,38
#include "bcwindowbase.h"
#include "bcwindowevents.h"
 
BC_WindowEvents::BC_WindowEvents(BC_WindowBase *window)
: Thread(1, 0, 0)
{
this->window = window;
done = 0;
}
 
BC_WindowEvents::~BC_WindowEvents()
{
done = 1;
Thread::join();
}
 
void BC_WindowEvents::start()
{
done = 0;
Thread::start();
}
 
 
void BC_WindowEvents::run()
{
XEvent *event;
while(!done)
{
event = new XEvent;
// Can't cancel in XNextEvent because X server never figures out it's not
// listening anymore and XCloseDisplay locks up.
XNextEvent(window->display, event);
window->put_event(event);
}
}
 
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/guicast/bcwindowevents.h
New file
0,0 → 1,30
#ifndef BCWINDOWEVENTS_H
#define BCWINDOWEVENTS_H
 
// Thread running parallel to run_window which listens for X server events
// only. Hopefully, having it as the only thing calling the X server without
// locks won't crash. Previously, events were dispatched from BC_Repeater
// asynchronous to the events recieved by XNextEvent. BC_Repeater tended to
// lock up for no reason.
 
 
#include "bcwindowbase.inc"
#include "thread.h"
 
 
 
class BC_WindowEvents : public Thread
{
public:
BC_WindowEvents(BC_WindowBase *window);
~BC_WindowEvents();
void start();
void run();
BC_WindowBase *window;
int done;
};
 
 
 
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/tests/scalelinear.xml
New file
0,0 → 1,246
<?xml version="1.0"?>
<EDL>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=0.0000000000000000e+00 LOOP_END=0.0000000000000000e+00 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=1.1386374999999999e+01 SELECTION_END=1.1386374999999999e+01 CLIP_TITLE=/mov/test.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=0 ZOOM_SAMPLE=2048 ZOOMY=64 ZOOM_TRACK=64 PREVIEW_START=0.0000000000000000e+00 PREVIEW_END=4.2751041666666666e+01>
 
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=100 ASSET_COLUMN1=100 SHOW_FADE=0 SHOW_PAN=1 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=1 SHOW_CAMERA=1 SHOW_PROJECTOR=1 SHOW_MODE=1 SHOW_MASK=0 SHOW_CZOOM=0 SHOW_PZOOM=0 AUTO_KEYFRAMES=0 AUTOS_FOLLOW_EDITS=1 BRENDER_START=0.0000000000000000e+00 CROP_X1=0 CROP_Y1=0 CROP_X2=320 CROP_Y2=240 CURRENT_FOLDER="Video Effects" CURSOR_ON_FRAMES=1 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=0 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=4294965951 CWINDOW_YSCROLL=4294966377 CWINDOW_ZOOM=2.500000e-01 DEFAULT_ATRANSITION=Crossfade DEFAULT_VTRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=1.0000000000000000e+00 EDITING_MODE=1 FOLDERLIST_FORMAT=1 HIGHLIGHTED_TRACK=4 LABELS_FOLLOW_EDITS=1 MPEG4_DEBLOCK=1 PLUGINS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=1 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 NUDGE_SECONDS=1 TOOL_WINDOW=1 VWINDOW_METER=1 VWINDOW_FOLDER=VWINDOW_SOURCE=4294967295 VWINDOW_SOURCE=4294967295 VWINDOW_ZOOM=1.000000e+00>
 
<VIDEO INTERPOLATION_TYPE=2 COLORMODEL="YUVA-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.3976023976023978e+01 FRAMES_PER_FOOT=1.600000e+01 OUTPUTW=1920 OUTPUTH=1080 ASPECTW=1.600000e+01 ASPECTH=9.000000e+00>
 
<AUDIO SAMPLERATE=48000 CHANNELS=2 ACHANNEL_ANGLE_0=180 ACHANNEL_ANGLE_1=0>
 
<FOLDER>Clips</FOLDER>
<FOLDER>Media</FOLDER>
<ASSETS>
<ASSET SRC=/mov/hoa15.toc>
<FOLDER>Media</FOLDER>
<FORMAT TYPE=MPEG USE_HEADER=1>
<AUDIO CHANNELS=2 RATE=48000 BITS=0 BYTE_ORDER=0 SIGNED=0 HEADER=0 DITHER=0 ACODEC=twos AUDIO_LENGTH=4128768 AMPEG_BITRATE=256 AMPEG_DERIVATIVE=3 VORBIS_VBR=0 VORBIS_MIN_BITRATE=4294967295 VORBIS_BITRATE=128000 VORBIS_MAX_BITRATE=4294967295 MP3_BITRATE=256000>
<VIDEO HEIGHT=1080 WIDTH=1920 LAYERS=1 FRAMERATE=2.9970029970029969e+01 VCODEC=yuv2 VIDEO_LENGTH=2560 JPEG_QUALITY=100 ASPECT_RATIO=-1.0000000000000000e+00 VMPEG_IFRAME_DISTANCE=45 VMPEG_BFRAME_DISTANCE=0 VMPEG_PROGRESSIVE=0 VMPEG_DENOISE=1 VMPEG_BITRATE=1000000 VMPEG_DERIVATIVE=1 VMPEG_QUANTIZATION=15 VMPEG_CMODEL=0 VMPEG_FIX_BITRATE=0 VMPEG_SEQ_CODES=0 DIVX_BITRATE=2000000 DIVX_RC_PERIOD=50 DIVX_RC_REACTION_RATIO=45 DIVX_RC_REACTION_PERIOD=10 DIVX_MAX_KEY_INTERVAL=250 DIVX_MAX_QUANTIZER=31 DIVX_MIN_QUANTIZER=1 DIVX_QUANTIZER=15 DIVX_QUALITY=5 DIVX_FIX_BITRATE=1 DIVX_USE_DEBLOCKING=1 MS_BITRATE=1000000 MS_BITRATE_TOLERANCE=500000 MS_INTERLACED=0 MS_QUANTIZATION=10 MS_GOP_SIZE=45 MS_FIX_BITRATE=1 AC3_BITRATE=128 PNG_USE_ALPHA=0>
</ASSET>
<ASSET SRC=/mov/white.png>
<FOLDER>Media</FOLDER>
<FORMAT TYPE=PNG USE_HEADER=1>
<AUDIO_OMIT CHANNELS=0 RATE=0 BITS=0 BYTE_ORDER=0 SIGNED=0 HEADER=0 DITHER=0 ACODEC=twos AUDIO_LENGTH=0 AMPEG_BITRATE=256 AMPEG_DERIVATIVE=3 VORBIS_VBR=0 VORBIS_MIN_BITRATE=4294967295 VORBIS_BITRATE=128000 VORBIS_MAX_BITRATE=4294967295 MP3_BITRATE=256000>
<VIDEO HEIGHT=1080 WIDTH=1920 LAYERS=1 FRAMERATE=1.0000000000000000e+00 VCODEC=yuv2 VIDEO_LENGTH=-1 JPEG_QUALITY=100 ASPECT_RATIO=-1.0000000000000000e+00 VMPEG_IFRAME_DISTANCE=45 VMPEG_BFRAME_DISTANCE=0 VMPEG_PROGRESSIVE=0 VMPEG_DENOISE=1 VMPEG_BITRATE=1000000 VMPEG_DERIVATIVE=1 VMPEG_QUANTIZATION=15 VMPEG_CMODEL=0 VMPEG_FIX_BITRATE=0 VMPEG_SEQ_CODES=0 DIVX_BITRATE=2000000 DIVX_RC_PERIOD=50 DIVX_RC_REACTION_RATIO=45 DIVX_RC_REACTION_PERIOD=10 DIVX_MAX_KEY_INTERVAL=250 DIVX_MAX_QUANTIZER=31 DIVX_MIN_QUANTIZER=1 DIVX_QUANTIZER=15 DIVX_QUALITY=5 DIVX_FIX_BITRATE=1 DIVX_USE_DEBLOCKING=1 MS_BITRATE=1000000 MS_BITRATE_TOLERANCE=500000 MS_INTERLACED=0 MS_QUANTIZATION=10 MS_GOP_SIZE=45 MS_FIX_BITRATE=1 AC3_BITRATE=128 PNG_USE_ALPHA=0>
</ASSET>
<ASSET SRC=/mov/shadow.png>
<FOLDER>Media</FOLDER>
<FORMAT TYPE=PNG USE_HEADER=1>
<AUDIO_OMIT CHANNELS=0 RATE=0 BITS=0 BYTE_ORDER=0 SIGNED=0 HEADER=0 DITHER=0 ACODEC=twos AUDIO_LENGTH=0 AMPEG_BITRATE=256 AMPEG_DERIVATIVE=3 VORBIS_VBR=0 VORBIS_MIN_BITRATE=4294967295 VORBIS_BITRATE=128000 VORBIS_MAX_BITRATE=4294967295 MP3_BITRATE=256000>
<VIDEO HEIGHT=1080 WIDTH=1920 LAYERS=1 FRAMERATE=1.0000000000000000e+00 VCODEC=yuv2 VIDEO_LENGTH=-1 JPEG_QUALITY=100 ASPECT_RATIO=-1.0000000000000000e+00 VMPEG_IFRAME_DISTANCE=45 VMPEG_BFRAME_DISTANCE=0 VMPEG_PROGRESSIVE=0 VMPEG_DENOISE=1 VMPEG_BITRATE=1000000 VMPEG_DERIVATIVE=1 VMPEG_QUANTIZATION=15 VMPEG_CMODEL=0 VMPEG_FIX_BITRATE=0 VMPEG_SEQ_CODES=0 DIVX_BITRATE=2000000 DIVX_RC_PERIOD=50 DIVX_RC_REACTION_RATIO=45 DIVX_RC_REACTION_PERIOD=10 DIVX_MAX_KEY_INTERVAL=250 DIVX_MAX_QUANTIZER=31 DIVX_MIN_QUANTIZER=1 DIVX_QUANTIZER=15 DIVX_QUALITY=5 DIVX_FIX_BITRATE=1 DIVX_USE_DEBLOCKING=1 MS_BITRATE=1000000 MS_BITRATE_TOLERANCE=500000 MS_INTERLACED=0 MS_QUANTIZATION=10 MS_GOP_SIZE=45 MS_FIX_BITRATE=1 AC3_BITRATE=128 PNG_USE_ALPHA=0>
</ASSET>
</ASSETS>
 
 
 
<LABELS>
</LABELS>
 
<PRESENTATIONS>
</PRESENTATIONS>
 
<TRACK RECORD=0 NUDGE=0 PLAY=0 GANG=0 DRAW=0 EXPAND=1 TRACK_W=1920 TRACK_H=1080 TYPE=VIDEO>
<TITLE>Video 2</TITLE>
</TITLE TYPE=VIDEO>
<EDITS>
<EDIT STARTSOURCE=1047 CHANNEL=0 LENGTH=1001><FILE SRC=/mov/hoa15.toc></EDIT>
</EDITS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+02 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<CAMERAAUTOS>
<AUTO POSITION=0 CENTER_X=0.000000e+00 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
</CAMERAAUTOS>
<PROJECTORAUTOS>
<AUTO POSITION=0 CENTER_X=4.240000e+02 CENTER_Y=2.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
</PROJECTORAUTOS>
<MODEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MODEAUTOS>
<MASKAUTOS>
<AUTO MODE=1 VALUE=100 FEATHER=0.000000e+00 POSITION=0>
 
</AUTO>
</MASKAUTOS>
<CZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</CZOOMAUTOS>
<PZOOMAUTOS>
<AUTO POSITION=0 VALUE=4.687500e-01 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</PZOOMAUTOS>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=1001 TYPE=1 TITLE="Inverse Telecine">
<IN><OUT><ON>
<KEYFRAME POSITION=0 DEFAULT=1><IVTC FRAME_OFFSET=0 FIRST_FIELD=0 AUTOMATIC=1 AUTO_THRESHOLD=2.000000e+00 PATTERN=2></KEYFRAME>
</PLUGIN>
</PLUGINSET>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=1001 TYPE=1 TITLE=Decimate>
<IN><OUT><ON>
<KEYFRAME POSITION=0 DEFAULT=1><DECIMATE INPUT_RATE=2.9970029970029969e+01></KEYFRAME>
</PLUGIN>
</PLUGINSET>
</TRACK>
 
 
 
<TRACK RECORD=0 NUDGE=0 PLAY=0 GANG=0 DRAW=0 EXPAND=1 TRACK_W=1920 TRACK_H=1080 TYPE=VIDEO>
<TITLE>Video 1</TITLE>
</TITLE TYPE=VIDEO>
<EDITS>
<EDIT STARTSOURCE=30 CHANNEL=0 LENGTH=1017><FILE SRC=/mov/hoa15.toc></EDIT>
</EDITS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+02 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<CAMERAAUTOS>
<AUTO POSITION=0 CENTER_X=0.000000e+00 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
</CAMERAAUTOS>
<PROJECTORAUTOS>
<AUTO POSITION=0 CENTER_X=-5.000000e+02 CENTER_Y=6.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
</PROJECTORAUTOS>
<MODEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MODEAUTOS>
<MASKAUTOS>
<AUTO MODE=1 VALUE=100 FEATHER=0.000000e+00 POSITION=0>
 
</AUTO>
</MASKAUTOS>
<CZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</CZOOMAUTOS>
<PZOOMAUTOS>
<AUTO POSITION=0 VALUE=4.687500e-01 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</PZOOMAUTOS>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=1017 TYPE=1 TITLE="Inverse Telecine">
<IN><OUT><ON>
<KEYFRAME POSITION=0 DEFAULT=1><IVTC FRAME_OFFSET=0 FIRST_FIELD=0 AUTOMATIC=1 AUTO_THRESHOLD=2.000000e+00 PATTERN=2></KEYFRAME>
</PLUGIN>
</PLUGINSET>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=1017 TYPE=1 TITLE=Decimate>
<IN><OUT><ON>
<KEYFRAME POSITION=0 DEFAULT=1><DECIMATE INPUT_RATE=2.9970029970029969e+01></KEYFRAME>
</PLUGIN>
</PLUGINSET>
</TRACK>
 
 
 
<TRACK RECORD=0 NUDGE=0 PLAY=1 GANG=0 DRAW=1 EXPAND=0 TRACK_W=1920 TRACK_H=1080 TYPE=VIDEO>
<TITLE>Video 5</TITLE>
</TITLE TYPE=VIDEO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=1005><FILE SRC=/mov/shadow.png></EDIT>
</EDITS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=5.200000e+01 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<CAMERAAUTOS>
<AUTO POSITION=0 CENTER_X=0.000000e+00 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
</CAMERAAUTOS>
<PROJECTORAUTOS>
<AUTO POSITION=0 CENTER_X=4.780000e+02 CENTER_Y=5.800000e+01 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
</PROJECTORAUTOS>
<MODEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MODEAUTOS>
<MASKAUTOS>
<AUTO MODE=1 VALUE=100 FEATHER=0.000000e+00 POSITION=0>
 
</AUTO>
</MASKAUTOS>
<CZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</CZOOMAUTOS>
<PZOOMAUTOS>
<AUTO POSITION=0 VALUE=6.406250e-01 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</PZOOMAUTOS>
</TRACK>
 
 
 
<TRACK RECORD=1 NUDGE=0 PLAY=0 GANG=0 DRAW=1 EXPAND=0 TRACK_W=1920 TRACK_H=1080 TYPE=VIDEO>
<TITLE>Video 4</TITLE>
</TITLE TYPE=VIDEO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=1005><FILE SRC=/mov/shadow.png></EDIT>
</EDITS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=5.800000e+01 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<CAMERAAUTOS>
<AUTO POSITION=0 CENTER_X=0.000000e+00 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
</CAMERAAUTOS>
<PROJECTORAUTOS>
<AUTO POSITION=0 CENTER_X=-4.340000e+02 CENTER_Y=5.600000e+01 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
</PROJECTORAUTOS>
<MODEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MODEAUTOS>
<MASKAUTOS>
<AUTO MODE=1 VALUE=100 FEATHER=0.000000e+00 POSITION=0>
 
</AUTO>
</MASKAUTOS>
<CZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</CZOOMAUTOS>
<PZOOMAUTOS>
<AUTO POSITION=0 VALUE=6.250000e-01 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</PZOOMAUTOS>
</TRACK>
 
 
 
<TRACK RECORD=0 NUDGE=0 PLAY=0 GANG=0 DRAW=1 EXPAND=0 TRACK_W=1920 TRACK_H=1080 TYPE=VIDEO>
<TITLE>Video 3</TITLE>
</TITLE TYPE=VIDEO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=1025><FILE SRC=/mov/white.png></EDIT>
</EDITS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+02 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<CAMERAAUTOS>
<AUTO POSITION=0 CENTER_X=0.000000e+00 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
</CAMERAAUTOS>
<PROJECTORAUTOS>
<AUTO POSITION=0 CENTER_X=0.000000e+00 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
</PROJECTORAUTOS>
<MODEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MODEAUTOS>
<MASKAUTOS>
<AUTO MODE=1 VALUE=100 FEATHER=0.000000e+00 POSITION=0>
 
</AUTO>
</MASKAUTOS>
<CZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</CZOOMAUTOS>
<PZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</PZOOMAUTOS>
</TRACK>
 
 
 
</EDL>
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/tests/compressor.xml
New file
0,0 → 1,90
<?xml version="1.0"?>
<EDL PROJECT_PATH=/home/root/hvirtual/cinelerra/tests/compressor.xml>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=0.0000000000000000e+00 LOOP_END=1.2445766666666668e+01 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=0.0000000000000000e+00 SELECTION_END=0.0000000000000000e+00 CLIP_TITLE=/old/root/hvirtual/cinelerra/tests/compressor.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=0 ZOOM_SAMPLE=8192 ZOOMY=64 ZOOM_TRACK=64 PREVIEW_START=0.0000000000000000e+00 PREVIEW_END=5.9359291666666664e+01>
 
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=155 ASSET_COLUMN1=82 SHOW_FADE=1 SHOW_PAN=1 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=1 SHOW_CAMERA=1 SHOW_PROJECTOR=1 SHOW_MODE=0 SHOW_MASK=1 SHOW_CZOOM=0 SHOW_PZOOM=0 AUTO_KEYFRAMES=0 AUTOS_FOLLOW_EDITS=1 BRENDER_START=0.0000000000000000e+00 CROP_X1=0 CROP_Y1=0 CROP_X2=640 CROP_Y2=480 CURRENT_FOLDER="Audio Effects" CURSOR_ON_FRAMES=1 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=4 CWINDOW_SCROLLBARS=1 CWINDOW_XSCROLL=-25 CWINDOW_YSCROLL=-34 CWINDOW_ZOOM=1.000000e+00 DEFAULT_ATRANSITION=Crossfade DEFAULT_VTRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=5.0000000000000000e-01 EDITING_MODE=1 FOLDERLIST_FORMAT=1 HIGHLIGHTED_TRACK=1 LABELS_FOLLOW_EDITS=0 MPEG4_DEBLOCK=0 PLUGINS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=0 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 NUDGE_SECONDS=1 TOOL_WINDOW=0 VWINDOW_METER=1 VWINDOW_FOLDER=VWINDOW_SOURCE=-1 VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
 
<VIDEO INTERPOLATION_TYPE=2 COLORMODEL="YUV-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.9970029970029969e+01 FRAMES_PER_FOOT=1.600000e+01 OUTPUTW=800 OUTPUTH=600 ASPECTW=4.000000e+00 ASPECTH=3.000000e+00>
 
<AUDIO SAMPLERATE=48000 CHANNELS=2 ACHANNEL_ANGLE_0=544 ACHANNEL_ANGLE_1=0>
 
<FOLDER>Clips</FOLDER>
<FOLDER>Media</FOLDER>
<ASSETS>
</ASSETS>
 
 
 
<LABELS>
</LABELS>
 
<PRESENTATIONS>
</PRESENTATIONS>
 
<TRACK RECORD=1 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=1 TRACK_W=800 TRACK_H=600 TYPE=AUDIO>
 
<TITLE>Audio 1</TITLE>
</TITLE TYPE=AUDIO>
<EDITS>
</EDITS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=0.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
<AUTO POSITION=1148258 VALUE=-3.018750e+01 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
<AUTO POSITION=1148345 VALUE=-1.078126e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
<AUTO POSITION=1638434 VALUE=-1.078126e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
<AUTO POSITION=1638482 VALUE=-3.018750e+01 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<PANAUTOS>
<AUTO POSITION=0 HANDLE_X=1 HANDLE_Y=53 VALUE0=1.000000e+00 VALUE1=0.000000e+00>
</PANAUTOS>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=2849246 TYPE=1 TITLE=Synthesizer>
<IN><OUT><ON>
<KEYFRAME POSITION=0 DEFAULT=1><SYNTH WETNESS=0.000000e+00 BASEFREQ=440 WAVEFUNCTION=0 OSCILLATORS=1>
<OSCILLATOR LEVEL=0.000000e+00 PHASE=0.000000e+00 FREQFACTOR=1.000000e+00>
</KEYFRAME>
</PLUGIN>
</PLUGINSET>
</TRACK>
 
 
 
<TRACK RECORD=1 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=1 TRACK_W=800 TRACK_H=600 TYPE=AUDIO>
 
<TITLE>Audio 2</TITLE>
</TITLE TYPE=AUDIO>
<EDITS>
</EDITS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=0.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<PANAUTOS>
<AUTO POSITION=0 HANDLE_X=100 HANDLE_Y=50 VALUE0=0.000000e+00 VALUE1=1.000000e+00>
</PANAUTOS>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=2849246 TYPE=3 TITLE=>
<SHARED_LOCATION SHARED_MODULE=0 SHARED_PLUGIN=0></SHARED_LOCATION>
<IN><OUT><ON>
<KEYFRAME POSITION=0 DEFAULT=1></KEYFRAME>
</PLUGIN>
</PLUGINSET>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=2849246 TYPE=1 TITLE=Compressor>
<IN><OUT><ON>
<KEYFRAME POSITION=0 DEFAULT=1><COMPRESSOR TRIGGER=0 REACTION_LEN=-1.0000000000000000e+00 DECAY_LEN=1.0000000000000000e+00 SMOOTHING_ONLY=1>
<LEVEL X=-5.0144329896907216e+01 Y=-1.0199999999999999e+01>
<LEVEL X=-0.0000000000000000e+00 Y=-1.0400000000000000e+01>
</KEYFRAME>
</PLUGIN>
</PLUGINSET>
</TRACK>
 
 
 
</EDL>
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/fileexr.inc
New file
0,0 → 1,6
#ifndef FILEEXR_INC
#define FILEEXR_INC
 
class FileEXR;
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/formatpresets.C
New file
0,0 → 1,316
#include "edl.h"
#include "edlsession.h"
#include "formatpresets.h"
#include "new.h"
#include "setformat.h"
 
 
 
 
 
FormatPresets::FormatPresets(MWindow *mwindow,
NewWindow *new_gui,
SetFormatWindow *format_gui,
int x,
int y)
{
this->mwindow = mwindow;
this->new_gui = new_gui;
this->format_gui = format_gui;
gui_base = new_gui ? (BC_WindowBase*)new_gui : (BC_WindowBase*)(format_gui);
this->x = x;
this->y = y;
text = 0;
pulldown = 0;
}
 
FormatPresets::~FormatPresets()
{
if(text) delete text;
if(pulldown) delete pulldown;
for(int i = 0; i < preset_items.total; i++)
delete preset_items.values[i];
}
 
void FormatPresets::create_objects()
{
// Create preset items
FormatPresetItem *item;
item = new FormatPresetItem(mwindow, this, _("User Defined"));
preset_items.append(item);
 
item = new FormatPresetItem(mwindow, this, _("1080P"));
item->edl->session->audio_channels = 2;
item->edl->session->audio_tracks = 2;
item->edl->session->sample_rate = 48000;
item->edl->session->video_channels = 1;
item->edl->session->video_tracks = 1;
item->edl->session->frame_rate = (double)60000.0 / 1001;
// item->edl->session->track_w = 1920;
// item->edl->session->track_h = 1080;
item->edl->session->output_w = 1920;
item->edl->session->output_h = 1080;
item->edl->session->aspect_w = 16;
item->edl->session->aspect_h = 9;
preset_items.append(item);
 
item = new FormatPresetItem(mwindow, this, _("1080I"));
item->edl->session->audio_channels = 2;
item->edl->session->audio_tracks = 2;
item->edl->session->sample_rate = 48000;
item->edl->session->video_channels = 1;
item->edl->session->video_tracks = 1;
item->edl->session->frame_rate = (double)30000.0 / 1001;
// item->edl->session->track_w = 1920;
// item->edl->session->track_h = 1080;
item->edl->session->output_w = 1920;
item->edl->session->output_h = 1080;
item->edl->session->aspect_w = 16;
item->edl->session->aspect_h = 9;
preset_items.append(item);
 
item = new FormatPresetItem(mwindow, this, _("720P"));
item->edl->session->audio_channels = 2;
item->edl->session->audio_tracks = 2;
item->edl->session->sample_rate = 48000;
item->edl->session->video_channels = 1;
item->edl->session->video_tracks = 1;
item->edl->session->frame_rate = (double)60000.0 / 1001;
// item->edl->session->track_w = 1280;
// item->edl->session->track_h = 720;
item->edl->session->output_w = 1280;
item->edl->session->output_h = 720;
item->edl->session->aspect_w = 16;
item->edl->session->aspect_h = 9;
preset_items.append(item);
 
item = new FormatPresetItem(mwindow, this, _("480P"));
item->edl->session->audio_channels = 2;
item->edl->session->audio_tracks = 2;
item->edl->session->sample_rate = 48000;
item->edl->session->video_channels = 1;
item->edl->session->video_tracks = 1;
item->edl->session->frame_rate = (double)60000.0 / 1001;
// item->edl->session->track_w = 720;
// item->edl->session->track_h = 480;
item->edl->session->output_w = 720;
item->edl->session->output_h = 480;
item->edl->session->aspect_w = 4;
item->edl->session->aspect_h = 3;
preset_items.append(item);
 
item = new FormatPresetItem(mwindow, this, _("480I"));
item->edl->session->audio_channels = 2;
item->edl->session->audio_tracks = 2;
item->edl->session->sample_rate = 48000;
item->edl->session->video_channels = 1;
item->edl->session->video_tracks = 1;
item->edl->session->frame_rate = (double)30000.0 / 1001;
// item->edl->session->track_w = 720;
// item->edl->session->track_h = 480;
item->edl->session->output_w = 720;
item->edl->session->output_h = 480;
item->edl->session->aspect_w = 4;
item->edl->session->aspect_h = 3;
preset_items.append(item);
 
item = new FormatPresetItem(mwindow, this, _("Half D-1 NTSC"));
item->edl->session->audio_channels = 2;
item->edl->session->audio_tracks = 2;
item->edl->session->sample_rate = 48000;
item->edl->session->video_channels = 1;
item->edl->session->video_tracks = 1;
item->edl->session->frame_rate = (double)30000.0 / 1001;
// item->edl->session->track_w = 360;
// item->edl->session->track_h = 240;
item->edl->session->output_w = 360;
item->edl->session->output_h = 240;
item->edl->session->aspect_w = 4;
item->edl->session->aspect_h = 3;
preset_items.append(item);
 
item = new FormatPresetItem(mwindow, this, _("Internet"));
item->edl->session->audio_channels = 1;
item->edl->session->audio_tracks = 1;
item->edl->session->sample_rate = 22050;
item->edl->session->video_channels = 1;
item->edl->session->video_tracks = 1;
item->edl->session->frame_rate = 15;
// item->edl->session->track_w = 320;
// item->edl->session->track_h = 240;
item->edl->session->output_w = 320;
item->edl->session->output_h = 240;
item->edl->session->aspect_w = 4;
item->edl->session->aspect_h = 3;
preset_items.append(item);
 
item = new FormatPresetItem(mwindow, this, _("CD Audio"));
item->edl->session->audio_channels = 2;
item->edl->session->audio_tracks = 2;
item->edl->session->sample_rate = 44100;
item->edl->session->video_channels = 1;
item->edl->session->video_tracks = 0;
item->edl->session->frame_rate = (double)30000.0 / 1001;
// item->edl->session->track_w = 720;
// item->edl->session->track_h = 480;
item->edl->session->output_w = 720;
item->edl->session->output_h = 480;
item->edl->session->aspect_w = 4;
item->edl->session->aspect_h = 3;
preset_items.append(item);
 
item = new FormatPresetItem(mwindow, this, _("DAT Audio"));
item->edl->session->audio_channels = 2;
item->edl->session->audio_tracks = 2;
item->edl->session->sample_rate = 48000;
item->edl->session->video_channels = 1;
item->edl->session->video_tracks = 0;
item->edl->session->frame_rate = (double)30000.0 / 1001;
// item->edl->session->track_w = 720;
// item->edl->session->track_h = 480;
item->edl->session->output_w = 720;
item->edl->session->output_h = 480;
item->edl->session->aspect_w = 4;
item->edl->session->aspect_h = 3;
preset_items.append(item);
 
 
 
gui_base->add_subwindow(new BC_Title(x, y, _("Presets:")));
int x1 = x;
y += 20;
 
 
gui_base->add_subwindow(text = new FormatPresetsText(mwindow,
this,
x,
y));
x += text->get_w();
gui_base->add_subwindow(pulldown = new FormatPresetsPulldown(mwindow,
this,
x,
y));
x = x1;
}
 
FormatPresetItem* FormatPresets::find_preset(EDL *edl)
{
for(int i = 1; i < preset_items.total; i++)
{
FormatPresetItem *preset = preset_items.values[i];
if(edl->session->audio_tracks == preset->edl->session->audio_tracks &&
edl->session->audio_channels == preset->edl->session->audio_channels &&
edl->session->sample_rate == preset->edl->session->sample_rate &&
edl->session->video_tracks == preset->edl->session->video_tracks &&
edl->session->frame_rate == preset->edl->session->frame_rate &&
edl->session->output_w == preset->edl->session->output_w &&
edl->session->output_h == preset->edl->session->output_h &&
edl->session->aspect_w == preset->edl->session->aspect_w &&
edl->session->aspect_h == preset->edl->session->aspect_h)
{
return preset;
}
}
return 0;
}
 
char* FormatPresets::get_preset_text(EDL *edl)
{
FormatPresetItem *item = find_preset(edl);
if(item)
return item->get_text();
else
return "Custom";
}
 
 
int FormatPresets::handle_event()
{
return 0;
}
 
EDL* FormatPresets::get_edl()
{
return 0;
}
 
 
 
 
 
FormatPresetsText::FormatPresetsText(MWindow *mwindow,
FormatPresets *gui,
int x,
int y)
: BC_TextBox(x,
y,
200,
1,
gui->get_preset_text(gui->get_edl()))
{
this->gui = gui;
this->mwindow = mwindow;
}
 
int FormatPresetsText::handle_event()
{
return 1;
}
 
 
 
 
 
 
 
 
 
 
FormatPresetsPulldown::FormatPresetsPulldown(MWindow *mwindow,
FormatPresets *gui,
int x,
int y)
: BC_ListBox(x,
y,
200,
200,
LISTBOX_TEXT, // Display text list or icons
(ArrayList<BC_ListBoxItem*>*)&gui->preset_items, // Each column has an ArrayList of BC_ListBoxItems.
0, // Titles for columns. Set to 0 for no titles
0, // width of each column
1, // Total columns.
0, // Pixel of top of window.
1)
{
this->mwindow = mwindow;
this->gui = gui;
}
 
int FormatPresetsPulldown::handle_event()
{
gui->handle_event();
FormatPresetItem *preset = ((FormatPresetItem*)get_selection(0, 0));
gui->get_edl()->copy_all(preset->edl);
gui->text->update(preset->get_text());
gui->handle_event();
return 1;
}
 
FormatPresetItem::FormatPresetItem(MWindow *mwindow,
FormatPresets *gui,
char *text)
: BC_ListBoxItem(text)
{
this->mwindow = mwindow;
this->gui = gui;
edl = new EDL;
edl->create_objects();
edl->copy_all(gui->get_edl());
}
 
FormatPresetItem::~FormatPresetItem()
{
delete edl;
}
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/newpresets.h
New file
0,0 → 1,42
#ifndef NEWPRESETS_H
#define NEWPRESETS_H
 
 
#include "guicast.h"
#include "new.inc"
#include "setformat.inc"
 
class NewPresetsText : public BC_TextBox
{
public:
NewPresetsText(MWindow *mwindow, NewWindow *window, int x, int y);
int handle_event();
MWindow *mwindow;
NewWindow *window;
};
 
class NewPresetsPulldown : public BC_ListBox
{
public:
NewPresetsPulldown(MWindow *mwindow, NewWindow *window, int x, int y);
int handle_event();
MWindow *mwindow;
NewWindow *window;
};
 
class NewPresetItem : public BC_ListBoxItem
{
public:
NewPresetItem(MWindow *mwindow, NewWindow *window, char *text);
~NewPresetItem();
 
MWindow *mwindow;
NewWindow *window;
EDL *edl;
};
 
 
 
 
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/formatpresets.h
New file
0,0 → 1,84
#ifndef FORMATPRESETS_H
#define FORMATPRESETS_H
 
 
#include "edl.inc"
#include "formatpresets.inc"
#include "guicast.h"
#include "mwindow.inc"
#include "new.inc"
#include "setformat.inc"
 
 
class FormatPresets
{
public:
FormatPresets(MWindow *mwindow,
NewWindow *new_gui,
SetFormatWindow *format_gui,
int x,
int y);
virtual ~FormatPresets();
 
void create_objects();
FormatPresetItem* find_preset(EDL *edl);
char* get_preset_text(EDL *edl);
 
// New preset selected
virtual int handle_event();
virtual EDL* get_edl();
MWindow *mwindow;
BC_WindowBase *gui_base;
NewWindow *new_gui;
SetFormatWindow *format_gui;
FormatPresetsText *text;
FormatPresetsPulldown *pulldown;
int x, y;
ArrayList<FormatPresetItem*> preset_items;
};
 
 
 
class FormatPresetsText : public BC_TextBox
{
public:
FormatPresetsText(MWindow *mwindow,
FormatPresets *gui,
int x,
int y);
int handle_event();
// Find the listbox item which corresponds to the values in the edl.
FormatPresets *gui;
MWindow *mwindow;
};
 
class FormatPresetsPulldown : public BC_ListBox
{
public:
FormatPresetsPulldown(MWindow *mwindow,
FormatPresets *gui,
int x,
int y);
int handle_event();
MWindow *mwindow;
FormatPresets *gui;
};
 
class FormatPresetItem : public BC_ListBoxItem
{
public:
FormatPresetItem(MWindow *mwindow, FormatPresets *gui, char *text);
~FormatPresetItem();
 
MWindow *mwindow;
FormatPresets *gui;
// Storage of the values for the preset
EDL *edl;
};
 
 
 
 
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/formatpresets.inc
New file
0,0 → 1,10
#ifndef FORMATPRESETS_INC
#define FORMATPRESETS_INC
 
 
class FormatPresetsPulldown;
class FormatPresetItem;
class FormatPresetsText;
 
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/fileexr.C
New file
0,0 → 1,633
#include "asset.h"
#include "bcsignals.h"
#include "clip.h"
#include "fileexr.h"
#include "filesystem.h"
#include "ImathBox.h"
#include "ImfChannelList.h"
#include "ImfChromaticities.h"
#include "ImfCompression.h"
#include "ImfIO.h"
#include "ImfInputFile.h"
#include "ImfOutputFile.h"
#include "ImfPixelType.h"
#include "ImfRgbaFile.h"
#include "ImfRgbaYca.h"
#include "ImfVersion.h"
#include "mwindow.inc"
#include "vframe.h"
 
 
class EXRIStream : public Imf::IStream
{
public:
EXRIStream(char *data, int size);
~EXRIStream();
 
bool read (char c[], int n);
Imf::Int64 tellg ();
void seekg (Imf::Int64 pos);
void clear ();
 
private:
char *data;
int size;
int position;
};
 
class EXROStream : public Imf::OStream
{
public:
EXROStream(VFrame *data);
~EXROStream();
 
virtual void write(const char c[], int n);
virtual Imf::Int64 tellp();
virtual void seekp(Imf::Int64 pos);
 
private:
VFrame *data;
int position;
};
 
 
 
EXRIStream::EXRIStream(char *data, int size)
: Imf::IStream("mypath")
{
this->data = data;
this->size = size;
position = 0;
}
 
EXRIStream::~EXRIStream()
{
}
 
bool EXRIStream::read(char c[], int n)
{
int fragment = n;
if(position + fragment > size)
{
fragment = size - position;
}
memcpy(c, data + position, fragment);
position += fragment;
 
if(n != fragment)
{
throw Iex::InputExc ("EXRIStream::read: Unexpected end of file.");
}
return position >= size;
}
 
Imf::Int64 EXRIStream::tellg ()
{
return position;
}
 
void EXRIStream::seekg(Imf::Int64 pos)
{
position = pos;
}
 
void EXRIStream::clear()
{
}
 
 
 
 
 
 
 
 
 
 
 
EXROStream::EXROStream(VFrame *data)
: Imf::OStream("mypath")
{
this->data = data;
position = 0;
}
EXROStream::~EXROStream()
{
}
 
void EXROStream::write(const char c[], int n)
{
if(position + n > data->get_compressed_allocated())
data->allocate_compressed_data(MAX(position + n, data->get_compressed_allocated() * 2));
 
memcpy(data->get_data() + position, c, n);
position += n;
data->set_compressed_size(MAX(position, data->get_compressed_size()));
}
 
Imf::Int64 EXROStream::tellp()
{
return position;
}
 
void EXROStream::seekp(Imf::Int64 pos)
{
position = pos;
}
 
 
 
 
 
 
 
 
 
 
 
FileEXR::FileEXR(Asset *asset, File *file)
: FileList(asset, file, "EXRLIST", ".exr", FILE_EXR, FILE_EXR_LIST)
{
native_cmodel = BC_RGB_FLOAT;
is_yuv = 0;
temp_y = 0;
temp_u = 0;
temp_v = 0;
}
 
FileEXR::~FileEXR()
{
if(temp_y) delete [] temp_y;
if(temp_u) delete [] temp_u;
if(temp_v) delete [] temp_v;
}
 
char* FileEXR::compression_to_str(int compression)
{
switch(compression)
{
case FileEXR::NONE: return "None"; break;
case FileEXR::PIZ: return "PIZ"; break;
case FileEXR::ZIP: return "ZIP"; break;
case FileEXR::ZIPS: return "ZIPS"; break;
case FileEXR::RLE: return "RLE"; break;
case FileEXR::PXR24: return "PXR24"; break;
}
return "None";
}
 
int FileEXR::compression_to_exr(int compression)
{
switch(compression)
{
case FileEXR::NONE: return (int)Imf::NO_COMPRESSION; break;
case FileEXR::PIZ: return (int)Imf::PIZ_COMPRESSION; break;
case FileEXR::ZIP: return (int)Imf::ZIP_COMPRESSION; break;
case FileEXR::ZIPS: return (int)Imf::ZIPS_COMPRESSION; break;
case FileEXR::RLE: return (int)Imf::RLE_COMPRESSION; break;
case FileEXR::PXR24: return (int)Imf::PXR24_COMPRESSION; break;
}
return Imf::NO_COMPRESSION;
}
 
int FileEXR::str_to_compression(char *string)
{
if(!strcmp(compression_to_str(FileEXR::NONE), string))
return FileEXR::NONE;
if(!strcmp(compression_to_str(FileEXR::PIZ), string))
return FileEXR::PIZ;
if(!strcmp(compression_to_str(FileEXR::ZIP), string))
return FileEXR::ZIP;
if(!strcmp(compression_to_str(FileEXR::ZIPS), string))
return FileEXR::ZIPS;
if(!strcmp(compression_to_str(FileEXR::RLE), string))
return FileEXR::RLE;
if(!strcmp(compression_to_str(FileEXR::PXR24), string))
return PXR24;
return FileEXR::NONE;
}
 
int FileEXR::check_sig(Asset *asset, char *test)
{
if(Imf::isImfMagic(test)) return 1;
if(test[0] == 'E' && test[1] == 'X' && test[2] == 'R' &&
test[3] == 'L' && test[4] == 'I' && test[5] == 'S' && test[6] == 'T')
{
return 1;
}
 
return 0;
}
 
void FileEXR::get_parameters(BC_WindowBase *parent_window,
Asset *asset,
BC_WindowBase* &format_window,
int audio_options,
int video_options)
{
if(video_options)
{
EXRConfigVideo *window = new EXRConfigVideo(parent_window, asset);
format_window = window;
window->create_objects();
window->run_window();
delete window;
}
}
 
int FileEXR::colormodel_supported(int colormodel)
{
return native_cmodel;
}
 
int FileEXR::get_best_colormodel(Asset *asset, int driver)
{
if(asset->exr_use_alpha)
return BC_RGBA_FLOAT;
else
return BC_RGB_FLOAT;
}
 
int FileEXR::get_memory_usage()
{
int result = FileBase::get_memory_usage();
if(temp_y) result += asset->width * asset->height * 3 / 2;
return result;
}
 
 
int FileEXR::read_frame_header(char *path)
{
int result = 0;
FILE *stream;
 
if(!(stream = fopen(path, "rb")))
{
perror("FileEXR::read_frame_header");
return 1;
}
int size = FileSystem::get_size(path);
char *buffer = new char[size];
fread(buffer, size, 1, stream);
fclose(stream);
 
EXRIStream exr_stream(buffer, size);
Imf::InputFile file(exr_stream);
Imath::Box2i dw = file.header().dataWindow();
asset->width = dw.max.x - dw.min.x + 1;
asset->height = dw.max.y - dw.min.y + 1;
 
const Imf::ChannelList &channels = file.header().channels();
 
if(channels.findChannel("A"))
native_cmodel = BC_RGBA_FLOAT;
else
native_cmodel = BC_RGB_FLOAT;
 
if(channels.findChannel("Y"))
is_yuv = 1;
// for (Imf::ChannelList::ConstIterator i = channels.begin(); i != channels.end(); ++i)
// {
// printf("%s\n", i.name());
// }
 
delete [] buffer;
return result;
}
 
int FileEXR::read_frame(VFrame *frame, VFrame *data)
{
EXRIStream exr_stream((char*)data->get_data(), data->get_compressed_size());
Imf::InputFile file(exr_stream);
Imath::Box2i dw = file.header().dataWindow();
int dx = dw.min.x;
int dy = dw.min.y;
Imf::FrameBuffer framebuffer;
float **rows = (float**)frame->get_rows();
int components = cmodel_components(frame->get_color_model());
 
if(is_yuv)
{
if(!temp_y) temp_y = new float[asset->width * asset->height];
if(!temp_u) temp_u = new float[asset->width * asset->height / 4];
if(!temp_v) temp_v = new float[asset->width * asset->height / 4];
framebuffer.insert("Y", Imf::Slice(Imf::FLOAT,
(char*)(temp_y - dy * asset->width - dx),
sizeof(float),
sizeof(float) * frame->get_w()));
framebuffer.insert("BY", Imf::Slice(Imf::FLOAT,
(char*)(temp_u - dy * asset->width / 4 - dx / 2),
sizeof(float),
sizeof(float) * frame->get_w() / 2,
2,
2));
framebuffer.insert("RY", Imf::Slice(Imf::FLOAT,
(char*)(temp_v - dy * asset->width / 4 - dx / 2),
sizeof(float),
sizeof(float) * frame->get_w() / 2,
2,
2));
}
else
{
framebuffer.insert("R", Imf::Slice(Imf::FLOAT,
(char*)(&rows[-dy][-dx * components]),
sizeof(float) * components,
sizeof(float) * components * frame->get_w()));
framebuffer.insert("G", Imf::Slice(Imf::FLOAT,
(char*)(&rows[-dy][-dx * components + 1]),
sizeof(float) * components,
sizeof(float) * components * frame->get_w()));
framebuffer.insert("B", Imf::Slice(Imf::FLOAT,
(char*)(&rows[-dy][-dx * components + 2]),
sizeof(float) * components,
sizeof(float) * components * frame->get_w()));
}
 
// Alpha always goes directly to the output frame
if(components == 4)
{
framebuffer.insert("A", Imf::Slice(Imf::FLOAT,
(char*)(&rows[-dy][-dx * components + 3]),
sizeof(float) * components,
sizeof(float) * components * frame->get_w()));
}
 
file.setFrameBuffer(framebuffer);
file.readPixels (dw.min.y, dw.max.y);
 
 
 
if(is_yuv)
{
// Convert to RGB using crazy ILM equations
Imath::V3f yw;
Imf::Chromaticities cr;
yw = Imf::RgbaYca::computeYw(cr);
 
for(int i = 0; i < asset->height - 1; i += 2)
{
float *y_row1 = temp_y + i * asset->width;
float *y_row2 = temp_y + (i + 1) * asset->width;
float *u_row = temp_u + (i * asset->width / 4);
float *v_row = temp_v + (i * asset->width / 4);
float *out_row1 = rows[i];
float *out_row2 = rows[i + 1];
for(int j = 0; j < asset->width - 1; j += 2)
{
float v = *u_row++;
float u = *v_row++;
float y;
 
float r, g, b;
y = *y_row1++;
r = (u + 1) * y;
b = (v + 1) * y;
g = (y - r * yw.x - b * yw.z) / yw.y;
*out_row1++ = r;
*out_row1++ = g;
*out_row1++ = b;
if(components == 4) out_row1++;
 
y = *y_row1++;
r = (u + 1) * y;
b = (v + 1) * y;
g = (y - r * yw.x - b * yw.z) / yw.y;
*out_row1++ = r;
*out_row1++ = g;
*out_row1++ = b;
if(components == 4) out_row1++;
 
y = *y_row2++;
r = (u + 1) * y;
b = (v + 1) * y;
g = (y - r * yw.x - b * yw.z) / yw.y;
*out_row2++ = r;
*out_row2++ = g;
*out_row2++ = b;
if(components == 4) out_row1++;
 
y = *y_row2++;
r = (u + 1) * y;
b = (v + 1) * y;
g = (y - r * yw.x - b * yw.z) / yw.y;
*out_row2++ = r;
*out_row2++ = g;
*out_row2++ = b;
if(components == 4) out_row1++;
}
}
}
}
 
 
 
 
int FileEXR::write_frame(VFrame *frame, VFrame *data, FrameWriterUnit *unit)
{
//printf("FileEXR::write_frame 1\n");
EXRUnit *exr_unit = (EXRUnit*)unit;
int result = 0;
 
VFrame *output_frame;
data->set_compressed_size(0);
 
 
int native_cmodel = asset->exr_use_alpha ? BC_RGBA_FLOAT : BC_RGB_FLOAT;
int components = cmodel_components(native_cmodel);
 
if(frame->get_color_model() != native_cmodel)
{
if(!exr_unit->temp_frame) exr_unit->temp_frame = new VFrame(0,
asset->width,
asset->height,
native_cmodel);
cmodel_transfer(exr_unit->temp_frame->get_rows(), /* Leave NULL if non existent */
frame->get_rows(),
exr_unit->temp_frame->get_y(), /* Leave NULL if non existent */
exr_unit->temp_frame->get_u(),
exr_unit->temp_frame->get_v(),
frame->get_y(), /* Leave NULL if non existent */
frame->get_u(),
frame->get_v(),
0, /* Dimensions to capture from input frame */
0,
asset->width,
asset->height,
0, /* Dimensions to project on output frame */
0,
asset->width,
asset->height,
frame->get_color_model(),
native_cmodel,
0, /* When transfering BC_RGBA8888 to non-alpha this is the background color in 0xRRGGBB hex */
asset->width, /* For planar use the luma rowspan */
asset->height);
output_frame = exr_unit->temp_frame;
}
else
output_frame = frame;
 
Imf::Header header(output_frame->get_w(), output_frame->get_h());
header.compression() = (Imf::Compression)compression_to_exr(
asset->exr_compression);
header.channels().insert("R", Imf::Channel(Imf::FLOAT));
header.channels().insert("G", Imf::Channel(Imf::FLOAT));
header.channels().insert("B", Imf::Channel(Imf::FLOAT));
if(asset->exr_use_alpha) header.channels().insert("A", Imf::Channel(Imf::FLOAT));
 
EXROStream exr_stream(data);
Imf::OutputFile file(exr_stream, header);
Imf::FrameBuffer framebuffer;
float **rows = (float**)output_frame->get_rows();
framebuffer.insert("R",
Imf::Slice(Imf::FLOAT,
(char*)(rows[0]),
sizeof(float) * components,
sizeof(float) * components * output_frame->get_w()));
framebuffer.insert("G",
Imf::Slice(Imf::FLOAT,
(char*)(rows[0] + 1),
sizeof(float) * components,
sizeof(float) * components * output_frame->get_w()));
framebuffer.insert("B",
Imf::Slice(Imf::FLOAT,
(char*)(rows[0] + 2),
sizeof(float) * components,
sizeof(float) * components * output_frame->get_w()));
if(asset->exr_use_alpha)
framebuffer.insert("A",
Imf::Slice(Imf::FLOAT,
(char*)(rows[0] + 3),
sizeof(float) * components,
sizeof(float) * components * output_frame->get_w()));
file.setFrameBuffer(framebuffer);
file.writePixels(asset->height);
//printf("FileEXR::write_frame 10\n");
}
 
FrameWriterUnit* FileEXR::new_writer_unit(FrameWriter *writer)
{
return new EXRUnit(this, writer);
}
 
 
 
 
 
 
 
 
 
 
 
 
EXRUnit::EXRUnit(FileEXR *file, FrameWriter *writer)
: FrameWriterUnit(writer)
{
this->file = file;
temp_frame = 0;
}
 
EXRUnit::~EXRUnit()
{
if(temp_frame) delete temp_frame;
}
 
 
 
 
 
 
 
 
 
 
 
EXRConfigVideo::EXRConfigVideo(BC_WindowBase *parent_window, Asset *asset)
: BC_Window(PROGRAM_NAME ": Video Compression",
parent_window->get_abs_cursor_x(1),
parent_window->get_abs_cursor_y(1),
300,
100)
{
this->parent_window = parent_window;
this->asset = asset;
}
 
EXRConfigVideo::~EXRConfigVideo()
{
}
 
int EXRConfigVideo::create_objects()
{
int x = 10, y = 10;
add_subwindow(new EXRUseAlpha(this, x, y));
y += 30;
EXRCompression *menu;
add_subwindow(new BC_Title(x, y, "Compression:"));
x += 110;
add_subwindow(menu = new EXRCompression(this, x, y, 100));
menu->create_objects();
add_subwindow(new BC_OKButton(this));
return 0;
}
 
int EXRConfigVideo::close_event()
{
set_done(0);
return 1;
}
 
 
EXRUseAlpha::EXRUseAlpha(EXRConfigVideo *gui, int x, int y)
: BC_CheckBox(x, y, gui->asset->exr_use_alpha, _("Use alpha"))
{
this->gui = gui;
}
 
int EXRUseAlpha::handle_event()
{
gui->asset->exr_use_alpha = get_value();
return 1;
}
 
 
 
EXRCompression::EXRCompression(EXRConfigVideo *gui, int x, int y, int w)
: BC_PopupMenu(x,
y,
w,
FileEXR::compression_to_str(gui->asset->exr_compression))
{
this->gui = gui;
}
void EXRCompression::create_objects()
{
add_item(new EXRCompressionItem(gui, FileEXR::NONE));
add_item(new EXRCompressionItem(gui, FileEXR::PIZ));
add_item(new EXRCompressionItem(gui, FileEXR::ZIP));
add_item(new EXRCompressionItem(gui, FileEXR::ZIPS));
add_item(new EXRCompressionItem(gui, FileEXR::RLE));
add_item(new EXRCompressionItem(gui, FileEXR::PXR24));
}
 
int EXRCompression::handle_event()
{
return 1;
}
 
EXRCompressionItem::EXRCompressionItem(EXRConfigVideo *gui, int value)
: BC_MenuItem(FileEXR::compression_to_str(value))
{
this->gui = gui;
this->value = value;
}
 
int EXRCompressionItem::handle_event()
{
gui->asset->exr_compression = value;
return 0;
}
 
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/CHANGELOG.1.2.1
New file
0,0 → 1,51
Theme images stored as elf binaries instead of concatenated png files.
Project filename restored from backups.
Proper frame being read out of cache for frame advance.
Automatically repositions when loading new file to top left of timeline.
Presets in Set Format for quick reconfiguration.
Transition lengths adjusted for frame rate changes.
Keyframes for effects are hidden if edits are collapsed.
 
Compressor works better. Readahead option removed. Delay removed.
Setting reaction time negative provides readahead now. Also a
smoothing only option renders the just loudness for academic uses.
 
Realtime time stretch and reframe for video.
 
ALSA buffer underruns handled better for 2.6.7.
ALSA synchronization and interrupts handled better.
32 bit option in ALSA.
Backup fonts in case primary fonts don't exist.
Sound levels over 0 DB show in meters with a new max level setting.
DenoiseFFT debug
 
New event propogation system should reduce the number of lockups due to
repeat events.
 
Faster meter responsiveness.
 
Migrated to DV1394 version 2.6.7 for DV capture.
Migrated Video 4 Linux JPEG to Video 4 Linux 2 JPEG version 2.6.7.
Partially supported uncompressed Video 4 Linux 2 but need new frequency table.
Linux 2.4 is depreciated.
 
RGB floating point color space.
RGB 16 removed.
OpenEXR support
Floating point TIFF.
 
Higher precision in YUV/RGB conversions.
Greyscale JPEGs imported properly.
 
CD ripper accepts ending tracks higher than the total tracks. Put in
100 for the ending track to get the entire disk.
 
Race conditions in certain dialog box openings removed.
 
Quicktime: faster writing since write buffer is disabled while writing
data.
Quicktime: floating point color conversions
 
 
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/newpresets.inc
New file
0,0 → 1,10
#ifndef NEWPRESETS_INC
#define NEWPRESETS_INC
 
 
class NewPresetsPulldown;
class NewPresetItem;
class NewPresetsText;
 
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/dv1394.h
New file
0,0 → 1,305
/*
* dv1394.h - DV input/output over IEEE 1394 on OHCI chips
* Copyright (C)2001 Daniel Maas <dmaas@dcine.com>
* receive by Dan Dennedy <dan@dennedy.org>
*
* based on:
* video1394.h - driver for OHCI 1394 boards
* Copyright (C)1999,2000 Sebastien Rougeaux <sebastien.rougeaux@anu.edu.au>
* Peter Schlaile <udbz@rz.uni-karlsruhe.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
 
#ifndef _DV_1394_H
#define _DV_1394_H
 
/* This is the public user-space interface. Try not to break it. */
 
#define DV1394_API_VERSION 0x20011127
 
/* ********************
** **
** DV1394 API **
** **
********************
 
There are two methods of operating the DV1394 DV output device.
 
1)
 
The simplest is an interface based on write(): simply write
full DV frames of data to the device, and they will be transmitted
as quickly as possible. The FD may be set for non-blocking I/O,
in which case you can use select() or poll() to wait for output
buffer space.
 
To set the DV output parameters (e.g. whether you want NTSC or PAL
video), use the DV1394_INIT ioctl, passing in the parameters you
want in a struct dv1394_init.
Example 1:
To play a raw .DV file: cat foo.DV > /dev/dv1394
(cat will use write() internally)
 
Example 2:
static struct dv1394_init init = {
0x63, (broadcast channel)
4, (four-frame ringbuffer)
DV1394_NTSC, (send NTSC video)
0, 0 (default empty packet rate)
}
 
ioctl(fd, DV1394_INIT, &init);
 
while (1) {
read( <a raw DV file>, buf, DV1394_NTSC_FRAME_SIZE );
write( <the dv1394 FD>, buf, DV1394_NTSC_FRAME_SIZE );
}
 
2)
 
For more control over buffering, and to avoid unnecessary copies
of the DV data, you can use the more sophisticated the mmap() interface.
First, call the DV1394_INIT ioctl to specify your parameters,
including the number of frames in the ringbuffer. Then, calling mmap()
on the dv1394 device will give you direct access to the ringbuffer
from which the DV card reads your frame data.
 
The ringbuffer is simply one large, contiguous region of memory
containing two or more frames of packed DV data. Each frame of DV data
is 120000 bytes (NTSC) or 144000 bytes (PAL).
 
Fill one or more frames in the ringbuffer, then use the DV1394_SUBMIT_FRAMES
ioctl to begin I/O. You can use either the DV1394_WAIT_FRAMES ioctl
or select()/poll() to wait until the frames are transmitted. Next, you'll
need to call the DV1394_GET_STATUS ioctl to determine which ringbuffer
frames are clear (ready to be filled with new DV data). Finally, use
DV1394_SUBMIT_FRAMES again to send the new data to the DV output.
 
 
Example: here is what a four-frame ringbuffer might look like
during DV transmission:
 
 
frame 0 frame 1 frame 2 frame 3
 
*--------------------------------------*
| CLEAR | DV data | DV data | CLEAR |
*--------------------------------------*
<ACTIVE>
 
transmission goes in this direction --->>>
 
 
The DV hardware is currently transmitting the data in frame 1.
Once frame 1 is finished, it will automatically transmit frame 2.
(if frame 2 finishes before frame 3 is submitted, the device
will continue to transmit frame 2, and will increase the dropped_frames
counter each time it repeats the transmission).
 
If you called DV1394_GET_STATUS at this instant, you would
receive the following values:
n_frames = 4
active_frame = 1
first_clear_frame = 3
n_clear_frames = 2
 
At this point, you should write new DV data into frame 3 and optionally
frame 0. Then call DV1394_SUBMIT_FRAMES to inform the device that
it may transmit the new frames.
 
ERROR HANDLING
 
An error (buffer underflow/overflow or a break in the DV stream due
to a 1394 bus reset) can be detected by checking the dropped_frames
field of struct dv1394_status (obtained through the
DV1394_GET_STATUS ioctl).
 
The best way to recover from such an error is to re-initialize
dv1394, either by using the DV1394_INIT ioctl call, or closing the
file descriptor and opening it again. (note that you must unmap all
ringbuffer mappings when closing the file descriptor, or else
dv1394 will still be considered 'in use').
 
MAIN LOOP
 
For maximum efficiency and robustness against bus errors, you are
advised to model the main loop of your application after the
following pseudo-code example:
 
(checks of system call return values omitted for brevity; always
check return values in your code!)
while ( frames left ) {
struct pollfd *pfd = ...;
 
pfd->fd = dv1394_fd;
pfd->revents = 0;
pfd->events = POLLOUT | POLLIN; (OUT for transmit, IN for receive)
 
(add other sources of I/O here)
poll(pfd, 1, -1); (or select(); add a timeout if you want)
 
if (pfd->revents) {
struct dv1394_status status;
ioctl(dv1394_fd, DV1394_GET_STATUS, &status);
 
if (status.dropped_frames > 0) {
reset_dv1394();
} else {
for (int i = 0; i < status.n_clear_frames; i++) {
copy_DV_frame();
}
}
}
}
 
where copy_DV_frame() reads or writes on the dv1394 file descriptor
(read/write mode) or copies data to/from the mmap ringbuffer and
then calls ioctl(DV1394_SUBMIT_FRAMES) to notify dv1394 that new
frames are availble (mmap mode).
 
reset_dv1394() is called in the event of a buffer
underflow/overflow or a halt in the DV stream (e.g. due to a 1394
bus reset). To guarantee recovery from the error, this function
should close the dv1394 file descriptor (and munmap() all
ringbuffer mappings, if you are using them), then re-open the
dv1394 device (and re-map the ringbuffer).
*/
 
 
/* maximum number of frames in the ringbuffer */
#define DV1394_MAX_FRAMES 32
 
/* number of *full* isochronous packets per DV frame */
#define DV1394_NTSC_PACKETS_PER_FRAME 250
#define DV1394_PAL_PACKETS_PER_FRAME 300
 
/* size of one frame's worth of DV data, in bytes */
#define DV1394_NTSC_FRAME_SIZE (480 * DV1394_NTSC_PACKETS_PER_FRAME)
#define DV1394_PAL_FRAME_SIZE (480 * DV1394_PAL_PACKETS_PER_FRAME)
 
 
/* ioctl() commands */
#include "ieee1394-ioctl.h"
 
 
enum pal_or_ntsc {
DV1394_NTSC = 0,
DV1394_PAL
};
 
 
 
 
/* this is the argument to DV1394_INIT */
struct dv1394_init {
/* DV1394_API_VERSION */
unsigned int api_version;
/* isochronous transmission channel to use */
unsigned int channel;
 
/* number of frames in the ringbuffer. Must be at least 2
and at most DV1394_MAX_FRAMES. */
unsigned int n_frames;
 
/* send/receive PAL or NTSC video format */
enum pal_or_ntsc format;
 
/* the following are used only for transmission */
/* set these to zero unless you want a
non-default empty packet rate (see below) */
unsigned long cip_n;
unsigned long cip_d;
 
/* set this to zero unless you want a
non-default SYT cycle offset (default = 3 cycles) */
unsigned int syt_offset;
};
 
/* NOTE: you may only allocate the DV frame ringbuffer once each time
you open the dv1394 device. DV1394_INIT will fail if you call it a
second time with different 'n_frames' or 'format' arguments (which
would imply a different size for the ringbuffer). If you need a
different buffer size, simply close and re-open the device, then
initialize it with your new settings. */
/* Q: What are cip_n and cip_d? */
 
/*
A: DV video streams do not utilize 100% of the potential bandwidth offered
by IEEE 1394 (FireWire). To achieve the correct rate of data transmission,
DV devices must periodically insert empty packets into the 1394 data stream.
Typically there is one empty packet per 14-16 data-carrying packets.
 
Some DV devices will accept a wide range of empty packet rates, while others
require a precise rate. If the dv1394 driver produces empty packets at
a rate that your device does not accept, you may see ugly patterns on the
DV output, or even no output at all.
 
The default empty packet insertion rate seems to work for many people; if
your DV output is stable, you can simply ignore this discussion. However,
we have exposed the empty packet rate as a parameter to support devices that
do not work with the default rate.
 
The decision to insert an empty packet is made with a numerator/denominator
algorithm. Empty packets are produced at an average rate of CIP_N / CIP_D.
You can alter the empty packet rate by passing non-zero values for cip_n
and cip_d to the INIT ioctl.
*/
 
 
 
struct dv1394_status {
/* this embedded init struct returns the current dv1394
parameters in use */
struct dv1394_init init;
 
/* the ringbuffer frame that is currently being
displayed. (-1 if the device is not transmitting anything) */
int active_frame;
 
/* index of the first buffer (ahead of active_frame) that
is ready to be filled with data */
unsigned int first_clear_frame;
 
/* how many buffers, including first_clear_buffer, are
ready to be filled with data */
unsigned int n_clear_frames;
 
/* how many times the DV stream has underflowed, overflowed,
or otherwise encountered an error, since the previous call
to DV1394_GET_STATUS */
unsigned int dropped_frames;
 
/* N.B. The dropped_frames counter is only a lower bound on the actual
number of dropped frames, with the special case that if dropped_frames
is zero, then it is guaranteed that NO frames have been dropped
since the last call to DV1394_GET_STATUS.
*/
};
 
 
#endif /* _DV_1394_H */
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/newpresets.C
New file
0,0 → 1,67
#include "newpresets.h"
 
 
 
 
NewPresetsText::NewPresetsText(MWindow *mwindow,
NewWindow *new_gui,
SetFormatWindow *format_gui,
int x,
int y)
: BC_TextBox(x, y, 200, 1, window->get_preset_text())
{
this->mwindow = mwindow;
this->new_gui = new_gui;
this->format_gui = format_gui;
}
 
int NewPresetsText::handle_event()
{
return 1;
}
 
 
 
 
 
NewPresetsPulldown::NewPresetsPulldown(MWindow *mwindow, NewWindow *window, int x, int y)
: BC_ListBox(x,
y,
200,
200,
LISTBOX_TEXT, // Display text list or icons
(ArrayList<BC_ListBoxItem*>*)&window->preset_items, // Each column has an ArrayList of BC_ListBoxItems.
0, // Titles for columns. Set to 0 for no titles
0, // width of each column
1, // Total columns.
0, // Pixel of top of window.
1)
{
this->mwindow = mwindow;
this->window = window;
}
int NewPresetsPulldown::handle_event()
{
NewPresetItem *preset = ((NewPresetItem*)get_selection(0, 0));
window->new_edl->copy_all(preset->edl);
window->update();
window->presets_text->update(preset->get_text());
return 1;
}
 
NewPresetItem::NewPresetItem(MWindow *mwindow, NewWindow *window, char *text)
: BC_ListBoxItem(text)
{
this->mwindow = mwindow;
this->window = window;
edl = new EDL;
edl->create_objects();
edl->copy_all(window->new_edl);
}
 
NewPresetItem::~NewPresetItem()
{
delete edl;
}
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/fileexr.h
New file
0,0 → 1,103
#ifndef FILEEXR_H
#define FILEEXR_H
 
 
#include "file.inc"
#include "filelist.h"
#include "vframe.inc"
 
class FileEXR : public FileList
{
public:
FileEXR(Asset *asset, File *file);
~FileEXR();
 
static int check_sig(Asset *asset, char *test);
static void get_parameters(BC_WindowBase *parent_window,
Asset *asset,
BC_WindowBase* &format_window,
int audio_options,
int video_options);
static int get_best_colormodel(Asset *asset, int driver);
int colormodel_supported(int colormodel);
int read_frame_header(char *path);
int read_frame(VFrame *frame, VFrame *data);
int get_memory_usage();
int write_frame(VFrame *frame, VFrame *data, FrameWriterUnit *unit);
FrameWriterUnit* new_writer_unit(FrameWriter *writer);
 
// exr_compression values
enum
{
NONE,
PIZ,
ZIP,
ZIPS,
RLE,
PXR24
};
 
static char* compression_to_str(int compression);
static int str_to_compression(char *string);
static int compression_to_exr(int compression);
 
int native_cmodel;
int is_yuv;
float *temp_y;
float *temp_u;
float *temp_v;
};
 
class EXRUnit : public FrameWriterUnit
{
public:
EXRUnit(FileEXR *file, FrameWriter *writer);
~EXRUnit();
FileEXR *file;
VFrame *temp_frame;
};
 
 
 
class EXRConfigVideo : public BC_Window
{
public:
EXRConfigVideo(BC_WindowBase *parent_window, Asset *asset);
~EXRConfigVideo();
 
int create_objects();
int close_event();
 
BC_WindowBase *parent_window;
Asset *asset;
};
 
 
class EXRUseAlpha : public BC_CheckBox
{
public:
EXRUseAlpha(EXRConfigVideo *gui, int x, int y);
int handle_event();
EXRConfigVideo *gui;
};
 
class EXRCompression : public BC_PopupMenu
{
public:
EXRCompression(EXRConfigVideo *gui, int x, int y, int w);
void create_objects();
int handle_event();
EXRConfigVideo *gui;
};
 
class EXRCompressionItem : public BC_MenuItem
{
public:
EXRCompressionItem(EXRConfigVideo *gui, int value);
int handle_event();
EXRConfigVideo *gui;
int value;
};
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/colors/plugincolors.inc
New file
0,0 → 1,8
#ifndef PLUGINCOLORS_INC
#define PLUGINCOLORS_INC
 
 
class YUV;
 
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/reframert/Makefile
New file
0,0 → 1,13
include ../../global_config
 
OBJS = $(OBJDIR)/reframert.o
 
OUTPUT = ../$(OBJDIR)/reframert.plugin
 
include ../../plugin_config
 
 
$(OBJDIR)/reframert.o: reframert.C
 
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/reframert/picon_png.h
New file
0,0 → 1,128
#ifndef PICON_PNG_H
#define PICON_PNG_H
 
static unsigned char picon_png[] =
{
0x00, 0x00, 0x07, 0x69,
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1e, 0x3f, 0x88,
0xb1, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0,
0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x12, 0x00,
0x00, 0x0b, 0x12, 0x01, 0xd2, 0xdd, 0x7e, 0xfc, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45,
0x07, 0xd4, 0x06, 0x09, 0x07, 0x39, 0x2f, 0x17, 0x29, 0xe8, 0xd5, 0x00, 0x00, 0x06, 0xf6, 0x49,
0x44, 0x41, 0x54, 0x78, 0xda, 0xdd, 0x5a, 0x51, 0x4c, 0x53, 0x59, 0x1a, 0xfe, 0xce, 0xbd, 0xed,
0x6d, 0x0b, 0x5c, 0x68, 0x6d, 0x87, 0x5b, 0xa8, 0x6d, 0x09, 0x42, 0x29, 0x51, 0x04, 0x02, 0xba,
0x3c, 0xa8, 0x89, 0x66, 0xb3, 0x8e, 0x89, 0x98, 0x38, 0x0f, 0xe3, 0x38, 0xa6, 0xc9, 0x64, 0x1f,
0x7c, 0x9e, 0x3a, 0xc9, 0x3c, 0x8c, 0xf2, 0x64, 0x36, 0x24, 0x44, 0x67, 0x88, 0x59, 0x17, 0x8c,
0x66, 0x4d, 0xd4, 0x10, 0xa3, 0x19, 0x13, 0x5d, 0x5e, 0x74, 0x9d, 0x07, 0xf5, 0x61, 0xc6, 0x65,
0x93, 0x65, 0x99, 0x64, 0x0c, 0x38, 0x48, 0xab, 0x50, 0x60, 0x0b, 0x08, 0x6d, 0xbd, 0xed, 0x2d,
0xbd, 0xf7, 0xec, 0x43, 0xb9, 0x6d, 0x19, 0x19, 0x17, 0x2e, 0x64, 0x2f, 0xce, 0x49, 0x4e, 0x72,
0xd2, 0xf6, 0xfc, 0xf7, 0xff, 0xfe, 0xf3, 0xff, 0xe7, 0xff, 0xbf, 0xbf, 0x17, 0xd0, 0x69, 0x74,
0x77, 0x77, 0xd7, 0x58, 0x2c, 0x16, 0x0a, 0x60, 0x43, 0x26, 0xa3, 0x17, 0x90, 0x81, 0x81, 0x01,
0x64, 0x32, 0x19, 0x00, 0x00, 0x21, 0x64, 0xdd, 0xf2, 0x0c, 0xd8, 0x04, 0xe3, 0xd3, 0x4f, 0x19,
0x74, 0x74, 0x98, 0x10, 0x89, 0xf0, 0x58, 0x5c, 0x5c, 0x5c, 0xf5, 0xbe, 0x2b, 0x57, 0x44, 0xdc,
0xbe, 0x9d, 0xd2, 0x17, 0x48, 0x22, 0x91, 0x00, 0xa5, 0x14, 0x00, 0xc0, 0xf3, 0x32, 0xea, 0xea,
0x44, 0xd4, 0xd5, 0x89, 0x6b, 0x92, 0xf1, 0xdd, 0x77, 0xf9, 0xb5, 0x6e, 0xae, 0xf5, 0xe0, 0xc1,
0x83, 0x9c, 0x6b, 0x71, 0x9c, 0x49, 0x9b, 0x3b, 0x19, 0x0c, 0xfa, 0x03, 0x49, 0x26, 0x93, 0xb9,
0x75, 0x71, 0x71, 0xb1, 0x26, 0x19, 0x2e, 0xd7, 0x07, 0xfa, 0x03, 0xd9, 0x88, 0x51, 0x5e, 0xfe,
0x9f, 0xdf, 0x06, 0x10, 0x8f, 0xa7, 0x58, 0x7f, 0x20, 0x3b, 0x77, 0xee, 0x2c, 0x52, 0xd7, 0x2c,
0xcb, 0x6a, 0x92, 0x61, 0xb5, 0xc6, 0xf4, 0x07, 0x92, 0x4a, 0xa5, 0xfc, 0xea, 0xba, 0xa2, 0x42,
0xd2, 0x24, 0x43, 0x92, 0x4a, 0xf5, 0x07, 0x32, 0x3e, 0x3e, 0x9e, 0x3b, 0x06, 0xb3, 0x59, 0xd4,
0x24, 0xe3, 0xc7, 0x1f, 0x39, 0xfd, 0x81, 0xf8, 0xfd, 0xfe, 0x9d, 0xea, 0xda, 0xe7, 0xd3, 0x96,
0xce, 0x26, 0x26, 0x36, 0x41, 0x66, 0x7f, 0xfd, 0xfa, 0x35, 0xf2, 0x27, 0x92, 0xcd, 0xce, 0x8a,
0xc2, 0x21, 0x1e, 0x37, 0x41, 0x96, 0x65, 0xc8, 0x72, 0x06, 0x92, 0x94, 0x46, 0x2c, 0x56, 0x8a,
0x50, 0x48, 0x04, 0xa5, 0x0a, 0x16, 0x17, 0x2d, 0x98, 0x9c, 0x2c, 0xc9, 0x65, 0xff, 0x27, 0x4f,
0x14, 0xfd, 0x81, 0x30, 0x4c, 0xde, 0x19, 0x3e, 0xfc, 0x90, 0x81, 0xd1, 0x08, 0x28, 0x0a, 0x90,
0x48, 0xc8, 0x50, 0x14, 0x05, 0xb2, 0x4c, 0x91, 0xd5, 0x37, 0x56, 0xb0, 0xeb, 0xcd, 0xd2, 0xdc,
0x44, 0xb5, 0x56, 0x45, 0x45, 0xc5, 0xeb, 0xd1, 0xd1, 0x51, 0x00, 0xc0, 0xec, 0xac, 0x6a, 0xd9,
0xf4, 0xd2, 0x5c, 0xdb, 0xe0, 0x79, 0x5e, 0x3f, 0x20, 0x82, 0x20, 0xfc, 0xd9, 0xe7, 0xf3, 0xed,
0x1e, 0x1b, 0x1b, 0xab, 0x55, 0x14, 0xa5, 0x30, 0xcb, 0x4f, 0xc5, 0x62, 0xb1, 0x08, 0x21, 0x04,
0x76, 0xbb, 0x1d, 0x4e, 0xa7, 0x13, 0xc3, 0xc3, 0xc3, 0xff, 0x52, 0x4b, 0x12, 0xbb, 0xdd, 0xfe,
0x62, 0x7c, 0x7c, 0x7c, 0xbe, 0x50, 0x56, 0x5b, 0x5b, 0xdb, 0x0c, 0x7e, 0x2b, 0x83, 0x8c, 0x8d,
0x8d, 0x31, 0xb7, 0x6e, 0xdd, 0xf2, 0x77, 0x77, 0x77, 0x1f, 0x98, 0x9d, 0x9d, 0x5d, 0x0a, 0x3a,
0x25, 0x57, 0xd0, 0xa9, 0x96, 0x60, 0x18, 0x06, 0x06, 0x83, 0xc1, 0x50, 0x55, 0x55, 0xd5, 0xf0,
0xe2, 0xc5, 0x0b, 0xd4, 0xd7, 0xd7, 0x37, 0xda, 0x6c, 0xb6, 0xcb, 0xbd, 0xbd, 0xbd, 0x97, 0x7c,
0x3e, 0xdf, 0xff, 0x4d, 0xe1, 0x60, 0x30, 0x68, 0xbc, 0x7a, 0xf5, 0x2a, 0xab, 0xea, 0xe7, 0x70,
0x38, 0xd0, 0xd3, 0xd3, 0xb3, 0x48, 0xf6, 0xef, 0xdf, 0xff, 0x64, 0x68, 0x68, 0x68, 0x8f, 0x0a,
0x62, 0x2d, 0xc3, 0x66, 0xb3, 0xe1, 0xe0, 0xc1, 0x83, 0xc6, 0x9b, 0x37, 0x6f, 0x66, 0xd6, 0xba,
0xf7, 0xe8, 0xd1, 0xa3, 0xbb, 0xfa, 0xfb, 0xfb, 0xf7, 0xaa, 0x37, 0x10, 0xcb, 0xb2, 0x8c, 0xc3,
0xe1, 0x68, 0x5c, 0x49, 0x0f, 0x45, 0x51, 0xe0, 0x76, 0xbb, 0xeb, 0xa3, 0xd1, 0xa8, 0x85, 0x65,
0xd9, 0xad, 0xa2, 0x28, 0x96, 0xaa, 0x14, 0x80, 0x65, 0x59, 0xec, 0xd9, 0xb3, 0xe7, 0x1f, 0x20,
0x84, 0xac, 0x8b, 0x62, 0x76, 0x75, 0x75, 0x35, 0x6a, 0xb1, 0xac, 0xcd, 0x66, 0x1b, 0xdf, 0x28,
0x9a, 0x5b, 0x5e, 0x5e, 0x4e, 0x0d, 0x2a, 0xb2, 0x8f, 0x3e, 0x22, 0xf8, 0xec, 0xb3, 0x2c, 0xe5,
0xa4, 0x14, 0xa0, 0x34, 0x1f, 0x80, 0x84, 0x30, 0xc8, 0xb2, 0x51, 0x82, 0xea, 0x6a, 0x0b, 0x7a,
0x7a, 0x12, 0xb8, 0x78, 0x31, 0x47, 0x59, 0xdf, 0x49, 0x26, 0x0e, 0x1c, 0x38, 0xb0, 0x63, 0x70,
0x70, 0xf0, 0x6c, 0x6d, 0x6d, 0xed, 0xd0, 0x99, 0x33, 0x67, 0xce, 0xb6, 0xb7, 0xb7, 0x67, 0x96,
0xf2, 0xc8, 0x8a, 0xfb, 0x7e, 0x8d, 0xf6, 0xf2, 0xbc, 0x19, 0x3c, 0x9f, 0x82, 0xcb, 0x55, 0x0a,
0xa7, 0x33, 0x8e, 0xc9, 0x49, 0x60, 0x60, 0x20, 0xab, 0xe3, 0xa9, 0x53, 0xa7, 0xb2, 0x7a, 0x03,
0xa0, 0x5f, 0x7e, 0x09, 0x4a, 0xe9, 0xea, 0xe6, 0x57, 0x5f, 0xe5, 0xad, 0xb1, 0x6d, 0xdb, 0xb6,
0xe3, 0xff, 0xc3, 0xf2, 0x17, 0x01, 0x50, 0x42, 0x08, 0xf5, 0xf9, 0x7c, 0xdf, 0x74, 0x76, 0x76,
0xaa, 0x37, 0x65, 0x14, 0x00, 0x6d, 0x69, 0xb1, 0xd1, 0xef, 0xbf, 0xdf, 0x42, 0x9f, 0x3e, 0xb5,
0xd3, 0xb1, 0x31, 0x3b, 0x9d, 0x9a, 0x22, 0x2b, 0xce, 0x44, 0xc2, 0xbc, 0x4c, 0x87, 0x6f, 0xbf,
0xcd, 0xeb, 0x70, 0xe3, 0xc6, 0x8d, 0xf5, 0x37, 0x1f, 0x2c, 0x16, 0x4b, 0x43, 0x6f, 0x6f, 0xaf,
0xcb, 0xeb, 0xf5, 0x7e, 0x52, 0x59, 0x59, 0xf9, 0x49, 0x20, 0x10, 0x68, 0xf2, 0xfb, 0xfd, 0x3e,
0x97, 0xcb, 0xe5, 0x3b, 0x77, 0xee, 0x9c, 0xaf, 0xa9, 0xa9, 0xe9, 0x81, 0xc9, 0x64, 0x02, 0xa5,
0x14, 0xcf, 0x9f, 0x3f, 0xff, 0xfc, 0xc2, 0x85, 0x0b, 0x7f, 0xed, 0xea, 0xea, 0xca, 0x5d, 0xfb,
0x65, 0x65, 0x04, 0x6d, 0x6d, 0x73, 0xd8, 0xbd, 0x7b, 0x16, 0x55, 0x55, 0xb3, 0x10, 0x04, 0xba,
0xe2, 0x2c, 0x2e, 0x4e, 0x2d, 0x7b, 0x6e, 0x51, 0x51, 0xae, 0x78, 0x46, 0x2c, 0x16, 0xcb, 0xe7,
0x11, 0x42, 0x18, 0x00, 0xca, 0x6a, 0x2f, 0xbb, 0x25, 0x63, 0x00, 0x2c, 0xcb, 0x1a, 0xcf, 0x9f,
0x3f, 0xdf, 0x17, 0x0e, 0x87, 0xf7, 0x01, 0x40, 0x5f, 0x5f, 0x5f, 0xce, 0x6c, 0xa7, 0x4f, 0x9f,
0x46, 0x3a, 0x9d, 0x4e, 0xa8, 0x94, 0x94, 0x52, 0x8a, 0xa9, 0xa9, 0xa9, 0x40, 0x5f, 0x5f, 0xdf,
0x4f, 0xeb, 0x35, 0xa0, 0xd3, 0x59, 0x06, 0x40, 0x54, 0x0b, 0xd0, 0x7c, 0xd1, 0x68, 0xb5, 0x96,
0xad, 0x5a, 0x48, 0x21, 0x35, 0x4d, 0x26, 0x93, 0xe9, 0x4c, 0x26, 0x93, 0x33, 0x88, 0x2c, 0x67,
0x4b, 0x0c, 0x4a, 0x29, 0x24, 0x49, 0x02, 0xa5, 0xb4, 0xa4, 0xb0, 0x33, 0x42, 0x29, 0xc5, 0xb3,
0x67, 0xcf, 0x7e, 0xa7, 0xc6, 0x42, 0x2a, 0x95, 0xd2, 0xc8, 0x0e, 0x67, 0x72, 0x3c, 0x66, 0x62,
0x62, 0x22, 0x0b, 0xc4, 0x60, 0x60, 0xd0, 0xd8, 0xa8, 0xac, 0x5a, 0x88, 0xc7, 0x63, 0x2e, 0xe0,
0x04, 0x92, 0x23, 0x18, 0x0c, 0x9e, 0xa8, 0xa9, 0xa9, 0xf9, 0x13, 0x80, 0xbf, 0xa8, 0xd3, 0xed,
0x76, 0xff, 0xbd, 0xa4, 0xa4, 0xe4, 0x87, 0xa2, 0xa2, 0xa2, 0x1f, 0x8c, 0x46, 0x63, 0xb4, 0x70,
0xff, 0x8e, 0x1d, 0x3b, 0x9e, 0x59, 0xad, 0x56, 0x00, 0x80, 0x28, 0x8a, 0x1a, 0x4f, 0x04, 0x28,
0x5b, 0xb2, 0x7d, 0x28, 0x14, 0xca, 0x1a, 0xa9, 0xa9, 0xa9, 0x74, 0xd5, 0x81, 0x4e, 0x29, 0xe8,
0xe8, 0x68, 0x3e, 0xd0, 0x3c, 0x1e, 0xcf, 0xa5, 0x77, 0x3d, 0x70, 0xdf, 0xbe, 0x7d, 0xbf, 0xe7,
0x38, 0x4e, 0x54, 0x7f, 0x6f, 0xb3, 0xd9, 0xfe, 0x19, 0x08, 0x04, 0xb6, 0xd8, 0xed, 0xf6, 0x68,
0xf6, 0xd9, 0x58, 0xd3, 0xb3, 0x0b, 0x67, 0x5d, 0xdd, 0x07, 0x14, 0x00, 0xf5, 0xfb, 0xfd, 0xd9,
0x60, 0xb7, 0xdb, 0x93, 0x9a, 0x7d, 0x35, 0x1e, 0x8f, 0xbf, 0xf3, 0xfb, 0xb9, 0xb9, 0xb9, 0xb3,
0xe9, 0x74, 0xda, 0xb2, 0x54, 0x28, 0x3e, 0x6d, 0x69, 0x69, 0xf9, 0xc3, 0xf5, 0xeb, 0xd7, 0xe7,
0x36, 0x22, 0xcb, 0xd7, 0xd6, 0x66, 0x5d, 0x76, 0x64, 0x64, 0x24, 0x1b, 0xec, 0xa2, 0x68, 0xc6,
0xfd, 0xfb, 0x72, 0x81, 0x1f, 0x67, 0xb3, 0x69, 0x61, 0xc9, 0x5d, 0x78, 0xbd, 0xcf, 0xcc, 0x18,
0xc0, 0x30, 0x19, 0x28, 0x8a, 0xb2, 0x8c, 0x57, 0xac, 0x34, 0x1a, 0x1a, 0x1a, 0xfe, 0x16, 0x0a,
0x85, 0xaa, 0xbc, 0x5e, 0xef, 0x43, 0x87, 0xc3, 0xf1, 0xc7, 0x87, 0x0f, 0x1f, 0x2e, 0x16, 0x96,
0xf1, 0x94, 0xb2, 0x00, 0x64, 0x4d, 0x40, 0x9a, 0x9b, 0x65, 0xf4, 0xf7, 0xe7, 0x75, 0x5d, 0x6f,
0x66, 0xbd, 0xa4, 0x45, 0x89, 0xca, 0xca, 0xca, 0x21, 0x00, 0xd4, 0x62, 0xb1, 0xd0, 0x74, 0xba,
0x44, 0x93, 0x6b, 0x75, 0x76, 0x6e, 0xd9, 0x98, 0x26, 0x36, 0x21, 0x04, 0xad, 0xad, 0xad, 0xd3,
0x5a, 0xf6, 0x8a, 0xa2, 0xf8, 0x44, 0x6d, 0xd4, 0x85, 0xc3, 0xeb, 0x67, 0x13, 0x06, 0x96, 0x65,
0xbf, 0x28, 0x64, 0x6b, 0xea, 0x15, 0x59, 0x58, 0xfd, 0xb2, 0x2c, 0xbb, 0x8c, 0xd1, 0x11, 0x42,
0x50, 0x5d, 0x5d, 0x8d, 0xe6, 0xe6, 0xe6, 0xe1, 0x13, 0x27, 0x4e, 0xdc, 0x3f, 0x7c, 0xf8, 0xb0,
0x96, 0x76, 0x67, 0x8e, 0xfa, 0x2d, 0x2c, 0xcc, 0xbf, 0xf5, 0x7d, 0x26, 0x53, 0x84, 0x97, 0x2f,
0x15, 0xa4, 0xd3, 0x12, 0xa6, 0xa7, 0x5d, 0x88, 0x46, 0x67, 0xde, 0xba, 0xaa, 0x07, 0x07, 0x25,
0xe8, 0x3e, 0x76, 0xed, 0xda, 0xd5, 0xa9, 0xba, 0x45, 0x53, 0x13, 0x43, 0x5b, 0x5b, 0xad, 0x74,
0xeb, 0x56, 0x07, 0xb5, 0x5a, 0xcd, 0xd4, 0x6c, 0x06, 0x35, 0x99, 0x18, 0xca, 0x30, 0xcc, 0x5a,
0x5c, 0x5c, 0x9f, 0x61, 0xb7, 0xdb, 0x3f, 0xde, 0xa8, 0xea, 0xd7, 0x6a, 0xb5, 0x2a, 0xba, 0x51,
0xdd, 0x60, 0x30, 0xf8, 0xef, 0xcb, 0x97, 0x2f, 0x4f, 0xbe, 0x7a, 0xf5, 0xaa, 0x4c, 0xe5, 0xdd,
0x92, 0x24, 0xfd, 0x24, 0x49, 0x52, 0x8a, 0xe7, 0x79, 0x58, 0xad, 0x56, 0xc4, 0xe3, 0xf1, 0xe7,
0x6f, 0xde, 0xbc, 0x89, 0x0b, 0x82, 0x30, 0x1b, 0x89, 0x44, 0x5e, 0xd6, 0xd4, 0xd4, 0xc0, 0x6c,
0x36, 0x2f, 0x93, 0x63, 0x32, 0x99, 0x70, 0xe8, 0xd0, 0xa1, 0x61, 0x82, 0x4d, 0x38, 0x1e, 0x3f,
0x7e, 0x6c, 0xbc, 0x73, 0xe7, 0x4e, 0x71, 0x34, 0xba, 0xac, 0x20, 0x80, 0x2c, 0xcb, 0x78, 0xf4,
0xe8, 0x11, 0x26, 0x27, 0x27, 0x11, 0x08, 0x04, 0xb6, 0xdd, 0xbd, 0x7b, 0xb7, 0x2c, 0x9d, 0x4e,
0xe3, 0xd8, 0xb1, 0x63, 0x3f, 0xeb, 0x06, 0xa4, 0xa3, 0xa3, 0xa3, 0xf4, 0xda, 0xb5, 0x6b, 0x5f,
0x47, 0xa3, 0xd1, 0x0a, 0x42, 0x88, 0xbf, 0x30, 0x90, 0x39, 0x8e, 0x2b, 0xe2, 0x38, 0xce, 0x29,
0xcb, 0x6f, 0xe7, 0x97, 0x64, 0x32, 0x89, 0x5f, 0x7e, 0xee, 0x70, 0x38, 0xa6, 0x75, 0xb3, 0xba,
0x20, 0x08, 0x1b, 0x16, 0x23, 0xe5, 0xe5, 0xe5, 0x54, 0xb7, 0x18, 0x99, 0x9e, 0x9e, 0x2e, 0x00,
0xc5, 0x82, 0xe7, 0xf3, 0x17, 0x8f, 0xd1, 0x68, 0x44, 0x5d, 0x1d, 0x0b, 0x83, 0x41, 0x5c, 0xb1,
0xb1, 0xc7, 0xf3, 0x3c, 0x08, 0x29, 0xc1, 0x95, 0x2b, 0xd9, 0x9e, 0xe9, 0x91, 0x23, 0x47, 0x74,
0x0d, 0x85, 0xdc, 0x89, 0xdc, 0xbe, 0xbd, 0x65, 0xcd, 0x59, 0x3d, 0x1c, 0x26, 0x54, 0xed, 0x37,
0x9c, 0x3c, 0x79, 0x92, 0xbe, 0xd7, 0x7f, 0xf4, 0x2c, 0x3b, 0xa9, 0xf7, 0xb8, 0x25, 0xb7, 0xf9,
0x80, 0x68, 0x7b, 0x5f, 0x80, 0x6e, 0x0e, 0x20, 0x5e, 0xaf, 0xb7, 0x3e, 0xdf, 0x69, 0x31, 0xbe,
0xbf, 0xae, 0x15, 0x89, 0x44, 0xcc, 0xf9, 0x7e, 0x41, 0x74, 0xcd, 0xfb, 0x0b, 0x0b, 0xd9, 0x85,
0x85, 0x05, 0xfd, 0x80, 0xa8, 0x8d, 0x41, 0xad, 0xae, 0x25, 0x08, 0x0c, 0x2a, 0x2b, 0x2d, 0x00,
0x80, 0x7b, 0xf7, 0xee, 0x6d, 0x8e, 0x77, 0x51, 0xd4, 0xe0, 0x8d, 0x46, 0x2d, 0x18, 0x19, 0xe1,
0x30, 0x33, 0x13, 0x7f, 0x47, 0x41, 0x4b, 0xe0, 0xf1, 0x94, 0x41, 0x10, 0x12, 0x38, 0x7e, 0xdc,
0x86, 0xae, 0xae, 0xc4, 0xb2, 0x97, 0x0f, 0xf4, 0xc8, 0xec, 0x97, 0xd4, 0x3c, 0xd2, 0xde, 0x5e,
0x4a, 0xfd, 0x7e, 0x9e, 0x72, 0x1c, 0xb7, 0xea, 0x6c, 0xce, 0xb2, 0x2c, 0x35, 0x99, 0x4c, 0xfa,
0x97, 0xf1, 0x6e, 0xb7, 0xfb, 0xfe, 0x46, 0x95, 0x28, 0x00, 0xf4, 0x2b, 0x51, 0x7e, 0xf9, 0xfe,
0x89, 0xd3, 0xe9, 0xc4, 0xde, 0xbd, 0x7b, 0xb1, 0x7d, 0xfb, 0x76, 0x08, 0x82, 0xf0, 0xab, 0xcd,
0xec, 0x4c, 0x26, 0x83, 0x50, 0x28, 0x84, 0xf9, 0xf9, 0x79, 0x84, 0xc3, 0x61, 0xcc, 0xcd, 0xcd,
0x81, 0x65, 0x59, 0xfc, 0x17, 0x04, 0x96, 0x17, 0x44, 0x31, 0xf3, 0xee, 0x73, 0x00, 0x00, 0x00,
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/reframert/reframert.C
New file
0,0 → 1,418
#include "bcdisplayinfo.h"
#include "clip.h"
#include "defaults.h"
#include "filexml.h"
#include "guicast.h"
#include "language.h"
#include "pluginvclient.h"
#include "transportque.h"
 
#include <string.h>
 
class ReframeRT;
class ReframeRTWindow;
 
class ReframeRTConfig
{
public:
ReframeRTConfig();
void boundaries();
int equivalent(ReframeRTConfig &src);
void copy_from(ReframeRTConfig &src);
void interpolate(ReframeRTConfig &prev,
ReframeRTConfig &next,
int64_t prev_frame,
int64_t next_frame,
int64_t current_frame);
double scale;
int stretch;
};
 
 
class ReframeRTScale : public BC_TumbleTextBox
{
public:
ReframeRTScale(ReframeRT *plugin,
ReframeRTWindow *gui,
int x,
int y);
int handle_event();
ReframeRT *plugin;
};
 
class ReframeRTStretch : public BC_Radial
{
public:
ReframeRTStretch(ReframeRT *plugin,
ReframeRTWindow *gui,
int x,
int y);
int handle_event();
ReframeRT *plugin;
ReframeRTWindow *gui;
};
 
class ReframeRTDownsample : public BC_Radial
{
public:
ReframeRTDownsample(ReframeRT *plugin,
ReframeRTWindow *gui,
int x,
int y);
int handle_event();
ReframeRT *plugin;
ReframeRTWindow *gui;
};
 
class ReframeRTWindow : public BC_Window
{
public:
ReframeRTWindow(ReframeRT *plugin, int x, int y);
~ReframeRTWindow();
void create_objects();
int close_event();
ReframeRT *plugin;
ReframeRTScale *scale;
ReframeRTStretch *stretch;
ReframeRTDownsample *downsample;
};
 
PLUGIN_THREAD_HEADER(ReframeRT, ReframeRTThread, ReframeRTWindow)
 
class ReframeRT : public PluginVClient
{
public:
ReframeRT(PluginServer *server);
~ReframeRT();
 
PLUGIN_CLASS_MEMBERS(ReframeRTConfig, ReframeRTThread)
 
int load_defaults();
int save_defaults();
void save_data(KeyFrame *keyframe);
void read_data(KeyFrame *keyframe);
void update_gui();
int is_realtime();
int is_synthesis();
int process_buffer(VFrame *frame,
int64_t start_position,
double frame_rate);
};
 
 
 
 
 
 
 
REGISTER_PLUGIN(ReframeRT);
 
 
 
ReframeRTConfig::ReframeRTConfig()
{
scale = 1.0;
stretch = 0;
}
 
int ReframeRTConfig::equivalent(ReframeRTConfig &src)
{
return fabs(scale - src.scale) < 0.0001 &&
stretch == src.stretch;
}
 
void ReframeRTConfig::copy_from(ReframeRTConfig &src)
{
this->scale = src.scale;
this->stretch = src.stretch;
}
 
void ReframeRTConfig::interpolate(ReframeRTConfig &prev,
ReframeRTConfig &next,
int64_t prev_frame,
int64_t next_frame,
int64_t current_frame)
{
// double next_scale = (double)(current_frame - prev_frame) / (next_frame - prev_frame);
// double prev_scale = (double)(next_frame - current_frame) / (next_frame - prev_frame);
 
// this->scale = prev.scale * prev_scale + next.scale * next_scale;
this->scale = prev.scale;
this->stretch = prev.stretch;
}
 
void ReframeRTConfig::boundaries()
{
if(fabs(scale) < 0.0001) scale = 0.0001;
}
 
 
 
 
 
 
 
 
ReframeRTWindow::ReframeRTWindow(ReframeRT *plugin, int x, int y)
: BC_Window(plugin->gui_string,
x,
y,
210,
160,
200,
160,
0,
0,
1)
{
this->plugin = plugin;
}
 
ReframeRTWindow::~ReframeRTWindow()
{
}
 
void ReframeRTWindow::create_objects()
{
int x = 10, y = 10;
 
add_subwindow(new BC_Title(x, y, "Scale by amount:"));
y += 20;
scale = new ReframeRTScale(plugin,
this,
x,
y);
scale->create_objects();
scale->set_increment(0.1);
y += 30;
add_subwindow(stretch = new ReframeRTStretch(plugin,
this,
x,
y));
y += 30;
add_subwindow(downsample = new ReframeRTDownsample(plugin,
this,
x,
y));
show_window();
flush();
}
 
WINDOW_CLOSE_EVENT(ReframeRTWindow)
 
 
PLUGIN_THREAD_OBJECT(ReframeRT, ReframeRTThread, ReframeRTWindow)
 
 
 
 
 
 
ReframeRTScale::ReframeRTScale(ReframeRT *plugin,
ReframeRTWindow *gui,
int x,
int y)
: BC_TumbleTextBox(gui,
(float)plugin->config.scale,
(float)-1000,
(float)1000,
x,
y,
100)
{
this->plugin = plugin;
}
 
int ReframeRTScale::handle_event()
{
plugin->config.scale = atof(get_text());
plugin->config.boundaries();
plugin->send_configure_change();
return 1;
}
 
ReframeRTStretch::ReframeRTStretch(ReframeRT *plugin,
ReframeRTWindow *gui,
int x,
int y)
: BC_Radial(x, y, plugin->config.stretch, "Stretch")
{
this->plugin = plugin;
this->gui = gui;
}
 
int ReframeRTStretch::handle_event()
{
plugin->config.stretch = get_value();
gui->downsample->update(!get_value());
plugin->send_configure_change();
return 1;
}
 
 
ReframeRTDownsample::ReframeRTDownsample(ReframeRT *plugin,
ReframeRTWindow *gui,
int x,
int y)
: BC_Radial(x, y, !plugin->config.stretch, "Downsample")
{
this->plugin = plugin;
this->gui = gui;
}
 
int ReframeRTDownsample::handle_event()
{
plugin->config.stretch = !get_value();
gui->stretch->update(!get_value());
plugin->send_configure_change();
return 1;
}
 
 
 
 
 
 
ReframeRT::ReframeRT(PluginServer *server)
: PluginVClient(server)
{
PLUGIN_CONSTRUCTOR_MACRO
}
 
 
ReframeRT::~ReframeRT()
{
PLUGIN_DESTRUCTOR_MACRO
}
 
char* ReframeRT::plugin_title() { return N_("ReframeRT"); }
int ReframeRT::is_realtime() { return 1; }
int ReframeRT::is_synthesis() { return 1; }
 
#include "picon_png.h"
NEW_PICON_MACRO(ReframeRT)
 
SHOW_GUI_MACRO(ReframeRT, ReframeRTThread)
 
RAISE_WINDOW_MACRO(ReframeRT)
 
SET_STRING_MACRO(ReframeRT)
 
LOAD_CONFIGURATION_MACRO(ReframeRT, ReframeRTConfig)
 
int ReframeRT::process_buffer(VFrame *frame,
int64_t start_position,
double frame_rate)
{
load_configuration();
 
// Calculate input frame number from the start of the effect, not the timeline.
int64_t input_frame = 0;
double input_rate = frame_rate;
if(config.stretch)
{
// Keep same rate but stretch time.
int64_t effect_start = get_source_start();
int64_t relative_frame = start_position - get_source_start();
int64_t scaled_relative = (int64_t)(relative_frame * config.scale);
input_frame = scaled_relative + effect_start;
}
else
{
// Change rate
input_rate = frame_rate * config.scale;
input_frame = (int64_t)(start_position * input_rate / frame_rate);
}
// printf("ReframeRT::process_buffer %f %d %lld %f\n",
// config.scale,
// config.stretch,
// input_frame,
// input_rate);
 
read_frame(frame,
0,
input_frame,
input_rate);
 
return 0;
}
 
 
 
 
 
int ReframeRT::load_defaults()
{
char directory[BCTEXTLEN];
// set the default directory
sprintf(directory, "%sreframert.rc", BCASTDIR);
 
// load the defaults
defaults = new Defaults(directory);
defaults->load();
 
config.scale = defaults->get("SCALE", config.scale);
config.stretch = defaults->get("STRETCH", config.stretch);
return 0;
}
 
int ReframeRT::save_defaults()
{
defaults->update("SCALE", config.scale);
defaults->update("STRETCH", config.stretch);
defaults->save();
return 0;
}
 
void ReframeRT::save_data(KeyFrame *keyframe)
{
FileXML output;
 
// cause data to be stored directly in text
output.set_shared_string(keyframe->data, MESSAGESIZE);
output.tag.set_title("REFRAMERT");
output.tag.set_property("SCALE", config.scale);
output.tag.set_property("STRETCH", config.stretch);
output.append_tag();
output.terminate_string();
}
 
void ReframeRT::read_data(KeyFrame *keyframe)
{
FileXML input;
 
input.set_shared_string(keyframe->data, strlen(keyframe->data));
 
int result = 0;
 
while(!input.read_tag())
{
if(input.tag.title_is("REFRAMERT"))
{
config.scale = input.tag.get_property("SCALE", config.scale);
config.stretch = input.tag.get_property("STRETCH", config.stretch);
}
}
}
 
void ReframeRT::update_gui()
{
if(thread)
{
int changed = load_configuration();
 
if(changed)
{
thread->window->lock_window("ReframeRT::update_gui");
thread->window->scale->update((float)config.scale);
thread->window->stretch->update(config.stretch);
thread->window->downsample->update(!config.stretch);
thread->window->unlock_window();
}
}
}
 
 
 
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/reframert/picon.png
New file
0,0 → 1,14
‰PNG

+IHDR22?ˆ±bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÔ 9/)èÕöIDATxÚÝZQLSYþνím \hm‡[¨m B)Qº<¨‰f³Ž‰˜8ã8¦Éd|ž:É<Œòd6$DgˆYŒfMÔ£]^tõaÆe“e™d 8H«P` m½í-½÷ìC¹m.d/ÎINrÒöü÷ÿþóÿçÿ¿¿Ðitww×X,
+`C&£d2!dÝò ØãÓOtt˜‰ðX\\\õ¾+WDܾÒH"‘¥Àó2êêDÔՉk’ñÝwùµn®õàÁƒœkqœI›; úI&“¹uqq±&.×úوQ^þŸß§X ;wî,R×,Ëj’aµÆô’J¥ü꺢BÒ$C’Jõ2>>ž;³YÔ$ãÇ9ýøýþêÚçӖÎ&&6Afýú5ò'’ÍΊÂ!7A–eÈr’”F,VŠPH¥
+-˜œ,Éeÿ'Oý0LÞ>üÑ(
+HÈP²L‘Õ7V°ëÍÒÜDµVEEÅëÑÑQÀì¬jÙôÒ\Ûày^? ‚ üÙçóí«U¥0ËOÅb±!v»N§ÃÃÃÿRK»Ýþb|||¾PV[[Û ~+ƒŒ1·nÝòwww˜]
+:%WЩ–`ƒÁPUUÕðâÅ Ô××7Úl¶Ë½½½—|>ßÿMá`0h¼zõ*«êçp8ÐÓÓ³Höïßÿdhhh
+*²>"øì³,夠4€„0ȲQ‚êj zz¸x1GYßI&8°cppðlmmíЙ3gζ··g–òȊû~öò¼<Ÿ‚ËU
+§3ŽÉI`` «ã©S§²z _~ JéêæW_å­±mÛ¶ãÿÃòPBõù|ßtvvª7emi±Ñï¿ßBŸ>µÓ±1;š"+ÎD¼L‡o¿Íëpãƍõ7,KCoo¯Ëëõ~RYYùI hòûý>—Ëå;w©©éÉd¥ϟ?ÿü… íêêÊ]ûeemmsؽ{UU³ºâ,.N-{nQQ®xF,ËçBÊj/»%c,Ëϟ?߇÷@___Îl§OŸF:N¨””RŠ©©©@__ßOë5 ÓY@T Ð|Ñhµ–­ZH!5M&“éL&“3ˆ,gK J)$I¥´¤°3B)ųgÏ~§ÆB*•ÒÈgr<fbb" Ä``Ðب¬ZˆÇc.à’# ž¨©©ù€¿¨Óívÿ½¤¤ä‡¢¢¢ŒFc´pÿŽ;žY­V€(ŠO([²}(Ê©©©tՁN)èèh>Ð<Ï¥w=pß¾}¿ç8NTo³Ùþ¶ØíöhöÙXÓ³ g]ÝõûýÙ`·Û“š}5¿óû¹¹¹³étÚ²T(>miiùÃõë×ç6"Ë×Öf]vdd$ì¢hÆýûrg³iaÉ]x½ÏÌÀ0(Š²ŒW¬4þ
+…ª¼^ïC‡ÃñLJ.–ñ”²dM@š›eô÷çu]of½¤E‰ÊÊÊ!Ôb±ÐtºD“kuvn٘&6!­­­ÓZöŠ¢øDmԅÃëg–e¿(dkêYXý²,»ŒÑBP]]æææá'NÜ?|ø°–vgŽú-,Ì¿õ}&S„—/¤Ó¦§]ˆFgÞºª%è>víÚÕ©ºESC[[­tëVµZÍÔl5™Ê0ÌZ\\Ÿa·Û?Þ¨ê×jµ*ºQÝ`0øï˗/O¾zõªLåݒ$ý$IRŠçyX­VÄãñçoÞ¼‰ ‚0‰D^ÖÔÔÀl6/“c2™pèСa‚M8?~l¼sçNq4º¬ €,Ëxôè&''¶Ý½{·,Nãرc?뤣££ôÚµk_G£Ñ
+…܉ܾ½eÍY=&Tí7œ<y’¾×ô,;©÷¸%·ù€h{_€n ^¯·>ßi1¾¿®‰DÌù~AtÍû م…ý€¨A­®% *+-€{÷îmŽwQÔàF-á03GAKàñ”A8~܆®®Ä²—ôÈì—Ô<ÒÞ^Jý~žr·êlβ,5™Lú—ñn·ûþF•(ô+Q~ùþ‰ÓéÄÞ½{±}ûv‚ð«ÍìL&ƒP(„ùùy„ÃaÌÍ́eYü–D1óîsIEND®B`‚
\ No newline at end of file
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/radial_checkedhi.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/ymeter_green.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/checkbox_up.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/xmeter_red.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/xmeter_over.png
New file
0,0 → 1,9
‰PNG

+êÏ''Ðœš&“@‡ðê7›‡qñ%­Ö ½¶FÞj𸑩º49øÌÁurºH0ۆ
+]öéµO_óö‰
+]dŠØJV™ÖrRÌÓé֍z<xWοý=ûÀbSxd¢IEND®B`‚
\ No newline at end of file
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/radial_up.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/ymeter_over.png
New file
0,0 → 1,7
‰PNG

+IHDR(νËúgAMA± üabKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÑ37…‘¡ÃIDATxÚՕ±JA†¿ßÁf­„¼;_a«¼@ÚÓF|áL#¢`acsi}«ÓÂ"ml„CEH@­,Æ"³f³¹Ë`¡Ëír÷ÏÎþÿ?³ðožÈ›`EçÝZhӂ¡-É5ÕQ
+ÌD@Þa¸wÄ äÆPR#ØÈ\”5ºh
+Z^ŒVõèÇ`uŠœŠ‘•vÕ»ã¥Ò­ë<£$ø½u6)æ ú.µ|œÀ³©’Å—Aç™Ïª‚ãBçd^ëp6t¦Ø‚ת]9<”vò=è)!Í;–VGú OkðZìj\Èy!«î< ˆcÓê’—‘だs×uKÌ¿êþÄó©±B֊ߦëIEND®B`‚
\ No newline at end of file
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/xmeter_white.png
New file
0,0 → 1,14
‰PNG

+IHDR<¸¬qbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÔ  !Ž‚|—IDATxÚÕ×Mk]UàwÜ{“ܤ%m­X
+÷ëœ}ö×Úk9Æâ?8ïtX{¯w+¼–¾¶"Ø$¢­ózé³(´("ÂÞÇQ]ûG΅;ÞÇ{7o~ÇÿžŸ`vw¿h­·1k"ŒÉ¤æɤRm›E¼z6s˜ÏÝ®sáÚ­[Û'à‡¿,,tvúýÅóûû‡e4šÊòò’1F+i•–Y0›Õ<Ÿ;VJ©’™Nëç΅˷oÿp¨îßÿÊ..ö†§O÷מþ4¢K§®˜wW/ªy3Ǽ©P
+µ ̘7&Õ¯f/¸êòL^Úé´ÞišpŖ›Ö~{:.ƒÞ§æ÷?R9gXm¡µ†ˆAÛ¢ ”FO/éT]@w©b‘êfþܦD[¥0Žþùøқªnj%eáv]àÂ(Â`.äœõ
+¿E¯ä…&*[6Æ´>™0/ÉS¹
+1F0>zøèÁÜ.0CRB¢„\rÉXN+Š™%ç²n›&ž ÊpGMë)¬í@DR„Ï¡u`ABŠˆùμhD 9Óë\w»ö¬‹™Ö§´1öxJFŒŒv½Ò`A“<œ¯Ñ„!t{g‹;
+ѤúL”‘(¡uk ‚êàЇ&4°ËY¼*%zb wc̺/j<³1F
+œ Êû„Ò.]÷ðÌÕ«ŸYfÞ,…·ˆÊ:Q9'ҺϕQÎô(çr‡¨Ü{üxïd·þ5H¾ËE%ÇIEND®B`‚
\ No newline at end of file
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/checkbox_uphi.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/checkbox_down.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/radial_uphi.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/radial_down.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/xmeter_green.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/checkbox_checked.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/setformat_bg2.png
New file
0,0 → 1,314
‰PNG

+IHDRX.cvbKGDÿÿÿ ½§“ pHYsÁ;vYatIMEÔ3übI2 IDATxÚìÝ[Œ]Yzöÿ^ûrΩSU§ŠÅK³9=Ý­Ñd&Šô–ä-È[â0ä8°$[¹Ø`übDN#Gi&
+|ùóŸÇÛ×®ág¿ùM+"bÀ""ú¤p5 ΖK¼û6þÉ÷¾‡ßÿðCœ,—hª
+7ŽŽð¥·ßƗÞz o^¾Œ?ɪ1`}|¸²q§àÃÅßýþ÷ñß{ß¾u ó¶Åt4»ׯãGÞy_¸qWð'~ñ®ˆˆ‹ˆè¢p%;{­ñðüïݺ…ßûîwñ>²ï1›NñÅ7ðc_øÞ½~†ìDĀEDôxáêÁÙ¾}ë~ï;ßÁ{·o£ííáKo½…ûÂðÎoàg~åW®ˆˆ‹ˆè」põ­›7ñ»ï½‡÷c¸º2›áŸûmüØ»ïâóo¼?ÅÙVDĀEDôÉáÊz¿®þŸï|ïß¾Á\;<Ä¿ðî»øÑwÞÁ[W®pp(1`ý p%£žŸãÛ·n¥Ê•ÖoáGßy?ö…/àÆÑþÝ_þe†+"bÀ""úAáj<\,ðÞ­[øÝo;U®Þ8:½û.~ô‡~Ÿ»|ÿÎ/ýý¶"zÜp¥µÆiÅð{ßý.¾{çz­qõà?úÎ; WDD XDô¸äø›óÕ
+ß»sÿø½÷ðÞ­[膗÷÷CÏÃý`2ŽÁZ‹eÛâæýûø?øß¾u ‹®Ã¥Ý]üÈ;ïàGßy‡áŠˆˆ‹ˆž$\µ}Û''élÁóÕ
+³é4̹z÷]¼uå
+¾|Œ÷n݃ù£Ño_»†/²ïŠˆˆ‹ˆžŒ0ƒggxÿömÜzðÖZ\;<Äßz 7ŽŽ8©ˆˆ‹ˆÇÆÌ«Õ
+úßൂˆˆ‹ˆž$dõZã~¬^Ý=9R
+Yô|¤ˆˆ°ˆè1‚•/
+ÆàábŽq«Wo^¾Œ?÷oÔ{Ó)$"","zÜ`„åÁ¶ïqçáCÜyøÚZîíáóW¯âü•¿¢ò/þEV¯ˆˆ°ˆèq9ÚZœÌç¸uÿ>N Ôe‰7.]›—/cwg‡= ï=º®Ã½ÓSÜyøÝ0`w7®\ÁÑÞ~ê+_aõŠˆˆ‹ˆ7X¥Á¢m‹»''xx~¥®Ìf¸~tÄê}š5ƒ‡çç¸ûàÚ¾ÇNÓàúÑ.ïïsî=I°Bs{7 8>?Çñù9€Kûû¸~t„w1`ц¬lrû½ÓSÌÛuYâÊl†+³ÆMɈˆ‹ˆž(`ÅåÁ“ù÷ONÐ÷=vÇc\‹Õ«Ÿ`s;=™}õàì §‹à`wWf3ÜÚÝ嵀ˆè)ªø½Úò݃‹®Ãƒ³3,ÛMÓàòÁ.íïãÏ}å+žÑÓûV¢×$dçp¾XàÁ|ŽÁLG#\™Í°ÏÑ DD XDôéV¯5Næsœ-—€ÙtŠË˜ŒF|€ˆˆ°ˆèI‚•ìlû§‹–m‹ªªp¸·‡ÙtŠº,ù@1`ѓ²ÞcÙ¶8],0ƒqÓàh6ÃÞdÂ݃DD XDô¤¼÷éxœ³åÎ9ìŽÇ8ØÝåò }ڀ¥­Å|¹Ä¢ë{Ó)fÓ)%"bÀ"¢' VÀúxœóÕ
+îDD XDôéƒÖ` ºa€÷MÓ`g<û¯ˆˆž­J.ÂDô
+ï=FuÉhö_=ã€%a"z…–s©ÿªô}Õ5Fu’<=ۀ¥­ÅÉ|ÎG‚èU
+XÞÃ{U×át±@«5 ©*ŒêŠ,"¢g°N üßßú ¢W0dõZãîÉ žŸÃ9‡qӄ€Å‡‡ˆèÙ¬ïÝÃï0`½rá
+ úÄë¯WD/EÀúËÿùÝÙF“ €° ñ‡õužöžÿÛÍ0 kWè–K Cï~þýa^¸ˆž3^¯x½"z‘UùàÞÁ!¯^C3£o[t«%¬1¼`É¿Ý{xxè¾Çr~3 (y¦ÑsÇë¯WD/ºTW/«
+ιt®ÙëÌ{k Úå÷¿ ·¾û (ð|í›^èùàõŠ×+¢—&`ýÙí_)þ›ßý¶ïÛôУ(
+ÌONÐ.¼`Å –³óÓÌOâôø>Š¢ÀÁÑeèþ*¿“ˆž#^¯x½"ziÖ¯ýöÿî½s0Z£0Î9´ËÚÅÞó‚%,3 éNÙjv¹€Ö¿“ˆž#^¯x½"zi–÷>ýÂö^¡ìþº_°âcP(…&ö~,ûír‰¡ëð‹ÿíßòÿɟø£l!zN‚×+^¯ˆ^Š€õ‰/ïÓöç×ù‚„æڝé.¦{ûh ô«ºÕ
+úÕ
+DÄë}Ú»Âf2Áìè2¦û3xï±8=Œ;tˆˆ×+",úôw…eUagw³KGOv ‡>Ü®–øê_ÿMÞ¯WD XôÄ RhÆcì]º„½K—PV5ºÕ
+‹³36¯WD Xôiî
+½÷aÎÌγKG؝ͫù9–ósü…Ÿüñâ—ÿûÿ‰-"âõŠˆ‹žôÂUÖ5¦û3\¾‚½=­±8;Åü_þ×Þƒ¯ý¿Å‹ñzEĀEs±J¤RáHŠƒCì^B3cè:ÌONÐ.Ã@?^´ˆˆ×+",z‚‹–÷>ô7ĉÉÓýʪÂÐwXž¡o[8çxÑ""^¯ˆ°èq/ZyC3cÿðöÓEk5?Ç/Z_ÿ›ÿ3/ZDÄë=ÉÝa¡F“ ö±;;@YV軫ÅCÛÂZˋñzEĀE{±’?«²Äx:Åîì;ûû¨êCvÑrÎáëÿãßåE‹ˆx½"zU|žîEËûõ5HfΨ²D_¯Ð­–ÐÀvµŠãügëñðýѳà#HD¼^1`Ñc^´ê¦R
+…RºðCßAÅÒ¼*KüÊoþ=ï½ç…‹ˆx½"zp‰ð]´€°SÇ{¢(PÕ5&»»Ø`4ÙAQÐÀ¾ma´³iÊ
+ŒÖ°ZÃY Ý÷ðÞc4C©ßü­ßöÎ98gñçÿ­ƒwˆDÄë}ÒE E²ª Ê¾i`sÖ }ºiPU5ꦁ÷ßü­ßöÞ{8gñsäñâED¼^1`Ñ#->¾\Uªº†sÎZ€¿WTY¢ ”‚s¿ú÷þ7wÎ9ÿáÿ뼈¯WD X¯÷E+^¹B¿CQ@)KñUövÖÚô>J)Tu¢idxÿÿêÏü«ÿòÏþÚ?ø?¼wn㮳Pj£¯B>ы*ÿþ´Æ„%)kØDÍëÑK{½JùËÿùÙÑe¨²8kqöà8œKe-Àoø§òŸ’ÏŸIÿ JÅ Wµq±‘‹*Ë´«GÊõJ)…JS™åýäíäóÉÝ£¼ы|ÁòÎÅIâstí
+ÎZüüûÏ|ãòzÅëы~½bë9ß^táòÎÁÆ»6¥”*7.L Q¼c”ò|©ŠT¾Ï/Vò¶Î98„­¢rQ#z‘/XÖ{­±œŸc5Ÿ£¬*üÒßø;þ/üäóٖ×+¢—êzŀõ¢\¸â…ÈY‹BY8g¡T U–¨êˆ#¹ð¨­¿oßíå%LiV%zÁ¯Z°Æ`~z‚ï¿ÿ],ÏÏ0;ºŒÃ+WùØðzEôÒ]¯°^Ä;DïaŒ` ”‚Ñ:Ü)–áVÆfÓ²òPªD/NEQ ˆevù8\¸ˆ^PÎ9ôí
+ÿµŸý“ìÁz/^ù]·2Ó+sÁŠ³•œ³ÙIéN‘ßç¼^½„×+¬—ìâEôªÞæ'>ózEô²_¯¸–ˆˆˆè)cÀ""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""bÀ""""","""","""",""""bÀ""""bÀ""""bÀ""""","""","""","""",""""zš*>”óÞË༇w.ýÝoýþDŠÅÖïá·EQ„—ËŸ‰ˆˆ°è¥ QÞÃ9ï}úeY¦·sέÖgÿ¤›-Ï^JA•eúºò@æñm¾ˆˆˆ‹^˜0彇³>*ʲ¼0@Yc6ÿn-Ô37J…•jùqQ˂Z‘W¿W¹‰ˆˆ‹žq˜‚÷°ÎÁ[ uEªP
+«5¬³(UB•÷pÞ¡ðL|{ç×áJ•%bËúcíVë ƒYYU!dI8ŒÁÎeaËÇ°UŠ¬wLªtە®ÀÅ&z""bÀ¢œ‹U¥T¥ª*8káœK«í@坃6f³×*ö,¥>«,DÙ~ØP!ésÚ®XùÒÔô@)„°“, iÎZxcàáQ HocÝø¤Ò%_›R*….ÄßSÜ
+\²¬ù¼ [DDĀõzñÎÁƾ¤…Šu•Jk­SÀúØ@…¬¢ƒŠT‡Êª†s6, Æ°"ÆŊWú¼ÙÛl‡,ÿËY›*Jù×(_Wúøˆ»Q@áë)e90†:¿Õw%Ë¥>~ì‹—„F£5ªºN!‹•-""bÀz•CU¬
+Ér^+Lò:©RÉò^®$}\ rYEJª_ò;¤ʹ°ô–õp¥ñmÒ×)_˓T°bø“Ÿ*K †7Yê“
+•’QÎo,Mz•-ûŪ]‘…¬íÀ%o+Á«,ËTÝʗY¶ˆˆˆë’ÂŽµiÙNÆ)ä¡JªT*V™ò%¾T…Ú
+ŒÖG•åFˆ,”ZŸ“˜/×i–ó ¦ñs¦eEé+
+Àf‡Wo…- iùñ¢êcü7•uý̏""",º(XiFlC“?1§Ft WS¥ÊCU^ù’`$#ò€d­]mðCۆ€«=ás¹ ¿ö¼ÒV(­‡²òµV2_J‚”5Íí›U.‡"Ž^™\ùrfjR7&-Jà’éíòzïQ7£ôoÎCš*ˍsecY†þ,÷Hؒ¯3\ùWYfTñu.›·Å EDD XÏ#Xm…‹Ô_›Öócj¬³ë21=kP4T™ôºT!‹¢f4‚µºïÓÈxc²¥¿Xݑ÷“0’;“B]ü<yõ«¬*˜aHÍæUÔd™M—ô2­Á©àml֚´äVÕÍú›s+¸I¨RJÁb³A>„§*£
+ë¥Ó̦äkÎÖrësó°”ÏÛ8\:#Á EDD XÏ2Xm-æÁÈ{¸% )¥P–UX¢Û
+H)–0c@‘^%3 iP§&omñPÕuú©9?*çšÑhýojüÆPÓ²ªÂû§.Íڒ*™„*U–©ŸKC
+“÷“
+”,Ê\«º…j] m—‹Pmëû(Œ×éýëÑ֚*ë¦I½Mªø€Ÿ IDATyÕLÂU3§ÇÂ:‹ª
+»õ0lÀºFYUb€,Šõh”fcÙ´éxÀt3¯7ô}ª Éøhz4àS’gš&?~> ÔÆ&v Ïa·£GY<úã"áW‚¥-d/ãŽC"",z .[¦Ë'£çÁéƒU¬Rå ðâÜ( ©/*…¨acyPÆ9ÈҝT´BhYnhšÑº²äl|É×óþ(Ù­'ÿ.Yò’Á§²ZVUjšWô ¬ë0!V»ŒÑa9ÔÆÇÉ:ÔÍh=Ã+6µûì`j#ËJ¡nšTŠ²Òl®¬â…8S Ë{eUÅÿ£0vb㨡¸„Xdg®çhy8o/ÇUéñÌ+SÛÕ«ü{Â#6Ûoml "",Ê«,Ê`̼z%!â¢&õ|¨µf£WÉeg
+Jø
+Ÿ7c ªªJ}GFk ]—>_pV…JŸ§¬*ôÝz÷ _&öOYcЌÇ)XÙ¬9\ÅʙüÛª¦b
+ð0ÚÄå³ÐO&Èy!窛Ð{*R%Œ ®@*C±9]þ½ÎZ4“I
+íÛ6q¨”BÑ4ð>öv9Àõ}!o§³!­eUÁÂÀ»ð1%Pæ“Þó å³Ã«S•à²!m³Ö†!œÙäô´“/ÛA'!lcŒ‚T–d©,[b“Þ©$¥qÙNªeR¥Ò±_Ê9‹²¬Ò´ô‹Î”à”ïøK•³,”¥]„ñãÈ×!»äÌ0¤±
+‰ˆ°^ëªU܅'Oè¸`ç^
+|$ŒåÇÜÈ®Ãðçõ:²$>!鉒Éìœäý%¼¡(0 =¬6©ª”\i¬ÍîE˜_åÌÐgPH_[~œT¼Ê’¤z™™šç«ªNËtÎY¨²BU­G-Ôuƒ²®S/VQP®J}Sr ´ì¬lâ× ³#‡êfþ­1Hyç€ڊø²ªªÓÿ¥Õf<^Os÷åh´þ?÷ªPi‡¥<–á¬ÆõY‡B*jÖ.1`ÑÇV­.X” 4dã $h¤ŠQÖw%}L˜ŒÖ),å“Υɺ(
+ ñ@å4"!Vφ®K"M<OÜzÂ؆a€‹»õÐÃy‡Â&~Lï|ï7[FêC¤’ê˜*CÀ(P„ òàCP’¿¨²‚*Uڍ(aC¢YYÅJS|I3§*™R
+*öƒIÓz݌ЌÇa™@=§¿Ë9‡y õÞ£tÖ*(ÙtPUèYÏØòCߥ$=hC×m ?͛Ù˪‚W
+áúnÝlo ¬ÑCIó!¥©ÿËeãœOGï8çàäý…*þž&ãã«1…
+__¡ŠTí*
+µQZ-Pr˜sY¢,+TM–
+U UÅ
+ªºAÕÔhšêÑ£ÉꦁUŲªbØ)Ó®ÉnÒçŒ;c›,—JÅK•åº¿Î¬w&¦†w©¤e;+/ªZ}ÜËYÍ""bÀzåäÓ͑„>«|<@ZBÒR ¼.í4¶m¡‡>U¬diOú~†¡O•0¥4ô0¤ƒ‡¥¢æå˜ë f ºÕ2-Íé¡O_Gø:]
+c²¼upÞmÌÆÚ>&çyW ½ìÎÌæyI‘°U5uÚqXÕuÃVU×(Ë2„­z„f2F3ž`u>B5¡Šo6„Ï!Þ}v|>k-L¡Ó Ö¼_Å%DьÇ!(©"ÍÚRe¹>³0×u­ŒUºB) ;ûQúوˆˆë¥'MÒù™.ŸEemšVž÷÷˜aÈ&©‡'nY”×É2Ÿ4³§—õ:¥z±5ď!* ôJɵ5!€õ]B\\¾”9YÖØô¼s0ñùaêӄ/yŒuÜ%(A§¬*ÔÍh]ͪë°TX×hFcÔã1Fã1ª&°nµÄh<AY×ï¨psªTq”jŸŒ¬X9ÂÆkÂîM¬Ï.´ZÃÆy`R KÁ1³ÔG_H /²³ +Ù1¹5k‹ˆˆ°^:iI0RÙÑ0i&U 4eg Ki›•!“X¶©2d7– 则Ö.ƒ:e|@*RU ñðgk0taâ{¿¦¾ó­¬IˍU3ù•5⿁8†.£Ãc„¡¢Uӄ`•-VuƒÑx‚f<†zÔuƒf4ÂÐMьÆh&“x̐JAÈåƒc‹p<O‘Í֒ã{êfôH(/cUQð&üŸªØkæc8”@.ýZÈ^¾}ä«YDD X/%A¬gV©² Õ&»> YaʼªüIÐÆ'{ QÒ,.0iN7F¯­‹Cמ¬!…;›îœ7 KuL*c֚´Ó-}|­SØzY*TO‹®n¹ Çì4#TMàkLv¦XÍÏQ7#Œ&ìt{wPFhÆ#Œ'Óôœ*G†b]¾|§bû¿ ü!V0%œ¥9`Xo ÈèAVéJýnY+YDD X/MDÂK®6z«b ÙµÏúx3 é°f›í.”'|© (6*LιX}Ùlp–*—ֺﶖ#è~HK}:νÊÇ@Pxü‡¾ÃÐwhsÔ£ºåUÓ nFOwÐ.MvÐÄfø½=t«e
+eJ•©×Ë96ÄÊTYUhÆùd0Z§)ðåh”6HHKÃhãSï}8?H‡M#ô-½Z%ÂAÒ)´eU.""bÀz!Ÿ|eÞÔF¿U6‘]&­›xX°ìàÓzHÑRµ’@äœT¯Â“±†0k
+ÅẑT«â²’Ž\Õ5Ì0 PEZörΡ_­bp
+ýG:†,gc–Ö U¶ºCס(
+•ƒÞ;Xë¡T‰ë…R}*ËeÜy¨‡>U¿T~Ö¡sé ˜*A*?ßQz²²ˆˆ°^HÒ|.+yÙöø…|rºîûøvv½µ_ëÀà=Œ gÊRßÐwéóÈx cF¯G/Jރ®mÃ? ñì@ù8ë¦ù!5¬Ó§ [}»Bß®P–UXã1Æ«)ºšñ“v…ñdC×bè:Œ§Sììí§ï©&I`+³ÉóE¡`°>ìYÅy\r\P˜¶®FÉ@Ug«åÃXóåÈbëlC†,""¬F©°~¶]/éÅ
+çò$Y–%ŒOŒUœ®û>=¹›ØPoµÁ0ô0}ŸÎ$Ì¿nz6U­nµD·
+K„£ñ£Lv¦áÿ¨]a4žÄ
+WZü†¬™]Çð$ýM2dR¦r§Ã{å¬@鹊“Ø¥B–znÜzgbxß]Û¢[,S“º‰ÇÙH%,ì d°zQƒV׶èÛC×b²»‡¡ï¡‡íbýKG˜ìL±wépsiP©´›Pš×]ìëCQ„ש2U°Ò9ˆ@hˆKóC£eœÃv5‹!‹ˆˆë™Ëg\]4†aã,Á¸#o}²Ù8ÎFF3Àûð¤Ú÷©á¼_­Â_ dCߥ¥Äf4‚³}ׅPŸ¤½‹/˂{¬^‚°> ˜1t!hÉNÄéìÖht»{è»—Þx;»{a£B<ÖGÎNtù´÷ªJß'i6V|yNv›ßàªüh-""¬g®€Íco$(ÉùV&¤gçêaÀжú>̵ŠD½÷èÚU8
+'ë·qÙQ9Ò7#Kírn¹LGèÈdøAB×Ö¡ÆôâëÛvã×7*Lãr2ŠýªÅt6Ãh<FQ¨°y¡A~4ÙI•)ç„¥?WUpUXš–Ê–ŠI˲\W¬²%ƒKe®VÁÉïDD XÏ:\å•+Y
+Ì{¯¤¾'©ZÉ´tlõÍJÁô=JU–eÚ5(@Hƒ(Ç.ôm‹~µBßu±)^Ç)ì}:°˜^^a¼Ã
+Ýj…ÝÙ,T6µÆ0ôiGâþ¥#ìÎfiùY–¥êٌÇaðhY¦ƒ PñâAÒÒüo
+ª8¸ÔoqÈç¾1`=Uy¸ÖD‡¡ß8Gæ_õíjcÖÕF“{l6We™zo
+¥ân¿!- J°“eƪڴü'•+£‡ÊèU ô«ù9tߣ»‡.ënBÖâlû—.a¼3EY®çbˆ@B*˃j«ß
+Ùߥê™1•ïÁô½È
+ÖӒ7´çs„òʕôYÉ•%w ÊàPÏ”‘írÝ÷Pe™f!Y“q˜Þ¦ Õ·m
+Yàå(.1`= ™Wµ®dÖÐ
+†Ø_Ó¢¬kXÏ,
+ômhrÖ]Ž·ÑC¨\ ={­^sírÆyô²L¬7vîÌ0Ý?o¿§Êª‚*K4£QX…ÚJêb *b_ÖDž,U–žaȐEDĀõ8dǟµeY>2DT*QùÁÍ…+kôº9>V¡$õ±§FªWˆ;ÀL<Ö¦[.ÃX‡^f]éÔøN¤ûï݉Óúe£C<~É(Uago/l´(
+õq§ ìü¸p•¿lˆ¡É;çú®]7ÎÇeÁ~µÂj¹€³}ßAw]
+\\¤‹ÌOÆݧV›ê5†¾Çþ¥KØ¿teY±1}0JëÔkUªð¾ÚV…,é풟*""¬'
+W>;Ÿí¢ íÒèn´N;/
+‹¬W+ïÇ*”JGî°âJDĀ•ž™už`­IÕ- T֚8Ûjˆáh•šÙMܵ%GÚXcPE
+b…R(ãPѾmC¿Uׅ~ãÄn¥Ïbqzš—
+Aôi­æóô=¾GewlÃ«o`º¿–ýb`’ž*À(ë:4ÇÇpåœCU×i®Tbb[ÚøÁ ïDD XýV²+0-›d=WéÏñ¸›Ô«%¥Ë ±çÊeO=ºÕ*í SÝCÌZƒ¾]ah;8Ç¥zzºÕ
+=ºïqrˆß±R§»ïÎRð‡1¡JåãÁÏñg jš4 K~d–V"¯}‹拸THDôÚ¬¼ïj»©}cÇ 1±©ÝA÷=Ì0¤ƒ™Ó̬l™Pӕ×Is°óVt«e:¬W†®c¸¢g{#a4Þ»›Šõl«²Ädº w ¢(P V¢âÏFU×ëÍq P“ 㕑&ÈF9°éˆè5 XÛ}WÛMíÛ;‡x<M¨Rõ¡2w­ÑwíÆÇ
+=Ã=§¥5Χ䜅ó
+”oVïì„ç€R¥± é h©FÅMi)HCL­µMçMïìÍ""zÅVތ»Ýw%áÊÅ×Iϕ¥ læ~âÁËEQ o[h=¤!¤rŽ¤6l†+>éÐsd´ÆÙñý”
+æçÚx H&ª×“ÙåÜ6Yìc¸’
+@߮ғw¡¡½ïZôô\õ WôB…¬‡wï (Â÷uN€*
+\ŠgZkÖ?Ê
+e]§Ÿ¥z4
+²\È¥B"¢W,`¹Ø;rÑ9ƒ¸¬Öi˜h:,7þÒz€÷>4¹Ë“F dÒ ,K&Fèû}×¢[­Båªe¸¢/dÜ¿{§B *«Íh„£ë7ÒRŸÜ8ÈàÑb«š¥ª*m€•ŸO˜‡*Žn "z…–ý¤‘ ᪟–¥ª•‚ÕÎr“£m†¾[Ÿ-8È9oësÚúÕ
+]v vˆ¾ÃÐsˆ(½˜†®ÃÉý°\X¡I½nFPeh|σ’ì¼UrN\î“¥r$”,Ȳ݄*kž’½¼Ëgó©R{ UᎻ„vC
+W²K°o[˜¸ôWÕu:àY[hXïáœCY–idÃj¹Àе!œõ†®çñ7ôBëVKœ߇*+ÔMƒf4
+sC‹{¡wÊúuózæhåÁJzÓ2y¬\UUnZ6F7pâ;ÑK°>n×`œÂ&Í·òKˆ:ž(ç
+Êùƒ²»°P*ˆk ÃG­ÂaÏáØÜL/¾åùy
+XÒ°žÿ½¬ªuE)[ê“fwilß^q.¯p¶àct
+9Ls¯â¹‚9sPæ^¥¡ ñ˜Y&´ÖÄÉíá ¢[,°š/ÒÝ÷©…èeãÃÙǨGcTM˜‰¥J…²ª0;ºŒ"V½Ÿ+QÀº™½ÊšÛõÑ<áõq'oVõbÃ;ÑK°>©±]vJ¸2Z‡—Å3C³z0*; åØï”*S`3Ƅ‚Ö¤#pt dD/«¡kqöà85¼w¦hF÷0šL0ݟ¥*d7nüs¡TÖø®ø8šds€¥lx'"zI–5æãÛãYƒùr¡†0ÛGk£×çÆ„Sa§¡K}Y}»
+î!@•ém€0%œ‚€tÃÃà‰ˆ^À€%»ånØe3®à–³0$Fuߣ[-ÃÌ+cRpºnãèœð²pxs߶aIq {Žd WßÙñq˜‰5£ª›8ˆtŒ½ÙA8ºªP•Ü".JeJ©2ýLI(“Š•T°°õ1ˆˆè8`mW¯Â }jX—^*c™ƒFëÔ¤.tŸíjRqð¨TÁʪ
+=\Æ@ëp´ÎÐ÷ÙrÑ«ËègBÈM&Ø=8@»˜ãàò•0l4ªÐЎà¤âÁÐa@o~àózV¼-'¼=õ<>Évõ
+ÎeAlÐÐ}‡aèSõ‹èusöð“Ý]L¦alÃdw“Ý=Œ'Ø8å=o|—Ÿ3Ð{Ñ=XÄä¼B.ý¬|ç -i´µq´‚ MÛ¥‚eM¸ WŠ¾ÃBcõ
+j#d•Uwüêør…¢ðžÌ@DDÏ6`ÉÅY&²§‰íllN—…¢ÇwȲ ^Ï®²Ö¤ƒž‡®‹ç¥)8kÐwá(œnµÄÐull'ʜ޿‡Ý=ìÄF÷݃CLg(KŸÛÃýOÜ!¨Tº’%Ãü&h½ûP¥·!"¢ç°Òh†ìÙ³nlç
+ÚX咿KOU: («*ŒiˆCE‹¢@»XbˆËÄ_ll'ZëÛó“ììíc÷áìâd:ÅÁå+?ýEQÀknmª—ñu²ŒŸÏ” #ªX<£ˆèÏ®+.جÏ*_ö[où.ãÌ*ƒ¡ïÓ8¹Ø{çâÀѠꦎÆÑzX÷`qièóÓ,ÎN1?=ÁÙÃXœŸÁ¨›f£Y]‚–̽’ê•Ü()¥P–ʲ ïŽîDDÏ3`I ’;]YÔ:@YkÓ Qyy~‡T·Bãz¬‚Y‹Õbƒ• » ã9„D´©oW˜Ÿ< ¿NO°:?Çüäá…Ë{EQ nFaVV6K)Šìe®¤o‹ˆˆ6=“%BÓ]ø wÆñL4iJ·F§%>kmì¯*R–R
+s±Ø{EôؖççXžŸãìÁ1NŽïáüáq
+q´C
+Q¶ò¡%d©²D™ú¶¸LHDôÔ–\œmvN>û*Ÿ·³½{P.ü֚4Æ•°ª®Ãü«Ø·µý~DôdÚåýj–
+ ôm6•Ôu× ¿ËÏ¡ÚZ*Üh~çL,"¢g°~Ðò .X6Þ2Þ[cRU*¿ ‡
+£°ˆ>»åYhvo— ]‡¾kCE*¯>eKûÇêÄ©üuEvC^ÎeB"bÀúlÁ*Vò‹r¡
+­ 1˜Yky4Ñ3°8;C·
+£Pºv…¾ïÂÏñÖnBù{>ñ=0*èüøœ¢PðÎÃ{Çšˆ^;Ÿ©‚µÝ%GßXkÒ̪".Zz7ª¦ #âÎÀpÔF•z®†®[‡ª~H#¸<HôôÉ2a»X`u~Žn±@»ZÁ ¼ ÍêRµÊåeUÓ¤&¡"K†P(V±ˆèõôÙÇ4l5Áú¸ãY_•÷>-)˜8].Ö֘Øg5¤ƒa ÂB›8žÁpyèYé–K´«ú®Ãj±€4£¼÷Ððy,ŽüÜgCFÓAíU•Ng°\Ò'¢×ÜÓ;‹Pîn³aƒUÓ P
+°È±.Ç·R*ÛMÚoj „
+¬?ƒø2┠œ„%óJÖmȉWNЦ(R¸h
+0T
+m\—#Õ/ËpQB>:a'áÍv‹ýýÚ¸YA<•’}%bIbdrØEhÆã[)•@+EE¡ÀúÃH‹@)•¦ED¥+ÜтXñg šÞûÐQ¢,Q”eœ& S‡Ì¿"äÓÐì¶ØÞ݅¨†Ý»û;cPTU:f‘µôµV¦Rî•Ä4ˆS
+\üL¡Àúó*+]áÊÉ5o#ä‰í:N5û]ªzµm3l+DC{Z3ÚyFùHk¿G»ß¡möØÅ
+î„|Úý]×b·Ûb¿ÛÂY­M¼x
+Dz‡O«t"Éö¦óA6IÈ
+r’-ëE¦’ÚfŸîo£×Ci5ØgFù´Hk¿kt¶Miï}Ji—Ü«¿ Sƒâ·Œ¶€|•+X„ï‰?Ӑ·îòva&¤´10E98!ËÕ¬,ŽíºP¹ÒZÃÆI°8–£Ü„|VÕY¸ÎBiøPђcØ;h*V!®!܄l•Ž6捉`†B(°~÷
+„|>l×ÂÉñˆÞW%«s¤Â•{(åâ
+ҟµÖhº]×¢k˜¢DQ–! ”a„„|^Ò,¥ÂE‘‹žå¸–u8ð>ÝgL‹>²…+„ï™6E(Ë_«ºÎU/–LQôkuÚM³‡íº´øÙ{Û¶ðÎsg!ŸSagh×¥¾Ä4È¥T?=(òF‡ó€)Šþ~Bùyï
+–Š«3Ғg¨´òF:ËJ§TX•§ ˪BYVÐ1x°(‹”‘¥{„„|>”R(ª*\,•eŠ_,|Fv®·È6‡q¾4æÛB¾'Þ«‚%ÉÎ'M9¹JË («TْÏ]_éŒ0îí:›«4!Ÿ SPQh€Ñ&…ˆ"æ_åǽT«´6é<àbšû ]ÈÊ4!„ëw¾(¶úd·àCWÀÒÌ÷—)¥BÂs¼Ýy­4´6PF‡Ü¥Ámτ|æCQ„¼º¢þH©X#‹iˆYùh9þՃ9x<° !XoG®B³“ìxbHVhÈlÚWÛ¶mQÕ5ªz“  ES–ÐF¿åäLùÈÐI=™¢œÔ©B%B«×K½÷Ê9ÖêÄøñ™RŠúŠBõN}5:qæW´ÚUcLó±%G>;Ë¥û+ް㌋ÏEQiª.L J•ÊYÛOÇ
+–¬ËQ*\,™ÑŽBi52ºò]Kÿò3dÕ)8¨àËÆ`ÍFl'¦c|œR
+EQæ|òrB>=²]a`l—Õ7Ùô µ6\,‰àŠms²Ò9AÄMïˆ÷kŽZio‚/KNÈ*oƓ¬1ʪ
+ËcÛ6‰3¯€µ1Ð4ÃòVz2þ«jxÁ$ÕèxŒæǻؼsébjp`Bõ.}O¬rÕ½gʹÐ>ÐZ§|+­û«à°,Ö¥²)
+Tõ$U¬”ÖÁŸMB>á !z­L|XEZ~Éì.í¾¬¥²…Ð…&ñï#„
+¬w‘_ç>,ñ]É x0u¯dåD¬b%¬¬ë‘ã]8±›0½D£;!Ÿž¢(ƒ˜*‚É]Œí¦(Ò$¡ä_ùQdƒs¶hɪY½ðâϗBõ§—³
+* 'S0E‘D˜T´Ä·QM&I„µmƒBÖåh5L‰&„|2ªÉ$ÕãTo=›§ãTü’¡Õÿæñ©•N-Ä|)tï¿¢Â"„P`ýù'Š“ƒyÈ –é"©Fe·É‰×vŒ6q"I¦
+­u]EY…0Ñx2GYö,S˜‚‹OM5FïU…Él†¢*¾H×æˆ`’cÜ{%!.±W¹(®!XThE!…Ìàš§9˕­ŽA¢b†/Ê2\Ëwl9hš)J(m’#„|:Š¢@E–ŽC(ãxKrq$·ù¬(¢ËÅhMO%!„돨«xÂÌŕdZIjs|\ :v¹e™Ì³iÙsüú¢(øêò‰©§3S„M “ Ê,U"¦¬ŽfÃ.RÁ’sx¶º¯!XL_õ—²ádê\ßTQ ÅöŸLyïQTUºš-$x4N"‰)¾¬ªpǫ̃B>íÉÀԓ êéõl†ÉtšŽß|ú÷ÊU<þ%#/åÚe[>æeBÖ»–œLåóüä+RÎÚ01ˆ>ˆ´¬ª4Ú-“Fyš»L eÕ· !Ÿ„z:…)JÔÓ&ÓÙ0d4Kd+€D³Èñîœd_åÖ¦¸B¾7þ’‚qY{Àf;Êò¶íºÁ‰VƼÅì.7e‰ª®ûêWQ@›ˆi,°&az°žNSK<”áøkp$+Mâ˲±5h».-Æ…„ò­óþÎÓ<D£4çx¢Í«PeU§«Ýj2R
+Цo†,NòÉÖtŠÉl†z2Åd6G=™fÂ*[ò ¤ÉÂü|>̶<HõJ68BÖ;ȅ”ÊÌîâ¹ÐÚ Öjˆ'Ø"ŽJlCŽì>ÓQ˜É•3!äÓ¬z:C5¢ªC%+h§¾•¸ç¡ÉáT¹Ž-Ÿy·!„ëÏ­,ÿJN°R‘’“°˜ÕûÀB1Á–US–ð΅êUQ¦Ûs‘Fùˆ'cPOg˜-–¨§S”1hT.¨Òf¥`».´ c;PVaɅV¾šB(°þ¬¸Ê²mRލì,‹‘ imN¶øµ(ËtbÎ+Tι°›pR£¬ke^4ºòñ©§Sԓཚ/0™Î¹V2-ŒÜkùÁ"Æ÷|ß(†‹¡ !„ë÷–LʘvvRMmÃlùs¸/†VÕ`™sQ–(c„CY†ÊUY×(Ë*Ý !W`Mf˜-—˜-WAd­VÐqu• £`šÛ£é¬…h#!Xš|’PVåˆà*«:a‹ªJÕ-ù¦ËÁ•n5™ ¬khڏeUñU"ä#3[.QM¦¨'“Ô&”ãÛ£V‘ã9÷\ª,dTڄž„„
+¬÷CåÕ«,+eã@ÁÚ.-~•û$ó*µяxk–>—eÕW²(°ùèÌW+̗«PÁš…¬ ’ljñ%Á$ŸÇ6aȼëR^VՒ· !„ëÏ­‘Ñ])ՏiÇ«Þܓ¥²Öa¨rU¨b¥Kž§ˆ­ÁªžÀeš<$„|x¦‹êÉóƒƒèÁZ¦%íEY¥]¢ébHŒì£ðQ fՊB>Ða:ñæ¢Jë°6GkTÓiÚ_âÌ G',{Öaâ0>&´
++U‰¢d‹E¨\-1/°88Äl¹ê‡K¼‡óýJ«™*ÏU~!$‚ÌÑE¡ÀzO¸ÒmSÁ“eLZ±x…+F÷ÜäîœC׶qMN™ö±UÈ6!!Ùr…Ù*T¯¦‹&óyºðéº6Ä2dÀ>¦¸û,+ßÒ V€p?' !XïljîimF̼€*.Ž3|ñ`Œ Iï2î0Y8™ÍƒàŠ†„|0óÕ
+E
+,´Y¸¨Ü/“ƒûÝ6 S@alNg3ìï§ØÖuj2А¿xÌÆéÁÕæ«£c,ט¯BË£oÙ+Äeíñ6¥:]ôRJ°°-m ×6ü!B¾ïóì‡|²< @ÚU&ӅitvŸ´|A¬ÖUUØ“ùÕdŠ¢ªPÕ5ª «X„üUV›#,ט-WX`}rÚ›Ù
+æ˜2ÚW©<Šª„‰; «É¶ ùËlŽpptŒåá!«Lf³Á1*k­äؕ֟ø¬œ ûó=£bzwñØ%„ï™âC=QXÓwKþ•x5d²Ð;D% kÛ´nC)…fïB5«®1/ÐîìïïQT71O‹òg™ÆPQY«Í¦‹e¸âŠÕdï=\œçÙA)(„¿åXÏ=Yœ$„)°F-‚ðŠ„λdˆO.càœ‚SÁÓáâsYkc”ƒÃ|¹B»ß£ÙîPÖ5ʪ¢À"ä=™¯Âôàr½ÁÁÑ1ONaŠ"M¦ã»ôš½ IDAT½2‰(‰cA_¹zs=NÇ2!ä»çƒy°~¯M(˟eìÛ{vƽ…¹è’%ÐÒ¢('“îÿ®ê 3±yŸÞ¬Ö›ôg¹Þà`s4hõy¹ʏm`¿âGwy{C(„òMîoKu—ø¹_i=ð`IH¡1¥5ª85hLxB ÌKLç ÔÓ_=Bþ$›#lÎÎqtþ‡Ç'88:
+÷+…z2Ål±@Ûì±ÛÞc{{KEÈ[XmŽ°>=ñ 88:NÕcJÊ{x¥’=‰®XÍr6¬ÆA¥ãŐw­µðž» !$ç£z°¢šJ'ë~Ç`ÀhÂGµIO­Àé,µ%KچËõ&y±f‹¦ó9Jz±yƒYô^ɟåá›Ó³Ác› ¿R½Ê£¤l¬ ¾è½"„O&°rÄGå¬M- ©L)­áá£7+F6Ä@R^&î1ÌØbuˆÉl†i Î|5 „ÕÖ§Áwutþ(´ßóƒ"œFéì¶ëR«?XÉMïÎ9؎‹B>™À³;ℒ´ s¡”û>òÕ::z¸yY£)§z6Ãt¹Ät6"k±`‹ ©^­Oϱ9= æö“ÓÔæ΢ëÚA¾•‹Ñ é1"ºR‘­ABù¤ ˆãܱz•'¹‹ÈrÎÁÃØ*ZVU¿n¡Í˜OêxÕí¬…1³ù“Ù ³å*´ —+¾¢„DN.¯°>9ÅÉÅ%6§çXŸž%ïT^’ —xIk-¬T›•‚‚‚u}µ*ÿšŽÕ+Byâc>¹Ê&µ1áª9ËÅ2EíâÎ3§á”+k-&ÓYªdIº»ˆµ²®ÑìwØo·èš=ö»-šÝÛ»[¾²ä»f}z†ÍÙ9Nÿþ¾zŒ£³s@)˜Üܽ^Œê±B¬”
+…—Òˆm
+WíȤa<³Özˆ€›­Vèº.´oo°X ÝïÑ6{¾Âä»b¶Xâôò1ŽÎÏqrq…Ó«+lÎέ½dnÇ™ö¡íþPõ
+^þüO¾Âä»âäê1N.¯pr„Õéåc̗«4}+k8Å;\‡ccõÊÆT¤mÏê!„|! è«XrÂ0ÈÖÉOüJ‡*J´ñä.ævÛuA ÅV¡LÎÌ‹ƒC´Mƒ®mÐìvØÝßa{KÃ;ù>XŸž%ÏÕÙÕ©z•ãG{wýmY…Jå>­ìv=[„B¾¥Fm½‡’ݽs)¦Á¶-œ q ¨ªÐ¦°6Lú,æÁ{Uï=ŽÑFqÕìvhöáo¾!oj2ÁéåcœÆ
+ÖæüÎ? ‹Ó³,¹T¹Ší?/\ºÁ Nj‹;E\%/–³üBÈïðIÇíòõ9ژ7¦
+snîQqj)œÊ ñòu“Ù‹ƒC̖«øg‰ùꀯ2ùæ9½|Œ“ËË ².¯püèËÃu2«K›O.Td:°ëZtmøc“˜r°¶K«pä˜ â‹Þ+Bù#Ÿò·}æíPÆÀ9ªQ±’%y=ÎÙdzW@šf
+Bkƒùj…ûۛð&M¹Ý¾Á‹ŸÿÁWœ|SÏÕc<zú ž>ÇñÅ%Ö§gƒΩZœ (ù¼‹“¹"¨¤5(mE©zÙXå"„ò…
+ˆ5‚JW›ct]L ö@ׄ¼ŸW¿þÂßòUqñô9Σ¡ýÑÓgxôäN.®ÇTºHÉýW^Lìv˜Øžµàó4w1¼3T”B¾B•¿!ä†w­õ ”4o!JŪ(Êô±Ê‚Ku¶o-ì.Ô¨ê«õޅ7—¦ÙÁûÿs{ýŠ¿ä«àäâ
+ϓ=WýYÆ̖+(¥ÑìvèÚF›œhqCÓ;ù²YŸžáѳç¡rõä.Ÿ=ÇÅÓçXmŽ² Z «V±"emØߙ'ºËýÖv°m›–\˜tM€± „òÕ
+,YÞåcY©ccfÖ:ˆ£˜D­‹e­Óº©zicéñ³å«Í&ý[Í~}'»û;þ6/’åzƒ‹Ø<¹¼Š“ƒÏ°>9M¾Ã|"p|¡"]Riˆ$kÉk­{c{4½BùÊÐÞõ(DÔv]o€ÏªSι0UX —F‹¨³¯)
+Wàe™L¾âՒÉD ˜ˆOÎÂsfŒ(²ÈgWOŸãâé3<zöü;–‡ëA+PځRÉʅTÞæKÁ££ö`¾kжíÀ‹E!äXÒظ´
+=²Õ8±Õ'¹>Rђ)Dۉ²Dk²ªÑum
+$•7#m –‡‡ÐFCà´6Á“…W¿þL‘E>©¸ú᧠YW?þ„~ú—”u5•öx¶G¼V.M†*–wÖÙAŠ{¿kÐ&/"!„ï@`‰È’«ðdìHȨŠ-çŒ1°±õ¾¶€VÞAXÁ§ØPe m ´1¨'S?‚‚
+bN‡70m4^üóY䣊«ÇQT=(®šŒ¿ç)©=ËÃ
+Š2Lʕ½ˆ.‰tX®QOgIÐÕÓ)”
+"В©½ë˜wE!X½È”RÓ{þ¹<öªW¬l!ËË2Ú ‹bM–B‹~ºXÂ%n¦Sh£˜èåÒÚàæÕKþö÷âäâ*äZ= ÿô÷˜uõóåj£ï±$YW©rÍìrŸìLÍª`Aˆq!„P`å¢*¾Ù<dzÏ=YÐ*{cRZ£ˆ¾+ä"KDWx`2À{ïQVUøS×0QT•U¥u¼}‚—¿ü3Îò» Ƥ¥Í§—qõãO¸xöçOŸãâéó":^Ô<G¹¸’ûl¹ Lfƒéb ¸"„
+S”¨ê¦(`ŒÆõ‹hv[þ&‘w2[,qzõ8´Ÿ…”öG)­ýùà‚!Ÿ ”¿ó”vW"ªäsxâ$®!3Ç;kÑìv¼ „
+¬·‹,T"²ÆLÅ
+U±Ée]£ªk”u"ê¯~ù™¿QdÀù“§8½zŒGOŸãôò
+ž< U¬§Ï±>9í=‚QX%{ü}ßÕWyÕ*Wœ$„
+H
+|Úgدâ1¦·g»—‡‡˜-¨ë)Š²„)Š ´ªeUáú·ßØ2$©%xry…GOŸãäò*´xŠ“Ë+Ÿ Z€.÷Ke‹˜­³ƒÅÎïWcߕ³6E”B¡ÀúÃÈÄßCâ+7Ä¿Uda˜³UTURU]§7)d ¥•Ö˜-–¡=ð“ÙeUc2›a2›ãåÏÿÄíõ+þv}§¬ONqñ,ˆªÓ«pþäÎÿ€óžàäâ
+õtÚ/lzÞ
+ŽäæË¡ÕhrK*2îÞu!+{ylQ–°Q )¥°\opp|‚ßþñŸ`Š"µ
+«z‚z:Åëé·×/±ßқõ­1[,±9;íÀÇ}ëê1Ž/.qñôù­lï<ú֟„ˆZÛJ¥ ´úò¿ƒ¨êÞ0³ç•­–âŠB(°>¤°zW… ‰( WíH•JÒà%pTžËEšÞ’j–<‡R
+e]Ë?ˆÍéª:x±ªz‚¢,1™Î°88Äõo¿âú·_qóòÅ A¾N´1؜'Autþ(¶¯p|qn;;|ù؍’Ú]Fò{”‡ˆæËY ëì õ—·]×Q\BÖÇYù®ÂT­Šñ ÎÚà¿Ê˜R*T¦b堚Lଅ1!ÁÝ9•íC´Æ@gK¥EÌ-1[.QÖLæs,×¼~ñõl†ùj…WË%n^¾¤ þ+f}z†ÍéŽ/®ptªWâµ:<9Åñ£KLçó7ªVÈ|Vñ6ˆ¤,BÁf+YÖvéþÜOqE!XŸDdI¥ o úX U$ÒúsâµÓ±´ ã$¢<_Þz´]—öʛ§R
+&ú·ªz‚“‹KÌ ÜßÞ`¶\bºXàæåo¨'SÌKÌW+¼~ùÛÛþ~%,×lÎα9=´×'g8¹¼Âùã°\oR…2ŸPÍo˃@­³I`¥éÀ¬åg­…÷nd~†ˆC;Å!„P`}"¡%bÉ?$Âbâ»äa©XÙÇ>ä­Fç+
+"ÒdºËÅ :Q”%‡XnŽ0/POgAh͗˜½ø³W˜-W¸yõ7/_Пõ3[,±>;ÇÑÙy¨^ãôò*Û¯~Àúä'—Wi-Sú½ź)Vð>ýþ¤Û£À
+÷¹X"ÀRË0M6œ$„
+'Æþ*Õd‚Õæ«õëÓ3ã`s„ÓSa}r†Íù#c}rš2Ôí¿ìwGxòóÅϝïë©+X2Ñìw½H˞O*a ÚµÍ;Û݄B(°>/™ŸEĖÏ*
+–Qh½úõÜݼÆþ~‹×/~ÃÍõKÜ]_cwû›×¸½¾f5ã=«UóÕ
+½Kb+<F'ï—øo´Ö˜Î˜¯°>=ÃÍ˸ýûÝ7¯^b}|Š»Ûì·[Ü¿¾ÆýÝ-vwwØÝßa?ÞÆÏ¿u¦‹EUË櫁?^mŽ0[öbk—scy¸â8¾žyå* (1›ÇJ尒å¢Ü>ÎýWAXwƒÇËïœT©¤¢Ù5{ú­!„ëëYy¥iì˒ö^^½R£é1©rôíC5xî0¹¨Ò³Ö&Š.mLjåÂÎe)óEQ„ÊËzk-îo^ãæÕKìïïq{ƒíÝn¯_a¿ÝÖîþÛÛ[4û¶wwhv[4ûýW]ÑƄ\±É³å
+ĕ¼bVù®\bS¥]/¨£]ž3¯\‰Ð²"–rÕ¨Ýhãºk;¶ !„ëÛ­fɤ,€–°Qs­B5Â*XEôP…7[ۄz Ä$ö!XòæŒx_ž¯²tùô<£væt>GQ\¤çÞoCEëþæ&¶oÑµí ’ÕìvØÝß¡Ùß¿ŽÅIDATïCEk·GÛìÑìvèº6d-Y‹ýv½C÷_ƒ¢(aŠ"Š©õt–>¯§3T“ êÉõt†ùê ~gϖ+L ÌKLKÌ LË° r½¯W¬$ùªSéõŽ¢I²ÊÄ+^›¾"%Ì®mS(hžoå2OV.Òòì«Á” µqŸ [‚„Bõ‹, oûH5K*M¹A=o†ÉÀbp¿¼QËs…ˆr•äÞEzn©j鲄Ö:UI”Rq
+EY¦Š\Q”ðŠ²€)Jԓ)LY¤Ýõd†¢,ƒˆšÍPOg¨'“ ²¦3ÔÓPŚ-WAd-W˜/—˜Ìæ˜.—¨ª:­,BÖÖì” ´Ìk5ødFôñyåuN¢*Åîu8¹Kªbœ$„
+”Òp¶X>~ÏA,xÀ¦,!ÍNVQ¨‹ð³(«ªV³Š¢D5™ (J”“ ¦óyau¨^-0™ÍPÔ5&Ó櫪z*†yº÷€spèò0Ð\`…=‚½p
+â©ÿ8¤u£`/°lÿû‘Šæ•?iI:ç`Ûû®¥‘B(°XÍÊ«Yò†™O–…7ævPUŠÅØþë[†ù›õx2MgUyWZ‡êUVђ7l1ÅKp¥TÛ|üÛu(Ë
+Óãy/ ¢P’vaÛ4ðÖ¡mšÐ´-¼ «YÚfŸ*k’ͦ&»LàùQþ—¬2ÆÀ9DS]ðP*|oe]GX žLPÖu^uz6CY!UMjԓ)&³yð¥ÅvšÑq
+ÏYPÈ~~€•ï 
+*‰àðZ蔶>TÕ>µüòV®
+>-"Æ0‚ÂvÝàßÏE€)Âcm4f«êv*ÿé,ÊÖZìîîÂÇÎÁ[ZlñûUY~˜÷õtVÁ”tœŠ,ÊEYö§ÌËf».T©¤
+~V™òƒ¼°^hꢝ´`Ù»¡_J¾Ì£fŒI¡ŸòœÞ{èø“OӁ:›ìŒÕ©q¥)‰æ̜.¦÷܏5©2-(xiv-Mì„BEþ4™Ê[ýÝ -Ä¿ÃTààÍ?-ý×_VîéIaMÏøñ"šÒ2âìv ªR>
+ªü{ˆ&k1•\þ½q%N&}V*Š"}/#…:¨ å“‘éö|"Oªy£0ÐA0èí:7ªJÙ®ë6Y:»+™ú±%“ˆ]×î{›°ÆÀPB¡À"BgemüÚ2N‰ÏEV^M
+¦ký ¸JÂê RŸ·äÄÛYÿÛ£ªR¿G±SpÖ›"Ý®UøþTæßr±"6l…>,<(û%!SÈÏ)kç%A…Š´ »¶䏥öžTÞ$¬ª‘jZ^ÕJÉ+QÙóäK›sP>ˆ°S…cªë`9H!Xü|8ò¶aÞÊꅖ-™r“¶¡÷>­çɟSÅ = !}£’ņ³*šÚm|ã/«jPé‘6¡LýåbHeFnýMÚ«èyCÄd-·$ ³4t©nÉÿ5_;ä³pÕBªiÙòc—MæåùQã
+^XQütmÛg–µí@§êSö=ä{Zè",š ø¢³qµ‘Tלíе]šN$„BE>x9˧
+ËXh«Y֎ªTÑõP%+¯Âä¢#Oי0É+_@˜nӵɟ?3¨û¬U'˨ÅtXßδñß̅T”±räó]~%àç-NçàFU¿<á>oëÉTdb™ !ÕIì-kqœ³Pè'
+ågšïÌ«†È3É2Ó{ˆª °"„BõY…V^íy›èÊ÷¦¸ùš¬Â•ˆäb9RôrÉ繃Ä7ŒªLñ{ÃHÞÿWb;1Ã+«CWóiJÄç.Ê2}¿ƒ@Ð,°À á¡Äú7 éY¦˜å‰Éå¾5èÞU~äêG­Â¼(C>VﺎŠBÖ#´Äó”‹©‰ˆÈ+ZJ© ”bõ&[zÔ¾ѐ“B@h©LȉÈBò†ÙAu
+¬³éùrOÓøÿé3á˜Á×äS—Ë|cZë
+—‰-yӗªW2¨ëÞ0ﺮ¯„Aî]J»³çA'ÉãiÍLLcÏWÏÈsiL™‘Ýf‚Î9×4IìäÉô
+Ã]c£ÿxߟkš**Õ©A…oTËEÕÀd/k~²|1ù÷:çàl‡f·¥°"„BõÅê,i¡ÏŒÊwىؐJ à½z£º¥”Jk`DT%¡""$k*=Dò<¦( ܔ
+ô’`þ9ªD}EiX9³¶ƒrá{c¾Ëö9Jª•ÿSü>LQ VÕHV—©7V¥Å™yÒòÐ<~l—h…Ü(/S}v!„BõE£²ö—T~ÔÈ«%b)ˆ™aj||’>aäëJþ+©heYYQq„Î(0rñ1ïtÊÚ45—û·ÂçÁè-^'$_R׆;]Û¦•BÖ"…vö‹‘[À©*&ky·9¬<+[ù4¥|*a±™M,ŽãÄ[%úµ@!„
+¬o ¬c |Ÿ‘%>­~‡¡ÍZ‡ìÈ ±
+}ZºÍÌêƒYl‡I®ÔÀ@ž-©ÎWñXkSOgûåëmîiÊ<Pyµ(M ê¾ê$Aœ©%¨5œë²=€]Êô21Ä4Ÿø±gscº÷@œLÿ÷¼j•ù½R 0Ë°j›= !„P`}‹B+‰Xå·óÖaèÜåfùØ&ÌbDT¥J•spªiùt¡Ë‚<µÖ! =Û1(âÊeÉÉs§rē…¼u\j Žr¯òïK&Å{–·öòø…7ĤT³$ŸLĝˆ*Û½}M!„Bõ튭´Þ%
+¨\p£Õ­qôB.¸Um’ êºÔ¾ËƒC~âOěÉÖå}®Öÿïø7>Îsªò+(CX3TׅEÑñëÝÛÕ¨Å)mϲªÐumðWâ!„
+¬ï\l…)¾@(
+ÙÌK¥û©º‘àRYÅ)÷}¥ÖY×õÑì™UÁòÖ ž·®Êy€•0
+P•J˜Ï—¬ÉIéñ™1=Å;Ä@Ó· ª”‡+XŒW „BEÞ¡µz‘Ð6ûAu xXp™,Å]Úrùrd››×ÌÄýZ£}‚û3‚%ÒÇ£ÅÉ#%±Ra“WþHJ»´ÿò õÎÓ¨N!„‹¼·â
+r­ñ…ŠÕ0±ðƒ©¹ôuùÞ½þ=‰}ø3ߧTŸü8^"kúlµŠ|ºRDaæ“eÙT„B(°ÈG\yøgº=ß1˜‰®àå’
+XÝĕO÷ êmâë~%ÊçyW½‡Ì$OV¾$ºëZxÄ!!„BE>›à’QJAƒØÄÏmÛ Øð)‡{ÿÒ·”µ(‡‚¬LBùÊÖCK~iþvqs®rѕ>V
+OX„Žsûû{üúŸþöÛ{LË)ò@֚³Í~‡®my¾"„|ç+c þÛÿéßøý_ý+5XmÓàþõkܾ¾Æü¿ÿ/ü?ÿîßâÿß¿Çþþ~¸`˜B>Â!¢Fv÷w°]‡ƒÉõd
+­ÞX]Ûâþæ†ç+BÈ{¾JËÚvÛa{sƒ»›×ØÝßý!/!„|(LQ`¾\¡šNqþø VGG(ªêÇñ|EùÒÏWƒ1°ý¿üo~¿Ýâú·_ñò—Ÿqó:PòŠòñ‘–`=™bµÙàðäRnÃó!äK>_½qâúïÿçÿÕwMƒ¶i`m÷ÆÞ8BùXÈÞK­4ŠªÂ÷¯þ‹wfð|EùZÎW„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„BÈ×Àÿ…ö%rÉc^IEND®B`‚
\ No newline at end of file
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/xmeter_yellow.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/ymeter_red.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/ymeter_yellow.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/radial_checked.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/ymeter_white.png
New file
0,0 → 1,11
‰PNG

+IHDR<¹8àIbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÔ 
+dÎ2ÿIDATxÚí×Ïk]Uðï9÷¼——¼æaC¬"-Ñt!
+"E¸àc@Ê D 9˜3´VZ)ÅDyÕx›Æ¡(´ªšZk%¸àà’G‘""%¤L ÊژBˆò¢aÅ,PJ3A¤@óiþëû'#hü‡˜â)žâ)žâ)žâ)žâÿ6"ÂÔÉÊɯvN°œÖŒ“V@N–P1΅Q§c^¯*+U[k¥€,Œ#ZoÑF‡<BŠH)¡ßïq]·Š(LÓ¸^¯{µª,MìX+¥Áœ)ÂÇë4Þ¢õ-Úè03Ógk½I‰vŒµþnéªRJ=·G<Ã-"H9"¤x‚¼Eã\~g‰÷÷hç"RÊwsaCD¶)>
+3GÇKH)é”Óéë­o±|ñ]nfŸÊãýÃÂû¸M”7ܼymID¶´Ö»j–çó[Ü ÅYÝ“Í ÈÏÏ÷ô“_µµî·”èãÝÝLJgGٍ_\ʙ×E䊈€™E°Öù œ p.ÞO‰†»»žý㢀ë×?SÌü9Q¦”WS¢…”h#íŘ։ò;;În…¿Ÿø@–\ôiIEND®B`‚
\ No newline at end of file
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/xmeter_normal.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/checkbox_checkedhi.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/automake-1_1_5/cinelerra/hvirtual/plugins/defaulttheme/data/ymeter_normal.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream