1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * This file is part of FFmpeg.
3cabdff1aSopenharmony_ci *
4cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
5cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
6cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
7cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
8cabdff1aSopenharmony_ci *
9cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
10cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
11cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12cabdff1aSopenharmony_ci * Lesser General Public License for more details.
13cabdff1aSopenharmony_ci *
14cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
15cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
16cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17cabdff1aSopenharmony_ci */
18cabdff1aSopenharmony_ci
19cabdff1aSopenharmony_ci#ifndef AVCODEC_BSF_INTERNAL_H
20cabdff1aSopenharmony_ci#define AVCODEC_BSF_INTERNAL_H
21cabdff1aSopenharmony_ci
22cabdff1aSopenharmony_ci#include "libavutil/log.h"
23cabdff1aSopenharmony_ci
24cabdff1aSopenharmony_ci#include "bsf.h"
25cabdff1aSopenharmony_ci#include "packet.h"
26cabdff1aSopenharmony_ci
27cabdff1aSopenharmony_citypedef struct FFBitStreamFilter {
28cabdff1aSopenharmony_ci    /**
29cabdff1aSopenharmony_ci     * The public AVBitStreamFilter. See bsf.h for it.
30cabdff1aSopenharmony_ci     */
31cabdff1aSopenharmony_ci    AVBitStreamFilter p;
32cabdff1aSopenharmony_ci
33cabdff1aSopenharmony_ci    int priv_data_size;
34cabdff1aSopenharmony_ci    int (*init)(AVBSFContext *ctx);
35cabdff1aSopenharmony_ci    int (*filter)(AVBSFContext *ctx, AVPacket *pkt);
36cabdff1aSopenharmony_ci    void (*close)(AVBSFContext *ctx);
37cabdff1aSopenharmony_ci    void (*flush)(AVBSFContext *ctx);
38cabdff1aSopenharmony_ci} FFBitStreamFilter;
39cabdff1aSopenharmony_ci
40cabdff1aSopenharmony_ci/**
41cabdff1aSopenharmony_ci * Called by the bitstream filters to get the next packet for filtering.
42cabdff1aSopenharmony_ci * The filter is responsible for either freeing the packet or passing it to the
43cabdff1aSopenharmony_ci * caller.
44cabdff1aSopenharmony_ci */
45cabdff1aSopenharmony_ciint ff_bsf_get_packet(AVBSFContext *ctx, AVPacket **pkt);
46cabdff1aSopenharmony_ci
47cabdff1aSopenharmony_ci/**
48cabdff1aSopenharmony_ci * Called by bitstream filters to get packet for filtering.
49cabdff1aSopenharmony_ci * The reference to packet is moved to provided packet structure.
50cabdff1aSopenharmony_ci *
51cabdff1aSopenharmony_ci * @param ctx pointer to AVBSFContext of filter
52cabdff1aSopenharmony_ci * @param pkt pointer to packet to move reference to
53cabdff1aSopenharmony_ci *
54cabdff1aSopenharmony_ci * @return 0 on success, negative AVERROR in case of failure
55cabdff1aSopenharmony_ci */
56cabdff1aSopenharmony_ciint ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt);
57cabdff1aSopenharmony_ci
58cabdff1aSopenharmony_ciconst AVClass *ff_bsf_child_class_iterate(void **opaque);
59cabdff1aSopenharmony_ci
60cabdff1aSopenharmony_ci#endif /* AVCODEC_BSF_INTERNAL_H */
61