Go to the documentation of this file.
   19 #ifndef AVCODEC_CODEC_INTERNAL_H 
   20 #define AVCODEC_CODEC_INTERNAL_H 
   34 #define FF_CODEC_CAP_NOT_INIT_THREADSAFE    (1 << 0) 
   42 #define FF_CODEC_CAP_INIT_CLEANUP           (1 << 1) 
   49 #define FF_CODEC_CAP_SETS_PKT_DTS           (1 << 2) 
   54 #define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM  (1 << 3) 
   60 #define FF_CODEC_CAP_EXPORTS_CROPPING       (1 << 4) 
   64 #define FF_CODEC_CAP_SLICE_THREAD_HAS_MF    (1 << 5) 
   69 #define FF_CODEC_CAP_ALLOCATE_PROGRESS      (1 << 6) 
   73 #define FF_CODEC_CAP_AUTO_THREADS           (1 << 7) 
   78 #define FF_CODEC_CAP_SETS_FRAME_PROPS       (1 << 8) 
   82 #define FF_CODEC_CAP_ICC_PROFILES           (1 << 9) 
   90 #define FF_CODEC_CAP_EOF_FLUSH              (1 << 10) 
   95 #define FF_CODEC_TAGS_END -1 
  194                       int *got_frame_ptr, 
struct AVPacket *avpkt);
 
  202                           int *got_frame_ptr, 
const struct AVPacket *avpkt);
 
  270 #define CODEC_LONG_NAME(str) .p.long_name = NULL 
  272 #define CODEC_LONG_NAME(str) .p.long_name = str 
  276 #define UPDATE_THREAD_CONTEXT(func) \ 
  277         .update_thread_context          = (func) 
  278 #define UPDATE_THREAD_CONTEXT_FOR_USER(func) \ 
  279         .update_thread_context_for_user = (func) 
  281 #define UPDATE_THREAD_CONTEXT(func) \ 
  282         .update_thread_context          = NULL 
  283 #define UPDATE_THREAD_CONTEXT_FOR_USER(func) \ 
  284         .update_thread_context_for_user = NULL 
  287 #if FF_API_OLD_CHANNEL_LAYOUT 
  288 #define CODEC_OLD_CHANNEL_LAYOUTS(...) CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(((const uint64_t[]) { __VA_ARGS__, 0 })) 
  289 #if defined(__clang__) 
  290 #define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array) \ 
  291         FF_DISABLE_DEPRECATION_WARNINGS \ 
  292         .p.channel_layouts = (array), \ 
  293         FF_ENABLE_DEPRECATION_WARNINGS 
  295 #define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array) .p.channel_layouts = (array), 
  302 #define CODEC_OLD_CHANNEL_LAYOUTS(...) 
  303 #define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array) 
  306 #define FF_CODEC_DECODE_CB(func)                          \ 
  307     .cb_type           = FF_CODEC_CB_TYPE_DECODE,         \ 
  309 #define FF_CODEC_DECODE_SUB_CB(func)                      \ 
  310     .cb_type           = FF_CODEC_CB_TYPE_DECODE_SUB,     \ 
  311     .cb.decode_sub     = (func) 
  312 #define FF_CODEC_RECEIVE_FRAME_CB(func)                   \ 
  313     .cb_type           = FF_CODEC_CB_TYPE_RECEIVE_FRAME,  \ 
  314     .cb.receive_frame  = (func) 
  315 #define FF_CODEC_ENCODE_CB(func)                          \ 
  316     .cb_type           = FF_CODEC_CB_TYPE_ENCODE,         \ 
  318 #define FF_CODEC_ENCODE_SUB_CB(func)                      \ 
  319     .cb_type           = FF_CODEC_CB_TYPE_ENCODE_SUB,     \ 
  320     .cb.encode_sub     = (func) 
  321 #define FF_CODEC_RECEIVE_PACKET_CB(func)                  \ 
  322     .cb_type           = FF_CODEC_CB_TYPE_RECEIVE_PACKET, \ 
  323     .cb.receive_packet = (func) 
  
int(* update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src)
Copy necessary context variables from a previous thread context to the current one.
int(* receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame)
Decode API with decoupled packet/frame dataflow.
const FFCodecDefault * defaults
Private codec-specific defaults.
@ FF_CODEC_CB_TYPE_RECEIVE_PACKET
This structure describes decoded (raw) audio or video data.
int(* encode)(struct AVCodecContext *avctx, struct AVPacket *avpkt, const struct AVFrame *frame, int *got_packet_ptr)
Encode data to an AVPacket.
@ FF_CODEC_CB_TYPE_ENCODE_SUB
AVCodec p
The public AVCodec.
@ FF_CODEC_CB_TYPE_DECODE
int(* update_thread_context_for_user)(struct AVCodecContext *dst, const struct AVCodecContext *src)
Copy variables back to the user-facing context.
@ FF_CODEC_CB_TYPE_ENCODE
void(* flush)(struct AVCodecContext *)
Flush buffers.
int(* encode_sub)(struct AVCodecContext *avctx, uint8_t *buf, int buf_size, const struct AVSubtitle *sub)
Encode subtitles to a raw buffer.
int(* decode)(struct AVCodecContext *avctx, struct AVFrame *frame, int *got_frame_ptr, struct AVPacket *avpkt)
Decode to an AVFrame.
int(* init)(struct AVCodecContext *)
@ FF_CODEC_CB_TYPE_DECODE_SUB
int(* receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt)
Encode API with decoupled frame/packet dataflow.
static const av_always_inline FFCodec * ffcodec(const AVCodec *codec)
const struct AVCodecHWConfigInternal *const * hw_configs
Array of pointers to hardware configurations supported by the codec, or NULL if no hardware supported...
unsigned caps_internal
Internal codec capabilities FF_CODEC_CAP_*.
int(* decode_sub)(struct AVCodecContext *avctx, struct AVSubtitle *sub, int *got_frame_ptr, const struct AVPacket *avpkt)
Decode subtitle data to an AVSubtitle.
main external API structure.
const uint32_t * codec_tags
List of supported codec_tags, terminated by FF_CODEC_TAGS_END.
@ FF_CODEC_CB_TYPE_RECEIVE_FRAME
unsigned cb_type
This field determines the type of the codec (decoder/encoder) and also the exact callback cb implemen...
int(* close)(struct AVCodecContext *)
const char * bsfs
Decoding only, a comma-separated list of bitstream filters to apply to packets before decoding.
This structure stores compressed data.
void(* init_static_data)(struct FFCodec *codec)
Initialize codec static data, called from av_codec_iterate().