mirror of https://github.com/godotengine/godot
Replace `minimp3` with `dr_mp3`
This commit is contained in:
parent
d61cd9149a
commit
f46bca99c7
|
|
@ -78,8 +78,8 @@
|
|||
## Audio (+ video)
|
||||
/modules/interactive_music/ @godotengine/audio
|
||||
/modules/interactive_music/doc_classes/ @godotengine/audio @godotengine/documentation
|
||||
/modules/minimp3/ @godotengine/audio
|
||||
/modules/minimp3/doc_classes/ @godotengine/audio @godotengine/documentation
|
||||
/modules/mp3/ @godotengine/audio
|
||||
/modules/mp3/doc_classes/ @godotengine/audio @godotengine/documentation
|
||||
/modules/ogg/ @godotengine/audio
|
||||
/modules/ogg/doc_classes/ @godotengine/audio @godotengine/documentation
|
||||
/modules/theora/ @godotengine/audio
|
||||
|
|
|
|||
|
|
@ -253,6 +253,11 @@ Comment: doctest
|
|||
Copyright: 2016-2023, Viktor Kirilov
|
||||
License: Expat
|
||||
|
||||
Files: thirdparty/dr_libs/*
|
||||
Comment: dr_libs
|
||||
Copyright: 2020, David Reid
|
||||
License: Unlicense or MIT-0
|
||||
|
||||
Files: thirdparty/embree/*
|
||||
Comment: Embree
|
||||
Copyright: 2009-2021 Intel Corporation
|
||||
|
|
@ -415,11 +420,6 @@ Comment: mingw-std-threads
|
|||
Copyright: 2016, Mega Limited
|
||||
License: BSD-2-clause
|
||||
|
||||
Files: thirdparty/minimp3/*
|
||||
Comment: MiniMP3
|
||||
Copyright: lieff
|
||||
License: CC0-1.0
|
||||
|
||||
Files: thirdparty/miniupnpc/*
|
||||
Comment: MiniUPnP Project
|
||||
Copyright: 2005-2025, Thomas Bernard
|
||||
|
|
@ -2135,6 +2135,22 @@ License: MPL-2.0
|
|||
This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
defined by the Mozilla Public License, v. 2.0.
|
||||
|
||||
License: MIT-0
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so.
|
||||
.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
License: OFL-1.1
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
from misc.utility.scons_hints import *
|
||||
|
||||
Import("env")
|
||||
Import("env_modules")
|
||||
|
||||
env_minimp3 = env_modules.Clone()
|
||||
|
||||
thirdparty_dir = "#thirdparty/minimp3/"
|
||||
|
||||
env_minimp3.Prepend(CPPPATH=[thirdparty_dir])
|
||||
|
||||
if not env["minimp3_extra_formats"]:
|
||||
env_minimp3.Append(CPPDEFINES=["MINIMP3_ONLY_MP3"])
|
||||
|
||||
# Godot source files
|
||||
env_minimp3.add_source_files(env.modules_sources, "*.cpp")
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env python
|
||||
from misc.utility.scons_hints import *
|
||||
|
||||
Import("env")
|
||||
Import("env_modules")
|
||||
|
||||
env_mp3 = env_modules.Clone()
|
||||
|
||||
if not env["mp3_extra_formats"]:
|
||||
env_mp3.Append(CPPDEFINES=["DR_MP3_ONLY_MP3"])
|
||||
|
||||
# Godot source files
|
||||
env_mp3.add_source_files(env.modules_sources, "*.cpp")
|
||||
|
|
@ -28,13 +28,15 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#define MINIMP3_FLOAT_OUTPUT
|
||||
#define MINIMP3_IMPLEMENTATION
|
||||
#define MINIMP3_NO_STDIO
|
||||
#define DR_MP3_FLOAT_OUTPUT
|
||||
#define DR_MP3_IMPLEMENTATION
|
||||
#define DR_MP3_NO_STDIO
|
||||
|
||||
#include "audio_stream_mp3.h"
|
||||
#include "core/io/file_access.h"
|
||||
|
||||
#include "thirdparty/dr_libs/dr_bridge.h"
|
||||
|
||||
int AudioStreamPlaybackMP3::_mix_internal(AudioFrame *p_buffer, int p_frames) {
|
||||
if (!active) {
|
||||
return 0;
|
||||
|
|
@ -53,13 +55,12 @@ int AudioStreamPlaybackMP3::_mix_internal(AudioFrame *p_buffer, int p_frames) {
|
|||
}
|
||||
|
||||
while (todo && active) {
|
||||
mp3dec_frame_info_t frame_info;
|
||||
mp3d_sample_t *buf_frame = nullptr;
|
||||
drmp3d_sample_t buf_frame[2];
|
||||
|
||||
int samples_mixed = mp3dec_ex_read_frame(&mp3d, &buf_frame, &frame_info, mp3_stream->channels);
|
||||
int samples_mixed = drmp3_read_pcm_frames_f32(&mp3d, 1, buf_frame);
|
||||
|
||||
if (samples_mixed) {
|
||||
p_buffer[p_frames - todo] = AudioFrame(buf_frame[0], buf_frame[samples_mixed - 1]);
|
||||
p_buffer[p_frames - todo] = AudioFrame(buf_frame[0], buf_frame[mp3d.channels - 1]);
|
||||
if (loop_fade_remaining < FADE_SIZE) {
|
||||
p_buffer[p_frames - todo] += loop_fade[loop_fade_remaining] * (float(FADE_SIZE - loop_fade_remaining) / float(FADE_SIZE));
|
||||
loop_fade_remaining++;
|
||||
|
|
@ -69,8 +70,8 @@ int AudioStreamPlaybackMP3::_mix_internal(AudioFrame *p_buffer, int p_frames) {
|
|||
|
||||
if (beat_loop && (int)frames_mixed >= beat_length_frames) {
|
||||
for (int i = 0; i < FADE_SIZE; i++) {
|
||||
samples_mixed = mp3dec_ex_read_frame(&mp3d, &buf_frame, &frame_info, mp3_stream->channels);
|
||||
loop_fade[i] = AudioFrame(buf_frame[0], buf_frame[samples_mixed - 1]);
|
||||
samples_mixed = drmp3_read_pcm_frames_f32(&mp3d, 1, buf_frame);
|
||||
loop_fade[i] = AudioFrame(buf_frame[0], buf_frame[mp3d.channels - 1]);
|
||||
if (!samples_mixed) {
|
||||
break;
|
||||
}
|
||||
|
|
@ -137,7 +138,7 @@ void AudioStreamPlaybackMP3::seek(double p_time) {
|
|||
}
|
||||
|
||||
frames_mixed = uint32_t(mp3_stream->sample_rate * p_time);
|
||||
mp3dec_ex_seek(&mp3d, (uint64_t)frames_mixed * mp3_stream->channels);
|
||||
drmp3_seek_to_pcm_frame(&mp3d, (uint64_t)frames_mixed);
|
||||
}
|
||||
|
||||
void AudioStreamPlaybackMP3::tag_used_streams() {
|
||||
|
|
@ -183,7 +184,7 @@ Variant AudioStreamPlaybackMP3::get_parameter(const StringName &p_name) const {
|
|||
}
|
||||
|
||||
AudioStreamPlaybackMP3::~AudioStreamPlaybackMP3() {
|
||||
mp3dec_ex_close(&mp3d);
|
||||
drmp3_uninit(&mp3d);
|
||||
}
|
||||
|
||||
Ref<AudioStreamPlayback> AudioStreamMP3::instantiate_playback() {
|
||||
|
|
@ -197,15 +198,13 @@ Ref<AudioStreamPlayback> AudioStreamMP3::instantiate_playback() {
|
|||
mp3s.instantiate();
|
||||
mp3s->mp3_stream = Ref<AudioStreamMP3>(this);
|
||||
|
||||
int errorcode = mp3dec_ex_open_buf(&mp3s->mp3d, data.ptr(), data_len, MP3D_SEEK_TO_SAMPLE);
|
||||
int success = drmp3_init_memory(&mp3s->mp3d, data.ptr(), data_len, (drmp3_allocation_callbacks *)&dr_alloc_calls);
|
||||
|
||||
mp3s->frames_mixed = 0;
|
||||
mp3s->active = false;
|
||||
mp3s->loops = 0;
|
||||
|
||||
if (errorcode) {
|
||||
ERR_FAIL_COND_V(errorcode, Ref<AudioStreamPlaybackMP3>());
|
||||
}
|
||||
ERR_FAIL_COND_V(!success, Ref<AudioStreamPlaybackMP3>());
|
||||
|
||||
return mp3s;
|
||||
}
|
||||
|
|
@ -221,18 +220,18 @@ void AudioStreamMP3::clear_data() {
|
|||
void AudioStreamMP3::set_data(const Vector<uint8_t> &p_data) {
|
||||
int src_data_len = p_data.size();
|
||||
|
||||
mp3dec_ex_t *mp3d = memnew(mp3dec_ex_t);
|
||||
int err = mp3dec_ex_open_buf(mp3d, p_data.ptr(), src_data_len, MP3D_SEEK_TO_SAMPLE);
|
||||
if (err || mp3d->info.hz == 0) {
|
||||
drmp3 *mp3d = memnew(drmp3);
|
||||
int success = drmp3_init_memory(mp3d, p_data.ptr(), src_data_len, (drmp3_allocation_callbacks *)&dr_alloc_calls);
|
||||
if (!success || mp3d->sampleRate == 0) {
|
||||
memdelete(mp3d);
|
||||
ERR_FAIL_MSG("Failed to decode mp3 file. Make sure it is a valid mp3 audio file.");
|
||||
}
|
||||
|
||||
channels = mp3d->info.channels;
|
||||
sample_rate = mp3d->info.hz;
|
||||
length = float(mp3d->samples) / (sample_rate * float(channels));
|
||||
channels = mp3d->channels;
|
||||
sample_rate = mp3d->sampleRate;
|
||||
length = float(drmp3_get_pcm_frame_count(mp3d)) / (mp3d->sampleRate);
|
||||
|
||||
mp3dec_ex_close(mp3d);
|
||||
drmp3_uninit(mp3d);
|
||||
memdelete(mp3d);
|
||||
|
||||
data = p_data;
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
#include "servers/audio/audio_stream.h"
|
||||
|
||||
#include <minimp3_ex.h>
|
||||
#include "thirdparty/dr_libs/dr_mp3.h"
|
||||
|
||||
class AudioStreamMP3;
|
||||
|
||||
|
|
@ -47,7 +47,7 @@ class AudioStreamPlaybackMP3 : public AudioStreamPlaybackResampled {
|
|||
|
||||
bool looping_override = false;
|
||||
bool looping = false;
|
||||
mp3dec_ex_t mp3d = {};
|
||||
drmp3 mp3d = {};
|
||||
uint32_t frames_mixed = 0;
|
||||
bool active = false;
|
||||
int loops = 0;
|
||||
|
|
@ -6,7 +6,7 @@ def get_opts(platform):
|
|||
from SCons.Variables import BoolVariable
|
||||
|
||||
return [
|
||||
BoolVariable("minimp3_extra_formats", "Build minimp3 with MP1/MP2 decoding support", False),
|
||||
BoolVariable("mp3_extra_formats", "Build mp3 module with MP1/MP2 decoding support", False),
|
||||
]
|
||||
|
||||
|
||||
|
|
@ -44,7 +44,7 @@ static void _editor_init() {
|
|||
}
|
||||
#endif
|
||||
|
||||
void initialize_minimp3_module(ModuleInitializationLevel p_level) {
|
||||
void initialize_mp3_module(ModuleInitializationLevel p_level) {
|
||||
if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE) {
|
||||
GDREGISTER_CLASS(AudioStreamMP3);
|
||||
}
|
||||
|
|
@ -58,5 +58,5 @@ void initialize_minimp3_module(ModuleInitializationLevel p_level) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void uninitialize_minimp3_module(ModuleInitializationLevel p_level) {
|
||||
void uninitialize_mp3_module(ModuleInitializationLevel p_level) {
|
||||
}
|
||||
|
|
@ -32,5 +32,5 @@
|
|||
|
||||
#include "modules/register_module_types.h"
|
||||
|
||||
void initialize_minimp3_module(ModuleInitializationLevel p_level);
|
||||
void uninitialize_minimp3_module(ModuleInitializationLevel p_level);
|
||||
void initialize_mp3_module(ModuleInitializationLevel p_level);
|
||||
void uninitialize_mp3_module(ModuleInitializationLevel p_level);
|
||||
|
|
@ -46,7 +46,7 @@ String ResourceImporterMP3::get_visible_name() const {
|
|||
}
|
||||
|
||||
void ResourceImporterMP3::get_recognized_extensions(List<String> *p_extensions) const {
|
||||
#ifndef MINIMP3_ONLY_MP3
|
||||
#ifndef DR_MP3_ONLY_MP3
|
||||
p_extensions->push_back("mp1");
|
||||
p_extensions->push_back("mp2");
|
||||
#endif
|
||||
|
|
@ -200,6 +200,20 @@ Patches:
|
|||
- `0001-ciso646-version.patch` (GH-105913)
|
||||
|
||||
|
||||
## dr_libs
|
||||
|
||||
- Upstream: https://github.com/mackron/dr_libs
|
||||
- Version: mp3-0.7.2 (547c211a87a06a42bf62c1366616aa14b57dd429, 2025)
|
||||
- License: Public Domain or Unlicense or MIT-0
|
||||
|
||||
Files extracted from upstream source:
|
||||
|
||||
- `dr_mp3.h`
|
||||
- `LICENSE`
|
||||
|
||||
`dr_bridge.h` is a Godot file and should be preserved on updates.
|
||||
|
||||
|
||||
## embree
|
||||
|
||||
- Upstream: https://github.com/embree/embree
|
||||
|
|
@ -709,24 +723,6 @@ Patches:
|
|||
- `0002-clang-std-replacements-leak.patch` (GH-85208)
|
||||
|
||||
|
||||
## minimp3
|
||||
|
||||
- Upstream: https://github.com/lieff/minimp3
|
||||
- Version: git (afb604c06bc8beb145fecd42c0ceb5bda8795144, 2021)
|
||||
- License: CC0 1.0
|
||||
|
||||
Files extracted from upstream repository:
|
||||
|
||||
- `minimp3.h`
|
||||
- `minimp3_ex.h`
|
||||
- `LICENSE`
|
||||
|
||||
Patches:
|
||||
|
||||
- `0001-msvc-arm.patch` (GH-64921)
|
||||
- `0002-msvc-warnings.patch` (GH-66545)
|
||||
|
||||
|
||||
## miniupnpc
|
||||
|
||||
- Upstream: https://github.com/miniupnp/miniupnp
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
This software is available as a choice of the following licenses. Choose
|
||||
whichever you prefer.
|
||||
|
||||
===============================================================================
|
||||
ALTERNATIVE 1 - Public Domain (www.unlicense.org)
|
||||
===============================================================================
|
||||
This is free and unencumbered software released into the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <http://unlicense.org/>
|
||||
|
||||
===============================================================================
|
||||
ALTERNATIVE 2 - MIT No Attribution
|
||||
===============================================================================
|
||||
Copyright 2020 David Reid
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
/**************************************************************************/
|
||||
/* dr_bridge.h */
|
||||
/**************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/**************************************************************************/
|
||||
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#include "core/io/file_access.h"
|
||||
#include "core/os/memory.h"
|
||||
#include "core/typedefs.h"
|
||||
|
||||
typedef struct {
|
||||
void *user_data;
|
||||
void *(*malloc_func)(size_t size, void *user_data);
|
||||
void *(*realloc_func)(void *ptr, size_t size, void *user_data);
|
||||
void (*free_func)(void *ptr, void *user_data);
|
||||
} dr_allocation_callbacks;
|
||||
|
||||
static void *dr_memalloc(size_t size, void *user_data) {
|
||||
return memalloc(size);
|
||||
}
|
||||
|
||||
static void *dr_memrealloc(void *ptr, size_t size, void *user_data) {
|
||||
return memrealloc(ptr, size);
|
||||
}
|
||||
|
||||
static void dr_memfree(void *ptr, void *user_data) {
|
||||
if (ptr) {
|
||||
memfree(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
const dr_allocation_callbacks dr_alloc_calls = {
|
||||
nullptr,
|
||||
dr_memalloc,
|
||||
dr_memrealloc,
|
||||
dr_memfree
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,117 +0,0 @@
|
|||
CC0 1.0 Universal
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator and
|
||||
subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for the
|
||||
purpose of contributing to a commons of creative, cultural and scientific
|
||||
works ("Commons") that the public can reliably and without fear of later
|
||||
claims of infringement build upon, modify, incorporate in other works, reuse
|
||||
and redistribute as freely as possible in any form whatsoever and for any
|
||||
purposes, including without limitation commercial purposes. These owners may
|
||||
contribute to the Commons to promote the ideal of a free culture and the
|
||||
further production of creative, cultural and scientific works, or to gain
|
||||
reputation or greater distribution for their Work in part through the use and
|
||||
efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any expectation
|
||||
of additional consideration or compensation, the person associating CC0 with a
|
||||
Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
|
||||
and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
|
||||
and publicly distribute the Work under its terms, with knowledge of his or her
|
||||
Copyright and Related Rights in the Work and the meaning and intended legal
|
||||
effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not limited
|
||||
to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display, communicate,
|
||||
and translate a Work;
|
||||
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
|
||||
iii. publicity and privacy rights pertaining to a person's image or likeness
|
||||
depicted in a Work;
|
||||
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data in
|
||||
a Work;
|
||||
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation thereof,
|
||||
including any amended or successor version of such directive); and
|
||||
|
||||
vii. other similar, equivalent or corresponding rights throughout the world
|
||||
based on applicable law or treaty, and any national implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention of,
|
||||
applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
|
||||
unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
|
||||
and Related Rights and associated claims and causes of action, whether now
|
||||
known or unknown (including existing as well as future claims and causes of
|
||||
action), in the Work (i) in all territories worldwide, (ii) for the maximum
|
||||
duration provided by applicable law or treaty (including future time
|
||||
extensions), (iii) in any current or future medium and for any number of
|
||||
copies, and (iv) for any purpose whatsoever, including without limitation
|
||||
commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
|
||||
the Waiver for the benefit of each member of the public at large and to the
|
||||
detriment of Affirmer's heirs and successors, fully intending that such Waiver
|
||||
shall not be subject to revocation, rescission, cancellation, termination, or
|
||||
any other legal or equitable action to disrupt the quiet enjoyment of the Work
|
||||
by the public as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason be
|
||||
judged legally invalid or ineffective under applicable law, then the Waiver
|
||||
shall be preserved to the maximum extent permitted taking into account
|
||||
Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
|
||||
is so judged Affirmer hereby grants to each affected person a royalty-free,
|
||||
non transferable, non sublicensable, non exclusive, irrevocable and
|
||||
unconditional license to exercise Affirmer's Copyright and Related Rights in
|
||||
the Work (i) in all territories worldwide, (ii) for the maximum duration
|
||||
provided by applicable law or treaty (including future time extensions), (iii)
|
||||
in any current or future medium and for any number of copies, and (iv) for any
|
||||
purpose whatsoever, including without limitation commercial, advertising or
|
||||
promotional purposes (the "License"). The License shall be deemed effective as
|
||||
of the date CC0 was applied by Affirmer to the Work. Should any part of the
|
||||
License for any reason be judged legally invalid or ineffective under
|
||||
applicable law, such partial invalidity or ineffectiveness shall not
|
||||
invalidate the remainder of the License, and in such case Affirmer hereby
|
||||
affirms that he or she will not (i) exercise any of his or her remaining
|
||||
Copyright and Related Rights in the Work or (ii) assert any associated claims
|
||||
and causes of action with respect to the Work, in either case contrary to
|
||||
Affirmer's express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
|
||||
b. Affirmer offers the Work as-is and makes no representations or warranties
|
||||
of any kind concerning the Work, express, implied, statutory or otherwise,
|
||||
including without limitation warranties of title, merchantability, fitness
|
||||
for a particular purpose, non infringement, or the absence of latent or
|
||||
other defects, accuracy, or the present or absence of errors, whether or not
|
||||
discoverable, all to the greatest extent permissible under applicable law.
|
||||
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without limitation
|
||||
any person's Copyright and Related Rights in the Work. Further, Affirmer
|
||||
disclaims responsibility for obtaining any necessary consents, permissions
|
||||
or other rights required for any use of the Work.
|
||||
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to this
|
||||
CC0 or use of the Work.
|
||||
|
||||
For more information, please see
|
||||
<http://creativecommons.org/publicdomain/zero/1.0/>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,39 +0,0 @@
|
|||
diff --git a/thirdparty/minimp3/minimp3.h b/thirdparty/minimp3/minimp3.h
|
||||
index 3220ae1a85..49708b9846 100644
|
||||
--- a/thirdparty/minimp3/minimp3.h
|
||||
+++ b/thirdparty/minimp3/minimp3.h
|
||||
@@ -1566,7 +1566,16 @@ static void mp3d_synth(float *xl, mp3d_sample_t *dstl, int nch, float *lins)
|
||||
|
||||
#else /* MINIMP3_FLOAT_OUTPUT */
|
||||
|
||||
+#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM))
|
||||
+ static f4 g_scale;
|
||||
+ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 0);
|
||||
+ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 1);
|
||||
+ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 2);
|
||||
+ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 3);
|
||||
+#else
|
||||
static const f4 g_scale = { 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f };
|
||||
+#endif
|
||||
+
|
||||
a = VMUL(a, g_scale);
|
||||
b = VMUL(b, g_scale);
|
||||
#if HAVE_SSE
|
||||
@@ -1813,7 +1822,17 @@ void mp3dec_f32_to_s16(const float *in, int16_t *out, int num_samples)
|
||||
int aligned_count = num_samples & ~7;
|
||||
for(; i < aligned_count; i += 8)
|
||||
{
|
||||
+
|
||||
+#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM))
|
||||
+ static f4 g_scale;
|
||||
+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 0);
|
||||
+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 1);
|
||||
+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 2);
|
||||
+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 3);
|
||||
+#else
|
||||
static const f4 g_scale = { 32768.0f, 32768.0f, 32768.0f, 32768.0f };
|
||||
+#endif
|
||||
+
|
||||
f4 a = VMUL(VLD(&in[i ]), g_scale);
|
||||
f4 b = VMUL(VLD(&in[i+4]), g_scale);
|
||||
#if HAVE_SSE
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
diff --git a/thirdparty/minimp3/minimp3_ex.h b/thirdparty/minimp3/minimp3_ex.h
|
||||
index 2871705df3..2b207a25a7 100644
|
||||
--- a/thirdparty/minimp3/minimp3_ex.h
|
||||
+++ b/thirdparty/minimp3/minimp3_ex.h
|
||||
@@ -377,7 +377,7 @@ int mp3dec_load_cb(mp3dec_t *dec, mp3dec_io_t *io, uint8_t *buf, size_t buf_size
|
||||
samples = hdr_frame_samples(hdr)*frame_info.channels;
|
||||
if (3 != frame_info.layer)
|
||||
break;
|
||||
- int ret = mp3dec_check_vbrtag(hdr, frame_size, &frames, &delay, &padding);
|
||||
+ ret = mp3dec_check_vbrtag(hdr, frame_size, &frames, &delay, &padding);
|
||||
if (ret > 0)
|
||||
{
|
||||
padding *= frame_info.channels;
|
||||
@@ -529,7 +529,8 @@ int mp3dec_iterate_buf(const uint8_t *buf, size_t buf_size, MP3D_ITERATE_CB call
|
||||
|
||||
if (callback)
|
||||
{
|
||||
- if ((ret = callback(user_data, hdr, frame_size, free_format_bytes, buf_size, hdr - orig_buf, &frame_info)))
|
||||
+ ret = callback(user_data, hdr, frame_size, free_format_bytes, buf_size, hdr - orig_buf, &frame_info);
|
||||
+ if (ret != 0)
|
||||
return ret;
|
||||
}
|
||||
buf += frame_size;
|
||||
@@ -562,7 +563,7 @@ int mp3dec_iterate_cb(mp3dec_io_t *io, uint8_t *buf, size_t buf_size, MP3D_ITERA
|
||||
readed += id3v2size;
|
||||
} else
|
||||
{
|
||||
- size_t readed = io->read(buf + MINIMP3_ID3_DETECT_SIZE, buf_size - MINIMP3_ID3_DETECT_SIZE, io->read_data);
|
||||
+ readed = io->read(buf + MINIMP3_ID3_DETECT_SIZE, buf_size - MINIMP3_ID3_DETECT_SIZE, io->read_data);
|
||||
if (readed > (buf_size - MINIMP3_ID3_DETECT_SIZE))
|
||||
return MP3D_E_IOERROR;
|
||||
filled += readed;
|
||||
@@ -590,7 +591,8 @@ int mp3dec_iterate_cb(mp3dec_io_t *io, uint8_t *buf, size_t buf_size, MP3D_ITERA
|
||||
readed += i;
|
||||
if (callback)
|
||||
{
|
||||
- if ((ret = callback(user_data, hdr, frame_size, free_format_bytes, filled - consumed, readed, &frame_info)))
|
||||
+ ret = callback(user_data, hdr, frame_size, free_format_bytes, filled - consumed, readed, &frame_info);
|
||||
+ if (ret != 0)
|
||||
return ret;
|
||||
}
|
||||
readed += frame_size;
|
||||
@@ -600,7 +602,7 @@ int mp3dec_iterate_cb(mp3dec_io_t *io, uint8_t *buf, size_t buf_size, MP3D_ITERA
|
||||
memmove(buf, buf + consumed, filled - consumed);
|
||||
filled -= consumed;
|
||||
consumed = 0;
|
||||
- size_t readed = io->read(buf + filled, buf_size - filled, io->read_data);
|
||||
+ readed = io->read(buf + filled, buf_size - filled, io->read_data);
|
||||
if (readed > (buf_size - filled))
|
||||
return MP3D_E_IOERROR;
|
||||
if (readed != (buf_size - filled))
|
||||
Loading…
Reference in New Issue