FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions | Variables
mmaldec.c File Reference

MMAL Video Decoder. More...

#include <bcm_host.h>
#include <interface/mmal/mmal.h>
#include <interface/mmal/util/mmal_util.h>
#include <interface/mmal/util/mmal_util_params.h>
#include <interface/mmal/util/mmal_default_components.h>
#include <interface/mmal/vc/mmal_vc_api.h>
#include "avcodec.h"
#include "internal.h"
#include "libavutil/atomic.h"
#include "libavutil/avassert.h"
#include "libavutil/buffer.h"
#include "libavutil/common.h"
#include "libavutil/opt.h"
#include "libavutil/log.h"

Go to the source code of this file.

Data Structures

struct  FFBufferEntry
 
struct  FFPoolRef
 
struct  FFBufferRef
 
struct  MMALDecodeContext
 

Macros

#define MAX_DELAYED_FRAMES   16
 

Functions

static void ffmmal_poolref_unref (FFPoolRef *ref)
 
static void ffmmal_release_frame (void *opaque, uint8_t *data)
 
static int ffmmal_set_ref (AVFrame *frame, FFPoolRef *pool, MMAL_BUFFER_HEADER_T *buffer)
 
static void ffmmal_stop_decoder (AVCodecContext *avctx)
 
static av_cold int ffmmal_close_decoder (AVCodecContext *avctx)
 
static void input_callback (MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer)
 
static void output_callback (MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer)
 
static void control_port_cb (MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer)
 
static int ffmmal_fill_output_port (AVCodecContext *avctx)
 
static enum AVColorSpace ffmmal_csp_to_av_csp (MMAL_FOURCC_T fourcc)
 
static int ffmal_update_format (AVCodecContext *avctx)
 
static av_cold int ffmmal_init_decoder (AVCodecContext *avctx)
 
static void ffmmal_flush (AVCodecContext *avctx)
 
static int ffmmal_add_packet (AVCodecContext *avctx, AVPacket *avpkt)
 
static int ffmmal_fill_input_port (AVCodecContext *avctx)
 
static int ffmal_copy_frame (AVCodecContext *avctx, AVFrame *frame, MMAL_BUFFER_HEADER_T *buffer)
 
static int ffmmal_read_frame (AVCodecContext *avctx, AVFrame *frame, int *got_frame)
 
