Browse Source

kodi: add aac workaround from Debian

Waldemar Brodkorb 6 years ago
parent
commit
237e296493
3 changed files with 36 additions and 1 deletions
  1. 6 0
      package/kodi/Makefile
  2. 29 0
      package/kodi/files/kodi-shim.c
  3. 1 1
      package/kodi/files/kodi.init

+ 6 - 0
package/kodi/Makefile

@@ -161,6 +161,10 @@ pre-configure:
 	cp $(WRKBUILD)/../../tools/depends/native/TexturePacker/TexturePacker \
 		$(STAGING_HOST_DIR)/usr/bin
 
+pre-build:
+	$(TARGET_CC) -shared -fPIC -o $(WRKBUILD)/kodi-shim.so \
+		./files/kodi-shim.c
+
 kodi-install:
 	$(INSTALL_DIR) $(STAGING_TARGET_DIR)/usr/share/kodi
 	$(CP) $(WRKINST)/usr/share/kodi/* \
@@ -178,5 +182,7 @@ kodi-install:
 		$(IDIR_KODI)/usr/bin
 	$(INSTALL_BIN) $(WRKINST)/usr/bin/kodi \
 		$(IDIR_KODI)/usr/bin
+	$(CP) $(WRKBUILD)/kodi-shim.so \
+		$(IDIR_KODI)/usr/lib/kodi
 
 include ${ADK_TOPDIR}/mk/pkg-bottom.mk

+ 29 - 0
package/kodi/files/kodi-shim.c

@@ -0,0 +1,29 @@
+// from https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=881536
+
+#define _GNU_SOURCE
+#include <dlfcn.h>
+#include <stdint.h>
+
+// Mini version of AVPacket
+typedef struct AVPacket {
+   void *buf;
+   int64_t pts;
+   int64_t dts;
+   uint8_t *data;
+   int   size;
+} AVPacket;
+
+int avcodec_decode_audio4(void* a, void* b, int* got_frame_ptr, const AVPacket* pkt)
+{
+    // Ignore null packets
+    if (pkt->size == 0)
+    {
+        *got_frame_ptr = 0;
+        return 0;
+    }
+
+    // Forward to real function
+    int (*orig_decode)(void*, void*, int*, const AVPacket*) =
+        dlsym(RTLD_NEXT, "avcodec_decode_audio4");
+    return orig_decode(a, b, got_frame_ptr, pkt);
+}

+ 1 - 1
package/kodi/files/kodi.init

@@ -15,7 +15,7 @@ start)
 	if [ ! -d /data/kodi ]; then
 		mkdir /data/kodi
 	fi
-	/usr/lib/kodi/kodi.bin &
+	LD_PRELOAD=/usr/lib/kodi/kodi-shim.so /usr/lib/kodi/kodi.bin &
 	;;
 stop)
 	kill $(pgrep -f /usr/lib/kodi/kodi.bin)