Commit e5747cad authored by Jonathan Rosser's avatar Jonathan Rosser Committed by Rémi Denis-Courmont

Introduce new codec module to decode dirac video via libschroedinger

Schroedinger is a fast decoder of the Dirac video codec.  This plugin
is currently the most complete dirac decoder (compared with ffmpeg or
codec/dirac.c) and should ideally be used in preference

- Input data blocks are handed over to schro which eventually free's them
  (avoids memcpy).  Freed by SchroBufferFree()
- Share picture storage between schro and vlc -- avoids memcpy of picture
  data after decoding.  Freed by SchroFrameFree()
- Autodetection of libschroedinger in configure.ac
  May be disabled with --disable-schroedinger
- Bumped decoding priority to 200, to beat libavcodec.c and dirac.c,
  this module does a better job than either of them.

- Remove potential memory leak when allocating pictures
- Always use p_block rather than priv in SchroBufferFree
- Performs pts interpolation for streams that do not have one pts per picture
- Set progressive, top_field_first and nb_fields on picture_t's properly
- Fix copyright date in header
- Reorder picture_pts_t structure for efficiency
- Print 64 bit types correctly with "%"PRId64
- No need to p_buffer->i_buffer=0 before buffer_Release()
- Work around schroedinger's lack of handling multiple parseunits per block
- Work around corrupt data produced by demux/ts.c after discontinuity
- Correctly reset decoder at Dirac END_OF_SEQUENCE
- Split decoding loop into two parts:
   - First, injecting [valid] parse units into the decoder
   - Second, itterating the decoder
Signed-off-by: default avatarDavid Flynn <davidf@woaf.net>
Signed-off-by: default avatarRémi Denis-Courmont <rdenis@simphalempin.com>
parent 025d0a23
...@@ -3586,6 +3586,22 @@ if test "${enable_dirac}" = "yes"; then ...@@ -3586,6 +3586,22 @@ if test "${enable_dirac}" = "yes"; then
]) ])
fi fi
dnl
dnl schroedinger decoder plugin (for dirac format video)
dnl
AC_ARG_ENABLE(schroedinger,
[ --disable-schroedinger high performance dirac codec (default enabled)])
if test "${enable_schroedinger}" != "no"; then
PKG_CHECK_MODULES(SCHROEDINGER,[schroedinger-1.0 >= 1.0], [
VLC_ADD_PLUGIN([schroedinger])
VLC_ADD_CFLAGS([schroedinger],[$SCHROEDINGER_CFLAGS])
VLC_ADD_LIBS([schroedinger],[$SCHROEDINGER_LIBS]) ], [
AS_IF([test "x${enable_schroedinger}" != "x"], [
AC_MSG_ERROR([${SCHROEDINGER_PKG_ERRORS}])
])
])
fi
dnl dnl
dnl PNG decoder module dnl PNG decoder module
dnl dnl
......
...@@ -36,3 +36,4 @@ SOURCES_cdg = cdg.c ...@@ -36,3 +36,4 @@ SOURCES_cdg = cdg.c
SOURCES_fluidsynth = fluidsynth.c SOURCES_fluidsynth = fluidsynth.c
SOURCES_cc = cc.c cc.h SOURCES_cc = cc.c cc.h
SOURCES_kate = kate.c SOURCES_kate = kate.c
SOURCES_schroedinger = schroedinger.c
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment