Skip to content

Commit 28c54a4

Browse files
authored
Lyra support (#3949)
* Initial implementation * Fix --with-lyra configure option * Modification based on comments * Modification based on comments - Add bitrate config on SDP, allowing different bitrate on local and remote - Fix some compile warning - Set [--with-lyra]/model_coeffs as default to PJMEDIA_CODEC_LYRA_DEFAULT_MODEL_PATH * Modification based on comments: - Update some doc - Change field setting name - Remove un-needed code - Suppress compile warning * Modification based on comments - Add comments - Add compile time setting to enable certain samplerate - Get decoder bitrate from SDP - More lenient on codec parse * Add build config for Visual Studio
1 parent 2d5e351 commit 28c54a4

File tree

16 files changed

+1245
-7
lines changed

16 files changed

+1245
-7
lines changed

aconfigure

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,8 @@ ac_webrtc_instset
658658
ac_no_webrtc
659659
ac_no_yuv
660660
ac_no_srtp
661+
ac_lyra_model_path
662+
ac_no_lyra_codec
661663
ac_no_bcg729
662664
opus_present
663665
opus_h_present
@@ -885,6 +887,8 @@ with_opus
885887
enable_opus
886888
with_bcg729
887889
enable_bcg729
890+
with_lyra
891+
enable_lyra
888892
enable_libsrtp
889893
enable_libyuv
890894
enable_libwebrtc
@@ -1574,6 +1578,7 @@ Optional Features:
15741578
autodetect)
15751579
15761580
--disable-bcg729 Disable bcg729 (default: not disabled)
1581+
--disable-lyra Disable lyra (default: not disabled)
15771582
--disable-libsrtp Exclude libsrtp in the build
15781583
--disable-libyuv Exclude libyuv in the build
15791584
--disable-libwebrtc Exclude libwebrtc in the build
@@ -1641,6 +1646,7 @@ Optional Packages:
16411646
--with-silk=DIR Specify alternate SILK prefix
16421647
--with-opus=DIR Specify alternate OPUS prefix
16431648
--with-bcg729=DIR Specify alternate bcg729 prefix
1649+
--with-lyra=DIR Specify alternate lyra prefix
16441650
16451651
Some influential environment variables:
16461652
CC C compiler command
@@ -10118,6 +10124,118 @@ fi
1011810124

1011910125

1012010126

