FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
crystalhd.c File Reference
#include "config_components.h"
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <libcrystalhd/bc_dts_types.h>
#include <libcrystalhd/bc_dts_defs.h>
#include <libcrystalhd/libcrystalhd_if.h>
#include "avcodec.h"
#include "codec_internal.h"
#include "decode.h"
#include "internal.h"
#include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/opt.h"

Go to the source code of this file.

Data Structures

struct  OpaqueList
 
struct  CHDContext
 

Macros

#define _XOPEN_SOURCE   600
 
#define OUTPUT_PROC_TIMEOUT   50
 Timeout parameter passed to DtsProcOutput() in us. More...
 
#define TIMESTAMP_UNIT   100000
 Step between fake timestamps passed to hardware in units of 100ns. More...
 
#define DEFINE_CRYSTALHD_DECODER(x, X, bsf_name)
 

Enumerations

enum  CopyRet { RET_ERROR = -1, RET_OK = 0, RET_COPY_AGAIN = 1 }
 

Functions

static BC_MEDIA_SUBTYPE id2subtype (CHDContext *priv, enum AVCodecID id)
 
static void print_frame_info (CHDContext *priv, BC_DTS_PROC_OUT *output)
 
static uint64_t opaque_list_push (CHDContext *priv, uint64_t reordered_opaque)
 
static OpaqueListopaque_list_pop (CHDContext *priv, uint64_t fake_timestamp)
 
static void flush (AVCodecContext *avctx)
 
static av_cold int uninit (AVCodecContext *avctx)
 
static av_cold int init (AVCodecContext *avctx)
 
static CopyRet copy_frame (AVCodecContext *avctx, BC_DTS_PROC_OUT *output, AVFrame *frame, int *got_frame)
 
static CopyRet receive_frame (AVCodecContext *avctx, AVFrame *frame, int *got_frame)
 
static int crystalhd_decode_packet (AVCodecContext *avctx, const AVPacket *avpkt)
 
static int crystalhd_receive_frame (AVCodecContext *avctx, AVFrame *frame)
 

Variables

static const AVOption options []
 

Macro Definition Documentation

◆ _XOPEN_SOURCE

#define _XOPEN_SOURCE   600

Definition at line 50 of file crystalhd.c.

◆ OUTPUT_PROC_TIMEOUT

#define OUTPUT_PROC_TIMEOUT   50

Timeout parameter passed to DtsProcOutput() in us.

Definition at line 72 of file crystalhd.c.

◆ TIMESTAMP_UNIT

#define TIMESTAMP_UNIT   100000

Step between fake timestamps passed to hardware in units of 100ns.

Definition at line 74 of file crystalhd.c.

◆ DEFINE_CRYSTALHD_DECODER

#define DEFINE_CRYSTALHD_DECODER (   x,
  X,
  bsf_name 
)
Value:
static const AVClass x##_crystalhd_class = { \
.class_name = #x "_crystalhd", \
.item_name = av_default_item_name, \
.option = options, \
.version = LIBAVUTIL_VERSION_INT, \
}; \
const FFCodec ff_##x##_crystalhd_decoder = { \
.p.name = #x "_crystalhd", \
.p.long_name = NULL_IF_CONFIG_SMALL("CrystalHD " #X " decoder"), \
.p.type = AVMEDIA_TYPE_VIDEO, \
.p.id = AV_CODEC_ID_##X, \
.priv_data_size = sizeof(CHDContext), \
.p.priv_class = &x##_crystalhd_class, \
.init = init, \
.close = uninit, \
.flush = flush, \
.bsfs = bsf_name, \
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | \
FF_CODEC_CAP_SETS_FRAME_PROPS, \
.p.pix_fmts = (const enum AVPixelFormat[]){AV_PIX_FMT_YUYV422, AV_PIX_FMT_NONE}, \
.p.wrapper_name = "crystalhd", \
};

Definition at line 770 of file crystalhd.c.

Enumeration Type Documentation

