mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-20 22:06:59 +00:00
avcodec/cbs: add API to discard units by AVDiscard
This commit is contained in:
parent
5e9986fd2d
commit
a8aeab107e
@ -1026,3 +1026,24 @@ int ff_cbs_make_unit_writable(CodedBitstreamContext *ctx,
|
||||
av_buffer_unref(&ref);
|
||||
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_par.h"
|
||||
#include "defs.h"
|
||||
#include "packet.h"
|
||||
|
||||
|
||||
@ -432,5 +433,21 @@ int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx,
|
||||
int ff_cbs_make_unit_writable(CodedBitstreamContext *ctx,
|
||||
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 */
|
||||
|
@ -133,6 +133,12 @@ typedef struct CodedBitstreamType {
|
||||
CodedBitstreamUnit *unit,
|
||||
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
|
||||
// a bitstream for the whole fragment.
|
||||
int (*assemble_fragment)(CodedBitstreamContext *ctx,
|
||||
|
Loading…
Reference in New Issue
Block a user