1 /*
2 * Copyright (c) 2021 iSoftStone Device Co., Ltd.
3 *
4 * HDF is dual licensed: you can use it either under the terms of
5 * the GPL, or the BSD license, at your option.
6 * See the LICENSE file in the root of this repository for complete details.
7 */
8
9 #include <stdio.h>
10 #include "ipp_algo.h"
11 #include "securec.h"
12
13 #define MAX_BUFFER_COUNT 100
14
Init(const IppAlgoMeta * meta)15 int Init(const IppAlgoMeta* meta)
16 {
17 printf("ipp algo example Init ...\n");
18 return 0;
19 }
20
Start(void)21 int Start(void)
22 {
23 printf("ipp algo example Start ...\n");
24 return 0;
25 }
26
Flush(void)27 int Flush(void)
28 {
29 printf("ipp algo example Flush ...\n");
30 return 0;
31 }
32
Process(const IppAlgoBuffer * inBuffer[],int inBufferCount,const IppAlgoBuffer * outBuffer,const IppAlgoMeta * meta)33 int Process(const IppAlgoBuffer *inBuffer[], int inBufferCount, const IppAlgoBuffer *outBuffer,
34 const IppAlgoMeta *meta)
35 {
36 printf("ipp algo example Process ...\n");
37 if (inBuffer == NULL || inBufferCount > MAX_BUFFER_COUNT) {
38 printf("inBuffer is NULL\n");
39 return -1;
40 }
41
42 for (int i = 0; i < inBufferCount; i++) {
43 if (inBuffer[i] != NULL) {
44 printf("in buffer addr = %p, width = %u, height = %u, stride = %u, size = %u, id = %d\n", inBuffer[i]->addr,
45 inBuffer[i]->width, inBuffer[i]->height, inBuffer[i]->stride, inBuffer[i]->size, inBuffer[i]->id);
46 } else {
47 printf("in buffer %d is NULL\n", i);
48 }
49 }
50
51 if (outBuffer != NULL && outBuffer->addr != NULL) {
52 printf("out buffer addr = %p, size = %u, id = %d\n", outBuffer->addr, outBuffer->size, outBuffer->id);
53 } else {
54 printf("out buffer is NULL\n");
55 }
56
57 if (inBufferCount == 1) {
58 if (inBuffer[0] == NULL || outBuffer == NULL || inBuffer[0]->addr == NULL || outBuffer->addr == NULL) {
59 return 0;
60 }
61 char *in = (char*)(inBuffer[0]->addr);
62 char *out = (char*)(outBuffer->addr);
63 if (memcpy_s(out, outBuffer->size, in, outBuffer->size) != 0) {
64 printf("memcpy_s failed.");
65 }
66 return 0;
67 }
68
69 if (inBufferCount == 2) { // 2:2 inports
70 if (inBuffer[0] == NULL || inBuffer[1] == NULL || inBuffer[0]->addr == NULL || inBuffer[1]->addr == NULL) {
71 return -1;
72 }
73 printf("example algo merge 2 camera images\n");
74 // format is yuv422
75 char *startBuffer1 = (char*)(inBuffer[0]->addr) + inBuffer[0]->stride * inBuffer[0]->height;
76 char *startBuffer2 = (char*)(inBuffer[1]->addr) + inBuffer[1]->stride * inBuffer[1]->height;
77 if (memcpy_s(startBuffer1, inBuffer[0]->size - inBuffer[0]->stride * inBuffer[0]->height,
78 startBuffer2, inBuffer[0]->stride * inBuffer[0]->height) != 0) {
79 printf("memcpy_s failed.");
80 }
81 return 0;
82 }
83 return 0;
84 }
85
Stop(void)86 int Stop(void)
87 {
88 printf("ipp algo example Stop ...\n");
89 return 0;
90 }
91
92