10127+
# Check whether --with-lyra was given.
10128+
if test ${with_lyra+y}
10129+
then :
10130+
withval=$with_lyra;
10131+
else $as_nop
10132+
with_lyra=no
10133+
10134+
fi
10135+
10136+
10137+
if test "x$ac_cross_compile" != "x" -a "x$with_lyra" = "xno"; then
10138+
enable_lyra=no
10139+
fi
10140+
10141+
10142+
10143+
# Check whether --enable-lyra was given.
10144+
if test ${enable_lyra+y}
10145+
then :
10146+
enableval=$enable_lyra;
10147+
if test "$enable_lyra" = "no"; then
10148+
ac_no_lyra_codec=1
10149+
printf "%s\n" "#define PJMEDIA_HAS_LYRA_CODEC 0" >>confdefs.h
10150+
10151+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Checking if lyra is disabled... yes" >&5
10152+
printf "%s\n" "Checking if lyra is disabled... yes" >&6; }
10153+
fi
10154+
10155+
else $as_nop
10156+
10157+
if test "x$with_lyra" != "xno" -a "x$with_lyra" != "x"; then
10158+
LYRA_PREFIX=$with_lyra
10159+
LYRA_CPPFLAGS="-DGLOG_DEPRECATED=__attribute__((deprecated)) -DGLOG_EXPORT=__attribute__((visibility(\"default\"))) -DGLOG_NO_EXPORT=__attribute__((visibility(\"default\")))"
10160+
LYRA_CXXFLAGS="-std=c++17 -Wno-deprecated-builtins -I$LYRA_PREFIX/include/com_google_absl -I$LYRA_PREFIX/include/gulrak_filesystem -I$LYRA_PREFIX/include/com_google_glog/src -I$LYRA_PREFIX"
10161+
LYRA_LDFLAGS="-L$LYRA_PREFIX/lib"
10162+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Using lyra prefix... $with_lyra" >&5
10163+
printf "%s\n" "Using lyra prefix... $with_lyra" >&6; }
10164+
else
10165+
LYRA_CXXFLAGS=""
10166+
LYRA_LDFLAGS=""
10167+
fi
10168+
10169+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking lyra usability" >&5
10170+
printf %s "checking lyra usability... " >&6; }
10171+
10172+
LYRA_LIBS="-llyra"
10173+
10174+
SAVED_LIBS="$LIBS"
10175+
SAVED_LDFLAGS="$LDFLAGS"
10176+
SAVED_CXXFLAGS="$CXXFLAGS"
10177+
SAVED_CPPFLAGS="$CPPFLAGS"
10178+
10179+
LIBS="$LYRA_LIBS $LIBS"
10180+
LDFLAGS="$LYRA_LDFLAGS $LDFLAGS"
10181+
CXXFLAGS="$LYRA_CXXFLAGS $CXXFLAGS"
10182+
CPPFLAGS="$LYRA_CPPFLAGS $CPPFLAGS"
10183+
10184+
ac_ext=cpp
10185+
ac_cpp='$CXXCPP $CPPFLAGS'
10186+
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
10187+
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
10188+
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
10189+
10190+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
10191+
/* end confdefs.h. */
10192+
#include "lyra_decoder.h"
10193+
10194+
int
10195+
main (void)
10196+
{
10197+
std::unique_ptr<chromemedia::codec::LyraDecoder> dec = chromemedia::codec::LyraDecoder::Create(8000,1,"");
10198+
10199+
;
10200+
return 0;
10201+
}
10202+
_ACEOF
10203+
if ac_fn_cxx_try_link "$LINENO"
10204+
then :
10205+
10206+
ac_lyra_model_path="$LYRA_PREFIX/model_coeffs"
10207+
printf "%s\n" "#define PJMEDIA_HAS_LYRA_CODEC 1" >>confdefs.h
10208+
10209+
LYRA_CPPFLAGS="'-DGLOG_DEPRECATED=__attribute__((deprecated))' '-DGLOG_EXPORT=__attribute__((visibility(\"default\")))' '-DGLOG_NO_EXPORT=__attribute__((visibility(\"default\")))'"
10210+
CXXFLAGS="$LYRA_CPPFLAGS $CXXFLAGS"
10211+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
10212+
printf "%s\n" "yes" >&6; }
10213+
10214+
else $as_nop
10215+
10216+
ac_no_lyra_codec=1
10217+
LIBS="$SAVED_LIBS"
10218+
LDFLAGS="$SAVED_LDFLAGS"
10219+
CXXFLAGS="$SAVED_CXXFLAGS"
10220+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
10221+
printf "%s\n" "no" >&6; }
10222+
10223+
fi
10224+
rm -f core conftest.err conftest.$ac_objext conftest.beam \
10225+
conftest$ac_exeext conftest.$ac_ext
10226+
ac_ext=c
10227+
ac_cpp='$CPP $CPPFLAGS'
10228+
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
10229+
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
10230+
ac_compiler_gnu=$ac_cv_c_compiler_gnu
10231+
10232+
CPPFLAGS="$SAVED_CPPFLAGS"
10233+
10234+
fi
10235+
10236+
10237+
10238+
1012110239

1012210240
# Check whether --enable-libsrtp was given.
1012310241
if test ${enable_libsrtp+y}

aconfigure.ac

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2311,6 +2311,84 @@ AC_ARG_ENABLE(bcg729,
23112311

23122312
])
23132313

