typedef struct TraceHeadersContext {
CodedBitstreamContext *cbc;
+ CodedBitstreamFragment fragment;
} TraceHeadersContext;
ctx->cbc->trace_level = AV_LOG_INFO;
if (bsf->par_in->extradata) {
- CodedBitstreamFragment ps;
+ CodedBitstreamFragment *frag = &ctx->fragment;
av_log(bsf, AV_LOG_INFO, "Extradata\n");
- err = ff_cbs_read_extradata(ctx->cbc, &ps, bsf->par_in);
- if (err < 0) {
- av_log(bsf, AV_LOG_ERROR, "Failed to read extradata.\n");
- return err;
- }
+ err = ff_cbs_read_extradata(ctx->cbc, frag, bsf->par_in);
- ff_cbs_fragment_uninit(ctx->cbc, &ps);
+ ff_cbs_fragment_reset(ctx->cbc, frag);
}
- return 0;
+ return err;
}
static void trace_headers_close(AVBSFContext *bsf)
{
TraceHeadersContext *ctx = bsf->priv_data;
+ ff_cbs_fragment_free(ctx->cbc, &ctx->fragment);
ff_cbs_close(&ctx->cbc);
}
static int trace_headers(AVBSFContext *bsf, AVPacket *pkt)
{
TraceHeadersContext *ctx = bsf->priv_data;
- CodedBitstreamFragment au;
+ CodedBitstreamFragment *frag = &ctx->fragment;
char tmp[256] = { 0 };
int err;
av_log(bsf, AV_LOG_INFO, "Packet: %d bytes%s.\n", pkt->size, tmp);
- err = ff_cbs_read_packet(ctx->cbc, &au, pkt);
- if (err < 0) {
- av_packet_unref(pkt);
- return err;
- }
+ err = ff_cbs_read_packet(ctx->cbc, frag, pkt);
- ff_cbs_fragment_uninit(ctx->cbc, &au);
+ ff_cbs_fragment_reset(ctx->cbc, frag);
- return 0;
+ if (err < 0)
+ av_packet_unref(pkt);
+ return err;
}
const AVBitStreamFilter ff_trace_headers_bsf = {