FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
crystalhd.c File Reference
#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 "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 48 of file crystalhd.c.

◆ OUTPUT_PROC_TIMEOUT

#define OUTPUT_PROC_TIMEOUT   50

Timeout parameter passed to DtsProcOutput() in us.

Definition at line 69 of file crystalhd.c.

◆ TIMESTAMP_UNIT

#define TIMESTAMP_UNIT   100000

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

Definition at line 71 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, \
}; \
AVCodec ff_##x##_crystalhd_decoder = { \
.name = #x "_crystalhd", \
.long_name = NULL_IF_CONFIG_SMALL("CrystalHD " #X " decoder"), \
.type = AVMEDIA_TYPE_VIDEO, \
.id = AV_CODEC_ID_##X, \
.priv_data_size = sizeof(CHDContext), \
.priv_class = &x##_crystalhd_class, \
.init = init, \
.close = uninit, \
.flush = flush, \
.bsfs = bsf_name, \
.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 78 of file crystalhd.c.

Function Documentation

◆ id2subtype()

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

Definition at line 120 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 140 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 186 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 214 of file crystalhd.c.

Referenced by copy_frame().

◆ flush()

static void flush ( AVCodecContext avctx)
static

Definition at line 267 of file crystalhd.c.

◆ uninit()

static av_cold int uninit ( AVCodecContext avctx)
static

Definition at line 279 of file crystalhd.c.

Referenced by init().

◆ init()

static av_cold int init ( AVCodecContext avctx)
static

Definition at line 301 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 421 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 560 of file crystalhd.c.

Referenced by crystalhd_receive_frame().

◆ crystalhd_decode_packet()

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

Definition at line 655 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 106 of file crystalhd.c.

options
static const AVOption options[]
Definition: crystalhd.c:106
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
AV_OPT_FLAG_VIDEO_PARAM
#define AV_OPT_FLAG_VIDEO_PARAM
Definition: opt.h:279
AV_CODEC_CAP_HARDWARE
#define AV_CODEC_CAP_HARDWARE
Codec is backed by a hardware implementation.
Definition: avcodec.h:1078
pix_fmts
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:275
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:67
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
receive_frame
static CopyRet receive_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame)
Definition: crystalhd.c:560
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
init
static av_cold int init(AVCodecContext *avctx)
Definition: crystalhd.c:301
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:188
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:277
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:72
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:65
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:223
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: avcodec.h:1006
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:267
AV_CODEC_CAP_AVOID_PROBING
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
Definition: avcodec.h:1063
uninit
static av_cold int uninit(AVCodecContext *avctx)
Definition: crystalhd.c:279
CHDContext
Definition: crystalhd.c:90