|  |  | @@ -351,7 +351,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_DEBUG, "Use MMAL MP2V encoding\n"); | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case AV_CODEC_ID_H264: | 
		
	
		
			
			|  |  |  | default: | 
		
	
		
			
			|  |  |  | format_in->encoding = MMAL_ENCODING_H264; | 
		
	
		
			
			|  |  |  | av_log(avctx, AV_LOG_DEBUG, "Use MMAL 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; | 
		
	
	
		
			
				|  |  | @@ -760,31 +770,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     = &ffmmaldec_class, | 
		
	
		
			
			|  |  |  | .capabilities   = AV_CODEC_CAP_DELAY, | 
		
	
		
			
			|  |  |  | .caps_internal  = FF_CODEC_CAP_SETS_PKT_DTS, | 
		
	
		
			
			|  |  |  | .pix_fmts       = (const enum AVPixelFormat[]) { AV_PIX_FMT_MMAL, | 
		
	
		
			
			|  |  |  | AV_PIX_FMT_YUV420P, | 
		
	
		
			
			|  |  |  | AV_PIX_FMT_NONE}, | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | #define FFMMAL_DEC_CLASS(NAME) \ | 
		
	
		
			
			|  |  |  | static const AVClass ffmmal_##NAME##_dec_class = { \ | 
		
	
		
			
			|  |  |  | .class_name = "mmal_" #NAME "_dec", \ | 
		
	
		
			
			|  |  |  | .option     = options, \ | 
		
	
		
			
			|  |  |  | .version    = LIBAVUTIL_VERSION_INT, \ | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | #define FFMMAL_DEC(NAME, ID) \ | 
		
	
		
			
			|  |  |  | FFMMAL_DEC_CLASS(NAME) \ | 
		
	
		
			
			|  |  |  | AVCodec ff_##NAME##_mmal_decoder = { \ | 
		
	
		
			
			|  |  |  | .name           = #NAME "_mmal", \ | 
		
	
		
			
			|  |  |  | .long_name      = NULL_IF_CONFIG_SMALL(#NAME " (mmal)"), \ | 
		
	
		
			
			|  |  |  | .type           = AVMEDIA_TYPE_VIDEO, \ | 
		
	
		
			
			|  |  |  | .id             = ID, \ | 
		
	
		
			
			|  |  |  | .priv_data_size = sizeof(MMALDecodeContext), \ | 
		
	
		
			
			|  |  |  | .init           = ffmmal_init_decoder, \ | 
		
	
		
			
			|  |  |  | .close          = ffmmal_close_decoder, \ | 
		
	
		
			
			|  |  |  | .decode         = ffmmal_decode, \ | 
		
	
		
			
			|  |  |  | .flush          = ffmmal_flush, \ | 
		
	
		
			
			|  |  |  | .priv_class     = &ffmmal_##NAME##_dec_class, \ | 
		
	
		
			
			|  |  |  | .capabilities   = AV_CODEC_CAP_DELAY, \ | 
		
	
		
			
			|  |  |  | .caps_internal  = FF_CODEC_CAP_SETS_PKT_DTS, \ | 
		
	
		
			
			|  |  |  | .pix_fmts       = (const enum AVPixelFormat[]) { AV_PIX_FMT_MMAL, \ | 
		
	
		
			
			|  |  |  | AV_PIX_FMT_YUV420P, \ | 
		
	
		
			
			|  |  |  | AV_PIX_FMT_NONE}, \ | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | FFMMAL_DEC(h264, AV_CODEC_ID_H264) | 
		
	
		
			
			|  |  |  | FFMMAL_DEC(mpeg2, AV_CODEC_ID_MPEG2VIDEO) |