linuxOS_D21X/source/artinchip/lvgl-ui/aic_demo/model/model_media.c
2024-11-29 16:23:11 +08:00

106 lines
2.1 KiB
C

/*
* Copyright (c) 2022-2023, ArtInChip Technology Co., Ltd
*
* SPDX-License-Identifier: Apache-2.0
*
* Authors: Zequan Liang <zequan.liang@artinchip.com>
*/
#include <string.h>
#include <malloc.h>
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "model_media.h"
struct media_list *media_list_create(void)
{
struct media_list *list = NULL;
list = (struct media_list *)malloc(sizeof(struct media_list));
if (list == NULL) {
return NULL;
}
memset(list, 0, sizeof(struct media_list));
return list;
}
int media_list_destroy(struct media_list *list)
{
if (list) {
free(list);
list = NULL;
return 0;
}
return -1;
}
int media_list_add_info(struct media_list *list, struct media_info *data)
{
if (list == NULL || data == NULL) {
return -1;
}
int num = list->num;
if (num >= MEDIA_INFO_MAX) {
return -1;
}
memcpy(&list->info[num], data, sizeof(struct media_info));
list->num++;
return 0;
}
int media_list_get_now_info(struct media_list *list, struct media_info *data)
{
if (list == NULL || data == NULL) {
return -1;
}
memcpy(data, &list->info[list->now_pos], sizeof(struct media_info));
return 0;
}
int media_list_set_pos(struct media_list *list, char *info_name)
{
if (list == NULL || info_name == NULL) {
return -1;
}
int num = list->num;
for(int i = 0; i < num; i++) {
if (strncmp(info_name, list->info[i].name, strlen(info_name)) == 0) {
list->now_pos = i;
return 0;
}
}
return -1;
}
int media_list_set_randomly(struct media_list *list)
{
if (list == NULL) {
return -1;
}
srand(time(0));
int num = list->num;
for(int i = 0; i < num; i++) {
int j = rand() % i;
struct media_info tmp;
memcpy(&tmp, &list->info[i], sizeof(struct media_info));
/* swap */
memcpy(&list->info[i], &list->info[j], sizeof(struct media_info));
memcpy(&list->info[j], &tmp, sizeof(struct media_info));
}
return 0;
}