Re: [FFmpeg-devel] [PATCH] mmaldec: Add mpeg2 decoding support
On Wed, 21 Oct 2015 15:54:39 +0200 Julian Scheelwrote: > 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
On Wed, Oct 21, 2015 at 3:54 PM, Julian Scheelwrote: > 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
Am 21.10.2015 um 16:09 schrieb Hendrik Leppkes: On Wed, Oct 21, 2015 at 3:54 PM, Julian Scheelwrote: 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 =