diff --git a/videodecoder/VideoDecoderAVC.cpp b/videodecoder/VideoDecoderAVC.cpp
index b5a4a6b..bf2df90 100644
--- a/videodecoder/VideoDecoderAVC.cpp
+++ b/videodecoder/VideoDecoderAVC.cpp
@@ -833,7 +833,8 @@
     if (!rawDataMode) {
         needFlush = (mVideoFormatInfo.width > mVideoFormatInfo.surfaceWidth)
                 || (mVideoFormatInfo.height > mVideoFormatInfo.surfaceHeight)
-                || isWiDiStatusChanged();
+                || isWiDiStatusChanged()
+                || (mVideoFormatInfo.actualBufferNeeded > mConfigBuffer.surfaceNumber);
     }
 
     if (needFlush || (rawDataMode && mSizeChanged)) {
diff --git a/videodecoder/VideoDecoderBase.cpp b/videodecoder/VideoDecoderBase.cpp
index 7d1cd13..a5b73f4 100644
--- a/videodecoder/VideoDecoderBase.cpp
+++ b/videodecoder/VideoDecoderBase.cpp
@@ -148,6 +148,7 @@
         mVideoFormatInfo.surfaceWidth = buffer->graphicBufferWidth;
         mVideoFormatInfo.surfaceHeight = buffer->graphicBufferHeight;
     }
+    mVideoFormatInfo.actualBufferNeeded = mConfigBuffer.surfaceNumber;
     mLowDelay = buffer->flag & WANT_LOW_DELAY;
     mRawOutput = buffer->flag & WANT_RAW_OUTPUT;
     if (mRawOutput) {
@@ -220,6 +221,22 @@
 
 }
 
+void VideoDecoderBase::freeSurfaceBuffers(void) {
+    if (mVAStarted == false) {
+        // nothing to free surface buffers at this stage
+        return;
+    }
+
+    pthread_mutex_lock(&mLock);
+
+    endDecodingFrame(true);
+
+    // if VA is already started, terminate VA as graphic buffers are reallocated by omxcodec
+    terminateVA();
+
+    pthread_mutex_unlock(&mLock);
+}
+
 const VideoFormatInfo* VideoDecoderBase::getFormatInfo(void) {
     return &mVideoFormatInfo;
 }
@@ -961,6 +978,11 @@
 }
 
 Decode_Status VideoDecoderBase::terminateVA(void) {
+    if (mVAStarted == false) {
+        // VA hasn't been started yet
+        return DECODE_SUCCESS;
+    }
+
     if (mSurfaceBuffers) {
         for (int32_t i = 0; i < mNumSurfaces; i++) {
             if (mSurfaceBuffers[i].renderBuffer.rawData) {
diff --git a/videodecoder/VideoDecoderBase.h b/videodecoder/VideoDecoderBase.h
index e4a033a..893f23a 100755
--- a/videodecoder/VideoDecoderBase.h
+++ b/videodecoder/VideoDecoderBase.h
@@ -60,6 +60,7 @@
     virtual void stop(void);
     //virtual Decode_Status decode(VideoDecodeBuffer *buffer);
     virtual void flush(void);
+    virtual void freeSurfaceBuffers(void);
     virtual const VideoRenderBuffer* getOutput(bool draining = false, VideoErrorBuffer *output_buf = NULL);
     virtual Decode_Status signalRenderDone(void * graphichandler);
     virtual const VideoFormatInfo* getFormatInfo(void);
diff --git a/videodecoder/VideoDecoderInterface.h b/videodecoder/VideoDecoderInterface.h
index 4c6a039..acedea3 100644
--- a/videodecoder/VideoDecoderInterface.h
+++ b/videodecoder/VideoDecoderInterface.h
@@ -36,6 +36,7 @@
     virtual void stop(void) = 0;
     virtual void flush() = 0;
     virtual Decode_Status decode(VideoDecodeBuffer *buffer) = 0;
+    virtual void freeSurfaceBuffers(void) = 0;
     virtual const VideoRenderBuffer* getOutput(bool draining = false, VideoErrorBuffer *output_buf = NULL) = 0;
     virtual const VideoFormatInfo* getFormatInfo(void) = 0;
     virtual Decode_Status signalRenderDone(void * graphichandler) = 0;