static int ffmmal_decode (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 

Variables

AVHWAccel ff_h264_mmal_hwaccel
 
static const AVOption options []
 
static const AVClass ffmmaldec_class
 
AVCodec ff_h264_mmal_decoder
 

Detailed Description

MMAL Video Decoder.

Definition in file mmaldec.c.

Macro Definition Documentation

#define MAX_DELAYED_FRAMES   16

Definition at line 92 of file mmaldec.c.

Referenced by ffmmal_read_frame().

Function Documentation

static void ffmmal_poolref_unref ( FFPoolRef ref)
static

Definition at line 94 of file mmaldec.c.

Referenced by ffmal_update_format(), ffmmal_close_decoder(), and ffmmal_release_frame().

static void ffmmal_release_frame ( void opaque,
uint8_t data 
)
static

Definition at line 102 of file mmaldec.c.

Referenced by ffmmal_set_ref().

static int ffmmal_set_ref ( AVFrame frame,
FFPoolRef pool,
MMAL_BUFFER_HEADER_T *  buffer 
)
static

Definition at line 114 of file mmaldec.c.

Referenced by ffmal_copy_frame().

static void ffmmal_stop_decoder ( AVCodecContext avctx)
static

Definition at line 140 of file mmaldec.c.

Referenced by ffmmal_close_decoder(), and ffmmal_flush().

static av_cold int ffmmal_close_decoder ( AVCodecContext avctx)
static

Definition at line 170 of file mmaldec.c.

Referenced by ffmmal_init_decoder().

static void input_callback ( MMAL_PORT_T *  port,
MMAL_BUFFER_HEADER_T *  buffer 
)
static

Definition at line 191 of file mmaldec.c.

Referenced by ffmmal_flush(), and ffmmal_init_decoder().

static void output_callback ( MMAL_PORT_T *  port,
MMAL_BUFFER_HEADER_T *  buffer 
)
static

Definition at line 200 of file mmaldec.c.

Referenced by ffmmal_flush(), ffmmal_init_decoder(), and ffmmal_read_frame().

static void control_port_cb ( MMAL_PORT_T *  port,
MMAL_BUFFER_HEADER_T *  buffer 
)
static

Definition at line 208 of file mmaldec.c.

Referenced by ffmmal_flush(), and ffmmal_init_decoder().

static int ffmmal_fill_output_port ( AVCodecContext avctx)
static

Definition at line 226 of file mmaldec.c.

Referenced by ffmmal_decode(), and ffmmal_read_frame().

static enum AVColorSpace ffmmal_csp_to_av_csp ( MMAL_FOURCC_T  fourcc)
static

Definition at line 246 of file mmaldec.c.

Referenced by ffmal_update_format().

static int ffmal_update_format ( AVCodecContext avctx)
static

Definition at line 259 of file mmaldec.c.

Referenced by ffmmal_init_decoder(), and ffmmal_read_frame().

static av_cold int ffmmal_init_decoder ( AVCodecContext avctx)
static

Definition at line 317 of file mmaldec.c.

static void ffmmal_flush ( AVCodecContext avctx)
static

Definition at line 415 of file mmaldec.c.

static int ffmmal_add_packet ( AVCodecContext avctx,
AVPacket avpkt 
)
static

Definition at line 441 of file mmaldec.c.

Referenced by ffmmal_decode().

static int ffmmal_fill_input_port ( AVCodecContext avctx)
static

Definition at line 531 of file mmaldec.c.

Referenced by ffmmal_decode(), and ffmmal_read_frame().

static int ffmal_copy_frame ( AVCodecContext avctx,
AVFrame frame,
MMAL_BUFFER_HEADER_T *  buffer 
)
static

Definition at line 576 of file mmaldec.c.

Referenced by ffmmal_read_frame().

static int ffmmal_read_frame ( AVCodecContext avctx,
AVFrame frame,
int *  got_frame 
)
static

Definition at line 624 of file mmaldec.c.

Referenced by ffmmal_decode().

static int ffmmal_decode ( AVCodecContext avctx,
void data,
int *  got_frame,
AVPacket avpkt 
)
static

Definition at line 715 of file mmaldec.c.

Variable Documentation

AVHWAccel ff_h264_mmal_hwaccel
Initial value:
= {
.name = "h264_mmal",
.pix_fmt = AV_PIX_FMT_MMAL,
}
HW acceleration though MMAL, data[3] contains a pointer to the MMAL_BUFFER_HEADER_T structure...
Definition: pixfmt.h:254

Definition at line 745 of file mmaldec.c.

const AVOption options[]
static
Initial value:
={
{"extra_buffers", "extra buffers", 0x42, AV_OPT_TYPE_INT, {.i64 = 10}, 0, 256, 0},
{NULL}
}
#define NULL
Definition: coverity.c:32

Definition at line 752 of file mmaldec.c.

const AVClass ffmmaldec_class
static
Initial value:
= {
.class_name = "mmaldec",
.option = options,
}
#define LIBAVUTIL_VERSION_INT
Definition: version.h:62
static const AVOption options[]
Definition: mmaldec.c:752

Definition at line 757 of file mmaldec.c.

AVCodec ff_h264_mmal_decoder
Initial value:
= {
.name = "h264_mmal",
.long_name = NULL_IF_CONFIG_SMALL("h264 (mmal)"),
.priv_data_size = sizeof(MMALDecodeContext),
.priv_class = &ffmmaldec_class,
.capabilities = CODEC_CAP_DELAY,
.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_MMAL,
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static int ffmmal_decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: mmaldec.c:715
static void ffmmal_flush(AVCodecContext *avctx)
Definition: mmaldec.c:415
static av_cold int ffmmal_init_decoder(AVCodecContext *avctx)
Definition: mmaldec.c:317
static av_cold int ffmmal_close_decoder(AVCodecContext *avctx)
Definition: mmaldec.c:170
#define CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: avcodec.h:824
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:175
static const AVClass ffmmaldec_class
Definition: mmaldec.c:757
static void flush(AVCodecContext *avctx)
Definition: aacdec.c:514
static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avpkt)
Definition: ccaption_dec.c:522
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:63
HW acceleration though MMAL, data[3] contains a pointer to the MMAL_BUFFER_HEADER_T structure...
Definition: pixfmt.h:254
AVPixelFormat
Pixel format.
Definition: pixfmt.h:61

Definition at line 763 of file mmaldec.c.