prevent death by zombie
[goodguy/history.git] / cinelerra-5.1 / guicast / vframe.C
index 1eec314bb0c7757468a98cdb23f65953cd10934e..e5d3759724ab1d8c460bd65b1f4806861c17c9cf 100644 (file)
@@ -536,7 +536,7 @@ void VFrame::set_memory(BC_Bitmap *bitmap)
 {
        int shmid = 0;
        unsigned char *data = 0;
-       if( bitmap->is_shared() )
+       if( bitmap->is_shared() && !bitmap->is_zombie() )
                shmid = bitmap->get_shmid();
        else
                data = bitmap->get_data();
@@ -790,6 +790,11 @@ int VFrame::write_png(const char *path)
                        png_cmodel = PNG_COLOR_TYPE_RGB;
                        break;
 
+               case BC_RGBA8888:
+               case BC_YUVA8888:
+                       png_cmodel = PNG_COLOR_TYPE_RGB_ALPHA;
+                       break;
+
                case BC_A8:
                        png_cmodel = PNG_COLOR_TYPE_GRAY;
                        break;
@@ -1042,7 +1047,7 @@ int VFrame::copy_from(VFrame *frame)
        return 0;
 }
 
-int VFrame::transfer_from(VFrame *that, int bg_color)
+int VFrame::transfer_from(VFrame *that, int bg_color, int in_x, int in_y, int in_w, int in_h)
 {
        if( this->get_color_model() == that->get_color_model() &&
            this->get_w() == that->get_w() && this->get_h() == that->get_h() )
@@ -1083,7 +1088,7 @@ int VFrame::transfer_from(VFrame *that, int bg_color)
        BC_CModels::transfer(outp, this->get_color_model(),
                        0, 0, this->get_w(), this->get_h(), this->get_w(),
                inp, that->get_color_model(),
-                       0, 0, that->get_w(), that->get_h(), that->get_w(),
+                       in_x, in_y, in_w, in_h, that->get_w(),
                bg_color);
 #endif
        return 0;