• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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