---

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

Reply via email to