2314+
dnl # lyra prefix
2315+
AC_ARG_WITH(lyra,
2316+
AS_HELP_STRING([--with-lyra=DIR],
2317+
[Specify alternate lyra prefix]),
2318+
[],
2319+
[with_lyra=no]
2320+
)
2321+
2322+
dnl # Do not use default lyra installation if we are cross-compiling
2323+
if test "x$ac_cross_compile" != "x" -a "x$with_lyra" = "xno"; then
2324+
enable_lyra=no
2325+
fi
2326+
2327+
dnl # lyra
2328+
AC_SUBST(ac_no_lyra_codec)
2329+
AC_SUBST(ac_lyra_model_path)
2330+
AC_ARG_ENABLE(lyra,
2331+
AS_HELP_STRING([--disable-lyra],
2332+
[Disable lyra (default: not disabled)]),
2333+
[
2334+
if test "$enable_lyra" = "no"; then
2335+
[ac_no_lyra_codec=1]
2336+
AC_DEFINE(PJMEDIA_HAS_LYRA_CODEC,0)
2337+
AC_MSG_RESULT([Checking if lyra is disabled... yes])
2338+
fi
2339+
],
2340+
[
2341+
if test "x$with_lyra" != "xno" -a "x$with_lyra" != "x"; then
2342+
LYRA_PREFIX=$with_lyra
2343+
dnl # inside autoconf, single quoted preprocessor definition will raise error
2344+
LYRA_CPPFLAGS="-DGLOG_DEPRECATED=__attribute__((deprecated)) -DGLOG_EXPORT=__attribute__((visibility(\"default\"))) -DGLOG_NO_EXPORT=__attribute__((visibility(\"default\")))"
2345+
LYRA_CXXFLAGS="-std=c++17 -Wno-deprecated-builtins -I$LYRA_PREFIX/include/com_google_absl -I$LYRA_PREFIX/include/gulrak_filesystem -I$LYRA_PREFIX/include/com_google_glog/src -I$LYRA_PREFIX"
2346+
LYRA_LDFLAGS="-L$LYRA_PREFIX/lib"
2347+
AC_MSG_RESULT([Using lyra prefix... $with_lyra])
2348+
else
2349+
LYRA_CXXFLAGS=""
2350+
LYRA_LDFLAGS=""
2351+
fi
2352+
2353+
AC_MSG_CHECKING([lyra usability])
2354+
2355+
LYRA_LIBS="-llyra"
2356+
2357+
SAVED_LIBS="$LIBS"
2358+
SAVED_LDFLAGS="$LDFLAGS"
2359+
SAVED_CXXFLAGS="$CXXFLAGS"
2360+
SAVED_CPPFLAGS="$CPPFLAGS"
2361+
2362+
LIBS="$LYRA_LIBS $LIBS"
2363+
LDFLAGS="$LYRA_LDFLAGS $LDFLAGS"
2364+
CXXFLAGS="$LYRA_CXXFLAGS $CXXFLAGS"
2365+
CPPFLAGS="$LYRA_CPPFLAGS $CPPFLAGS"
2366+
2367+
AC_LANG_PUSH([C++])
2368+
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "lyra_decoder.h"
2369+
]],
2370+
[std::unique_ptr<chromemedia::codec::LyraDecoder> dec = chromemedia::codec::LyraDecoder::Create(8000,1,"");]
2371+
)],
2372+
[
2373+
[ac_lyra_model_path="$LYRA_PREFIX/model_coeffs"]
2374+
AC_DEFINE(PJMEDIA_HAS_LYRA_CODEC,1)
2375+
dnl # use single quoted preprocessor definition
2376+
LYRA_CPPFLAGS="'-DGLOG_DEPRECATED=__attribute__((deprecated))' '-DGLOG_EXPORT=__attribute__((visibility(\"default\")))' '-DGLOG_NO_EXPORT=__attribute__((visibility(\"default\")))'"
2377+
CXXFLAGS="$LYRA_CPPFLAGS $CXXFLAGS"
2378+
AC_MSG_RESULT(yes)
2379+
],
2380+
[
2381+
[ac_no_lyra_codec=1]
2382+
LIBS="$SAVED_LIBS"
2383+
LDFLAGS="$SAVED_LDFLAGS"
2384+
CXXFLAGS="$SAVED_CXXFLAGS"
2385+
AC_MSG_RESULT(no)
2386+
])
2387+
AC_LANG_POP([C++])
2388+
CPPFLAGS="$SAVED_CPPFLAGS"
2389+
])
2390+
2391+
23142392

23152393
dnl # Include libsrtp
23162394
AC_SUBST(ac_no_srtp)

pjmedia/build/os-auto.mak.in

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ AC_NO_OPENCORE_AMRNB=@ac_no_opencore_amrnb@
7474
AC_NO_OPENCORE_AMRWB=@ac_no_opencore_amrwb@
7575
AC_NO_BCG729=@ac_no_bcg729@
7676
AC_NO_ANDROID_MEDIACODEC=@ac_no_mediacodec@
77+
AC_NO_LYRA_CODEC=@ac_no_lyra_codec@
7778

