Browse Source

mmal: move the converter in its own plugin

pull/101/head
Steve Lhomme 7 years ago
parent
commit
5bd945c984
  1. 9
      modules/hw/mmal/Makefile.am
  2. 18
      modules/hw/mmal/codec.c
  3. 58
      modules/hw/mmal/converter.c
  4. 33
      modules/hw/mmal/mmal_picture.c
  5. 8
      modules/hw/mmal/mmal_picture.h

9
modules/hw/mmal/Makefile.am

@ -11,13 +11,20 @@ libmmal_vout_plugin_la_LDFLAGS = $(AM_LDFLAGS) -lm
libmmal_vout_plugin_la_LIBADD = $(LIBS_mmal)
mmal_LTLIBRARIES = libmmal_vout_plugin.la
libmmal_codec_plugin_la_SOURCES = codec.c converter.c subpic.c subpic.h mmal_picture.c mmal_picture.h \
libmmal_codec_plugin_la_SOURCES = codec.c subpic.c subpic.h mmal_picture.c mmal_picture.h \
mmal_cma.c mmal_cma.h
libmmal_codec_plugin_la_CFLAGS = $(AM_CFLAGS)
libmmal_codec_plugin_la_LDFLAGS = $(AM_LDFLAGS)
libmmal_codec_plugin_la_LIBADD = $(LIBS_mmal)
mmal_LTLIBRARIES += libmmal_codec_plugin.la
libmmal_converter_plugin_la_SOURCES = converter.c subpic.c subpic.h mmal_picture.c mmal_picture.h \
mmal_cma.c mmal_cma.h
libmmal_converter_plugin_la_CFLAGS = $(AM_CFLAGS)
libmmal_converter_plugin_la_LDFLAGS = $(AM_LDFLAGS)
libmmal_converter_plugin_la_LIBADD = $(LIBS_mmal)
mmal_LTLIBRARIES += libmmal_converter_plugin.la
libmmal_deinterlace_plugin_la_SOURCES = deinterlace.c mmal_picture.c mmal_picture.h \
mmal_cma.c mmal_cma.h
libmmal_deinterlace_plugin_la_CFLAGS = $(AM_CFLAGS)

18
modules/hw/mmal/codec.c

@ -31,7 +31,6 @@
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_codec.h>
#include <vlc_filter.h>
#include <interface/mmal/mmal.h>
#include <interface/mmal/util/mmal_util.h>
@ -45,12 +44,6 @@
#define NUM_EXTRA_BUFFERS 5
//#define NUM_EXTRA_BUFFERS 10
#define MMAL_RESIZE_TEXT N_("Use mmal resizer rather than hvs.")
#define MMAL_RESIZE_LONGTEXT N_("Use mmal resizer rather than isp. This uses less gpu memory than the ISP but is slower.")
#define MMAL_ISP_TEXT N_("Use mmal isp rather than hvs.")
#define MMAL_ISP_LONGTEXT N_("Use mmal isp rather than Hardware Video Scaler. This may be faster but has no blend.")
static int OpenDecoder(vlc_object_t *);
static void CloseDecoder(vlc_object_t *);
@ -63,17 +56,6 @@ vlc_module_begin()
add_shortcut("mmal_decoder")
add_obsolete_bool("mmal-opaque")
set_callbacks(OpenDecoder, CloseDecoder)
add_submodule()
set_category( CAT_VIDEO )
set_subcategory( SUBCAT_VIDEO_VFILTER )
set_shortname(N_("MMAL resizer"))
set_description(N_("MMAL resizing conversion filter"))
add_shortcut("mmal_converter")
set_capability( "video converter", 900 )
add_bool(MMAL_RESIZE_NAME, /* default */ false, MMAL_RESIZE_TEXT, MMAL_RESIZE_LONGTEXT, /* advanced option */ false)
add_bool(MMAL_ISP_NAME, /* default */ false, MMAL_ISP_TEXT, MMAL_ISP_LONGTEXT, /* advanced option */ false)
set_callbacks(OpenConverter, CloseConverter)
vlc_module_end()
typedef struct

58
modules/hw/mmal/converter.c

