/*! \brief Add format/lang pairs to the array embedded in the sound object */ static int add_format_information_cb(void *obj, void *arg, int flags) { char *language = obj; struct lang_format_info *args = arg; int idx; RAII_VAR(struct ast_format_cap *, cap, NULL, ao2_cleanup); RAII_VAR(struct ast_media_index *, sounds_index, ast_sounds_get_index(), ao2_cleanup); if (!sounds_index) { return CMP_STOP; } cap = ast_media_get_format_cap(sounds_index, args->filename, language); if (!cap) { return CMP_STOP; } for (idx = 0; idx < ast_format_cap_count(cap); idx++) { struct ast_format *format = ast_format_cap_get_format(cap, idx); struct ast_json *lang_format_pair; if (!ast_strlen_zero(args->format_filter) && strcmp(args->format_filter, ast_format_get_name(format))) { ao2_ref(format, -1); continue; } lang_format_pair = ast_json_pack("{s: s, s: s}", "language", language, "format", ast_format_get_name(format)); if (!lang_format_pair) { ao2_ref(format, -1); return CMP_STOP; } ast_json_array_append(args->format_list, lang_format_pair); ao2_ref(format, -1); } return 0; }
/*! \brief Add format/lang pairs to the array embedded in the sound object */ static int add_format_information_cb(void *obj, void *arg, int flags) { char *language = obj; struct lang_format_info *args = arg; struct ast_format format; RAII_VAR(struct ast_format_cap *, cap, NULL, ast_format_cap_destroy); RAII_VAR(struct ast_media_index *, sounds_index, ast_sounds_get_index(), ao2_cleanup); if (!sounds_index) { return CMP_STOP; } cap = ast_media_get_format_cap(sounds_index, args->filename, language); if (!cap) { return CMP_STOP; } ast_format_cap_iter_start(cap); while (!ast_format_cap_iter_next(cap, &format)) { struct ast_json *lang_format_pair; const char *format_name = ast_getformatname(&format); if (!ast_strlen_zero(args->format_filter) && strcmp(args->format_filter, format_name)) { continue; } lang_format_pair = ast_json_pack("{s: s, s: s}", "language", language, "format", format_name); if (!lang_format_pair) { ast_format_cap_iter_end(cap); return CMP_STOP; } ast_json_array_append(args->format_list, lang_format_pair); } ast_format_cap_iter_end(cap); return 0; }