|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef AVCODEC_CBS_BSF_H |
|
#define AVCODEC_CBS_BSF_H |
|
|
|
#include "libavutil/log.h" |
|
#include "libavutil/opt.h" |
|
|
|
#include "bsf.h" |
|
#include "codec_id.h" |
|
#include "cbs.h" |
|
#include "packet.h" |
|
|
|
|
|
typedef struct CBSBSFType { |
|
enum AVCodecID codec_id; |
|
|
|
|
|
|
|
const char *fragment_name; |
|
|
|
|
|
|
|
const char *unit_name; |
|
|
|
|
|
|
|
|
|
|
|
int (*update_fragment)(AVBSFContext *bsf, AVPacket *pkt, |
|
CodedBitstreamFragment *frag); |
|
} CBSBSFType; |
|
|
|
|
|
|
|
|
|
typedef struct CBSBSFContext { |
|
const AVClass *class; |
|
const CBSBSFType *type; |
|
|
|
CodedBitstreamContext *input; |
|
CodedBitstreamContext *output; |
|
CodedBitstreamFragment fragment; |
|
} CBSBSFContext; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int ff_cbs_bsf_generic_init(AVBSFContext *bsf, const CBSBSFType *type); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ff_cbs_bsf_generic_close(AVBSFContext *bsf); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int ff_cbs_bsf_generic_filter(AVBSFContext *bsf, AVPacket *pkt); |
|
|
|
|
|
|
|
enum { |
|
|
|
BSF_ELEMENT_PASS, |
|
|
|
|
|
|
|
|
|
BSF_ELEMENT_INSERT, |
|
|
|
BSF_ELEMENT_REMOVE, |
|
|
|
|
|
BSF_ELEMENT_EXTRACT, |
|
}; |
|
|
|
#define BSF_ELEMENT_OPTIONS_PIR(name, help, field, opt_flags) \ |
|
{ name, help, OFFSET(field), AV_OPT_TYPE_INT, \ |
|
{ .i64 = BSF_ELEMENT_PASS }, \ |
|
BSF_ELEMENT_PASS, BSF_ELEMENT_REMOVE, opt_flags, name }, \ |
|
{ "pass", NULL, 0, AV_OPT_TYPE_CONST, \ |
|
{ .i64 = BSF_ELEMENT_PASS }, .flags = opt_flags, .unit = name }, \ |
|
{ "insert", NULL, 0, AV_OPT_TYPE_CONST, \ |
|
{ .i64 = BSF_ELEMENT_INSERT }, .flags = opt_flags, .unit = name }, \ |
|
{ "remove", NULL, 0, AV_OPT_TYPE_CONST, \ |
|
{ .i64 = BSF_ELEMENT_REMOVE }, .flags = opt_flags, .unit = name } |
|
|
|
#define BSF_ELEMENT_OPTIONS_PIRE(name, help, field, opt_flags) \ |
|
{ name, help, OFFSET(field), AV_OPT_TYPE_INT, \ |
|
{ .i64 = BSF_ELEMENT_PASS }, \ |
|
BSF_ELEMENT_PASS, BSF_ELEMENT_EXTRACT, opt_flags, name }, \ |
|
{ "pass", NULL, 0, AV_OPT_TYPE_CONST, \ |
|
{ .i64 = BSF_ELEMENT_PASS }, .flags = opt_flags, .unit = name }, \ |
|
{ "insert", NULL, 0, AV_OPT_TYPE_CONST, \ |
|
{ .i64 = BSF_ELEMENT_INSERT }, .flags = opt_flags, .unit = name }, \ |
|
{ "remove", NULL, 0, AV_OPT_TYPE_CONST, \ |
|
{ .i64 = BSF_ELEMENT_REMOVE }, .flags = opt_flags, .unit = name }, \ |
|
{ "extract", NULL, 0, AV_OPT_TYPE_CONST, \ |
|
{ .i64 = BSF_ELEMENT_EXTRACT }, .flags = opt_flags, .unit = name } \ |
|
|
|
|
|
#endif |
|
|