diff --git a/mm-audio/aenc-amrnb/qdsp6/inc/omx_amr_aenc.h b/mm-audio/aenc-amrnb/qdsp6/inc/omx_amr_aenc.h
index f4fcf8e..64d997b 100644
--- a/mm-audio/aenc-amrnb/qdsp6/inc/omx_amr_aenc.h
+++ b/mm-audio/aenc-amrnb/qdsp6/inc/omx_amr_aenc.h
@@ -135,8 +135,11 @@
 #define FALSE 0
 
 #define NUMOFFRAMES                   1
-#define MAXFRAMELENGTH                32
-#define OMX_AMR_OUTPUT_BUFFER_SIZE    ((NUMOFFRAMES * (sizeof(ENC_META_OUT) + MAXFRAMELENGTH) \
+#define AMRNB_MAXFRAMELENGTH                32
+#define AMRWB_MAXFRAMELENGTH                62
+#define OMX_AMRNB_OUTPUT_BUFFER_SIZE    ((NUMOFFRAMES * (sizeof(ENC_META_OUT) + AMRNB_MAXFRAMELENGTH) \
+                        + 1))
+#define OMX_AMRWB_OUTPUT_BUFFER_SIZE    ((NUMOFFRAMES * (sizeof(ENC_META_OUT) + AMRWB_MAXFRAMELENGTH) \
                         + 1))
 #define FRAMEDURATION                 20000
 
diff --git a/mm-audio/aenc-amrnb/qdsp6/src/omx_amr_aenc.cpp b/mm-audio/aenc-amrnb/qdsp6/src/omx_amr_aenc.cpp
index 5278671..84e6fce 100644
--- a/mm-audio/aenc-amrnb/qdsp6/src/omx_amr_aenc.cpp
+++ b/mm-audio/aenc-amrnb/qdsp6/src/omx_amr_aenc.cpp
@@ -281,7 +281,6 @@
         m_out_act_buf_count (OMX_CORE_NUM_OUTPUT_BUFFERS),
         m_inp_current_buf_count(0),
         m_out_current_buf_count(0),
-        output_buffer_size((OMX_U32)OMX_AMR_OUTPUT_BUFFER_SIZE),
         input_buffer_size(OMX_CORE_INPUT_BUFFER_SIZE),
         m_session_id(0),
         m_inp_bEnabled(OMX_TRUE),
@@ -1136,6 +1135,15 @@
 		sizeof(component_Role.cRole));
         DEBUG_PRINT("\ncomponent_init: Component %s LOADED is invalid\n", role);
     }
+
+    if (!amrwb_enable)
+    {
+        output_buffer_size = (OMX_U32)OMX_AMRNB_OUTPUT_BUFFER_SIZE;
+    }
+    else
+    {
+        output_buffer_size = (OMX_U32)OMX_AMRWB_OUTPUT_BUFFER_SIZE;
+    }
     if(pcm_input)
     {
         m_tmp_meta_buf = (OMX_U8*) malloc(sizeof(OMX_U8) *
@@ -1146,12 +1154,22 @@
             return OMX_ErrorInsufficientResources;
         }
     }
-    m_tmp_out_meta_buf =
-		(OMX_U8*)malloc(sizeof(OMX_U8)*OMX_AMR_OUTPUT_BUFFER_SIZE);
-        if ( m_tmp_out_meta_buf == NULL ){
-            DEBUG_PRINT_ERROR("Mem alloc failed for out meta buf\n");
-                return OMX_ErrorInsufficientResources;
-            }
+
+    if (!amrwb_enable)
+    {
+        m_tmp_out_meta_buf =
+            (OMX_U8*)malloc(sizeof(OMX_U8)*OMX_AMRNB_OUTPUT_BUFFER_SIZE);
+    }
+    else
+    {
+        m_tmp_out_meta_buf =
+            (OMX_U8*)malloc(sizeof(OMX_U8)*OMX_AMRWB_OUTPUT_BUFFER_SIZE);
+    }
+
+    if (m_tmp_out_meta_buf == NULL ){
+        DEBUG_PRINT_ERROR("Mem alloc failed for out meta buf\n");
+        return OMX_ErrorInsufficientResources;
+    }
 
     if(!amrwb_enable) {
         if(0 == pcm_input)
diff --git a/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c b/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c
index 3448bff..47d67f3 100644
--- a/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c
+++ b/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c
@@ -529,12 +529,28 @@
     } else {
           DEBUG_PRINT(" invalid format: \n");
           DEBUG_PRINT("ex: ./mm-aenc-omxamr-test INPUTFILE OUTPUTFILE Tunnel BANDMODE DTXENABLE RECORDPATH RECORDTIME amrwb_enable \n");
-          DEBUG_PRINT("Bandmode 1-7, dtxenable 0-1\n");
+          DEBUG_PRINT("amrnb:Bandmode 1-8 amrwb:Bandmode 0-8, dtxenable 0-1\n");
           DEBUG_PRINT("RECORDPATH 0(TX),1(RX),2(BOTH),3(MIC)\n");
           DEBUG_PRINT("RECORDTIME in seconds for AST Automation\n");
 	  DEBUG_PRINT("amrwb_enable:1-amrwb 0-amrnb\n");
           return 0;
     }
+
+    if (!amrwb_enable && (bandmode < 1 || bandmode > 8)) {
+          DEBUG_PRINT("%d Bandmode is not supported for amrnb:supported Bandmodes are 1-8\n",bandmode);
+          return 0;
+    }
+
+    if (amrwb_enable && (bandmode < 0 || bandmode > 8)) {
+          DEBUG_PRINT("%d Bandmode not supported for amrwb:supported Bandmodes are 0-8\n",bandmode);
+          return 0;
+    }
+
+    if (dtxenable != 0 && dtxenable != 1) {
+          DEBUG_PRINT("dtxenable not supported:dtxenable should be 0-1\n");
+          return 0;
+    }
+
     if(recpath != 3) {
           DEBUG_PRINT("For RECORDPATH Only MIC supported\n");
           return 0;
