mirror of
https://github.com/badaix/snapcast.git
synced 2025-07-30 22:59:51 +02:00
switched to ogg tremor decoder
This commit is contained in:
parent
b29fadc465
commit
c0ca0bef57
5 changed files with 128 additions and 12 deletions
116
Makefile.openwrt
Executable file
116
Makefile.openwrt
Executable file
|
@ -0,0 +1,116 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2015 OpenWrt.org
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
include $(INCLUDE_DIR)/target.mk
|
||||||
|
|
||||||
|
PKG_NAME := snapcast
|
||||||
|
PKG_VERSION := 0_5_0
|
||||||
|
PKG_RELEASE := $(PKG_SOURCE_VERSION)
|
||||||
|
PKG_USE_MIPS16 := 0
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
define Package/snapcast/Default
|
||||||
|
SECTION := sxx
|
||||||
|
CATEGORY := Sxx
|
||||||
|
TITLE := snapcast
|
||||||
|
DEPENDS := +libstdcpp +libavahi-client +libatomic +libogg +libflac
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/snapcast/description/Default
|
||||||
|
A collection of multiroom functions
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/snapcast
|
||||||
|
$(call Package/snapcast/Default)
|
||||||
|
TITLE += packages
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/snapcast/description
|
||||||
|
$(call Package/snapcast/description/Default)
|
||||||
|
This Package provide for multiroom function
|
||||||
|
Include Server and Client
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/snapserver
|
||||||
|
$(call Package/snapcast/Default)
|
||||||
|
TITLE += snapserver
|
||||||
|
HIDDEN := 1
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/snapclient
|
||||||
|
$(call Package/snapcast/Default)
|
||||||
|
TILE += snapclient
|
||||||
|
DEPENDS += +alsa-lib +libvorbisidec
|
||||||
|
HIDDEN := 1
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/snapserver/description
|
||||||
|
$(call Package/snapcast/description/Default)
|
||||||
|
Multiroom server program.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/snapclient/description
|
||||||
|
$(call Package/snapcast/description/Default)
|
||||||
|
Multiroom client program.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/snapcast/config
|
||||||
|
menu "Select snapcast Options"
|
||||||
|
depends on PACKAGE_snapcast
|
||||||
|
comment "Choose server or client to compile"
|
||||||
|
config PACKAGE_snapserver
|
||||||
|
prompt "Compile snapserver"
|
||||||
|
help
|
||||||
|
Compile multiroom server.
|
||||||
|
default n
|
||||||
|
|
||||||
|
config PACKAGE_snapclient
|
||||||
|
prompt "Compile snapclient."
|
||||||
|
help
|
||||||
|
Compile multiroom client.
|
||||||
|
default n
|
||||||
|
endmenu
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
$(call Build/Prepare/Default)
|
||||||
|
$(CP) -r src/common/ $(PKG_BUILD_DIR)
|
||||||
|
$(CP) -r src/message/ $(PKG_BUILD_DIR)
|
||||||
|
$(CP) -r src/externals/ $(PKG_BUILD_DIR)
|
||||||
|
$(if $(CONFIG_PACKAGE_snapserver), \
|
||||||
|
$(CP) -r src/server/ $(PKG_BUILD_DIR),)
|
||||||
|
$(if $(CONFIG_PACKAGE_snapclient), \
|
||||||
|
$(CP) -r src/client/ $(PKG_BUILD_DIR),)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
# $(if $(CONFIG_PACKAGE_snapserver), \
|
||||||
|
# $(call Build/Compile/Default, -C server),)
|
||||||
|
|
||||||
|
$(if $(CONFIG_PACKAGE_snapclient), \
|
||||||
|
$(call Build/Compile/Default, -C client TARGET=OPENWRT),)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/snapcast/Default/install
|
||||||
|
true
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/snapserver/install
|
||||||
|
$(INSTALL_DIR) $(1)/usr/bin
|
||||||
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/server/snapserver $(1)/usr/bin/
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/snapclient/install
|
||||||
|
$(INSTALL_DIR) $(1)/usr/bin
|
||||||
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/client/snapclient $(1)/usr/bin/
|
||||||
|
endef
|
||||||
|
|
||||||
|
#$(eval $(call BuildPackage,snapserver))
|
||||||
|
$(eval $(call BuildPackage,snapclient))
|
||||||
|
$(eval $(call BuildPackage,snapcast))
|
|
@ -34,7 +34,7 @@ First install all packages needed to compile Snapcast
|
||||||
For Debian derivates (e.g. Raspbian, Debian, Ubuntu, Mint):
|
For Debian derivates (e.g. Raspbian, Debian, Ubuntu, Mint):
|
||||||
|
|
||||||
$ sudo apt-get install git build-essential
|
$ sudo apt-get install git build-essential
|
||||||
$ sudo apt-get install libasound2-dev libvorbis-dev libflac-dev alsa-utils libavahi-client-dev avahi-daemon
|
$ sudo apt-get install libasound2-dev libvorbisidec-dev libvorbis-dev libflac-dev alsa-utils libavahi-client-dev avahi-daemon
|
||||||
|
|
||||||
Compilation requires gcc 4.8 or higher, so it's highly recommended to use Debian (Respbian) Jessie.
|
Compilation requires gcc 4.8 or higher, so it's highly recommended to use Debian (Respbian) Jessie.
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ OBJ += player/openslPlayer.o
|
||||||
else ifeq ($(TARGET), OPENWRT)
|
else ifeq ($(TARGET), OPENWRT)
|
||||||
|
|
||||||
CXXFLAGS += -DIS_BIG_ENDIAN -DNO_TO_STRING -DNO_STOUL -DNO_STOI -DHAS_OGG -DHAS_ALSA -DHAS_AVAHI -DHAS_DAEMON
|
CXXFLAGS += -DIS_BIG_ENDIAN -DNO_TO_STRING -DNO_STOUL -DNO_STOI -DHAS_OGG -DHAS_ALSA -DHAS_AVAHI -DHAS_DAEMON
|
||||||
LDFLAGS = -lasound -logg -lvorbis -lFLAC -lavahi-client -lavahi-common -latomic
|
LDFLAGS = -lasound -logg -lvorbisidec -lFLAC -lavahi-client -lavahi-common -latomic
|
||||||
OBJ += player/alsaPlayer.o decoder/oggDecoder.o browseAvahi.o
|
OBJ += player/alsaPlayer.o decoder/oggDecoder.o browseAvahi.o
|
||||||
|
|
||||||
else
|
else
|
||||||
|
@ -39,7 +39,7 @@ else
|
||||||
CXX = /usr/bin/g++
|
CXX = /usr/bin/g++
|
||||||
STRIP = strip
|
STRIP = strip
|
||||||
CXXFLAGS += -static-libgcc -static-libstdc++ -DHAS_OGG -DHAS_ALSA -DHAS_AVAHI -DHAS_DAEMON
|
CXXFLAGS += -static-libgcc -static-libstdc++ -DHAS_OGG -DHAS_ALSA -DHAS_AVAHI -DHAS_DAEMON
|
||||||
LDFLAGS = -lrt -lasound -logg -lvorbis -lFLAC -lavahi-client -lavahi-common
|
LDFLAGS = -lrt -lasound -logg -lvorbisidec -lFLAC -lavahi-client -lavahi-common
|
||||||
OBJ += player/alsaPlayer.o decoder/oggDecoder.o browseAvahi.o
|
OBJ += player/alsaPlayer.o decoder/oggDecoder.o browseAvahi.o
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <vorbis/vorbisenc.h>
|
//#include <tremor/ivorbisfile.h>
|
||||||
|
|
||||||
#include "oggDecoder.h"
|
#include "oggDecoder.h"
|
||||||
#include "common/snapException.h"
|
#include "common/snapException.h"
|
||||||
|
@ -42,8 +42,8 @@ OggDecoder::~OggDecoder()
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(mutex_);
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
free(convbuffer);
|
free(convbuffer);
|
||||||
vorbis_block_clear(&vb);
|
vorbis_block_clear(&vb);
|
||||||
vorbis_dsp_clear(&vd);
|
vorbis_dsp_clear(&vd);
|
||||||
ogg_stream_clear(&os);
|
ogg_stream_clear(&os);
|
||||||
vorbis_comment_clear(&vc);
|
vorbis_comment_clear(&vc);
|
||||||
vorbis_info_clear(&vi); /* must be called last */
|
vorbis_info_clear(&vi); /* must be called last */
|
||||||
|
@ -92,7 +92,7 @@ bool OggDecoder::decode(msg::PcmChunk* chunk)
|
||||||
continue; /* missing or corrupt data at this page position */
|
continue; /* missing or corrupt data at this page position */
|
||||||
/* no reason to complain; already complained above */
|
/* no reason to complain; already complained above */
|
||||||
/* we have a packet. Decode it */
|
/* we have a packet. Decode it */
|
||||||
float **pcm;
|
ogg_int32_t **pcm;
|
||||||
int samples;
|
int samples;
|
||||||
|
|
||||||
if (vorbis_synthesis(&vb,&op) == 0) /* test for success! */
|
if (vorbis_synthesis(&vb,&op) == 0) /* test for success! */
|
||||||
|
@ -113,17 +113,17 @@ bool OggDecoder::decode(msg::PcmChunk* chunk)
|
||||||
for(int i=0; i<vi.channels; i++)
|
for(int i=0; i<vi.channels; i++)
|
||||||
{
|
{
|
||||||
ogg_int16_t *ptr=convbuffer+i;
|
ogg_int16_t *ptr=convbuffer+i;
|
||||||
float *mono=pcm[i];
|
ogg_int32_t *mono=pcm[i];
|
||||||
for (int j=0; j<bout; j++)
|
for (int j=0; j<bout; j++)
|
||||||
{
|
{
|
||||||
int val=floor(mono[j]*32767.f+.5f);
|
ogg_int32_t val = mono[j] >> 9;//floor(mono[j]*32767.f+.5f);
|
||||||
/* might as well guard against clipping */
|
/* might as well guard against clipping */
|
||||||
if(val>32767)
|
if(val>32767)
|
||||||
val=32767;
|
val=32767;
|
||||||
else if(val<-32768)
|
else if(val<-32768)
|
||||||
val=-32768;
|
val=-32768;
|
||||||
*ptr=SWAP_16(val);
|
*ptr = SWAP_16(val);
|
||||||
ptr+=vi.channels;
|
ptr += vi.channels;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
#ifndef OGG_DECODER_H
|
#ifndef OGG_DECODER_H
|
||||||
#define OGG_DECODER_H
|
#define OGG_DECODER_H
|
||||||
#include "decoder.h"
|
#include "decoder.h"
|
||||||
#include <vorbis/codec.h>
|
#include <tremor/ivorbiscodec.h>
|
||||||
|
|
||||||
|
|
||||||
class OggDecoder : public Decoder
|
class OggDecoder : public Decoder
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue