Merge changes from topic "am-112cbcc3-f81b-4f3a-8186-c071aaa6cec9" into nyc-dr1-dev

* changes:
  [automerger skipped] Adding Internal Input Buffer skipped: 2deb9c5449 skipped: d153eef9ef skipped: e44e69acec skipped: 1e4ba85b1f skipped: 7d8db19b20
  [automerger skipped] Adding Internal Input Buffer skipped: 2deb9c5449 skipped: d153eef9ef skipped: e44e69acec skipped: 1e4ba85b1f
  [automerger skipped] Adding Internal Input Buffer skipped: 2deb9c5449 skipped: d153eef9ef skipped: e44e69acec
  [automerger skipped] Adding Internal Input Buffer skipped: 2deb9c5449 skipped: d153eef9ef
  [automerger skipped] Adding Internal Input Buffer skipped: 2deb9c5449
  Adding Internal Input Buffer
diff --git a/decoder/impeg2d_api.h b/decoder/impeg2d_api.h
index 3fa098b..f239637 100644
--- a/decoder/impeg2d_api.h
+++ b/decoder/impeg2d_api.h
@@ -50,7 +50,7 @@
 
 
 
-#define NUM_MEM_RECORDS                 4 * MAX_THREADS + NUM_INT_FRAME_BUFFERS + 5 + 2
+#define NUM_MEM_RECORDS                 4 * MAX_THREADS + NUM_INT_FRAME_BUFFERS + 5 + 2 + 1
 
 
 #define SETBIT(a,i)   ((a) |= (1 << i))
diff --git a/decoder/impeg2d_api_main.c b/decoder/impeg2d_api_main.c
index 847c4f7..cd549e4 100644
--- a/decoder/impeg2d_api_main.c
+++ b/decoder/impeg2d_api_main.c
@@ -647,7 +647,11 @@
         }
     }
 
-
+    ps_mem_rec->u4_mem_alignment = 128;
+    ps_mem_rec->e_mem_type       = IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM;
+    ps_mem_rec->u4_mem_size      = MAX_BITSTREAM_BUFFER_SIZE + MIN_BUFFER_BYTES_AT_EOS;
+    ps_mem_rec++;
+    u1_no_rec++;
 
     {
         WORD32 i4_job_queue_size;
@@ -693,6 +697,7 @@
     ps_mem_rec->u4_mem_size      = sizeof(iv_mem_rec_t) * (NUM_MEM_RECORDS);
     ps_mem_rec++;
     u1_no_rec++;
+
     ps_op->s_ivd_fill_mem_rec_op_t.u4_num_mem_rec_filled = u1_no_rec;
     ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code = 0;
 }
@@ -1963,6 +1968,9 @@
 
     ps_dec_state = ps_dec_state_multi_core->ps_dec_state[0];
 
+    ps_dec_state->pu1_input_buffer = ps_mem_rec->pv_base;
+    u4_num_mem_rec++;
+    ps_mem_rec++;
 
     ps_dec_state->pv_jobq_buf = ps_mem_rec->pv_base;
     ps_dec_state->i4_jobq_buf_size = ps_mem_rec->u4_mem_size;
diff --git a/decoder/impeg2d_decoder.c b/decoder/impeg2d_decoder.c
index e4ff79c..bff8c21 100644
--- a/decoder/impeg2d_decoder.c
+++ b/decoder/impeg2d_decoder.c
@@ -102,12 +102,14 @@
 
     ps_dec = (dec_state_t *)pv_dec;
     ps_op->s_ivd_video_decode_op_t.u4_error_code = 0;
-    if (u4_size >= MAX_BITSTREAM_BUFFER_SIZE)
+    if (u4_size > MAX_BITSTREAM_BUFFER_SIZE)
     {
-        u4_size = MAX_BITSTREAM_BUFFER_SIZE - MIN_BUFFER_BYTES_AT_EOS;
+        u4_size = MAX_BITSTREAM_BUFFER_SIZE;
     }
 
-    impeg2d_bit_stream_init(&(ps_dec->s_bit_stream),ps_ip->s_ivd_video_decode_ip_t.pv_stream_buffer,
+    memcpy(ps_dec->pu1_input_buffer, ps_ip->s_ivd_video_decode_ip_t.pv_stream_buffer, u4_size);
+
+    impeg2d_bit_stream_init(&(ps_dec->s_bit_stream), ps_dec->pu1_input_buffer,
         u4_size);
 
     {
@@ -194,16 +196,19 @@
     ps_op->s_ivd_video_decode_op_t.u4_num_bytes_consumed = 0;
 
     IMPEG2D_FRM_NUM_SET();
-    if (u4_size >= MAX_BITSTREAM_BUFFER_SIZE)
+    if (u4_size > MAX_BITSTREAM_BUFFER_SIZE)
     {
-        u4_size = MAX_BITSTREAM_BUFFER_SIZE - MIN_BUFFER_BYTES_AT_EOS;
+        u4_size = MAX_BITSTREAM_BUFFER_SIZE;
     }
 
-    ps_dec->pu1_inp_bits_buf = ps_ip->s_ivd_video_decode_ip_t.pv_stream_buffer;
+    memcpy(ps_dec->pu1_input_buffer, ps_ip->s_ivd_video_decode_ip_t.pv_stream_buffer, u4_size);
+
+    ps_dec->pu1_inp_bits_buf = ps_dec->pu1_input_buffer;
+
     ps_dec->u4_num_inp_bytes = u4_size;
     ps_stream  = &ps_dec->s_bit_stream;
 
-    impeg2d_bit_stream_init(ps_stream,ps_ip->s_ivd_video_decode_ip_t.pv_stream_buffer,u4_size);
+    impeg2d_bit_stream_init(ps_stream, ps_dec->pu1_input_buffer, u4_size);
 
     /* @ */ /* Updating the bufferID */
 
diff --git a/decoder/impeg2d_structs.h b/decoder/impeg2d_structs.h
index bdda8b8..48fdd13 100644
--- a/decoder/impeg2d_structs.h
+++ b/decoder/impeg2d_structs.h
@@ -342,6 +342,9 @@
     WORD32          i4_start_mb_y;
     WORD32          i4_end_mb_y;
 
+    /* Buffer to store the input stream */
+    UWORD8 *pu1_input_buffer;
+
     /**
      * Job queue buffer base
      */