add binfolder path relative filters, fix gbrp color model, vwdw timebar tweaks, title...
[goodguy/history.git] / cinelerra-5.1 / guicast / vframe.C
index e8dad7ea1315ee913bb439c355767f4de725dc1b..3eca676452ca8536fa3f78993e68a24bf35fd9a1 100644 (file)
@@ -279,8 +279,8 @@ int VFrame::reset_parameters(int do_opengl)
        sequence_number = -1;
        timestamp = -1.;
        is_keyframe = 0;
-       draw_point = 0;
-       set_pixel_color(BLACK);
+       pixel_rgb = 0x000000; // BLACK
+       pixel_yuv = 0x008080;
        stipple = 0;
 
        if(do_opengl)
@@ -354,6 +354,7 @@ if( memory_type != VFrame::SHARED )
                case BC_YUV444P:
                case BC_RGB_FLOATP:
                case BC_RGBA_FLOATP:
+               case BC_GBRP:
                        break;
 
                default:
@@ -445,6 +446,12 @@ void VFrame::create_row_pointers()
                this->u_offset = sz;
                this->v_offset = sz + sz;
                break;
+       case BC_GBRP:
+               if( this->v_offset ) break;
+               this->y_offset = 0;
+               this->u_offset = sz * sizeof(uint8_t);
+               this->v_offset = 2 * sz * sizeof(uint8_t);
+               break;
        case BC_RGBA_FLOATP:
                if( this->v_offset || a ) break;
                a = this->data + 3 * sz * sizeof(float);
@@ -884,27 +891,33 @@ int VFrame::clear_frame()
 
        case BC_YUV410P:
                bzero(get_y(), sz);
-               bzero(get_u(), w / 4 * h / 4);
-               bzero(get_v(), w / 4 * h / 4);
+               memset(get_u(), 0x80, w / 4 * h / 4);
+               memset(get_v(), 0x80, w / 4 * h / 4);
                break;
 
        case BC_YUV411P:
        case BC_YUV420P:
        case BC_YUV420PI:
                bzero(get_y(), sz);
-               bzero(get_u(), sz / 4);
-               bzero(get_v(), sz / 4);
+               memset(get_u(), 0x80, sz / 4);
+               memset(get_v(), 0x80, sz / 4);
                break;
 
        case BC_YUV422P:
                bzero(get_y(), sz);
-               bzero(get_u(), sz / 2);
-               bzero(get_v(), sz / 2);
+               memset(get_u(), 0x80, sz / 2);
+               memset(get_v(), 0x80, sz / 2);
+               break;
+
+       case BC_GBRP:
+               bzero(get_y(), sz);
+               bzero(get_u(), sz);
+               bzero(get_b(), sz);
                break;
 
        case BC_RGBA_FLOATP: if( a ) {
                float *ap = (float *)a;
-               for( int i=sz; --i>=0; ++ap ) *ap = 1.f; }
+               for( int i=sz; --i>=0; ++ap ) *ap = 0.f; }
        case BC_RGB_FLOATP: {
                float *rp = (float *)y;
                for( int i=sz; --i>=0; ++rp ) *rp = 0.f;
@@ -915,8 +928,8 @@ int VFrame::clear_frame()
                break; }
        case BC_YUV444P:
                bzero(get_y(), sz);
-               bzero(get_u(), sz);
-               bzero(get_v(), sz);
+               memset(get_u(), 0x80, sz);
+               memset(get_v(), 0x80, sz);
                break;
 
        case BC_YUV888:
@@ -1346,7 +1359,6 @@ void VFrame::set_stiple(int mask)
 int VFrame::draw_pixel(int x, int y)
 {
        if( x < 0 || y < 0 || x >= get_w() || y >= get_h() ) return 1;
-       if( draw_point ) return (this->*draw_point)(x, y);
 
 #define DRAW_PIXEL(type, r, g, b) { \
        type **rows = (type**)get_rows(); \