xref: /rockchip-linux_mpp/mpp/hal/vpu/jpege/hal_jpege_base.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2020 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #define MODULE_TAG "hal_jpege_base"
18*437bfbebSnyanmisaka 
19*437bfbebSnyanmisaka #include <string.h>
20*437bfbebSnyanmisaka 
21*437bfbebSnyanmisaka #include "mpp_mem.h"
22*437bfbebSnyanmisaka #include "mpp_common.h"
23*437bfbebSnyanmisaka 
24*437bfbebSnyanmisaka #include "hal_jpege_debug.h"
25*437bfbebSnyanmisaka #include "hal_jpege_base.h"
26*437bfbebSnyanmisaka 
27*437bfbebSnyanmisaka const RK_U32 qp_reorder_table[64] = {
28*437bfbebSnyanmisaka     0,  8, 16, 24,  1,  9, 17, 25, 32, 40, 48, 56, 33, 41, 49, 57,
29*437bfbebSnyanmisaka     2, 10, 18, 26,  3, 11, 19, 27, 34, 42, 50, 58, 35, 43, 51, 59,
30*437bfbebSnyanmisaka     4, 12, 20, 28,  5, 13, 21, 29, 36, 44, 52, 60, 37, 45, 53, 61,
31*437bfbebSnyanmisaka     6, 14, 22, 30,  7, 15, 23, 31, 38, 46, 54, 62, 39, 47, 55, 63
32*437bfbebSnyanmisaka };
33*437bfbebSnyanmisaka 
34*437bfbebSnyanmisaka const RK_U16 jpege_restart_marker[8] = {
35*437bfbebSnyanmisaka     0xFFD0,  0xFFD1,  0xFFD2, 0xFFD3,
36*437bfbebSnyanmisaka     0xFFD4,  0xFFD5,  0xFFD6, 0xFFD7,
37*437bfbebSnyanmisaka };
38*437bfbebSnyanmisaka 
get_msb_lsb_at_pos(RK_U32 * msb,RK_U32 * lsb,RK_U8 * buf,RK_U32 bytepos)39*437bfbebSnyanmisaka void get_msb_lsb_at_pos(RK_U32 *msb, RK_U32 *lsb, RK_U8 *buf, RK_U32 bytepos)
40*437bfbebSnyanmisaka {
41*437bfbebSnyanmisaka     RK_U32 val32;
42*437bfbebSnyanmisaka     RK_S32 left_byte = bytepos & 0x7;
43*437bfbebSnyanmisaka     RK_U8 *tmp = buf + (bytepos & (~0x7));
44*437bfbebSnyanmisaka 
45*437bfbebSnyanmisaka     // clear the rest bytes in 64bit
46*437bfbebSnyanmisaka     if (left_byte) {
47*437bfbebSnyanmisaka         RK_U32 i;
48*437bfbebSnyanmisaka 
49*437bfbebSnyanmisaka         for (i = left_byte; i < 8; i++)
50*437bfbebSnyanmisaka             tmp[i] = 0;
51*437bfbebSnyanmisaka     }
52*437bfbebSnyanmisaka 
53*437bfbebSnyanmisaka     val32 = (tmp[0] << 24) |
54*437bfbebSnyanmisaka             (tmp[1] << 16) |
55*437bfbebSnyanmisaka             (tmp[2] <<  8) |
56*437bfbebSnyanmisaka             (tmp[3] <<  0);
57*437bfbebSnyanmisaka 
58*437bfbebSnyanmisaka     *msb = val32;
59*437bfbebSnyanmisaka 
60*437bfbebSnyanmisaka     if (left_byte > 4) {
61*437bfbebSnyanmisaka         val32 = (tmp[4] << 24) |
62*437bfbebSnyanmisaka                 (tmp[5] << 16) |
63*437bfbebSnyanmisaka                 (tmp[6] <<  8);
64*437bfbebSnyanmisaka     } else
65*437bfbebSnyanmisaka         val32 = 0;
66*437bfbebSnyanmisaka 
67*437bfbebSnyanmisaka     *lsb = val32;
68*437bfbebSnyanmisaka }
69