mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 05:06:43 +00:00
Merge pull request #3711 from HiassofT/le92-kodi-rpi4
Kodi (RPi4): update to latest leia_pi4 version
This commit is contained in:
commit
0225a0342b
@ -19,8 +19,8 @@ case $KODI_VENDOR in
|
|||||||
PKG_SOURCE_NAME="kodi-$KODI_VENDOR-$PKG_VERSION.tar.gz"
|
PKG_SOURCE_NAME="kodi-$KODI_VENDOR-$PKG_VERSION.tar.gz"
|
||||||
;;
|
;;
|
||||||
raspberrypi4)
|
raspberrypi4)
|
||||||
PKG_VERSION="932b08f071fd6cf8d95d01fe0c9e186821a38983" # 18.3-Leia
|
PKG_VERSION="b0e4133d0f26c0dd2f305c689c8c6b3ea084d7b1" # 18.3-Leia
|
||||||
PKG_SHA256="4f678f48baedca0b6bfacec451424d38a8b8b04c47490899c656305de72f8a15"
|
PKG_SHA256="9e4d2b0cc597ae3b8ad3352e6a2a306b268ccb3974d2cfa52dedff8c3de73982"
|
||||||
PKG_URL="https://github.com/popcornmix/xbmc/archive/$PKG_VERSION.tar.gz"
|
PKG_URL="https://github.com/popcornmix/xbmc/archive/$PKG_VERSION.tar.gz"
|
||||||
PKG_SOURCE_NAME="kodi-$KODI_VENDOR-$PKG_VERSION.tar.gz"
|
PKG_SOURCE_NAME="kodi-$KODI_VENDOR-$PKG_VERSION.tar.gz"
|
||||||
;;
|
;;
|
||||||
|
@ -1020,10 +1020,10 @@ index 0000000000..6a1d95f195
|
|||||||
+#endif // __CTRL_FILES_H__
|
+#endif // __CTRL_FILES_H__
|
||||||
diff --git a/libavcodec/rpi_hevc.c b/libavcodec/rpi_hevc.c
|
diff --git a/libavcodec/rpi_hevc.c b/libavcodec/rpi_hevc.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000..a000077f33
|
index 0000000000..fcf03d849c
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/libavcodec/rpi_hevc.c
|
+++ b/libavcodec/rpi_hevc.c
|
||||||
@@ -0,0 +1,1065 @@
|
@@ -0,0 +1,1075 @@
|
||||||
+// FFMPEG HEVC decoder hardware accelerator
|
+// FFMPEG HEVC decoder hardware accelerator
|
||||||
+// Andrew Holme, Argon Design Ltd
|
+// Andrew Holme, Argon Design Ltd
|
||||||
+// Copyright (c) June 2017 Raspberry Pi Ltd
|
+// Copyright (c) June 2017 Raspberry Pi Ltd
|
||||||
@ -1331,6 +1331,12 @@ index 0000000000..a000077f33
|
|||||||
+
|
+
|
||||||
+static int check_status(RPI_T *rpi) {
|
+static int check_status(RPI_T *rpi) {
|
||||||
+ int status, c, p;
|
+ int status, c, p;
|
||||||
|
+
|
||||||
|
+ // this is the definition of successful completion of phase 1
|
||||||
|
+ // it assures that status register is zero and all blocks in each tile have completed
|
||||||
|
+ if (rpi->apb_read(rpi->id, RPI_CFSTATUS) == rpi->apb_read(rpi->id, RPI_CFNUM))
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
+ status = rpi->apb_read(rpi->id, RPI_STATUS);
|
+ status = rpi->apb_read(rpi->id, RPI_STATUS);
|
||||||
+ p = (status>>4)&1;
|
+ p = (status>>4)&1;
|
||||||
+ c = (status>>3)&1;
|
+ c = (status>>3)&1;
|
||||||
@ -1340,7 +1346,7 @@ index 0000000000..a000077f33
|
|||||||
+ if (c) rpi->max_coeff64 += rpi->max_coeff64/2;
|
+ if (c) rpi->max_coeff64 += rpi->max_coeff64/2;
|
||||||
+ return 1;
|
+ return 1;
|
||||||
+ }
|
+ }
|
||||||
+ return 0;
|
+ return 2;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+//////////////////////////////////////////////////////////////////////////////
|
+//////////////////////////////////////////////////////////////////////////////
|
||||||
@ -1697,6 +1703,7 @@ index 0000000000..a000077f33
|
|||||||
+
|
+
|
||||||
+ int i, a64, x;
|
+ int i, a64, x;
|
||||||
+ char *buf;
|
+ char *buf;
|
||||||
|
+ int status = 1;
|
||||||
+
|
+
|
||||||
+ // End of phase 1 command compilation
|
+ // End of phase 1 command compilation
|
||||||
+ if (pps->entropy_coding_sync_enabled_flag) {
|
+ if (pps->entropy_coding_sync_enabled_flag) {
|
||||||
@ -1725,7 +1732,8 @@ index 0000000000..a000077f33
|
|||||||
+ rpi->axi_dump(rpi->id, ((uint64_t)a64)<<6, rpi->cmd_len * sizeof(struct RPI_CMD));
|
+ rpi->axi_dump(rpi->id, ((uint64_t)a64)<<6, rpi->cmd_len * sizeof(struct RPI_CMD));
|
||||||
+ rpi->apb_write_addr(rpi->id, RPI_CFBASE, a64);
|
+ rpi->apb_write_addr(rpi->id, RPI_CFBASE, a64);
|
||||||
+ rpi->wait_interrupt(rpi->id, 1);
|
+ rpi->wait_interrupt(rpi->id, 1);
|
||||||
+ if (check_status(rpi)==0) break; // No PU/COEFF overflow?
|
+ status = check_status(rpi);
|
||||||
|
+ if (status != 1) break; // No PU/COEFF overflow?
|
||||||
+ }
|
+ }
|
||||||
+ pthread_mutex_unlock(&rpi->mutex_phase1);
|
+ pthread_mutex_unlock(&rpi->mutex_phase1);
|
||||||
+
|
+
|
||||||
@ -1830,10 +1838,12 @@ index 0000000000..a000077f33
|
|||||||
+
|
+
|
||||||
+ rpi->apb_dump_regs(rpi->id, 0x0, 32);
|
+ rpi->apb_dump_regs(rpi->id, 0x0, 32);
|
||||||
+ rpi->apb_dump_regs(rpi->id, 0x8000, 24);
|
+ rpi->apb_dump_regs(rpi->id, 0x8000, 24);
|
||||||
+ rpi->apb_write(rpi->id, RPI_NUMROWS, rpi->PicHeightInCtbsY);
|
+ // only do phase if phase 1 completed without errors
|
||||||
+ rpi->apb_read_drop(rpi->id, RPI_NUMROWS); // Read back to confirm write has reached block
|
+ if (status == 0) {
|
||||||
+ rpi->wait_interrupt(rpi->id, 2);
|
+ rpi->apb_write(rpi->id, RPI_NUMROWS, rpi->PicHeightInCtbsY);
|
||||||
+
|
+ rpi->apb_read_drop(rpi->id, RPI_NUMROWS); // Read back to confirm write has reached block
|
||||||
|
+ rpi->wait_interrupt(rpi->id, 2);
|
||||||
|
+ }
|
||||||
+//printf("%s: %dx%d %d\n", __FUNCTION__, f->width, f->height, f->linesize[0]);
|
+//printf("%s: %dx%d %d\n", __FUNCTION__, f->width, f->height, f->linesize[0]);
|
||||||
+#if defined(AXI_BUFFERS)
|
+#if defined(AXI_BUFFERS)
|
||||||
+ // Copy YUV output frame
|
+ // Copy YUV output frame
|
||||||
|
Loading…
x
Reference in New Issue
Block a user