45 int i, j, ret, marker;
46 int is_superframe = !!
s->buffer_pkt->data;
48 if (!
s->buffer_pkt->data) {
58 if ((marker & 0xe0) == 0xc0) {
59 int length_size = 1 + ((marker >> 3) & 0x3);
60 int nb_frames = 1 + (marker & 0x7);
61 int idx_size = 2 + nb_frames * length_size;
63 if (in->
size >= idx_size && in->
data[in->
size - idx_size] == marker) {
68 nb_frames * length_size);
70 for (
i = 0;
i < nb_frames;
i++) {
72 for (j = 0; j < length_size; j++)
73 frame_size |= bytestream2_get_byte(&bc) << (j * 8);
78 "Invalid frame size in a superframe: %d\n",
frame_size);
84 s->nb_frames = nb_frames;
86 s->next_frame_offset = 0;
100 out->data +=
s->next_frame_offset;
101 out->size =
s->sizes[
s->next_frame];
103 s->next_frame_offset +=
out->size;
106 if (
s->next_frame >=
s->nb_frames)
163 .p.name =
"vp9_superframe_split",
static AVFormatContext * ctx
static av_cold void close(AVCodecParserContext *s)
const FFBitStreamFilter ff_vp9_superframe_split_bsf
int ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt)
Called by bitstream filters to get packet for filtering.
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
#define i(width, name, range_min, range_max)
void(* flush)(AVBSFContext *ctx)
int(* init)(AVBSFContext *ctx)
static const uint8_t frame_size[4]
bitstream reader API header.
static unsigned int get_bits1(GetBitContext *s)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
AVCodecID
Identify the syntax and semantics of the bitstream.
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
void av_packet_move_ref(AVPacket *dst, AVPacket *src)
Move every field in src to dst and reset src.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define AV_NOPTS_VALUE
Undefined timestamp value.
The bitstream filter state.
This structure stores compressed data.
void(* filter)(uint8_t *src, ptrdiff_t stride, int qscale)
static void vp9_superframe_split_uninit(AVBSFContext *ctx)
static int vp9_superframe_split_filter(AVBSFContext *ctx, AVPacket *out)
static void vp9_superframe_split_flush(AVBSFContext *ctx)
static int vp9_superframe_split_init(AVBSFContext *ctx)