108 Commits

Author SHA1 Message Date
Nils Hasenbanck
1e54379141 Implemented the packet buffer.
Simply use two packet_buffers that are double-linked lists of
AVPacket structs. This way we can control which packets to feed
to the decoders at the right time.

This solves the playback problem with the MP4 files.
2020-01-08 20:44:00 +01:00
Nils Hasenbanck
226f2d52ff Fix ASS rendering assertion on seeking.
ASS needs some locking.
2019-12-24 12:16:52 +01:00
twinaphex
31a7f2b4d9 Add missing ifdef 2019-12-24 02:17:48 +01:00
Nils Hasenbanck
c6309d963d Remove video fifo in ffmpeg core.
The video fifo can be removed, since we have a ring buffer in it's
place. This removes unneeded copy operations and as a positive side
improves overall decoding speed.

Makes 8k60p SW and 4k60p HW decoding possible on my system.

For now the ring buffer is 32 images deep. This limitation will
be removed, once audio and video decoder have their own
packet handling.
2019-12-23 16:07:34 +01:00
twinaphex
923c19356b (ffmpeg) - Fix CXX_BUILD errors - see
https://github.com/ZoneMinder/zoneminder/blob/master/src/zm_ffmpeg.h
(comment on av_err2str)
2019-12-19 20:43:59 +01:00
twinaphex
60b182b821 Promote tpool as libretro-common component 2019-12-18 18:21:03 +01:00
twinaphex
3e8e6d35d6 (tpool.c) Code style nits 2019-12-18 18:11:18 +01:00
Nils Hasenbanck
417d1b7de7 Color space conversion using frame based MT.
Using a ordered ring buffer and a thread pool, the color space
conversion is not multi-threaded based on frames. I tried
to implement slice based threading, but libswscale did produced
highly distorted pictures without obvious reason.

This approach introduces some more "lag" when decoding and skipping,
but shouldn't be affect the user negatively, since movie
watching is not lag sensitive, as long as the A/V is synchronized.

Change default to software decoding.

SW decoding is the most robust and fasted method of decoding right now.
Users should enable hw based decoding if their system requires it
and it's actually beneficial for them.

Fix deadlocks when seeking and decrease RAM usage.

Decrease memory allocation by reusing AVFrames.
2019-12-18 11:46:49 +01:00
Nils Hasenbanck
00f755a822 ffmpeg core implements MT for SW decoding.
This change will activate multi-threading for software based
decoder. Color conversion is still single threaded and also not
being performed by OpenGL.

Since the way ffmpeg inits the HW decoding, we can't 100% valdiate
if a hw decoder will play a file or not. Since we need to know
before calling avcodec_open2() if we want to either multi-thread via
software or HW decode, we will only run single-threaded in case of a
late fallback.

This happens for example in off cases when my AMD vega based graphic
card reports that it could HW decode VP9 video but in reality can't
(which is catched in callback get_format() and after avcodec_open2(().

There is currently no good solution in sight, since we can't
reconfigure the decoding context at that point of time.
2019-12-07 17:45:41 +01:00
Nils Hasenbanck
03b18dbfc4 Disable HW acceleration with ffmpeg 3.4. 2019-12-05 20:11:29 +01:00
Nils Hasenbanck
c88f2b31ee Fix ffmpeg core build under linux.
Libass is optional again. This build will also compile with
ffmpeg 3.4 again, but HW acceleration is not guaranteed to work,
since it hasn't been tested well enough.
2019-12-05 19:39:56 +01:00
Nils Hasenbanck
1dbc7cdc9a ffmpeg core prints out the ffmpeg library version
For better debugging and supporting of the users, we will print
out the library versions that the ffmpeg core is currently using.
2019-12-02 18:50:44 +01:00
Nils Hasenbanck
17107a1563 Fix decoder switching and context re-usage.
The re-usage of the decoder context is not properly implemented.
Restart options will only be applied when the core is started.
2019-12-01 12:49:37 +01:00
Nils Hasenbanck
c3c2f5bfb6 Implement HW based decoding for the ffmpeg core.
The ffmpeg core not support the usage of HW based video decoders.

Core options to configure the HW decoder to use is provided.
Proper fallback to the SW based decoder is implemented.

Currently the decoder loop in single threaded and is limited by
the color conversion that is done in software.
The frame based threading provided by ffmpeg also currently doesn't
seem to provide any benefits in configuring it.
2019-12-01 12:11:14 +01:00
twinaphex
ba74747860 (ffmpeg core) Update Makefile 2019-11-23 22:39:50 +01:00
twinaphex
5d8c566dbc (cores/ffmpeg) Resync 2019-11-19 09:09:52 +01:00
twinaphex
10a234908f Update libretro-ffmpeg Makefile 2019-11-19 09:01:46 +01:00
twinaphex
6d5104f6d7 (Windows/ffmpeg) Standalone Makefile - Don't set it explicitly to gcc/g++ 2019-11-19 08:55:04 +01:00
twinaphex
fbdc53f926 Update ffmpeg Makefile.common - see if it changes anything 2019-11-19 08:54:19 +01:00
orbea
84f4dcba2b Remove WANT_ZLIB. 2019-07-25 11:18:33 -07:00
orbea
28ff4b391a Clean up white space. 2019-02-03 16:00:50 -08:00
orbea
e062b98088 Remove trailing blank lines.
find . -type f -exec sed -i '${/^[[:space:]]*$/d;}' {} \+
2019-01-17 19:39:38 -08:00
orbea
bfc366decc Squeeze extra blank lines with cat(1).
Example:

find . -type f -iname '*.c' | while read -r i; do
  cat -s "$i" > "$i.new"
  mv "$i.new" "$i"
done
2019-01-08 11:04:58 -08:00
orbea
fb6fe1a87c Makefile: Better respect CFLAGS and CXXFLAGS as environment variables.
This fixes a few subtle problems with passing CFLAGS and CXXFLAGS as
environment variables for configure.

First it will now only add these variables to config.mk when they are
actually set. If they are unset then the default optimizations in the
Makefile are set. This avoids passing more than one conflicting
optimization level to the compiler.

Next all CFLAGS are added to CXXFLAGS to avoid issues with forgetting to
set both CFLAGS and CXXFLAGS. This results in the cxx compiler getting
passed several redundant optimization levels when both the CFLAGS and
CXXFLAGS environment variabls are used. Now these uses of CFLAGS in
Makefile.common are set to DEF_FLAGS. This allows adding $(DEF_FLAGS)
to the CXXFLAGS variable without adding redundant flags from CFLAGS.

v2: Update other build files.
2018-12-30 17:17:19 -08:00
Alcaro
99f696abd2 Fix #6009 v3.0 2017-12-31 15:28:10 +01:00
esoptron
2be322acbb
Disable Temporal Interpolation by default in internal FFmpeg core 2017-12-22 17:24:13 -05:00
gblues
6904101c44 Clean up trailing whitespace
== DETAILS

Really simple code cleanup, because my editor flags trailing whitespaces
and it's pretty annoying.
2017-12-12 00:24:18 -08:00
twinaphex
08bed1b0a2 (ffmpeg core) Take out gl prefix 2017-05-27 03:28:49 +02:00
twinaphex
94e2570c2f Cleanups 2017-05-27 03:20:47 +02:00
twinaphex
defab8842a (FFMPEG FFT) Add 1440p/2160p resolution options 2017-05-22 15:34:33 +02:00
twinaphex
aea00f1e00 Use memcmp instead of string_is_equal for more instances 2017-04-23 12:17:51 +02:00
twinaphex
8defa3b924 Update libretro-ffmpeg 2017-04-22 20:56:59 +02:00
twinaphex
6078864e26 Turn ffmpeg FFT into C code and remove GLM dependency 2017-04-22 12:59:28 +02:00
twinaphex
21f7f6059a (ffmpeg FFT) No longer needs GLM 2017-04-22 12:25:54 +02:00
twinaphex
d674d2102e (ffmpeg FFT) Move variable initialization to top 2017-04-22 12:11:42 +02:00
twinaphex
25f31883d5 (libretro ffmpeg FFT) Start using libretro-common gfx/matrix
functions instead of GLM; GLM only used now still for
packHalf2x16
2017-04-22 12:08:10 +02:00
twinaphex
a65675d24f (FFT) Swap around matrices arguments for matrix_4x4_multiply 2017-04-22 11:15:41 +02:00
twinaphex
45dc1b7977 Some build fixes 2017-04-22 10:09:52 +02:00
twinaphex
dd517f4660 Try to avoid directly calling strcmp 2017-04-21 13:56:15 +02:00
twinaphex
9b3519f850 Turn matrix_4x4_lookat into macro, remove matrix_4x4.c 2017-04-16 07:57:31 +02:00
twinaphex
257410d058 Turn matrix_4x4_multiply into macro 2017-04-16 07:55:02 +02:00
twinaphex
fa6dc9ec52 (ffmpeg) Better error handling 2017-01-24 16:28:07 +01:00
twinaphex
2a60b54e02 Revert FFT core option changes - FFT was no longer working 2016-12-27 02:56:56 +01:00
twinaphex
7863b3a21f (ffmpeg_core.c) Fix build 2016-12-26 02:53:21 +01:00
Aaahh Ahh
c51f6ad041 (ffmpeg core) Add GLFFT toggle
Adds a toggle for GLFFT
2016-12-25 01:47:09 -05:00
twinaphex
18da1fc088 More logging 2016-11-09 00:20:44 +01:00
twinaphex
5e9a6772cf (fft.cpp) Add debug logging 2016-11-08 23:52:17 +01:00
twinaphex
5865a8c299 (fft.cpp) Add logging 2016-11-08 20:28:59 +01:00
twinaphex
9a9f76d71c (FFT) Add potential non-GLM code 2016-11-04 21:25:12 +01:00
twinaphex
c3e832f672 (ffmpeg core) don't use value_ptr 2016-11-01 12:08:45 +01:00