avcodec/cbs: add API to discard units by AVDiscard
This commit is contained in:
parent
5e9986fd2d
commit
a8aeab107e
libavcodec
@ -1026,3 +1026,24 @@ int ff_cbs_make_unit_writable(CodedBitstreamContext *ctx,
|
|||||||
av_buffer_unref(&ref);
|
av_buffer_unref(&ref);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ff_cbs_discard_units(CodedBitstreamContext *ctx,
|
||||||
|
CodedBitstreamFragment *frag,
|
||||||
|
enum AVDiscard skip,
|
||||||
|
int flags)
|
||||||
|
{
|
||||||
|
if (!ctx->codec->discarded_unit)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (int i = frag->nb_units - 1; i >= 0; i--) {
|
||||||
|
if (ctx->codec->discarded_unit(ctx, &frag->units[i], skip)) {
|
||||||
|
// discard all units
|
||||||
|
if (!(flags & DISCARD_FLAG_KEEP_NON_VCL)) {
|
||||||
|
ff_cbs_fragment_free(frag);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ff_cbs_delete_unit(frag, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
#include "codec_id.h"
|
#include "codec_id.h"
|
||||||
#include "codec_par.h"
|
#include "codec_par.h"
|
||||||
|
#include "defs.h"
|
||||||
#include "packet.h"
|
#include "packet.h"
|
||||||
|
|
||||||
|
|
||||||
@ -432,5 +433,21 @@ int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx,
|
|||||||
int ff_cbs_make_unit_writable(CodedBitstreamContext *ctx,
|
int ff_cbs_make_unit_writable(CodedBitstreamContext *ctx,
|
||||||
CodedBitstreamUnit *unit);
|
CodedBitstreamUnit *unit);
|
||||||
|
|
||||||
|
enum CbsDiscardFlags {
|
||||||
|
DISCARD_FLAG_NONE = 0,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* keep non-vcl units even if the picture has been dropped.
|
||||||
|
*/
|
||||||
|
DISCARD_FLAG_KEEP_NON_VCL = 0x01,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Discard units accroding to 'skip'.
|
||||||
|
*/
|
||||||
|
void ff_cbs_discard_units(CodedBitstreamContext *ctx,
|
||||||
|
CodedBitstreamFragment *frag,
|
||||||
|
enum AVDiscard skip,
|
||||||
|
int flags);
|
||||||
|
|
||||||
#endif /* AVCODEC_CBS_H */
|
#endif /* AVCODEC_CBS_H */
|
||||||
|
@ -133,6 +133,12 @@ typedef struct CodedBitstreamType {
|
|||||||
CodedBitstreamUnit *unit,
|
CodedBitstreamUnit *unit,
|
||||||
PutBitContext *pbc);
|
PutBitContext *pbc);
|
||||||
|
|
||||||
|
// Return 1 when the unit should be dropped according to 'skip',
|
||||||
|
// 0 otherwise.
|
||||||
|
int (*discarded_unit)(CodedBitstreamContext *ctx,
|
||||||
|
const CodedBitstreamUnit *unit,
|
||||||
|
enum AVDiscard skip);
|
||||||
|
|
||||||
// Read the data from all of frag->units and assemble it into
|
// Read the data from all of frag->units and assemble it into
|
||||||
// a bitstream for the whole fragment.
|
// a bitstream for the whole fragment.
|
||||||
int (*assemble_fragment)(CodedBitstreamContext *ctx,
|
int (*assemble_fragment)(CodedBitstreamContext *ctx,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user