@ -31,6 +31,7 @@
#include <vlc_common.h>
#include <vlc_codec.h>
#include <vlc_filter.h>
#include <vlc_plugin.h>
#include <interface/mmal/mmal.h>
#include <interface/mmal/util/mmal_util.h>
@ -40,10 +41,67 @@
#include "subpic.h"
#define MMAL_RESIZE_NAME "mmal-resize"
#define MMAL_RESIZE_TEXT N_("Use mmal resizer rather than hvs.")
#define MMAL_RESIZE_LONGTEXT N_("Use mmal resizer rather than isp. This uses less gpu memory than the ISP but is slower.")
#define MMAL_ISP_NAME "mmal-isp"
#define MMAL_ISP_TEXT N_("Use mmal isp rather than hvs.")
#define MMAL_ISP_LONGTEXT N_("Use mmal isp rather than Hardware Video Scaler. This may be faster but has no blend.")
int OpenConverter(vlc_object_t *);
void CloseConverter(vlc_object_t *);
vlc_module_begin()
add_submodule()
set_category( CAT_VIDEO )
set_subcategory( SUBCAT_VIDEO_VFILTER )
set_shortname(N_("MMAL resizer"))
set_description(N_("MMAL resizing conversion filter"))
add_shortcut("mmal_converter")
set_capability( "video converter", 900 )
add_bool(MMAL_RESIZE_NAME, /* default */ false, MMAL_RESIZE_TEXT, MMAL_RESIZE_LONGTEXT, /* advanced option */ false)
add_bool(MMAL_ISP_NAME, /* default */ false, MMAL_ISP_TEXT, MMAL_ISP_LONGTEXT, /* advanced option */ false)
set_callbacks(OpenConverter, CloseConverter)
vlc_module_end()
#define MMAL_SLICE_HEIGHT 16
#define CONV_MAX_LATENCY 1 // In frames
static MMAL_FOURCC_T pic_to_slice_mmal_fourcc(MMAL_FOURCC_T fcc)
{
switch (fcc){
case MMAL_ENCODING_I420:
return MMAL_ENCODING_I420_SLICE;
case MMAL_ENCODING_I422:
return MMAL_ENCODING_I422_SLICE;
case MMAL_ENCODING_ARGB:
return MMAL_ENCODING_ARGB_SLICE;
case MMAL_ENCODING_RGBA:
return MMAL_ENCODING_RGBA_SLICE;
case MMAL_ENCODING_ABGR:
return MMAL_ENCODING_ABGR_SLICE;
case MMAL_ENCODING_BGRA:
return MMAL_ENCODING_BGRA_SLICE;
case MMAL_ENCODING_RGB16:
return MMAL_ENCODING_RGB16_SLICE;
case MMAL_ENCODING_RGB24:
return MMAL_ENCODING_RGB24_SLICE;
case MMAL_ENCODING_RGB32:
return MMAL_ENCODING_RGB32_SLICE;
case MMAL_ENCODING_BGR16:
return MMAL_ENCODING_BGR16_SLICE;
case MMAL_ENCODING_BGR24:
return MMAL_ENCODING_BGR24_SLICE;
case MMAL_ENCODING_BGR32:
return MMAL_ENCODING_BGR32_SLICE;
default:
break;
}
return 0;
}
typedef struct pic_fifo_s {
picture_t * head;
picture_t * tail;

33
modules/hw/mmal/mmal_picture.c

@ -1206,36 +1206,3 @@ vzc_pool_ctl_t * hw_mmal_vzc_pool_new(bool is_cma)
bool rpi_is_model_pi4(void) {
return bcm_host_is_model_pi4();
}
MMAL_FOURCC_T pic_to_slice_mmal_fourcc(MMAL_FOURCC_T fcc)
{
switch (fcc){
case MMAL_ENCODING_I420:
return MMAL_ENCODING_I420_SLICE;
case MMAL_ENCODING_I422:
return MMAL_ENCODING_I422_SLICE;
case MMAL_ENCODING_ARGB:
return MMAL_ENCODING_ARGB_SLICE;
case MMAL_ENCODING_RGBA:
return MMAL_ENCODING_RGBA_SLICE;
case MMAL_ENCODING_ABGR:
return MMAL_ENCODING_ABGR_SLICE;
case MMAL_ENCODING_BGRA:
return MMAL_ENCODING_BGRA_SLICE;
case MMAL_ENCODING_RGB16:
return MMAL_ENCODING_RGB16_SLICE;
case MMAL_ENCODING_RGB24:
return MMAL_ENCODING_RGB24_SLICE;
case MMAL_ENCODING_RGB32:
return MMAL_ENCODING_RGB32_SLICE;
case MMAL_ENCODING_BGR16:
return MMAL_ENCODING_BGR16_SLICE;
case MMAL_ENCODING_BGR24:
return MMAL_ENCODING_BGR24_SLICE;
case MMAL_ENCODING_BGR32:
return MMAL_ENCODING_BGR32_SLICE;
default:
break;
}
return 0;
}

8
modules/hw/mmal/mmal_picture.h

@ -156,16 +156,8 @@ vzc_pool_ctl_t * hw_mmal_vzc_pool_new(bool is_cma);
#define NUM_DECODER_BUFFER_HEADERS 30
MMAL_FOURCC_T pic_to_slice_mmal_fourcc(MMAL_FOURCC_T);
bool rpi_is_model_pi4(void);
#define MMAL_RESIZE_NAME "mmal-resize"
#define MMAL_ISP_NAME "mmal-isp"
int OpenConverter(vlc_object_t *);
void CloseConverter(vlc_object_t *);
#define MMAL_COMPONENT_DEFAULT_RESIZER "vc.ril.resize"
#define MMAL_COMPONENT_ISP_RESIZER "vc.ril.isp"

Loading…
Cancel
Save