bool DeepData::copy_deep_pixel (int pixel, const DeepData &src, int srcpixel) { if (pixel < 0 || pixel >= pixels()) { // std::cout << "dst pixel was " << pixel << "\n"; DASSERT (0 && "Out of range pixel index"); return false; } if (srcpixel < 0 || srcpixel >= src.pixels()) { // Copying empty pixel -- set samples to 0 and we're done // std::cout << "Source pixel was " << srcpixel << "\n"; set_samples (pixel, 0); return true; } int nchans = channels(); if (nchans != src.channels()) { DASSERT (0 && "Number of channels don't match."); return false; } int nsamples = src.samples(srcpixel); set_samples (pixel, nsamples); if (nsamples == 0) return true; bool sametypes = samplesize() == src.samplesize(); if (sametypes) for (int c = 0; c < nchans; ++c) sametypes &= (channeltype(c) == src.channeltype(c)); if (sametypes) memcpy (data_ptr (pixel, 0, 0), src.data_ptr (srcpixel, 0, 0), samplesize()*nsamples); else { for (int c = 0; c < nchans; ++c) { if (channeltype(c) == TypeDesc::UINT32 && src.channeltype(c) == TypeDesc::UINT32) for (int s = 0; s < nsamples; ++s) set_deep_value (pixel, c, s, src.deep_value_uint (srcpixel, c, s)); else for (int s = 0; s < nsamples; ++s) set_deep_value (pixel, c, s, src.deep_value (srcpixel, c, s)); } } return true; }
bool DeepData::copy_deep_sample (int pixel, int sample, const DeepData &src, int srcpixel, int srcsample) { const void *srcdata = src.data_ptr (srcpixel, 0, srcsample); int nchans = channels(); if (! srcdata || nchans != src.channels()) return false; int nsamples = src.samples(srcpixel); set_samples (pixel, std::max (samples(pixel), nsamples)); for (int c = 0; c < m_nchannels; ++c) { if (channeltype(c) == TypeDesc::UINT32 && src.channeltype(c) == TypeDesc::UINT32) set_deep_value (pixel, c, sample, src.deep_value_uint (srcpixel, c, srcsample)); else set_deep_value (pixel, c, sample, src.deep_value (srcpixel, c, srcsample)); } return true; }