summaryrefslogtreecommitdiff
path: root/indra/llkdu/llkdumem.cpp
diff options
context:
space:
mode:
authorAnsariel <ansariel.hiller@phoenixviewer.com>2024-05-22 19:04:52 +0200
committerAnsariel <ansariel.hiller@phoenixviewer.com>2024-05-22 19:04:52 +0200
commit1b67dd855c41f5a0cda7ec2a68d98071986ca703 (patch)
treeab243607f74f78200787bba5b9b88f07ef1b966f /indra/llkdu/llkdumem.cpp
parent6d6eabca44d08d5b97bfe3e941d2b9687c2246ea (diff)
parente1623bb276f83a43ce7a197e388720c05bdefe61 (diff)
Merge remote-tracking branch 'origin/main' into DRTVWR-600-maint-A
# Conflicts: # autobuild.xml # indra/cmake/CMakeLists.txt # indra/cmake/GoogleMock.cmake # indra/llaudio/llaudioengine_fmodstudio.cpp # indra/llaudio/llaudioengine_fmodstudio.h # indra/llaudio/lllistener_fmodstudio.cpp # indra/llaudio/lllistener_fmodstudio.h # indra/llaudio/llstreamingaudio_fmodstudio.cpp # indra/llaudio/llstreamingaudio_fmodstudio.h # indra/llcharacter/llmultigesture.cpp # indra/llcharacter/llmultigesture.h # indra/llimage/llimage.cpp # indra/llimage/llimagepng.cpp # indra/llimage/llimageworker.cpp # indra/llimage/tests/llimageworker_test.cpp # indra/llmessage/tests/llmockhttpclient.h # indra/llprimitive/llgltfmaterial.h # indra/llrender/llfontfreetype.cpp # indra/llui/llcombobox.cpp # indra/llui/llfolderview.cpp # indra/llui/llfolderviewmodel.h # indra/llui/lllineeditor.cpp # indra/llui/lllineeditor.h # indra/llui/lltextbase.cpp # indra/llui/lltextbase.h # indra/llui/lltexteditor.cpp # indra/llui/lltextvalidate.cpp # indra/llui/lltextvalidate.h # indra/llui/lluictrl.h # indra/llui/llview.cpp # indra/llwindow/llwindowmacosx.cpp # indra/newview/app_settings/settings.xml # indra/newview/llappearancemgr.cpp # indra/newview/llappearancemgr.h # indra/newview/llavatarpropertiesprocessor.cpp # indra/newview/llavatarpropertiesprocessor.h # indra/newview/llbreadcrumbview.cpp # indra/newview/llbreadcrumbview.h # indra/newview/llbreastmotion.cpp # indra/newview/llbreastmotion.h # indra/newview/llconversationmodel.h # indra/newview/lldensityctrl.cpp # indra/newview/lldensityctrl.h # indra/newview/llface.inl # indra/newview/llfloatereditsky.cpp # indra/newview/llfloatereditwater.cpp # indra/newview/llfloateremojipicker.h # indra/newview/llfloaterimsessiontab.cpp # indra/newview/llfloaterprofiletexture.cpp # indra/newview/llfloaterprofiletexture.h # indra/newview/llgesturemgr.cpp # indra/newview/llgesturemgr.h # indra/newview/llimpanel.cpp # indra/newview/llimpanel.h # indra/newview/llinventorybridge.cpp # indra/newview/llinventorybridge.h # indra/newview/llinventoryclipboard.cpp # indra/newview/llinventoryclipboard.h # indra/newview/llinventoryfunctions.cpp # indra/newview/llinventoryfunctions.h # indra/newview/llinventorygallery.cpp # indra/newview/lllistbrowser.cpp # indra/newview/lllistbrowser.h # indra/newview/llpanelobjectinventory.cpp # indra/newview/llpanelprofile.cpp # indra/newview/llpanelprofile.h # indra/newview/llpreviewgesture.cpp # indra/newview/llsavedsettingsglue.cpp # indra/newview/llsavedsettingsglue.h # indra/newview/lltooldraganddrop.cpp # indra/newview/llurllineeditorctrl.cpp # indra/newview/llvectorperfoptions.cpp # indra/newview/llvectorperfoptions.h # indra/newview/llviewerparceloverlay.cpp # indra/newview/llviewertexlayer.cpp # indra/newview/llviewertexturelist.cpp # indra/newview/macmain.h # indra/test/test.cpp
Diffstat (limited to 'indra/llkdu/llkdumem.cpp')
-rw-r--r--indra/llkdu/llkdumem.cpp306
1 files changed, 153 insertions, 153 deletions
diff --git a/indra/llkdu/llkdumem.cpp b/indra/llkdu/llkdumem.cpp
index 96e9da25d8..04ab033093 100644
--- a/indra/llkdu/llkdumem.cpp
+++ b/indra/llkdu/llkdumem.cpp
@@ -1,25 +1,25 @@
- /**
+ /**
* @file llkdumem.cpp
* @brief Helper class for kdu memory management
*
* $LicenseInfo:firstyear=2010&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
- *
+ *
* This library 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
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
+ *
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -36,164 +36,164 @@ using kd_supp_image_local::image_line_buf;
#endif
LLKDUMemIn::LLKDUMemIn(const U8 *data,
- const U32 size,
- const U16 width,
- const U16 height,
- const U8 in_num_components,
- siz_params *siz)
+ const U32 size,
+ const U16 width,
+ const U16 height,
+ const U8 in_num_components,
+ siz_params *siz)
{
- U8 n;
-
- first_comp_idx = 0;
- rows = height;
- cols = width;
- num_components = in_num_components;
- alignment_bytes = 0;
-
- for (n = 0; n < 3; ++n)
- {
- precision[n] = 0;
- }
-
- for (n = 0; n < num_components; ++n)
- {
- siz->set(Sdims,n,0,rows);
- siz->set(Sdims,n,1,cols);
- siz->set(Ssigned,n,0,false);
- siz->set(Sprecision,n,0,8);
- }
- incomplete_lines = NULL;
- free_lines = NULL;
- num_unread_rows = rows;
-
- mData = data;
- mDataSize = size;
- mCurPos = 0;
+ U8 n;
+
+ first_comp_idx = 0;
+ rows = height;
+ cols = width;
+ num_components = in_num_components;
+ alignment_bytes = 0;
+
+ for (n = 0; n < 3; ++n)
+ {
+ precision[n] = 0;
+ }
+
+ for (n = 0; n < num_components; ++n)
+ {
+ siz->set(Sdims,n,0,rows);
+ siz->set(Sdims,n,1,cols);
+ siz->set(Ssigned,n,0,false);
+ siz->set(Sprecision,n,0,8);
+ }
+ incomplete_lines = NULL;
+ free_lines = NULL;
+ num_unread_rows = rows;
+
+ mData = data;
+ mDataSize = size;
+ mCurPos = 0;
}
LLKDUMemIn::~LLKDUMemIn()
{
- if ((num_unread_rows > 0) || (incomplete_lines != NULL))
- {
- kdu_warning w;
- w << "Not all rows of image components "
- << first_comp_idx << " through "
- << first_comp_idx+num_components-1
- << " were consumed!";
- }
- image_line_buf *tmp;
- while ((tmp=incomplete_lines) != NULL)
- {
- incomplete_lines = tmp->next;
- delete tmp;
- }
- while ((tmp=free_lines) != NULL)
- {
- free_lines = tmp->next;
- delete tmp;
- }
+ if ((num_unread_rows > 0) || (incomplete_lines != NULL))
+ {
+ kdu_warning w;
+ w << "Not all rows of image components "
+ << first_comp_idx << " through "
+ << first_comp_idx+num_components-1
+ << " were consumed!";
+ }
+ image_line_buf *tmp;
+ while ((tmp=incomplete_lines) != NULL)
+ {
+ incomplete_lines = tmp->next;
+ delete tmp;
+ }
+ while ((tmp=free_lines) != NULL)
+ {
+ free_lines = tmp->next;
+ delete tmp;
+ }
}
bool LLKDUMemIn::get(int comp_idx, kdu_line_buf &line, int x_tnum)
{
- int idx = comp_idx - this->first_comp_idx;
- assert((idx >= 0) && (idx < num_components));
- x_tnum = x_tnum*num_components+idx;
- image_line_buf *scan, *prev=NULL;
- for (scan = incomplete_lines; scan != NULL; prev = scan, scan = scan->next)
- {
- assert(scan->next_x_tnum >= x_tnum);
- if (scan->next_x_tnum == x_tnum)
- {
- break;
- }
- }
- if (scan == NULL)
- { // Need to read a new image line.
- assert(x_tnum == 0); // Must consume in very specific order.
- if (num_unread_rows == 0)
- {
- return false;
- }
- if ((scan = free_lines) == NULL)
- {
- scan = new image_line_buf(cols+3,num_components);
- }
- free_lines = scan->next;
- if (prev == NULL)
- {
- incomplete_lines = scan;
- }
- else
- {
- prev->next = scan;
- }
-
- // Copy from image buffer into scan.
- memcpy(scan->buf, mData+mCurPos, cols*num_components);
- mCurPos += cols*num_components;
-
- num_unread_rows--;
- scan->accessed_samples = 0;
- scan->next_x_tnum = 0;
- }
-
- assert((cols-scan->accessed_samples) >= line.get_width());
-
- int comp_offset = idx;
- kdu_byte *sp = scan->buf+num_components*scan->accessed_samples + comp_offset;
- int n=line.get_width();
-
- if (line.get_buf32() != NULL)
- {
- kdu_sample32 *dp = line.get_buf32();
- if (line.is_absolute())
- { // 32-bit absolute integers
- for (; n > 0; n--, sp+=num_components, dp++)
- {
- dp->ival = ((kdu_int32)(*sp)) - 128;
- }
- }
- else
- { // true 32-bit floats
- for (; n > 0; n--, sp+=num_components, dp++)
- {
- dp->fval = (((float)(*sp)) / 256.0F) - 0.5F;
- }
- }
- }
- else
- {
- kdu_sample16 *dp = line.get_buf16();
- if (line.is_absolute())
- { // 16-bit absolute integers
- for (; n > 0; n--, sp+=num_components, dp++)
- {
- dp->ival = ((kdu_int16)(*sp)) - 128;
- }
- }
- else
- { // 16-bit normalized representation.
- for (; n > 0; n--, sp+=num_components, dp++)
- {
- dp->ival = (((kdu_int16)(*sp)) - 128) << (KDU_FIX_POINT-8);
- }
- }
- }
-
- scan->next_x_tnum++;
- if (idx == (num_components-1))
- {
- scan->accessed_samples += line.get_width();
- }
- if (scan->accessed_samples == cols)
- { // Send empty line to free list.
- assert(scan == incomplete_lines);
- incomplete_lines = scan->next;
- scan->next = free_lines;
- free_lines = scan;
- }
+ int idx = comp_idx - this->first_comp_idx;
+ assert((idx >= 0) && (idx < num_components));
+ x_tnum = x_tnum*num_components+idx;
+ image_line_buf *scan, *prev=NULL;
+ for (scan = incomplete_lines; scan != NULL; prev = scan, scan = scan->next)
+ {
+ assert(scan->next_x_tnum >= x_tnum);
+ if (scan->next_x_tnum == x_tnum)
+ {
+ break;
+ }
+ }
+ if (scan == NULL)
+ { // Need to read a new image line.
+ assert(x_tnum == 0); // Must consume in very specific order.
+ if (num_unread_rows == 0)
+ {
+ return false;
+ }
+ if ((scan = free_lines) == NULL)
+ {
+ scan = new image_line_buf(cols+3,num_components);
+ }
+ free_lines = scan->next;
+ if (prev == NULL)
+ {
+ incomplete_lines = scan;
+ }
+ else
+ {
+ prev->next = scan;
+ }
+
+ // Copy from image buffer into scan.
+ memcpy(scan->buf, mData+mCurPos, cols*num_components);
+ mCurPos += cols*num_components;
+
+ num_unread_rows--;
+ scan->accessed_samples = 0;
+ scan->next_x_tnum = 0;
+ }
+
+ assert((cols-scan->accessed_samples) >= line.get_width());
+
+ int comp_offset = idx;
+ kdu_byte *sp = scan->buf+num_components*scan->accessed_samples + comp_offset;
+ int n=line.get_width();
+
+ if (line.get_buf32() != NULL)
+ {
+ kdu_sample32 *dp = line.get_buf32();
+ if (line.is_absolute())
+ { // 32-bit absolute integers
+ for (; n > 0; n--, sp+=num_components, dp++)
+ {
+ dp->ival = ((kdu_int32)(*sp)) - 128;
+ }
+ }
+ else
+ { // true 32-bit floats
+ for (; n > 0; n--, sp+=num_components, dp++)
+ {
+ dp->fval = (((float)(*sp)) / 256.0F) - 0.5F;
+ }
+ }
+ }
+ else
+ {
+ kdu_sample16 *dp = line.get_buf16();
+ if (line.is_absolute())
+ { // 16-bit absolute integers
+ for (; n > 0; n--, sp+=num_components, dp++)
+ {
+ dp->ival = ((kdu_int16)(*sp)) - 128;
+ }
+ }
+ else
+ { // 16-bit normalized representation.
+ for (; n > 0; n--, sp+=num_components, dp++)
+ {
+ dp->ival = (((kdu_int16)(*sp)) - 128) << (KDU_FIX_POINT-8);
+ }
+ }
+ }
+
+ scan->next_x_tnum++;
+ if (idx == (num_components-1))
+ {
+ scan->accessed_samples += line.get_width();
+ }
+ if (scan->accessed_samples == cols)
+ { // Send empty line to free list.
+ assert(scan == incomplete_lines);
+ incomplete_lines = scan->next;
+ scan->next = free_lines;
+ free_lines = scan;
+ }
return true;
}