◆ CopyRet

enum CopyRet
Enumerator
RET_ERROR 
RET_OK 
RET_COPY_AGAIN 

Definition at line 81 of file crystalhd.c.

Function Documentation

◆ id2subtype()

static BC_MEDIA_SUBTYPE id2subtype ( CHDContext priv,
enum AVCodecID  id 
)
inlinestatic

Definition at line 126 of file crystalhd.c.

Referenced by init().

◆ print_frame_info()

static void print_frame_info ( CHDContext priv,
BC_DTS_PROC_OUT *  output 
)
inlinestatic

Definition at line 146 of file crystalhd.c.

Referenced by receive_frame().

◆ opaque_list_push()

static uint64_t opaque_list_push ( CHDContext priv,
uint64_t  reordered_opaque 
)
static

Definition at line 192 of file crystalhd.c.

Referenced by crystalhd_decode_packet().

◆ opaque_list_pop()

static OpaqueList* opaque_list_pop ( CHDContext priv,
uint64_t  fake_timestamp 
)
static

Definition at line 220 of file crystalhd.c.

Referenced by copy_frame().

◆ flush()

static void flush ( AVCodecContext avctx)
static

Definition at line 273 of file crystalhd.c.

◆ uninit()

static av_cold int uninit ( AVCodecContext avctx)
static

Definition at line 285 of file crystalhd.c.

Referenced by init().

◆ init()

static av_cold int init ( AVCodecContext avctx)
static

Definition at line 307 of file crystalhd.c.

◆ copy_frame()

static CopyRet copy_frame ( AVCodecContext avctx,
BC_DTS_PROC_OUT *  output,
AVFrame frame,
int got_frame 
)
inlinestatic

Definition at line 428 of file crystalhd.c.

Referenced by receive_frame().

◆ receive_frame()

static CopyRet receive_frame ( AVCodecContext avctx,
AVFrame frame,
int got_frame 
)
inlinestatic

Definition at line 562 of file crystalhd.c.

Referenced by crystalhd_receive_frame(), and main().

◆ crystalhd_decode_packet()

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

Definition at line 657 of file crystalhd.c.

Referenced by crystalhd_receive_frame().

◆ crystalhd_receive_frame()

static int crystalhd_receive_frame ( AVCodecContext avctx,
AVFrame frame 
)
static

Definition at line 707 of file crystalhd.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{ "crystalhd_downscale_width",
"Turn on downscaling to the specified width",
0x42,
AV_OPT_TYPE_INT, {.i64 = 0}, 0, UINT32_MAX,
{ NULL, },
}

Definition at line 112 of file crystalhd.c.

options
static const AVOption options[]
Definition: crystalhd.c:112
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
AV_OPT_FLAG_VIDEO_PARAM
#define AV_OPT_FLAG_VIDEO_PARAM
Definition: opt.h:284
AV_CODEC_CAP_HARDWARE
#define AV_CODEC_CAP_HARDWARE
Codec is backed by a hardware implementation.
Definition: codec.h:162
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:33
FFCodec
Definition: codec_internal.h:118
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:122
X
@ X
Definition: vf_addroi.c:26
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
AV_PIX_FMT_YUYV422
@ AV_PIX_FMT_YUYV422
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
Definition: pixfmt.h:67
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:237
init
static av_cold int init(AVCodecContext *avctx)
Definition: crystalhd.c:307
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
AV_OPT_FLAG_DECODING_PARAM
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
Definition: opt.h:282
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:211
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:266
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:65
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:225
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
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
crystalhd_receive_frame
static int crystalhd_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Definition: crystalhd.c:707
flush
static void flush(AVCodecContext *avctx)
Definition: crystalhd.c:273
AV_CODEC_CAP_AVOID_PROBING
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
Definition: codec.h:144
uninit
static av_cold int uninit(AVCodecContext *avctx)
Definition: crystalhd.c:285
CHDContext
Definition: crystalhd.c:93