Re: [FFmpeg-devel] [PATCH] mmaldec: Add mpeg2 decoding support

2015-10-21 Thread wm4
On Wed, 21 Oct 2015 15:54:39 +0200
Julian Scheel  wrote:

> Register mmaldec as mpeg2 decoder. Supporting mpeg2 in mmaldec is just a
> matter of setting the correct MMAL_ENCODING on the input port. To ease the
> addition of further supported mmal codecs a macro is introduced to generate
> the decoder and decoder class structs.
> 
> Signed-off-by: Julian Scheel 
> ---
>  configure  |  3 +++
>  libavcodec/Makefile|  1 +
>  libavcodec/allcodecs.c |  2 ++
>  libavcodec/mmaldec.c   | 71 
> +-
>  4 files changed, 53 insertions(+), 24 deletions(-)
> 
> diff --git a/configure b/configure
> index 1bbaf7f..a38b290 100755
> --- a/configure
> +++ b/configure
> @@ -2481,6 +2481,9 @@ mpeg2_d3d11va_hwaccel_deps="d3d11va"
>  mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
>  mpeg2_dxva2_hwaccel_deps="dxva2"
>  mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
> +mpeg2_mmal_decoder_deps="mmal"
> +mpeg2_mmal_hwaccel_deps="mmal"
> +mpeg2_mmal_decoder_select="mpeg2video_decoder"
>  mpeg2_qsv_hwaccel_deps="libmfx"
>  mpeg2_qsv_hwaccel_select="qsvdec_mpeg2"
>  mpeg2_vaapi_hwaccel_deps="vaapi"
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index af93f8a..f85fc18 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -370,6 +370,7 @@ OBJS-$(CONFIG_MPEG1VIDEO_DECODER)  += mpeg12dec.o 
> mpeg12.o mpeg12data.o
>  OBJS-$(CONFIG_MPEG1VIDEO_ENCODER)  += mpeg12enc.o mpeg12.o
>  OBJS-$(CONFIG_MPEG2VIDEO_DECODER)  += mpeg12dec.o mpeg12.o mpeg12data.o
>  OBJS-$(CONFIG_MPEG2VIDEO_ENCODER)  += mpeg12enc.o mpeg12.o
> +OBJS-$(CONFIG_MPEG2_MMAL_DECODER)  += mmaldec.o
>  OBJS-$(CONFIG_MPEG2_QSV_DECODER)   += qsvdec_mpeg2.o
>  OBJS-$(CONFIG_MPEG2_QSV_ENCODER)   += qsvenc_mpeg2.o
>  OBJS-$(CONFIG_MPEG4_DECODER)   += xvididct.o
> diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
> index d62bec7..7279620 100644
> --- a/libavcodec/allcodecs.c
> +++ b/libavcodec/allcodecs.c
> @@ -97,6 +97,7 @@ void avcodec_register_all(void)
>  REGISTER_HWACCEL(MPEG2_XVMC,mpeg2_xvmc);
>  REGISTER_HWACCEL(MPEG2_D3D11VA, mpeg2_d3d11va);
>  REGISTER_HWACCEL(MPEG2_DXVA2,   mpeg2_dxva2);
> +REGISTER_HWACCEL(MPEG2_MMAL,mpeg2_mmal);
>  REGISTER_HWACCEL(MPEG2_QSV, mpeg2_qsv);
>  REGISTER_HWACCEL(MPEG2_VAAPI,   mpeg2_vaapi);
>  REGISTER_HWACCEL(MPEG2_VDPAU,   mpeg2_vdpau);
> @@ -238,6 +239,7 @@ void avcodec_register_all(void)
>  REGISTER_DECODER(MPEG_VDPAU,mpeg_vdpau);
>  REGISTER_DECODER(MPEG1_VDPAU,   mpeg1_vdpau);
>  #endif
> +REGISTER_DECODER(MPEG2_MMAL,mpeg2_mmal);
>  REGISTER_DECODER(MPEG2_CRYSTALHD,   mpeg2_crystalhd);
>  REGISTER_DECODER(MPEG2_QSV, mpeg2_qsv);
>  REGISTER_DECODER(MSA1,  msa1);
> diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c
> index 13cc191..7db90d2 100644
> --- a/libavcodec/mmaldec.c
> +++ b/libavcodec/mmaldec.c
> @@ -350,7 +350,17 @@ static av_cold int ffmmal_init_decoder(AVCodecContext 
> *avctx)
>  
>  format_in = decoder->input[0]->format;
>  format_in->type = MMAL_ES_TYPE_VIDEO;
> -format_in->encoding = MMAL_ENCODING_H264;
> +switch (avctx->codec_id) {
> +case AV_CODEC_ID_MPEG2VIDEO:
> +format_in->encoding = MMAL_ENCODING_MP2V;
> +av_log(avctx, AV_LOG_ERROR, "Use MP2V encoding!\n");
> +break;
> +case AV_CODEC_ID_H264:
> +default:
> +format_in->encoding = MMAL_ENCODING_H264;
> +av_log(avctx, AV_LOG_ERROR, "Use H264 encoding!\n");
> +break;
> +}
>  format_in->es->video.width = FFALIGN(avctx->width, 32);
>  format_in->es->video.height = FFALIGN(avctx->height, 16);
>  format_in->es->video.crop.width = avctx->width;
> @@ -766,31 +776,44 @@ AVHWAccel ff_h264_mmal_hwaccel = {
>  .pix_fmt= AV_PIX_FMT_MMAL,
>  };
>  
> +AVHWAccel ff_mpeg2_mmal_hwaccel = {
> +.name   = "mpeg2_mmal",
> +.type   = AVMEDIA_TYPE_VIDEO,
> +.id = AV_CODEC_ID_MPEG2VIDEO,
> +.pix_fmt= AV_PIX_FMT_MMAL,
> +};
> +
>  static const AVOption options[]={
>  {"extra_buffers", "extra buffers", offsetof(MMALDecodeContext, 
> extra_buffers), AV_OPT_TYPE_INT, {.i64 = 10}, 0, 256, 0},
>  {NULL}
>  };
>  
> -static const AVClass ffmmaldec_class = {
> -.class_name = "mmaldec",
> -.option = options,
> -.version= LIBAVUTIL_VERSION_INT,
> -};
> -
> -AVCodec ff_h264_mmal_decoder = {
> -.name   = "h264_mmal",
> -.long_name  = NULL_IF_CONFIG_SMALL("h264 (mmal)"),
> -.type   = AVMEDIA_TYPE_VIDEO,
> -.id = AV_CODEC_ID_H264,
> -.priv_data_size = sizeof(MMALDecodeContext),
> -.init   = ffmmal_init_decoder,
> -.close  = ffmmal_close_decoder,
> -.decode = ffmmal_decode,
> -.flush  = ffmmal_flush,
> -

Re: [FFmpeg-devel] [PATCH] mmaldec: Add mpeg2 decoding support

2015-10-21 Thread Hendrik Leppkes
On Wed, Oct 21, 2015 at 3:54 PM, Julian Scheel  wrote:
> Register mmaldec as mpeg2 decoder. Supporting mpeg2 in mmaldec is just a
> matter of setting the correct MMAL_ENCODING on the input port. To ease the
> addition of further supported mmal codecs a macro is introduced to generate
> the decoder and decoder class structs.
>
> Signed-off-by: Julian Scheel 
> ---
>  configure  |  3 +++
>  libavcodec/Makefile|  1 +
>  libavcodec/allcodecs.c |  2 ++
>  libavcodec/mmaldec.c   | 71 
> +-
>  4 files changed, 53 insertions(+), 24 deletions(-)
>
> diff --git a/configure b/configure
> index 1bbaf7f..a38b290 100755
> --- a/configure
> +++ b/configure
> @@ -2481,6 +2481,9 @@ mpeg2_d3d11va_hwaccel_deps="d3d11va"
>  mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
>  mpeg2_dxva2_hwaccel_deps="dxva2"
>  mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
> +mpeg2_mmal_decoder_deps="mmal"
> +mpeg2_mmal_hwaccel_deps="mmal"
> +mpeg2_mmal_decoder_select="mpeg2video_decoder"
>  mpeg2_qsv_hwaccel_deps="libmfx"
>  mpeg2_qsv_hwaccel_select="qsvdec_mpeg2"
>  mpeg2_vaapi_hwaccel_deps="vaapi"
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index af93f8a..f85fc18 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -370,6 +370,7 @@ OBJS-$(CONFIG_MPEG1VIDEO_DECODER)  += mpeg12dec.o 
> mpeg12.o mpeg12data.o
>  OBJS-$(CONFIG_MPEG1VIDEO_ENCODER)  += mpeg12enc.o mpeg12.o
>  OBJS-$(CONFIG_MPEG2VIDEO_DECODER)  += mpeg12dec.o mpeg12.o mpeg12data.o
>  OBJS-$(CONFIG_MPEG2VIDEO_ENCODER)  += mpeg12enc.o mpeg12.o
> +OBJS-$(CONFIG_MPEG2_MMAL_DECODER)  += mmaldec.o
>  OBJS-$(CONFIG_MPEG2_QSV_DECODER)   += qsvdec_mpeg2.o
>  OBJS-$(CONFIG_MPEG2_QSV_ENCODER)   += qsvenc_mpeg2.o
>  OBJS-$(CONFIG_MPEG4_DECODER)   += xvididct.o
> diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
> index d62bec7..7279620 100644
> --- a/libavcodec/allcodecs.c
> +++ b/libavcodec/allcodecs.c
> @@ -97,6 +97,7 @@ void avcodec_register_all(void)
>  REGISTER_HWACCEL(MPEG2_XVMC,mpeg2_xvmc);
>  REGISTER_HWACCEL(MPEG2_D3D11VA, mpeg2_d3d11va);
>  REGISTER_HWACCEL(MPEG2_DXVA2,   mpeg2_dxva2);
> +REGISTER_HWACCEL(MPEG2_MMAL,mpeg2_mmal);
>  REGISTER_HWACCEL(MPEG2_QSV, mpeg2_qsv);
>  REGISTER_HWACCEL(MPEG2_VAAPI,   mpeg2_vaapi);
>  REGISTER_HWACCEL(MPEG2_VDPAU,   mpeg2_vdpau);
> @@ -238,6 +239,7 @@ void avcodec_register_all(void)
>  REGISTER_DECODER(MPEG_VDPAU,mpeg_vdpau);
>  REGISTER_DECODER(MPEG1_VDPAU,   mpeg1_vdpau);
>  #endif
> +REGISTER_DECODER(MPEG2_MMAL,mpeg2_mmal);
>  REGISTER_DECODER(MPEG2_CRYSTALHD,   mpeg2_crystalhd);
>  REGISTER_DECODER(MPEG2_QSV, mpeg2_qsv);
>  REGISTER_DECODER(MSA1,  msa1);
> diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c
> index 13cc191..7db90d2 100644
> --- a/libavcodec/mmaldec.c
> +++ b/libavcodec/mmaldec.c
> @@ -350,7 +350,17 @@ static av_cold int ffmmal_init_decoder(AVCodecContext 
> *avctx)
>
>  format_in = decoder->input[0]->format;
>  format_in->type = MMAL_ES_TYPE_VIDEO;
> -format_in->encoding = MMAL_ENCODING_H264;
> +switch (avctx->codec_id) {
> +case AV_CODEC_ID_MPEG2VIDEO:
> +format_in->encoding = MMAL_ENCODING_MP2V;
> +av_log(avctx, AV_LOG_ERROR, "Use MP2V encoding!\n");
> +break;
> +case AV_CODEC_ID_H264:
> +default:
> +format_in->encoding = MMAL_ENCODING_H264;
> +av_log(avctx, AV_LOG_ERROR, "Use H264 encoding!\n");
> +break;
> +}

These log messages are probably not meant to be in there anymore, not
as error anyway? :)

>  format_in->es->video.width = FFALIGN(avctx->width, 32);
>  format_in->es->video.height = FFALIGN(avctx->height, 16);
>  format_in->es->video.crop.width = avctx->width;
> @@ -766,31 +776,44 @@ AVHWAccel ff_h264_mmal_hwaccel = {
>  .pix_fmt= AV_PIX_FMT_MMAL,
>  };
>
> +AVHWAccel ff_mpeg2_mmal_hwaccel = {
> +.name   = "mpeg2_mmal",
> +.type   = AVMEDIA_TYPE_VIDEO,
> +.id = AV_CODEC_ID_MPEG2VIDEO,
> +.pix_fmt= AV_PIX_FMT_MMAL,
> +};
> +
>  static const AVOption options[]={
>  {"extra_buffers", "extra buffers", offsetof(MMALDecodeContext, 
> extra_buffers), AV_OPT_TYPE_INT, {.i64 = 10}, 0, 256, 0},
>  {NULL}
>  };
>
> -static const AVClass ffmmaldec_class = {
> -.class_name = "mmaldec",
> -.option = options,
> -.version= LIBAVUTIL_VERSION_INT,
> -};
> -
> -AVCodec ff_h264_mmal_decoder = {
> -.name   = "h264_mmal",
> -.long_name  = NULL_IF_CONFIG_SMALL("h264 (mmal)"),
> -.type   = AVMEDIA_TYPE_VIDEO,
> -.id = AV_CODEC_ID_H264,
> -.priv_data_size = sizeof(MMALDecodeContext),
> -.init   = ffmmal_init_decoder,
> -.close  = ffmmal_close_decoder,
> -

Re: [FFmpeg-devel] [PATCH] mmaldec: Add mpeg2 decoding support

2015-10-21 Thread Julian Scheel

Am 21.10.2015 um 16:09 schrieb Hendrik Leppkes:

On Wed, Oct 21, 2015 at 3:54 PM, Julian Scheel  wrote:

Register mmaldec as mpeg2 decoder. Supporting mpeg2 in mmaldec is just a
matter of setting the correct MMAL_ENCODING on the input port. To ease the
addition of further supported mmal codecs a macro is introduced to generate
the decoder and decoder class structs.

Signed-off-by: Julian Scheel 
---
  configure  |  3 +++
  libavcodec/Makefile|  1 +
  libavcodec/allcodecs.c |  2 ++
  libavcodec/mmaldec.c   | 71 +-
  4 files changed, 53 insertions(+), 24 deletions(-)

diff --git a/configure b/configure
index 1bbaf7f..a38b290 100755
--- a/configure
+++ b/configure
@@ -2481,6 +2481,9 @@ mpeg2_d3d11va_hwaccel_deps="d3d11va"
  mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
  mpeg2_dxva2_hwaccel_deps="dxva2"
  mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
+mpeg2_mmal_decoder_deps="mmal"
+mpeg2_mmal_hwaccel_deps="mmal"
+mpeg2_mmal_decoder_select="mpeg2video_decoder"
  mpeg2_qsv_hwaccel_deps="libmfx"
  mpeg2_qsv_hwaccel_select="qsvdec_mpeg2"
  mpeg2_vaapi_hwaccel_deps="vaapi"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index af93f8a..f85fc18 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -370,6 +370,7 @@ OBJS-$(CONFIG_MPEG1VIDEO_DECODER)  += mpeg12dec.o 
mpeg12.o mpeg12data.o
  OBJS-$(CONFIG_MPEG1VIDEO_ENCODER)  += mpeg12enc.o mpeg12.o
  OBJS-$(CONFIG_MPEG2VIDEO_DECODER)  += mpeg12dec.o mpeg12.o mpeg12data.o
  OBJS-$(CONFIG_MPEG2VIDEO_ENCODER)  += mpeg12enc.o mpeg12.o
+OBJS-$(CONFIG_MPEG2_MMAL_DECODER)  += mmaldec.o
  OBJS-$(CONFIG_MPEG2_QSV_DECODER)   += qsvdec_mpeg2.o
  OBJS-$(CONFIG_MPEG2_QSV_ENCODER)   += qsvenc_mpeg2.o
  OBJS-$(CONFIG_MPEG4_DECODER)   += xvididct.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index d62bec7..7279620 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -97,6 +97,7 @@ void avcodec_register_all(void)
  REGISTER_HWACCEL(MPEG2_XVMC,mpeg2_xvmc);
  REGISTER_HWACCEL(MPEG2_D3D11VA, mpeg2_d3d11va);
  REGISTER_HWACCEL(MPEG2_DXVA2,   mpeg2_dxva2);
+REGISTER_HWACCEL(MPEG2_MMAL,mpeg2_mmal);
  REGISTER_HWACCEL(MPEG2_QSV, mpeg2_qsv);
  REGISTER_HWACCEL(MPEG2_VAAPI,   mpeg2_vaapi);
  REGISTER_HWACCEL(MPEG2_VDPAU,   mpeg2_vdpau);
@@ -238,6 +239,7 @@ void avcodec_register_all(void)
  REGISTER_DECODER(MPEG_VDPAU,mpeg_vdpau);
  REGISTER_DECODER(MPEG1_VDPAU,   mpeg1_vdpau);
  #endif
+REGISTER_DECODER(MPEG2_MMAL,mpeg2_mmal);
  REGISTER_DECODER(MPEG2_CRYSTALHD,   mpeg2_crystalhd);
  REGISTER_DECODER(MPEG2_QSV, mpeg2_qsv);
  REGISTER_DECODER(MSA1,  msa1);
diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c
index 13cc191..7db90d2 100644
--- a/libavcodec/mmaldec.c
+++ b/libavcodec/mmaldec.c
@@ -350,7 +350,17 @@ static av_cold int ffmmal_init_decoder(AVCodecContext 
*avctx)

  format_in = decoder->input[0]->format;
  format_in->type = MMAL_ES_TYPE_VIDEO;
-format_in->encoding = MMAL_ENCODING_H264;
+switch (avctx->codec_id) {
+case AV_CODEC_ID_MPEG2VIDEO:
+format_in->encoding = MMAL_ENCODING_MP2V;
+av_log(avctx, AV_LOG_ERROR, "Use MP2V encoding!\n");
+break;
+case AV_CODEC_ID_H264:
+default:
+format_in->encoding = MMAL_ENCODING_H264;
+av_log(avctx, AV_LOG_ERROR, "Use H264 encoding!\n");
+break;
+}


These log messages are probably not meant to be in there anymore, not
as error anyway? :)


