FFmpeg
Data Structures | Macros | Functions | Variables
rkmppdec.c File Reference
#include <drm_fourcc.h>
#include <pthread.h>
#include <rockchip/mpp_buffer.h>
#include <rockchip/rk_mpi.h>
#include <time.h>
#include <unistd.h>
#include "avcodec.h"
#include "codec_internal.h"
#include "decode.h"
#include "hwconfig.h"
#include "libavutil/buffer.h"
#include "libavutil/common.h"
#include "libavutil/frame.h"
#include "libavutil/hwcontext.h"
#include "libavutil/hwcontext_drm.h"
#include "libavutil/imgutils.h"
#include "libavutil/log.h"

Go to the source code of this file.

Data Structures

struct  RKMPPDecoder
 
struct  RKMPPDecodeContext
 
struct  RKMPPFrameContext
 

Macros

#define RECEIVE_FRAME_TIMEOUT   100
 
#define FRAMEGROUP_MAX_FRAMES   16
 
#define INPUT_MAX_PACKETS   4
 
#define RKMPP_DEC_CLASS(NAME)
 
#define RKMPP_DEC(NAME, ID, BSFS)
 

Functions

static MppCodingType rkmpp_get_codingtype (AVCodecContext *avctx)
 
static uint32_t rkmpp_get_frameformat (MppFrameFormat mppformat)
 
static int rkmpp_write_data (AVCodecContext *avctx, uint8_t *buffer, int size, int64_t pts)
 
static int rkmpp_close_decoder (AVCodecContext *avctx)
 
static void rkmpp_release_decoder (void *opaque, uint8_t *data)
 
static int rkmpp_init_decoder (AVCodecContext *avctx)
 
static int rkmpp_send_packet (AVCodecContext *avctx, const AVPacket *avpkt)
 
static void rkmpp_release_frame (void *opaque, uint8_t *data)
 
static int rkmpp_retrieve_frame (AVCodecContext *avctx, AVFrame *frame)
 
static int rkmpp_receive_frame (AVCodecContext *avctx, AVFrame *frame)
 
static void rkmpp_flush (AVCodecContext *avctx)
 

Variables

static const AVCodecHWConfigInternal *const rkmpp_hw_configs []
 

Macro Definition Documentation

◆ RECEIVE_FRAME_TIMEOUT

#define RECEIVE_FRAME_TIMEOUT   100

Definition at line 41 of file rkmppdec.c.

◆ FRAMEGROUP_MAX_FRAMES

#define FRAMEGROUP_MAX_FRAMES   16

Definition at line 42 of file rkmppdec.c.

◆ INPUT_MAX_PACKETS

#define INPUT_MAX_PACKETS   4

Definition at line 43 of file rkmppdec.c.

◆ RKMPP_DEC_CLASS

#define RKMPP_DEC_CLASS (   NAME)
Value:
static const AVClass rkmpp_##NAME##_dec_class = { \
.class_name = "rkmpp_" #NAME "_dec", \
.version = LIBAVUTIL_VERSION_INT, \
};

Definition at line 556 of file rkmppdec.c.

◆ RKMPP_DEC

#define RKMPP_DEC (   NAME,
  ID,
  BSFS 
)
Value:
const FFCodec ff_##NAME##_rkmpp_decoder = { \
.p.name = #NAME "_rkmpp", \
.p.long_name = NULL_IF_CONFIG_SMALL(#NAME " (rkmpp)"), \
.p.type = AVMEDIA_TYPE_VIDEO, \
.p.id = ID, \
.priv_data_size = sizeof(RKMPPDecodeContext), \
.close = rkmpp_close_decoder, \
.flush = rkmpp_flush, \
.p.priv_class = &rkmpp_##NAME##_dec_class, \
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_DRM_PRIME, \
AV_PIX_FMT_NONE}, \
.hw_configs = rkmpp_hw_configs, \
.bsfs = BSFS, \
.p.wrapper_name = "rkmpp", \
};

Definition at line 562 of file rkmppdec.c.

Function Documentation

◆ rkmpp_get_codingtype()

static MppCodingType rkmpp_get_codingtype ( AVCodecContext avctx)
static

Definition at line 67 of file rkmppdec.c.

Referenced by rkmpp_init_decoder().

