diff --git a/src/gstamlv4l2videodec.c b/src/gstamlv4l2videodec.c
index 5814746..0bcfbb0 100644
--- a/src/gstamlv4l2videodec.c
+++ b/src/gstamlv4l2videodec.c
@@ -1374,6 +1374,52 @@
   gst_pad_pause_task (decoder->srcpad);
 }
 
+static combining_codec_data(GstAmlVideoDecoder * decoder, GstAmlVideoCodecFrame * frame)
+{
+  GstAmlV4l2VideoDec *self = GST_AML_V4L2_VIDEO_DEC(decoder);
+  gboolean need_codec_data = FALSE;
+
+  /*check if post codec_data to decoder.*/
+  if (self->input_state->codec_data && !self->codec_data_inject)
+  {
+    guint32 pixelformat = self->v4l2output->format.fmt.pix.pixelformat;
+    switch (pixelformat)
+    {
+        case V4L2_PIX_FMT_VP9:
+        case V4L2_PIX_FMT_AV1:
+          need_codec_data = FALSE;
+          self->codec_data_inject = TRUE;
+          GST_DEBUG_OBJECT (self, "not inject code_data,pixelformat:%" GST_FOURCC_FORMAT ,GST_FOURCC_ARGS (pixelformat));
+          break;
+        case V4L2_PIX_FMT_H264:
+        case V4L2_PIX_FMT_HEVC:
+        case V4L2_PIX_FMT_MPEG1:
+        case V4L2_PIX_FMT_MPEG2:
+        case V4L2_PIX_FMT_MPEG4:
+          need_codec_data = TRUE;
+          GST_DEBUG_OBJECT (self, "must inject code_data,pixelformat:%" GST_FOURCC_FORMAT ,GST_FOURCC_ARGS (pixelformat));
+          break;
+        default:
+          need_codec_data = FALSE;
+          self->codec_data_inject = TRUE;
+          GST_DEBUG_OBJECT (self, "default, not inject code_data,pixelformat:%" GST_FOURCC_FORMAT ,GST_FOURCC_ARGS (pixelformat));
+          break;
+      }
+      //should inject codec data to es buffer
+      if (need_codec_data && !self->v4l2output->secure_es) {
+        GstBuffer *buffer_input = gst_buffer_new();
+        gst_buffer_copy_into (buffer_input, self->input_state->codec_data,
+                              GST_BUFFER_COPY_MEMORY, 0, -1);
+        gst_buffer_copy_into (buffer_input, frame->input_buffer,
+                              GST_BUFFER_COPY_MEMORY, 0, -1);
+        gst_buffer_unref(frame->input_buffer);
+        frame->input_buffer = buffer_input;
+        GST_BUFFER_PTS(frame->input_buffer) = frame->pts;
+        self->codec_data_inject = TRUE;
+      }
+  }
+}
+
 static GstFlowReturn
 gst_aml_v4l2_video_dec_handle_frame (GstAmlVideoDecoder * decoder,
     GstAmlVideoCodecFrame * frame)
@@ -1417,21 +1463,7 @@
 
     GST_DEBUG_OBJECT (self, "Sending header");
 
-    codec_data = self->input_state->codec_data;
-
-    /* We are running in byte-stream mode, so we don't know the headers, but
-     * we need to send something, otherwise the decoder will refuse to
-     * initialize.
-     */
-    if (codec_data)
-    {
-      gst_buffer_ref (codec_data);
-    }
-    else
-    {
-      codec_data = gst_buffer_ref (frame->input_buffer);
-      processed = TRUE;
-    }
+    combining_codec_data(decoder, frame);
 
     /* Ensure input internal pool is active */
     if (!gst_buffer_pool_is_active (pool))
@@ -1453,12 +1485,10 @@
     }
 
     GST_AML_VIDEO_DECODER_STREAM_UNLOCK (decoder);
-    ret =
-        gst_aml_v4l2_buffer_pool_process(GST_AML_V4L2_BUFFER_POOL(self->v4l2output->pool), &codec_data);
-    self->codec_data_inject = TRUE;
-    GST_AML_VIDEO_DECODER_STREAM_LOCK (decoder);
+    processed = TRUE;
+    ret = gst_aml_v4l2_buffer_pool_process(GST_AML_V4L2_BUFFER_POOL(self->v4l2output->pool), &frame->input_buffer);
 
-    gst_buffer_unref (codec_data);
+    GST_AML_VIDEO_DECODER_STREAM_LOCK (decoder);
 
     /* For decoders G_FMT returns coded size, G_SELECTION returns visible size
      * in the compose rectangle. gst_aml_v4l2_object_acquire_format() checks both
@@ -1494,29 +1524,7 @@
   if (!processed)
   {
     GST_AML_VIDEO_DECODER_STREAM_UNLOCK (decoder);
-    if (!self->codec_data_inject && self->input_state->codec_data)
-    {
-      if (!self->v4l2output->secure_es)
-      {
-        GstBuffer *buffer_input = gst_buffer_new();
-        gst_buffer_copy_into (buffer_input, self->input_state->codec_data,
-                            GST_BUFFER_COPY_MEMORY, 0, -1);
-        gst_buffer_copy_into (buffer_input, frame->input_buffer,
-                            GST_BUFFER_COPY_MEMORY, 0, -1);
-        gst_buffer_unref(frame->input_buffer);
-        frame->input_buffer = buffer_input;
-        GST_BUFFER_PTS(frame->input_buffer) = frame->pts;
-        self->codec_data_inject = TRUE;
-      }
-      else
-      {
-        ret = gst_aml_v4l2_buffer_pool_process
-        (GST_AML_V4L2_BUFFER_POOL(self->v4l2output->pool), &self->input_state->codec_data);
-        self->codec_data_inject = TRUE;
-        if (ret != GST_FLOW_OK)
-            goto send_codec_failed;
-      }
-    }
+    combining_codec_data(decoder, frame);
     ret =
         gst_aml_v4l2_buffer_pool_process(GST_AML_V4L2_BUFFER_POOL(self->v4l2output->pool), &frame->input_buffer);
     GST_AML_VIDEO_DECODER_STREAM_LOCK (decoder);
