MCPcopy Create free account
hub / github.com/NatronGitHub/Natron / copy

Method copy

Engine/FrameEntry.cpp:56–113  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

54}
55
56void
57FrameEntry::copy(const FrameEntry& other)
58{
59 U8* dstPixels = data();
60
61 assert(dstPixels);
62 if (!dstPixels) {
63 return;
64 }
65 const U8* srcPixels = other.data();
66 const TextureRect& srcBounds = other.getKey().getTexRect();
67 const TextureRect& dstBounds = _key.getTexRect();
68 std::size_t srcRowSize = srcBounds.width();
69 unsigned int srcPixelSize = 4;
70 if ( (ImageBitDepthEnum)other.getKey().getBitDepth() == eImageBitDepthFloat ) {
71 srcPixelSize *= sizeof(float);
72 }
73 srcRowSize *= srcPixelSize;
74
75 std::size_t dstRowSize = srcBounds.width();
76 unsigned int dstPixelSize = 4;
77 if ( (ImageBitDepthEnum)_key.getBitDepth() == eImageBitDepthFloat ) {
78 dstPixelSize *= sizeof(float);
79 }
80 dstRowSize *= dstPixelSize;
81
82 // Fill with black and transparent because src might be smaller
83 if ( !srcPixels ||
84 !srcBounds.contains(dstBounds) ||
85 other.getKey().getBitDepth() != _key.getBitDepth() ) {
86 std::memset( dstPixels, 0, dstRowSize * dstBounds.height() );
87
88 return;
89 }
90
91 // Copy pixels over the intersection
92 RectI srcBoundsRect;
93 srcBoundsRect.x1 = srcBounds.x1;
94 srcBoundsRect.x2 = srcBounds.x2;
95 srcBoundsRect.y1 = srcBounds.y1;
96 srcBoundsRect.y2 = srcBounds.y2;
97 RectI roi;
98 if ( !dstBounds.intersect(srcBoundsRect, &roi) ) {
99 return;
100 }
101
102 dstPixels += (roi.y1 - dstBounds.y1) * dstRowSize + (roi.x1 - dstBounds.x1) * dstPixelSize;
103 srcPixels += (roi.y1 - srcBounds.y1) * srcRowSize + (roi.x1 - srcBounds.x1) * srcPixelSize;
104
105 std::size_t roiRowSize = dstPixelSize * roi.width();
106
107 //Align dstPixel to srcPixels point
108 for (int y = roi.y1; y < roi.y2; ++y,
109 srcPixels += srcRowSize,
110 dstPixels += dstRowSize) {
111 std::memcpy(dstPixels, srcPixels, roiRowSize);
112 }
113} // FrameEntry::copy

Callers 3

exportDocsMethod · 0.45
Sbk_ParamFunc_copyFunction · 0.45
paintEventMethod · 0.45

Calls 7

dataFunction · 0.85
dataMethod · 0.45
widthMethod · 0.45
getBitDepthMethod · 0.45
containsMethod · 0.45
heightMethod · 0.45
intersectMethod · 0.45

Tested by

no test coverage detected