[FFmpeg-cvslog] Frame erasure support for pitch delay decoding

Vladimir Voroshilov git at videolan.org
Sat Sep 24 21:17:01 CEST 2011


ffmpeg | branch: master | Vladimir Voroshilov <voroshil at gmail.com> | Thu Jun 11 13:51:28 2009 +0700| [50cad2562522142f15ef0370df07939652c9feb3] | committer: Michael Niedermayer

Frame erasure support for pitch delay decoding

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=50cad2562522142f15ef0370df07939652c9feb3
---

 libavcodec/g729dec.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/libavcodec/g729dec.c b/libavcodec/g729dec.c
index 42783d6..1e29a7e 100644
--- a/libavcodec/g729dec.c
+++ b/libavcodec/g729dec.c
@@ -306,7 +306,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
         gc_1st_index  = get_bits(&gb, format.gc_1st_index_bits);
         gc_2nd_index  = get_bits(&gb, format.gc_2nd_index_bits);
 
-        if(!i) {
+        if (frame_erasure)
+            pitch_delay_3x   = 3 * ctx->pitch_delay_int_prev;
+        else if(!i) {
             if (bad_pitch)
                 pitch_delay_3x   = 3 * ctx->pitch_delay_int_prev;
             else
@@ -348,6 +350,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
                                      ( voicing && frame_erasure) ? 0 : ctx->gain_code,
                                      1 << 13, 14, SUBFRAME_SIZE);
 
+        if (frame_erasure)
+            ctx->pitch_delay_int_prev = FFMIN(ctx->pitch_delay_int_prev + 1, PITCH_DELAY_MAX);
+        else
             ctx->pitch_delay_int_prev = pitch_delay_int;
     }
 



More information about the ffmpeg-cvslog mailing list