7879
export CODEC_OBJS=
7980

@@ -152,6 +153,13 @@ else
152153
export CODEC_OBJS += and_aud_mediacodec.o and_vid_mediacodec.o
153154
endif
154155

156+
ifeq ($(AC_NO_LYRA_CODEC),1)
157+
export CFLAGS += -DPJMEDIA_HAS_LYRA_CODEC=0
158+
else
159+
export CODEC_OBJS += lyra.o
160+
export CFLAGS += -DPJMEDIA_CODEC_LYRA_DEFAULT_MODEL_PATH='"@ac_lyra_model_path@"'
161+
endif
162+
155163
#
156164
# SRTP
157165
#

pjmedia/build/pjmedia_codec.vcxproj

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,6 @@
467467
<ClCompile>
468468
<AdditionalIncludeDirectories>../include;../../pjlib/include;../../third_party/speex/include;../../third_party;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
469469
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
470-
<PrecompiledHeaderOutputFile />
471470
</ClCompile>
472471
<Lib>
473472
<OutputFile>..\lib\pjmedia-codec-$(TargetCPU)-$(Platform)-vc$(VSVer)-$(Configuration).lib</OutputFile>
@@ -689,6 +688,12 @@
689688
<ClCompile Include="..\src\pjmedia-codec\ilbc.c" />
690689
<ClCompile Include="..\src\pjmedia-codec\ipp_codecs.c" />
691690
<ClCompile Include="..\src\pjmedia-codec\l16.c" />
691+
<ClCompile Include="..\src\pjmedia-codec\lyra.cpp">
692+
<PreprocessorDefinitions>GLOG_DEPRECATED=__declspec(deprecated);GLOG_EXPORT=;GLOG_NO_ABBREVIATED_SEVERITIES;GLOG_NO_EXPORT=;
693+
EIGEN_MPL2_ONLY;EIGEN_MAX_ALIGN_BYTES=64;XNN_ENABLE_ASSEMBLY=1;XNN_ENABLE_JIT=0;XNN_ENABLE_SPARSE=1;XNN_LOG_LEVEL=2;PTHREADPOOL_NO_DEPRECATED_API;XNN_ENABLE_MEMOPT=1;XNN_WASMSIMD_VERSION=87;EIGEN_ALTIVEC_USE_CUSTOM_PACK=0;TFLITE_BUILD_WITH_XNNPACK_DELEGATE;_USE_MATH_DEFINES;__DATE__="redacted";__TIMESTAMP__="redacted";__TIME__="redacted";NOGDI;__PRETTY_FUNCTION__=__FUNCSIG__;_HAS_DEPRECATED_RESULT_OF=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
694+
<LanguageStandard>stdcpp17</LanguageStandard>
695+
<DisableSpecificWarnings>4117;4244;4267%(DisableSpecificWarnings)</DisableSpecificWarnings>
696+
</ClCompile>
692697
<ClCompile Include="..\src\pjmedia-codec\opencore_amr.c" />
693698
<ClCompile Include="..\src\pjmedia-codec\openh264.cpp" />
694699
<ClCompile Include="..\src\pjmedia-codec\opus.c" />
@@ -715,6 +720,7 @@
715720
<ClInclude Include="..\include\pjmedia-codec\ilbc.h" />
716721
<ClInclude Include="..\include\pjmedia-codec\ipp_codecs.h" />
717722
<ClInclude Include="..\include\pjmedia-codec\l16.h" />
723+
<ClInclude Include="..\include\pjmedia-codec\lyra.h" />
718724
<ClInclude Include="..\include\pjmedia-codec\opencore_amr.h" />
719725
<ClInclude Include="..\include\pjmedia-codec\opus.h" />
720726
<ClInclude Include="..\include\pjmedia-codec\passthrough.h" />

