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/refstruct.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"
#include "libavutil/mem.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 (AVRefStructOpaque unused, void *obj)
 
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 43 of file rkmppdec.c.

◆ FRAMEGROUP_MAX_FRAMES

#define FRAMEGROUP_MAX_FRAMES   16

Definition at line 44 of file rkmppdec.c.

◆ INPUT_MAX_PACKETS

#define INPUT_MAX_PACKETS   4

Definition at line 45 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 540 of file rkmppdec.c.

◆ RKMPP_DEC

#define RKMPP_DEC (   NAME,
  ID,
  BSFS 
)
Value:
const FFCodec ff_##NAME##_rkmpp_decoder = { \
.p.name = #NAME "_rkmpp", \
CODEC_LONG_NAME(#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, \
.hw_configs = rkmpp_hw_configs, \
.bsfs = BSFS, \
.p.wrapper_name = "rkmpp", \
};

Definition at line 546 of file rkmppdec.c.

Function Documentation

◆ rkmpp_get_codingtype()

static MppCodingType rkmpp_get_codingtype ( AVCodecContext avctx)
static

Definition at line 69 of file rkmppdec.c.

Referenced by rkmpp_init_decoder().

◆ rkmpp_get_frameformat()

static uint32_t rkmpp_get_frameformat ( MppFrameFormat  mppformat)
static

Definition at line 80 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 91 of file rkmppdec.c.

Referenced by rkmpp_send_packet().

◆ rkmpp_close_decoder()

static int rkmpp_close_decoder ( AVCodecContext avctx)
static

Definition at line 126 of file rkmppdec.c.

Referenced by rkmpp_init_decoder().

◆ rkmpp_release_decoder()

static void rkmpp_release_decoder ( AVRefStructOpaque  unused,
void *  obj 
)
static

Definition at line 133 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 263 of file rkmppdec.c.

Referenced by rkmpp_receive_frame().

◆ rkmpp_release_frame()

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

Definition at line 301 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 312 of file rkmppdec.c.

Referenced by rkmpp_receive_frame().

◆ rkmpp_receive_frame()

static int rkmpp_receive_frame ( AVCodecContext avctx,
AVFrame frame 
)
static

Definition at line 480 of file rkmppdec.c.

◆ rkmpp_flush()

static void rkmpp_flush ( AVCodecContext avctx)
static

Definition at line 520 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 535 of file rkmppdec.c.

AV_CODEC_CAP_HARDWARE
#define AV_CODEC_CAP_HARDWARE
Codec is backed by a hardware implementation.
Definition: codec.h:145
rkmpp_init_decoder
static int rkmpp_init_decoder(AVCodecContext *avctx)
Definition: rkmppdec.c:152
FF_CODEC_CAP_NOT_INIT_THREADSAFE
#define FF_CODEC_CAP_NOT_INIT_THREADSAFE
The codec is not known to be init-threadsafe (i.e.
Definition: codec_internal.h:35
FFCodec
Definition: codec_internal.h:127
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:75
NULL
#define NULL
Definition: coverity.c:32
rkmpp_close_decoder
static int rkmpp_close_decoder(AVCodecContext *avctx)
Definition: rkmppdec.c:126
ID
#define ID(_0)
Definition: mov_chan.c:240
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:368
rkmpp_receive_frame
static int rkmpp_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Definition: rkmppdec.c:480
HW_CONFIG_INTERNAL
#define HW_CONFIG_INTERNAL(format)
Definition: hwconfig.h:54
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:194
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:80
FF_CODEC_RECEIVE_FRAME_CB
#define FF_CODEC_RECEIVE_FRAME_CB(func)
Definition: codec_internal.h:317
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:76
RKMPPDecodeContext
Definition: rkmppdec.c:59
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
rkmpp_hw_configs
static const AVCodecHWConfigInternal *const rkmpp_hw_configs[]
Definition: rkmppdec.c:535
RKMPP_DEC_CLASS
#define RKMPP_DEC_CLASS(NAME)
Definition: rkmppdec.c:540
AV_CODEC_CAP_AVOID_PROBING
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
Definition: codec.h:138
rkmpp_flush
static void rkmpp_flush(AVCodecContext *avctx)
Definition: rkmppdec.c:520