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