av_assert0(range_min <= range_max && range_max - range_min < 8); if (value < range_min || value > range_max) {
av_log(ctx->log_ctx, AV_LOG_ERROR, "%s out of range: " "%"PRIu32", but must be in [%"PRIu32",%"PRIu32"].\n",
name, value, range_min, range_max); return AVERROR_INVALIDDATA;
}
if (value == range_max)
len = range_max - range_min; else
len = value - range_min + 1; if (put_bits_left(pbc) < len) return AVERROR(ENOSPC);
staticint cbs_vp9_read_le(CodedBitstreamContext *ctx, GetBitContext *gbc, int width, constchar *name, constint *subscripts, uint32_t *write_to)
{
uint32_t value; int b;
CBS_TRACE_READ_START();
av_assert0(width % 8 == 0);
if (get_bits_left(gbc) < width) {
av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid le value at " "%s: bitstream ended.\n", name); return AVERROR_INVALIDDATA;
}
value = 0; for (b = 0; b < width; b += 8)
value |= get_bits(gbc, 8) << b;
CBS_TRACE_READ_END();
*write_to = value; return0;
}
staticint cbs_vp9_write_le(CodedBitstreamContext *ctx, PutBitContext *pbc, int width, constchar *name, constint *subscripts, uint32_t value)
{ int b;
CBS_TRACE_WRITE_START();
av_assert0(width % 8 == 0);
if (put_bits_left(pbc) < width) return AVERROR(ENOSPC);
for (b = 0; b < width; b += 8)
put_bits(pbc, 8, value >> b & 0xff);
CBS_TRACE_WRITE_END();
return0;
}
#define HEADER(name) do { \
ff_cbs_trace_header(ctx, name); \
} while (0)
#define CHECK(call) do { \
err = (call); \ if (err < 0) \ return err; \
} while (0)
#define f(width, name) do { \
CHECK(ff_cbs_write_simple_unsigned(ctx, rw, width, #name, \
current->name)); \
} while (0) #define xf(width, name, var, subs, ...) do { \
CHECK(ff_cbs_write_unsigned(ctx, rw, width, #name, \
SUBSCRIPTS(subs, __VA_ARGS__), \
var, 0, (1 << width) - 1)); \
} while (0) #define xs(width, name, var, subs, ...) do { \
CHECK(cbs_vp9_write_s(ctx, rw, width, #name, \
SUBSCRIPTS(subs, __VA_ARGS__), var)); \
} while (0)
#define increment(name, min, max) do { \
CHECK(cbs_vp9_write_increment(ctx, rw, min, max, #name, current->name)); \
} while (0)
#define fle(width, name, subs, ...) do { \
CHECK(cbs_vp9_write_le(ctx, rw, width, #name, \
SUBSCRIPTS(subs, __VA_ARGS__), current->name)); \
} while (0)
#define delta_q(name) do { \
xf(1, name.delta_coded, !!current->name, 0, ); \ if (current->name) \
xs(4, name.delta_q, current->name, 0, ); \
} while (0)
#define prob(name, subs, ...) do { \
xf(1, name.prob_coded, current->name != 255, subs, __VA_ARGS__); \ if (current->name != 255) \
xf(8, name.prob, current->name, subs, __VA_ARGS__); \
} while (0)
#define fixed(width, name, value) do { \
CHECK(ff_cbs_write_unsigned(ctx, rw, width, #name, \ 0, value, value, value)); \
} while (0)
#define infer(name, value) do { \ if (current->name != (value)) { \
av_log(ctx->log_ctx, AV_LOG_WARNING, "Warning: " \ "%s does not match inferred value: " \ "%"PRId64", but should be %"PRId64".\n", \ #name, (int64_t)current->name, (int64_t)(value)); \
} \
} while (0)
pos = 0; for (i = 0; i <= sfi.frames_in_superframe_minus_1; i++) { if (pos + sfi.frame_sizes[i] + index_size > frag->data_size) {
av_log(ctx->log_ctx, AV_LOG_ERROR, "Frame %d too large " "in superframe: %"PRIu32" bytes.\n",
i, sfi.frame_sizes[i]); return AVERROR_INVALIDDATA;
}
if (pos == unit->data_size) { // No data (e.g. a show-existing-frame frame).
} else {
frame->data_ref = av_buffer_ref(unit->data_ref); if (!frame->data_ref) return AVERROR(ENOMEM);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.