Skip to content

Commit

Permalink
Integrate NAV audio decoding routines to Decoder.
Browse files Browse the repository at this point in the history
  • Loading branch information
MikuAuahDark committed Jul 28, 2024
1 parent 3d11743 commit 274742c
Show file tree
Hide file tree
Showing 6 changed files with 495 additions and 9 deletions.
49 changes: 49 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,8 @@ add_library(love_common STATIC
src/common/memory.h
src/common/Module.cpp
src/common/Module.h
src/common/navinput.cpp
src/common/navinput.h
src/common/Object.cpp
src/common/Object.h
src/common/Optional.h
Expand Down Expand Up @@ -1070,6 +1072,8 @@ add_library(love_sound_lullaby STATIC
src/modules/sound/lullaby/ModPlugDecoder.h
src/modules/sound/lullaby/MP3Decoder.h
src/modules/sound/lullaby/MP3Decoder.cpp
src/modules/sound/lullaby/NAVDecoder.cpp
src/modules/sound/lullaby/NAVDecoder.h
src/modules/sound/lullaby/Sound.cpp
src/modules/sound/lullaby/Sound.h
src/modules/sound/lullaby/VorbisDecoder.cpp
Expand Down Expand Up @@ -1682,6 +1686,50 @@ add_library(love_3p_lz4
src/libraries/lz4/lz4opt.h
)

#
# nav
#

add_library(love_3p_nav
src/libraries/nav/include/nav/audioformat.h
src/libraries/nav/include/nav/input.h
src/libraries/nav/include/nav/nav.h
src/libraries/nav/include/nav/types.h
src/libraries/nav/src/nav.cpp
src/libraries/nav/src/nav_backend.cpp
src/libraries/nav/src/nav_backend.hpp
src/libraries/nav/src/nav_backend_androidndk.cpp
src/libraries/nav/src/nav_backend_androidndk.hpp
src/libraries/nav/src/nav_backend_androidndk_funcptr.h
src/libraries/nav/src/nav_backend_androidndk_internal.hpp
src/libraries/nav/src/nav_backend_ffmpeg.cpp
src/libraries/nav/src/nav_backend_ffmpeg.hpp
src/libraries/nav/src/nav_backend_ffmpeg_funcptr.h
src/libraries/nav/src/nav_backend_ffmpeg_internal.hpp
src/libraries/nav/src/nav_backend_mediafoundation.cpp
src/libraries/nav/src/nav_backend_mediafoundation.hpp
src/libraries/nav/src/nav_backend_mediafoundation_internal.hpp
src/libraries/nav/src/nav_common.cpp
src/libraries/nav/src/nav_common.hpp
src/libraries/nav/src/nav_config.hpp
src/libraries/nav/src/nav_dynlib.cpp
src/libraries/nav/src/nav_dynlib.hpp
src/libraries/nav/src/nav_error.cpp
src/libraries/nav/src/nav_error.hpp
src/libraries/nav/src/nav_input_file.cpp
src/libraries/nav/src/nav_input_file.hpp
src/libraries/nav/src/nav_input_memory.cpp
src/libraries/nav/src/nav_input_memory.hpp
src/libraries/nav/src/nav_internal.cpp
src/libraries/nav/src/nav_internal.hpp
)
target_include_directories(love_3p_nav PUBLIC src/libraries/nav/include)
if(FFMPEG_DIR)
target_include_directories(love_3p_nav PRIVATE ${FFMPEG_DIR})
endif()
target_link_libraries(love_common PUBLIC love_3p_nav)
target_link_libraries(love_sound_lullaby PUBLIC love_3p_nav)

#
# noise1234
#
Expand Down Expand Up @@ -1952,6 +2000,7 @@ set(LIBLOVE_LIBRARIES
love_3p_lua53
love_3p_luahttps
love_3p_lz4
love_3p_nav
love_3p_noise1234
love_3p_physfs
love_3p_spirv_cross
Expand Down
57 changes: 57 additions & 0 deletions src/common/navinput.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#include "navinput.h"

#include "Exception.h"

namespace love
{

static void closeStream(void **udata)
{
Stream *stream = *(Stream **) udata;
stream->release();
*udata = nullptr;
}

static size_t readStream(void *udata, void *dest, size_t size)
{
Stream *stream = (Stream *) udata;
return (size_t) stream->read(dest, (int64) size);
}

static nav_bool seekStream(void *udata, uint64_t pos)
{
Stream *stream = (Stream *) udata;
return (nav_bool) stream->seek((int64) pos);
}

static uint64_t tellStream(void *udata)
{
Stream *stream = (Stream *) udata;
return (uint64_t) stream->tell();
}

static uint64_t sizeStream(void *udata)
{
Stream *stream = (Stream *) udata;
return (uint64_t) stream->getSize();
}

nav_input streamToNAVInput(love::Stream *stream)
{
if (!stream->isReadable())
throw Exception("stream is not readable");
if (!stream->isSeekable())
throw Exception("stream is not seekable");

stream->retain();
return {
stream,
&closeStream,
&readStream,
&seekStream,
&tellStream,
&sizeStream
};
}

}
17 changes: 17 additions & 0 deletions src/common/navinput.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#ifndef LOVE_NAVINPUT_H
#define LOVE_NAVINPUT_H

// LOVE
#include "Stream.h"

// nav
#include "nav/nav.h"

namespace love
{

nav_input streamToNAVInput(love::Stream *stream);

}

#endif
Loading

0 comments on commit 274742c

Please sign in to comment.