]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/twinvq.c
vp9: split superframes in the filtering stage before actual decoding
[ffmpeg] / libavcodec / twinvq.c
index 4f79679c21b2aefa688b3ae3b5770b89c1fa9305..940def45f579298fd56d609898ed28f8dcd3acf8 100644 (file)
@@ -523,6 +523,9 @@ int ff_twinvq_decode_frame(AVCodecContext *avctx, void *data,
 
     *got_frame_ptr = 1;
 
+    // VQF can deliver packets 1 byte greater than block align
+    if (buf_size == avctx->block_align + 1)
+        return buf_size;
     return avctx->block_align;
 }
 
@@ -703,7 +706,7 @@ static av_cold void init_bitstream_params(TwinVQContext *tctx)
             TWINVQ_WINDOW_TYPE_BITS +
             mtab->fmode[i].sub * (bse_bits[i] + n_ch * TWINVQ_SUB_GAIN_BITS);
 
-    if (tctx->codec == TWINVQ_CODEC_METASOUND) {
+    if (tctx->codec == TWINVQ_CODEC_METASOUND && !tctx->is_6kbps) {
         bsize_no_main_cb[1] += 2;
         bsize_no_main_cb[2] += 2;
     }
@@ -787,7 +790,7 @@ av_cold int ff_twinvq_decode_init(AVCodecContext *avctx)
         return AVERROR_INVALIDDATA;
     }
 
-    avpriv_float_dsp_init(&tctx->fdsp, avctx->flags & CODEC_FLAG_BITEXACT);
+    avpriv_float_dsp_init(&tctx->fdsp, avctx->flags & AV_CODEC_FLAG_BITEXACT);
     if ((ret = init_mdct_win(tctx))) {
         av_log(avctx, AV_LOG_ERROR, "Error initializing MDCT\n");
         ff_twinvq_decode_close(avctx);