---
Since Vittorio asked, here the patch to drop version 0 and 1.
libavcodec/ffv1enc.c | 131 ++++++++++++++-------------------------------------
1 file changed, 35 insertions(+), 96 deletions(-)
diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c
index 342367c..dad5134 100644
--- a/libavcodec/ffv1enc.c
+++ b/libavcodec/ffv1enc.c
@@ -377,34 +377,6 @@ static void write_quant_tables(RangeCoder *c,
write_quant_table(c, quant_table[i]);
}
-static void write_header(FFV1Context *f)
-{
- uint8_t state[CONTEXT_SIZE];
- int i;
- RangeCoder *const c = &f->slice_context[0]->c;
-
- memset(state, 128, sizeof(state));
-
- if (f->version < 2) {
- put_symbol(c, state, f->version, 0);
- put_symbol(c, state, f->ac, 0);
- if (f->ac == AC_RANGE_CUSTOM_TAB) {
- for (i = 1; i < 256; i++)
- put_symbol(c, state,
- f->state_transition[i] - c->one_state[i], 1);
- }
- put_symbol(c, state, f->colorspace, 0); // YUV cs type
- if (f->version > 0)
- put_symbol(c, state, f->bits_per_raw_sample, 0);
- put_rac(c, state, f->chroma_planes);
- put_symbol(c, state, f->chroma_h_shift, 0);
- put_symbol(c, state, f->chroma_v_shift, 0);
- put_rac(c, state, f->transparency);
-
- write_quant_tables(c, f->quant_table);
- }
-}
-
static int write_extradata(FFV1Context *f)
{
RangeCoder *const c = &f->c;
@@ -423,11 +395,10 @@ static int write_extradata(FFV1Context *f)
ff_build_rac_states(c, 0.05 * (1LL << 32), 256 - 8);
put_symbol(c, state, f->version, 0);
- if (f->version > 1) {
- if (f->version == 3)
- f->minor_version = 2;
- put_symbol(c, state, f->minor_version, 0);
- }
+
+ if (f->version == 3)
+ f->minor_version = 2;
+ put_symbol(c, state, f->minor_version, 0);
put_symbol(c, state, f->ac, 0);
if (f->ac == AC_RANGE_CUSTOM_TAB)
@@ -464,9 +435,7 @@ static int write_extradata(FFV1Context *f)
}
}
- if (f->version > 2) {
- put_symbol(c, state, f->ec, 0);
- }
+ put_symbol(c, state, f->ec, 0);
f->avctx->extradata_size = ff_rac_terminate(c);
@@ -545,46 +514,24 @@ static av_cold int ffv1_encode_init(AVCodecContext *avctx)
ffv1_common_init(avctx);
- s->version = 0;
+ s->version = 3;
switch (avctx->level) {
+ case FF_LEVEL_UNKNOWN:
case 3:
break;
case 2:
- av_log(avctx, AV_LOG_ERROR,
- "Version 2 had been deemed non-standard and deprecated "
- "the support for it had been removed\n");
- return AVERROR(ENOSYS);
case 1:
case 0:
- if (avctx->flags & (AV_CODEC_FLAG_PASS1 | AV_CODEC_FLAG_PASS2)) {
- av_log(avctx, AV_LOG_ERROR,
- "Multiple pass encoding requires version 3.\n");
- return AVERROR(ENOSYS);
- }
- if (avctx->slices > 1) {
- av_log(avctx, AV_LOG_ERROR,
- "Multiple slices support requires version 3.\n");
- return AVERROR(ENOSYS);
- }
- break;
- case -99:
- if ((avctx->flags & (AV_CODEC_FLAG_PASS1 | AV_CODEC_FLAG_PASS2)) ||
- avctx->slices > 1)
- s->version = 3;
- else
- s->version = 0;
- break;
+ av_log(avctx, AV_LOG_ERROR,
+ "The encoder supports only version 3.\n");
+ return AVERROR(ENOSYS);
default:
av_log(avctx, AV_LOG_ERROR, "Version %d not supported\n",
avctx->level);
return AVERROR(ENOSYS);
}
- if (s->ec < 0) {
- s->ec = (s->version >= 3);
- }
-
#if FF_API_CODER_TYPE
FF_DISABLE_DEPRECATION_WARNINGS
if (avctx->coder_type != -1)
@@ -623,7 +570,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
"bits_per_raw_sample > 8, forcing range coder\n");
s->ac = AC_RANGE_CUSTOM_TAB;
}
- s->version = FFMAX(s->version, 1);
case AV_PIX_FMT_GRAY8:
case AV_PIX_FMT_YUV444P:
case AV_PIX_FMT_YUV440P:
@@ -658,7 +604,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
s->bits_per_raw_sample = avctx->bits_per_raw_sample;
s->colorspace = 1;
s->chroma_planes = 1;
- s->version = FFMAX(s->version, 1);
break;
default:
av_log(avctx, AV_LOG_ERROR, "format not supported\n");
@@ -752,8 +697,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
int gob_count = 0;
char *next;
- av_assert0(s->version > 2);
-
for (;; ) {
for (j = 0; j < 256; j++)
for (i = 0; i < 2; i++) {
@@ -810,21 +753,19 @@ FF_ENABLE_DEPRECATION_WARNINGS
}
}
- if (s->version > 1) {
- for (s->num_v_slices = 2; s->num_v_slices < 9; s->num_v_slices++)
- for (s->num_h_slices = s->num_v_slices;
- s->num_h_slices < 2 * s->num_v_slices; s->num_h_slices++)
- if (avctx->slices == s->num_h_slices * s->num_v_slices &&
- avctx->slices <= 64 || !avctx->slices)
- goto slices_ok;
- av_log(avctx, AV_LOG_ERROR,
- "Unsupported number %d of slices requested, please specify a "
- "supported number with -slices (ex:4,6,9,12,16, ...)\n",
- avctx->slices);
- return AVERROR(ENOSYS);
+ for (s->num_v_slices = 2; s->num_v_slices < 9; s->num_v_slices++)
+ for (s->num_h_slices = s->num_v_slices;
+ s->num_h_slices < 2 * s->num_v_slices; s->num_h_slices++)
+ if (avctx->slices == s->num_h_slices * s->num_v_slices &&
+ avctx->slices <= 64 || !avctx->slices)
+ goto slices_ok;
+ av_log(avctx, AV_LOG_ERROR,
+ "Unsupported number %d of slices requested, please specify a "
+ "supported number with -slices (ex:4,6,9,12,16, ...)\n",
+ avctx->slices);
+ return AVERROR(ENOSYS);
slices_ok:
- write_extradata(s);
- }
+ write_extradata(s);
if ((ret = ffv1_init_slice_contexts(s)) < 0)
return ret;
@@ -889,13 +830,12 @@ static int encode_slice(AVCodecContext *c, void *arg)
if (f->key_frame)
ffv1_clear_slice_state(f, fs);
- if (f->version > 2) {
- encode_slice_header(f, fs);
- }
+
+ encode_slice_header(f, fs);
+
if (fs->ac == AC_GOLOMB_RICE) {
- if (f->version > 2)
- put_rac(&fs->c, (uint8_t[]) { 129 }, 0);
- fs->ac_byte_count = f->version > 2 || (!x && !y) ? ff_rac_terminate(
&fs->c) : 0;
+ put_rac(&fs->c, (uint8_t[]) { 129 }, 0);
+ fs->ac_byte_count = ff_rac_terminate( &fs->c);
init_put_bits(&fs->pb, fs->c.bytestream_start + fs->ac_byte_count,
fs->c.bytestream_end - fs->c.bytestream_start -
fs->ac_byte_count);
}
@@ -955,7 +895,6 @@ static int ffv1_encode_frame(AVCodecContext *avctx,
AVPacket *pkt,
put_rac(c, &keystate, 1);
f->key_frame = 1;
f->gob_count++;
- write_header(f);
} else {
put_rac(c, &keystate, 0);
f->key_frame = 0;
@@ -992,13 +931,13 @@ static int ffv1_encode_frame(AVCodecContext *avctx,
AVPacket *pkt,
flush_put_bits(&fs->pb); // FIXME: nicer padding
bytes = fs->ac_byte_count + (put_bits_count(&fs->pb) + 7) / 8;
}
- if (i > 0 || f->version > 2) {
- av_assert0(bytes < pkt->size / f->slice_count);
- memmove(buf_p, fs->c.bytestream_start, bytes);
- av_assert0(bytes < (1 << 24));
- AV_WB24(buf_p + bytes, bytes);
- bytes += 3;
- }
+
+ av_assert0(bytes < pkt->size / f->slice_count);
+ memmove(buf_p, fs->c.bytestream_start, bytes);
+ av_assert0(bytes < (1 << 24));
+ AV_WB24(buf_p + bytes, bytes);
+ bytes += 3;
+
if (f->ec) {
unsigned v;
buf_p[bytes++] = 0;
@@ -1076,7 +1015,7 @@ static av_cold int ffv1_encode_close(AVCodecContext
*avctx)
#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
static const AVOption options[] = {
{ "slicecrc", "Protect slices with CRCs", OFFSET(ec), AV_OPT_TYPE_INT,
- { .i64 = -1 }, -1, 1, VE },
+ { .i64 = 1 }, -1, 1, VE },
{ "coder", "Coder type", OFFSET(ac), AV_OPT_TYPE_INT,
{ .i64 = AC_GOLOMB_RICE }, 0, 2, VE, "coder" },
{ "rice", "Golomb rice", 0, AV_OPT_TYPE_CONST,
--
2.6.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel