v4l2dec: set I frame mode afte set_fmt [1/1]
PD#SWPL-174619
Problem:
develop only I frame mode
Solution:
aml v4l2 drive request set I frame after VIDIOC_S_FMT.
Verify:
ap222
Change-Id: I1bb8d4db2d35421c200ff8aed0505aa1534a4ec7
Signed-off-by: hanghang.luo <hanghang.luo@amlogic.com>
diff --git a/src/gstamlv4l2videodec.c b/src/gstamlv4l2videodec.c
index 317850e..cb7697f 100644
--- a/src/gstamlv4l2videodec.c
+++ b/src/gstamlv4l2videodec.c
@@ -482,13 +482,6 @@
gst_aml_v4l2_object_stop(self->v4l2capture);
self->output_flow = GST_FLOW_OK;
}
-
- if ((ret = gst_aml_v4l2_set_I_frame_mode(self->v4l2output)) == FALSE)
- {
- GST_ERROR_OBJECT(self, "config I frame mode error");
- goto done;
- }
-
if ((ret = gst_aml_v4l2_set_drm_mode(self->v4l2output)) == FALSE)
{
GST_ERROR_OBJECT(self, "config output drm mode error");
@@ -501,7 +494,18 @@
goto done;
}
- ret = gst_aml_v4l2_object_set_format(self->v4l2output, state->caps, &error);
+ if (!gst_aml_v4l2_object_set_format(self->v4l2output, state->caps, &error))
+ {
+ GST_ERROR_OBJECT(self, "set format error");
+ goto done;
+ }
+
+ // MUST: aml v4l2 drive request set I frame after VIDIOC_S_FMT.
+ if ((ret = gst_aml_v4l2_set_I_frame_mode(self->v4l2output)) == FALSE)
+ {
+ GST_ERROR_OBJECT(self, "config I frame mode error");
+ goto done;
+ }
gst_caps_replace(&self->probed_srccaps, NULL);
self->probed_srccaps = gst_aml_v4l2_object_probe_caps(self->v4l2capture,