diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-01-16 15:58:56 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-01-16 15:58:56 +0000 |
| commit | e04eced93da1907e803c065a953ffe0d6540e1cb (patch) | |
| tree | cab897dea7c1a50c141ff948ff21e401038d0c07 /asdcplib/src/JP2K.cpp | |
| parent | 485794f8322b090a22da841961025b19642e42a2 (diff) | |
Use asdclib-cth rather than in-tree copy.
Diffstat (limited to 'asdcplib/src/JP2K.cpp')
| -rwxr-xr-x | asdcplib/src/JP2K.cpp | 224 |
1 files changed, 0 insertions, 224 deletions
diff --git a/asdcplib/src/JP2K.cpp b/asdcplib/src/JP2K.cpp deleted file mode 100755 index 4cc0e50..0000000 --- a/asdcplib/src/JP2K.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/* -Copyright (c) 2005-2009, John Hurst -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -/*! \file JP2K.cpp - \version $Id: JP2K.cpp,v 1.8 2010/06/17 03:33:17 jhurst Exp $ - \brief JPEG 2000 parser implementation - - This is not a complete implementation of all things JP2K. There is just enough here to - support parsing picture metadata from a codestream header. -*/ - -#include <JP2K.h> -#include <KM_log.h> -using Kumu::DefaultLogSink; - - -// when indexed with the second byte of a marker code, this table will procuce one of -// two values: -// 0 - the marker is a standalone marker -// 1 - the marker designates a marker segment -// -const byte_t MarkerSegmentMap[] = - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ - /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1 - /* 2 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 2 - /* 3 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3 - /* 4 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4 - /* 5 */ 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, // 5 - /* 6 */ 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6 - /* 7 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 7 - /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8 - /* 9 */ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9 - /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // a - /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // b - /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // c - /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // d - /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // e - /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ - }; - - -// -ASDCP::Result_t -ASDCP::JP2K::GetNextMarker(const byte_t** buf, JP2K::Marker& Marker) -{ - assert((buf != 0) && (*buf != 0 )); - - if ( **buf != 0xff ) - return ASDCP::RESULT_FAIL; - - Marker.m_IsSegment = (MarkerSegmentMap[*(++(*buf))] == 1); - Marker.m_Type = (Marker_t)(0xff00 | *(*buf)++); - - if ( Marker.m_IsSegment ) - { - Marker.m_DataSize = *(*buf)++ << 8; - Marker.m_DataSize |= *(*buf)++; - Marker.m_DataSize -= 2; - Marker.m_Data = *buf; - *buf += Marker.m_DataSize; - } - - - if ( Marker.m_DataSize != 0 && Marker.m_DataSize < 3 ) - { - DefaultLogSink().Error("Illegal data size: %u\n", Marker.m_DataSize); - return ASDCP::RESULT_FAIL; - } - - return ASDCP::RESULT_OK; -} - - -//------------------------------------------------------------------------------------------------------- -// - -// -void -ASDCP::JP2K::Accessor::SIZ::ReadComponent(ui32_t index, ASDCP::JP2K::ImageComponent_t& IC) -{ - assert ( index < Csize() ); - const byte_t* p = m_MarkerData + 36 + (index * 3); - IC.Ssize = *p++; - IC.XRsize = *p++; - IC.YRsize = *p; -} - -// -void -ASDCP::JP2K::Accessor::SIZ::Dump(FILE* stream) -{ - if ( stream == 0 ) - stream = stderr; - - fprintf(stream, "SIZ: \n"); - fprintf(stream, " Rsize: %hu\n", Rsize()); - fprintf(stream, " Xsize: %u\n", Xsize()); - fprintf(stream, " Ysize: %u\n", Ysize()); - fprintf(stream, " XOsize: %u\n", XOsize()); - fprintf(stream, " YOsize: %u\n", YOsize()); - fprintf(stream, " XTsize: %u\n", XTsize()); - fprintf(stream, " YTsize: %u\n", YTsize()); - fprintf(stream, "XTOsize: %u\n", XTOsize()); - fprintf(stream, "YTOsize: %u\n", YTOsize()); - fprintf(stream, " Csize: %u\n", Csize()); - - if ( Csize() > 0 ) - { - fprintf(stream, "Components\n"); - - for ( ui32_t i = 0; i < Csize(); i++ ) - { - ImageComponent_t TmpComp; - ReadComponent(i, TmpComp); - fprintf(stream, "%u: ", i); - fprintf(stream, "%u, %u, %u\n", TmpComp.Ssize, TmpComp.XRsize, TmpComp.YRsize); - } - } -} - -// -void -ASDCP::JP2K::Accessor::COM::Dump(FILE* stream) -{ - if ( stream == 0 ) - stream = stderr; - - if ( IsText() ) - { - char* t_str = (char*)malloc(CommentSize() + 1); - assert( t_str != 0 ); - ui32_t cs = CommentSize(); - memcpy(t_str, CommentData(), cs); - t_str[cs] = 0; - fprintf(stream, "COM:%s\n", t_str); - } - else - { - fprintf(stream, "COM:\n"); - Kumu::hexdump(CommentData(), CommentSize(), stream); - } -} - - -//------------------------------------------------------------------------------------------------------- -// - - -// -void -ASDCP::JP2K::Marker::Dump(FILE* stream) const -{ - if ( stream == 0 ) - stream = stderr; - - fprintf(stream, "Marker%s 0x%04x: %s", (m_IsSegment ? " segment" : ""), m_Type, GetMarkerString(m_Type)); - - if ( m_IsSegment ) - fprintf(stream, ", 0x%0x bytes", m_DataSize); - - fputc('\n', stream); -} - -// -const char* -ASDCP::JP2K::GetMarkerString(Marker_t m) -{ - switch ( m ) - { - case MRK_NIL: return "NIL"; break; - case MRK_SOC: return "SOC: Start of codestream"; break; - case MRK_SOT: return "SOT: Start of tile-part"; break; - case MRK_SOD: return "SOD: Start of data"; break; - case MRK_EOC: return "EOC: End of codestream"; break; - case MRK_SIZ: return "SIZ: Image and tile size"; break; - case MRK_COD: return "COD: Coding style default"; break; - case MRK_COC: return "COC: Coding style component"; break; - case MRK_RGN: return "RGN: Region of interest"; break; - case MRK_QCD: return "QCD: Quantization default"; break; - case MRK_QCC: return "QCC: Quantization component"; break; - case MRK_POC: return "POC: Progression order change"; break; - case MRK_TLM: return "TLM: Tile-part lengths"; break; - case MRK_PLM: return "PLM: Packet length, main header"; break; - case MRK_PLT: return "PLT: Packet length, tile-part header"; break; - case MRK_PPM: return "PPM: Packed packet headers, main header"; break; - case MRK_PPT: return "PPT: Packed packet headers, tile-part header"; break; - case MRK_SOP: return "SOP: Start of packet"; break; - case MRK_EPH: return "EPH: End of packet header"; break; - case MRK_CRG: return "CRG: Component registration"; break; - case MRK_COM: return "COM: Comment"; break; - } - - return "Unknown marker code"; -} - -// -// end JP2K.cpp -// |
