1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2023 Shenzhen Kaihong DID Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *      http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci#include "codec_dfx_service.h"
16094332d3Sopenharmony_ci#include <hdf_base.h>
17094332d3Sopenharmony_ci#include "codec_adapter_interface.h"
18094332d3Sopenharmony_ci#include "codec_component_manager_service.h"
19094332d3Sopenharmony_ci#include "codec_log_wrapper.h"
20094332d3Sopenharmony_ci
21094332d3Sopenharmony_ci#define CODEC_MAX_DFX_DUMP_LEN  256
22094332d3Sopenharmony_ci
23094332d3Sopenharmony_ciint32_t DevCodecHostDump(struct HdfSBuf *data, struct HdfSBuf *reply)
24094332d3Sopenharmony_ci{
25094332d3Sopenharmony_ci    uint32_t argv = 0;
26094332d3Sopenharmony_ci    (void)HdfSbufReadUint32(data, &argv);
27094332d3Sopenharmony_ci    if (argv != 1) {
28094332d3Sopenharmony_ci        HdfSbufWriteString(reply, "please enter -h for help!! \n");
29094332d3Sopenharmony_ci        return HDF_SUCCESS;
30094332d3Sopenharmony_ci    }
31094332d3Sopenharmony_ci    const char *para = HdfSbufReadString(data);
32094332d3Sopenharmony_ci    if (para == NULL) {
33094332d3Sopenharmony_ci        CODEC_LOGE("para is NULL");
34094332d3Sopenharmony_ci        return HDF_FAILURE;
35094332d3Sopenharmony_ci    }
36094332d3Sopenharmony_ci    if (strcmp(para, "-h") == 0) {
37094332d3Sopenharmony_ci        HdfSbufWriteString(reply, "-h: codec dump help ! \n");
38094332d3Sopenharmony_ci        HdfSbufWriteString(reply, "-l: dump codec components info list ! \n");
39094332d3Sopenharmony_ci        return HDF_SUCCESS;
40094332d3Sopenharmony_ci    }
41094332d3Sopenharmony_ci
42094332d3Sopenharmony_ci    if (strcmp(para, "-l") == 0) {
43094332d3Sopenharmony_ci        struct CodecComponentManagerSerivce *managerService = CodecComponentManagerSerivceGet();
44094332d3Sopenharmony_ci        if (managerService == NULL) {
45094332d3Sopenharmony_ci            CODEC_LOGE("managerService is NULL");
46094332d3Sopenharmony_ci            return HDF_FAILURE;
47094332d3Sopenharmony_ci        }
48094332d3Sopenharmony_ci        struct ComponentTypeNode *pos = NULL;
49094332d3Sopenharmony_ci        struct ComponentTypeNode *next = NULL;
50094332d3Sopenharmony_ci        DLIST_FOR_EACH_ENTRY_SAFE(pos, next, &managerService->head, struct ComponentTypeNode, node)
51094332d3Sopenharmony_ci        {
52094332d3Sopenharmony_ci            if (pos == NULL) {
53094332d3Sopenharmony_ci                CODEC_LOGE("pos is NULL");
54094332d3Sopenharmony_ci                return HDF_FAILURE;
55094332d3Sopenharmony_ci            }
56094332d3Sopenharmony_ci            struct CodecComponentNode *codecNode = CodecComponentTypeServiceGetCodecNode(pos->service);
57094332d3Sopenharmony_ci            if (codecNode != NULL) {
58094332d3Sopenharmony_ci                char dump[CODEC_MAX_DFX_DUMP_LEN + 1] = { 0 };
59094332d3Sopenharmony_ci                int32_t ret = OmxAdapterWriteDumperData(dump, CODEC_MAX_DFX_DUMP_LEN, pos->componentId, codecNode);
60094332d3Sopenharmony_ci                if (ret != HDF_SUCCESS) {
61094332d3Sopenharmony_ci                    CODEC_LOGE("OmxAdapterWriteDumperData err");
62094332d3Sopenharmony_ci                    return HDF_FAILURE;
63094332d3Sopenharmony_ci                }
64094332d3Sopenharmony_ci                HdfSbufWriteString(reply, dump);
65094332d3Sopenharmony_ci                HdfSbufWriteString(reply, "--------------------------------------------------------------------- \n");
66094332d3Sopenharmony_ci            }
67094332d3Sopenharmony_ci        }
68094332d3Sopenharmony_ci        CODEC_LOGI("codec hidumper success!");
69094332d3Sopenharmony_ci        return HDF_SUCCESS;
70094332d3Sopenharmony_ci    }
71094332d3Sopenharmony_ci    HdfSbufWriteString(reply, "unknow param, please enter -h for help! \n");
72094332d3Sopenharmony_ci    return HDF_SUCCESS;
73094332d3Sopenharmony_ci}
74