◆ rkmpp_get_frameformat()

static uint32_t rkmpp_get_frameformat ( MppFrameFormat  mppformat)
static

Definition at line 78 of file rkmppdec.c.

Referenced by rkmpp_retrieve_frame().

◆ rkmpp_write_data()

static int rkmpp_write_data ( AVCodecContext avctx,
uint8_t *  buffer,
int  size,
int64_t  pts 
)
static

Definition at line 89 of file rkmppdec.c.

Referenced by rkmpp_send_packet().

◆ rkmpp_close_decoder()

static int rkmpp_close_decoder ( AVCodecContext avctx)
static

Definition at line 124 of file rkmppdec.c.

Referenced by rkmpp_init_decoder().

◆ rkmpp_release_decoder()

static void rkmpp_release_decoder ( void *  opaque,
uint8_t *  data 
)
static

Definition at line 131 of file rkmppdec.c.

Referenced by rkmpp_init_decoder().

◆ rkmpp_init_decoder()

static int rkmpp_init_decoder ( AVCodecContext avctx)
static

Definition at line 152 of file rkmppdec.c.

◆ rkmpp_send_packet()

static int rkmpp_send_packet ( AVCodecContext avctx,
const AVPacket avpkt 
)
static

Definition at line 269 of file rkmppdec.c.

◆ rkmpp_release_frame()

static void rkmpp_release_frame ( void *  opaque,
uint8_t *  data 
)
static

Definition at line 307 of file rkmppdec.c.

Referenced by rkmpp_retrieve_frame().

◆ rkmpp_retrieve_frame()

static int rkmpp_retrieve_frame ( AVCodecContext avctx,
AVFrame frame 
)
static

Definition at line 320 of file rkmppdec.c.

◆ rkmpp_receive_frame()

static int rkmpp_receive_frame ( AVCodecContext avctx,
AVFrame frame 
)
static

Definition at line 496 of file rkmppdec.c.

◆ rkmpp_flush()

static void rkmpp_flush ( AVCodecContext avctx)
static

Definition at line 536 of file rkmppdec.c.

Variable Documentation

◆ rkmpp_hw_configs

const AVCodecHWConfigInternal* const rkmpp_hw_configs[]
static
Initial value:
= {
HW_CONFIG_INTERNAL(DRM_PRIME),
}

Definition at line 551 of file rkmppdec.c.

AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
AV_CODEC_CAP_HARDWARE
#define AV_CODEC_CAP_HARDWARE
Codec is backed by a hardware implementation.
Definition: codec.h:162
rkmpp_init_decoder
static int rkmpp_init_decoder(AVCodecContext *avctx)
Definition: rkmppdec.c:152
AV_PIX_FMT_DRM_PRIME
@ AV_PIX_FMT_DRM_PRIME
DRM-managed buffers exposed through PRIME buffer sharing.
Definition: pixfmt.h:320
FFCodec
Definition: codec_internal.h:112
init
static int init
Definition: av_tx.c:47
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:116
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:66
NULL
#define NULL
Definition: coverity.c:32
rkmpp_close_decoder
static int rkmpp_close_decoder(AVCodecContext *avctx)
Definition: rkmppdec.c:124
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:117
rkmpp_receive_frame
static int rkmpp_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Definition: rkmppdec.c:496
HW_CONFIG_INTERNAL
#define HW_CONFIG_INTERNAL(format)
Definition: hwconfig.h:57
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:203
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:71
FF_CODEC_RECEIVE_FRAME_CB
#define FF_CODEC_RECEIVE_FRAME_CB(func)
Definition: codec_internal.h:260
AV_CODEC_CAP_DELAY
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: codec.h:82
RKMPPDecodeContext
Definition: rkmppdec.c:57
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
ID
#define ID(x)
Definition: cast5.c:33
rkmpp_hw_configs
static const AVCodecHWConfigInternal *const rkmpp_hw_configs[]
Definition: rkmppdec.c:551
RKMPP_DEC_CLASS
#define RKMPP_DEC_CLASS(NAME)
Definition: rkmppdec.c:556
AV_CODEC_CAP_AVOID_PROBING
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
Definition: codec.h:144
rkmpp_flush
static void rkmpp_flush(AVCodecContext *avctx)
Definition: rkmppdec.c:536