1370b324cSopenharmony_ci// ByteSwap.cpp
2370b324cSopenharmony_ci
3370b324cSopenharmony_ci#include "StdAfx.h"
4370b324cSopenharmony_ci
5370b324cSopenharmony_ci#include "../../../C/SwapBytes.h"
6370b324cSopenharmony_ci
7370b324cSopenharmony_ci#include "../../Common/MyCom.h"
8370b324cSopenharmony_ci
9370b324cSopenharmony_ci#include "../ICoder.h"
10370b324cSopenharmony_ci
11370b324cSopenharmony_ci#include "../Common/RegisterCodec.h"
12370b324cSopenharmony_ci
13370b324cSopenharmony_cinamespace NCompress {
14370b324cSopenharmony_cinamespace NByteSwap {
15370b324cSopenharmony_ci
16370b324cSopenharmony_ciZ7_CLASS_IMP_COM_1(CByteSwap2, ICompressFilter) };
17370b324cSopenharmony_ciZ7_CLASS_IMP_COM_1(CByteSwap4, ICompressFilter) };
18370b324cSopenharmony_ci
19370b324cSopenharmony_ciZ7_COM7F_IMF(CByteSwap2::Init()) { return S_OK; }
20370b324cSopenharmony_ci
21370b324cSopenharmony_ciZ7_COM7F_IMF2(UInt32, CByteSwap2::Filter(Byte *data, UInt32 size))
22370b324cSopenharmony_ci{
23370b324cSopenharmony_ci  const UInt32 kMask = 2 - 1;
24370b324cSopenharmony_ci  size &= ~kMask;
25370b324cSopenharmony_ci  /*
26370b324cSopenharmony_ci  if ((unsigned)(ptrdiff_t)data & kMask)
27370b324cSopenharmony_ci  {
28370b324cSopenharmony_ci    if (size == 0)
29370b324cSopenharmony_ci      return 0;
30370b324cSopenharmony_ci    const Byte *end = data + (size_t)size;
31370b324cSopenharmony_ci    do
32370b324cSopenharmony_ci    {
33370b324cSopenharmony_ci      const Byte b0 = data[0];
34370b324cSopenharmony_ci      data[0] = data[1];
35370b324cSopenharmony_ci      data[1] = b0;
36370b324cSopenharmony_ci      data += kStep;
37370b324cSopenharmony_ci    }
38370b324cSopenharmony_ci    while (data != end);
39370b324cSopenharmony_ci  }
40370b324cSopenharmony_ci  else
41370b324cSopenharmony_ci  */
42370b324cSopenharmony_ci  z7_SwapBytes2((UInt16 *)(void *)data, size >> 1);
43370b324cSopenharmony_ci  return size;
44370b324cSopenharmony_ci}
45370b324cSopenharmony_ci
46370b324cSopenharmony_ci
47370b324cSopenharmony_ciZ7_COM7F_IMF(CByteSwap4::Init()) { return S_OK; }
48370b324cSopenharmony_ci
49370b324cSopenharmony_ciZ7_COM7F_IMF2(UInt32, CByteSwap4::Filter(Byte *data, UInt32 size))
50370b324cSopenharmony_ci{
51370b324cSopenharmony_ci  const UInt32 kMask = 4 - 1;
52370b324cSopenharmony_ci  size &= ~kMask;
53370b324cSopenharmony_ci  /*
54370b324cSopenharmony_ci  if ((unsigned)(ptrdiff_t)data & kMask)
55370b324cSopenharmony_ci  {
56370b324cSopenharmony_ci    if (size == 0)
57370b324cSopenharmony_ci      return 0;
58370b324cSopenharmony_ci    const Byte *end = data + (size_t)size;
59370b324cSopenharmony_ci    do
60370b324cSopenharmony_ci    {
61370b324cSopenharmony_ci      const Byte b0 = data[0];
62370b324cSopenharmony_ci      const Byte b1 = data[1];
63370b324cSopenharmony_ci      data[0] = data[3];
64370b324cSopenharmony_ci      data[1] = data[2];
65370b324cSopenharmony_ci      data[2] = b1;
66370b324cSopenharmony_ci      data[3] = b0;
67370b324cSopenharmony_ci      data += kStep;
68370b324cSopenharmony_ci    }
69370b324cSopenharmony_ci    while (data != end);
70370b324cSopenharmony_ci  }
71370b324cSopenharmony_ci  else
72370b324cSopenharmony_ci  */
73370b324cSopenharmony_ci  z7_SwapBytes4((UInt32 *)(void *)data, size >> 2);
74370b324cSopenharmony_ci  return size;
75370b324cSopenharmony_ci}
76370b324cSopenharmony_ci
77370b324cSopenharmony_cistatic struct C_SwapBytesPrepare { C_SwapBytesPrepare() { z7_SwapBytesPrepare(); } } g_SwapBytesPrepare;
78370b324cSopenharmony_ci
79370b324cSopenharmony_ci
80370b324cSopenharmony_ciREGISTER_FILTER_CREATE(CreateFilter2, CByteSwap2())
81370b324cSopenharmony_ciREGISTER_FILTER_CREATE(CreateFilter4, CByteSwap4())
82370b324cSopenharmony_ci
83370b324cSopenharmony_ciREGISTER_CODECS_VAR
84370b324cSopenharmony_ci{
85370b324cSopenharmony_ci  REGISTER_FILTER_ITEM(CreateFilter2, CreateFilter2, 0x20302, "Swap2"),
86370b324cSopenharmony_ci  REGISTER_FILTER_ITEM(CreateFilter4, CreateFilter4, 0x20304, "Swap4"),
87370b324cSopenharmony_ci};
88370b324cSopenharmony_ci
89370b324cSopenharmony_ciREGISTER_CODECS(ByteSwap)
90370b324cSopenharmony_ci
91370b324cSopenharmony_ci}}
92