Gah, you're right of course. I'll send v2.


  format_in->es->video.width = FFALIGN(avctx->width, 32);
  format_in->es->video.height = FFALIGN(avctx->height, 16);
  format_in->es->video.crop.width = avctx->width;
@@ -766,31 +776,44 @@ AVHWAccel ff_h264_mmal_hwaccel = {
  .pix_fmt= AV_PIX_FMT_MMAL,
  };

+AVHWAccel ff_mpeg2_mmal_hwaccel = {
+.name   = "mpeg2_mmal",
+.type   = AVMEDIA_TYPE_VIDEO,
+.id = AV_CODEC_ID_MPEG2VIDEO,
+.pix_fmt= AV_PIX_FMT_MMAL,
+};
+
  static const AVOption options[]={
  {"extra_buffers", "extra buffers", offsetof(MMALDecodeContext, 
extra_buffers), AV_OPT_TYPE_INT, {.i64 = 10}, 0, 256, 0},
  {NULL}
  };

-static const AVClass ffmmaldec_class = {
-.class_name = "mmaldec",
-.option = options,
-.version= LIBAVUTIL_VERSION_INT,
-};
-
-AVCodec ff_h264_mmal_decoder = {
-.name   = "h264_mmal",
-.long_name  = NULL_IF_CONFIG_SMALL("h264 (mmal)"),
-.type   = AVMEDIA_TYPE_VIDEO,
-.id = AV_CODEC_ID_H264,
-.priv_data_size = sizeof(MMALDecodeContext),
-.init   = ffmmal_init_decoder,
-.close  = ffmmal_close_decoder,
-.decode = ffmmal_decode,
-.flush  = ffmmal_flush,
-.priv_class =