xref: /rockchip-linux_mpp/mpp/base/test/mpp_bit_test.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2015 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 "mpp_bit_test"
18*437bfbebSnyanmisaka 
19*437bfbebSnyanmisaka #include <stdlib.h>
20*437bfbebSnyanmisaka 
21*437bfbebSnyanmisaka #include "mpp_log.h"
22*437bfbebSnyanmisaka #include "mpp_common.h"
23*437bfbebSnyanmisaka #include "mpp_bitwrite.h"
24*437bfbebSnyanmisaka 
25*437bfbebSnyanmisaka #define BIT_WRITER_BUFFER_SIZE  1024
26*437bfbebSnyanmisaka 
27*437bfbebSnyanmisaka /*
28*437bfbebSnyanmisaka  * type is for operation type
29*437bfbebSnyanmisaka  * 0 - plain bit put
30*437bfbebSnyanmisaka  * 1 - bit put with detection
31*437bfbebSnyanmisaka  * 2 - write ue
32*437bfbebSnyanmisaka  * 3 - write se
33*437bfbebSnyanmisaka  * 4 - align byte
34*437bfbebSnyanmisaka  */
35*437bfbebSnyanmisaka typedef enum BitOpsType_e {
36*437bfbebSnyanmisaka     BIT_PUT_NO03,
37*437bfbebSnyanmisaka     BIT_PUT,
38*437bfbebSnyanmisaka     BIT_PUT_UE,
39*437bfbebSnyanmisaka     BIT_PUT_SE,
40*437bfbebSnyanmisaka     BIT_ALIGN_BYTE,
41*437bfbebSnyanmisaka } BitOpsType;
42*437bfbebSnyanmisaka 
43*437bfbebSnyanmisaka typedef struct BitOps_t {
44*437bfbebSnyanmisaka     BitOpsType  type;
45*437bfbebSnyanmisaka     RK_S32      val;
46*437bfbebSnyanmisaka     RK_S32      len;
47*437bfbebSnyanmisaka } BitOps;
48*437bfbebSnyanmisaka 
49*437bfbebSnyanmisaka static BitOps bit_ops[] = {
50*437bfbebSnyanmisaka     {   BIT_PUT_NO03,       0,      8,  },
51*437bfbebSnyanmisaka     {   BIT_PUT,            0,      3,  },
52*437bfbebSnyanmisaka     {   BIT_PUT,            0,     15,  },
53*437bfbebSnyanmisaka     {   BIT_PUT,            0,     23,  },
54*437bfbebSnyanmisaka     {   BIT_PUT_UE,        17,      0,  },
55*437bfbebSnyanmisaka     {   BIT_PUT_SE,         9,      0,  },
56*437bfbebSnyanmisaka     {   BIT_ALIGN_BYTE,     0,      0,  },
57*437bfbebSnyanmisaka };
58*437bfbebSnyanmisaka 
proc_bit_ops(MppWriteCtx * writer,BitOps * ops)59*437bfbebSnyanmisaka void proc_bit_ops(MppWriteCtx *writer, BitOps *ops)
60*437bfbebSnyanmisaka {
61*437bfbebSnyanmisaka     switch (ops->type) {
62*437bfbebSnyanmisaka     case BIT_PUT_NO03 : {
63*437bfbebSnyanmisaka         mpp_writer_put_raw_bits(writer, ops->val, ops->len);
64*437bfbebSnyanmisaka     } break;
65*437bfbebSnyanmisaka     case BIT_PUT : {
66*437bfbebSnyanmisaka         mpp_writer_put_bits(writer, ops->val, ops->len);
67*437bfbebSnyanmisaka     } break;
68*437bfbebSnyanmisaka     case BIT_PUT_UE : {
69*437bfbebSnyanmisaka         mpp_writer_put_ue(writer, ops->val);
70*437bfbebSnyanmisaka     } break;
71*437bfbebSnyanmisaka     case BIT_PUT_SE : {
72*437bfbebSnyanmisaka         mpp_writer_put_ue(writer, ops->val);
73*437bfbebSnyanmisaka     } break;
74*437bfbebSnyanmisaka     case BIT_ALIGN_BYTE : {
75*437bfbebSnyanmisaka         mpp_writer_trailing(writer);
76*437bfbebSnyanmisaka     } break;
77*437bfbebSnyanmisaka     default : {
78*437bfbebSnyanmisaka         mpp_err("invalid ops type %d\n", ops->type);
79*437bfbebSnyanmisaka     } break;
80*437bfbebSnyanmisaka     }
81*437bfbebSnyanmisaka }
82*437bfbebSnyanmisaka 
main()83*437bfbebSnyanmisaka int main()
84*437bfbebSnyanmisaka {
85*437bfbebSnyanmisaka     MPP_RET ret = MPP_ERR_UNKNOW;
86*437bfbebSnyanmisaka     void *data = NULL;
87*437bfbebSnyanmisaka     size_t size = BIT_WRITER_BUFFER_SIZE;
88*437bfbebSnyanmisaka     MppWriteCtx writer;
89*437bfbebSnyanmisaka     RK_U32 len_byte;
90*437bfbebSnyanmisaka     RK_U32 i;
91*437bfbebSnyanmisaka     RK_U32 buf_len = 0;
92*437bfbebSnyanmisaka     char buf[BIT_WRITER_BUFFER_SIZE];
93*437bfbebSnyanmisaka 
94*437bfbebSnyanmisaka     mpp_log("mpp_bit_test start\n");
95*437bfbebSnyanmisaka 
96*437bfbebSnyanmisaka     data = malloc(size);
97*437bfbebSnyanmisaka     if (NULL == data) {
98*437bfbebSnyanmisaka         mpp_err("mpp_bit_test malloc failed\n");
99*437bfbebSnyanmisaka         goto TEST_FAILED;
100*437bfbebSnyanmisaka     }
101*437bfbebSnyanmisaka 
102*437bfbebSnyanmisaka     mpp_writer_init(&writer, data, size);
103*437bfbebSnyanmisaka 
104*437bfbebSnyanmisaka     for (i = 0; i < MPP_ARRAY_ELEMS(bit_ops); i++)
105*437bfbebSnyanmisaka         proc_bit_ops(&writer, &bit_ops[i]);
106*437bfbebSnyanmisaka 
107*437bfbebSnyanmisaka     len_byte = writer.byte_cnt;
108*437bfbebSnyanmisaka 
109*437bfbebSnyanmisaka     for (i = 0; i < len_byte; i++) {
110*437bfbebSnyanmisaka         buf_len += snprintf(buf + buf_len, sizeof(buf) - buf_len,
111*437bfbebSnyanmisaka                             "%02x ", writer.buffer[i]);
112*437bfbebSnyanmisaka     }
113*437bfbebSnyanmisaka 
114*437bfbebSnyanmisaka     mpp_log("stream %s\n", buf);
115*437bfbebSnyanmisaka 
116*437bfbebSnyanmisaka     ret = MPP_OK;
117*437bfbebSnyanmisaka TEST_FAILED:
118*437bfbebSnyanmisaka     if (data)
119*437bfbebSnyanmisaka         free(data);
120*437bfbebSnyanmisaka 
121*437bfbebSnyanmisaka     if (ret)
122*437bfbebSnyanmisaka         mpp_log("mpp_bit_test failed\n");
123*437bfbebSnyanmisaka     else
124*437bfbebSnyanmisaka         mpp_log("mpp_bit_test success\n");
125*437bfbebSnyanmisaka 
126*437bfbebSnyanmisaka     return ret;
127*437bfbebSnyanmisaka }
128*437bfbebSnyanmisaka 
129