pjmedia/build/pjmedia_codec.vcxproj.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@
8383
<ClCompile Include="..\src\pjmedia-codec\vpx_packetizer.c">
8484
<Filter>Source Files</Filter>
8585
</ClCompile>
86+
<ClCompile Include="..\src\pjmedia-codec\lyra.cpp">
87+
<Filter>Source Files</Filter>
88+
</ClCompile>
8689
</ItemGroup>
8790
<ItemGroup>
8891
<ClInclude Include="..\src\pjmedia-codec\g722\g722_dec.h">
@@ -163,5 +166,8 @@
163166
<ClInclude Include="..\include\pjmedia-codec\vpx_packetizer.h">
164167
<Filter>Header Files</Filter>
165168
</ClInclude>
169+
<ClInclude Include="..\include\pjmedia-codec\lyra.h">
170+
<Filter>Header Files</Filter>
171+
</ClInclude>
166172
</ItemGroup>
167173
</Project>

pjmedia/include/pjmedia-codec.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include <pjmedia-codec/ilbc.h>
3535
#include <pjmedia-codec/ipp_codecs.h>
3636
#include <pjmedia-codec/l16.h>
37+
#include <pjmedia-codec/lyra.h>
3738
#include <pjmedia-codec/opencore_amr.h>
3839
#include <pjmedia-codec/openh264.h>
3940
#include <pjmedia-codec/opus.h>

pjmedia/include/pjmedia-codec/config.h

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,75 @@
540540
#endif
541541

542542

543+
/**
544+
* Enable Lyra codec.
545+
*
546+
* Default: 0
547+
*/
548+
#ifndef PJMEDIA_HAS_LYRA_CODEC
549+
# define PJMEDIA_HAS_LYRA_CODEC 0
550+
#endif
551+
552+
/**
553+
* Lyra default bitrate setting
554+
*
555+
* Default: 3200 (available bitrate:3200, 6000, 9200)
556+
*/
557+
#ifndef PJMEDIA_CODEC_LYRA_DEFAULT_BIT_RATE
558+
# define PJMEDIA_CODEC_LYRA_DEFAULT_BIT_RATE 3200
559+
#endif
560+
561+
/**
562+
* Lyra default model path containing lyra_config.binarypb, lyragan.tflite,
563+
* quantizer.tflite and soundstream_encoder.tflite file. If autoconf is used,
564+
* it will be set to "[lyra src folder]/model_coeffs".
565+
*
566+
* Default: "model_coeffs"
567+
*/
568+
#ifndef PJMEDIA_CODEC_LYRA_DEFAULT_MODEL_PATH
569+
# define PJMEDIA_CODEC_LYRA_DEFAULT_MODEL_PATH "model_coeffs"
570+
#endif
571+
572+
/**
573+
* Settings to enable Lyra codec 8KHz. This option is only used
574+
* when PJMEDIA_HAS_LYRA_CODEC is enabled.
575+
*
576+
* Default: 0
577+
*/
578+
#ifndef PJMEDIA_CODEC_LYRA_HAS_8KHZ
579+
# define PJMEDIA_CODEC_LYRA_HAS_8KHZ 0
580+
#endif
581+
582+
/**
583+
* Settings to enable Lyra codec 16KHz. This option is only used
584+
* when PJMEDIA_HAS_LYRA_CODEC is enabled.
585+
*
586+
* Default: 1
587+
*/
588+
#ifndef PJMEDIA_CODEC_LYRA_HAS_16KHZ
589+
# define PJMEDIA_CODEC_LYRA_HAS_16KHZ 1
590+
#endif
591+
592+
/**
593+
* Settings to enable Lyra codec 32KHz. This option is only used
594+
* when PJMEDIA_HAS_LYRA_CODEC is enabled.
595+
*
596+
* Default: 0
597+
*/
598+
#ifndef PJMEDIA_CODEC_LYRA_HAS_32KHZ
599+
# define PJMEDIA_CODEC_LYRA_HAS_32KHZ 0
600+
#endif
601+
602+
/**
603+
* Settings to enable Lyra codec 48KHz. This option is only used
604+
* when PJMEDIA_HAS_LYRA_CODEC is enabled.
605+
*
606+
* Default: 0
607+
*/
608+
#ifndef PJMEDIA_CODEC_LYRA_HAS_48KHZ
609+
# define PJMEDIA_CODEC_LYRA_HAS_48KHZ 0
610+
#endif
611+
543612
/**
544613
* Specify if FFMPEG codecs are available.
545614
*

0 commit comments

Comments
 (0)