cur_caps = player->v_stream_caps;
} else {
LOGW("streamtype is not audio or video");
- return FALSE;
+ goto __FAILED;
}
if (!cur_caps) {
LOGW("Current caps is NULL");
- return FALSE;
+ goto __FAILED;
}
str = gst_caps_get_structure(cur_caps, 0);
if (!str) {
LOGW("Failed to get caps info");
- return FALSE;
+ goto __FAILED;
}
/* Check if the codec data in the saved caps have been changed */
buffer = gst_value_get_buffer(value);
if (!gst_buffer_map(buffer, &codec_data_map, GST_MAP_READ)) {
LOGW("codec data buffer map failed");
- return FALSE;
+ goto __FAILED;
}
if (codec_data_map.size == codec_data_size) {
for (i = 0; i <= codec_data_map.size; i++) {
break;
}
gst_buffer_unmap(buffer, &codec_data_map);
- return FALSE;
+ goto __FAILED;
}
gst_buffer_unmap(buffer, &codec_data_map);
}
new_caps = gst_caps_copy(cur_caps);
if (!new_caps) {
LOGW("Failed to copy caps");
- return FALSE;
+ goto __FAILED;
}
new_buffer = gst_buffer_new_allocate(NULL, codec_data_size, NULL);
if (!new_buffer) {
LOGW("Failed to alloc gst buffer for codec data");
- gst_caps_unref(new_caps);
- return FALSE;
+ goto __FAILED;
}
gst_buffer_fill(new_buffer, 0, codec_data, codec_data_size);
gst_caps_set_simple(new_caps, "codec_data", GST_TYPE_BUFFER, new_buffer, NULL);
player->v_stream_caps = new_caps;
gst_caps_unref(cur_caps);
+ free(codec_data);
LOGD("need to update caps due to codec data is changed");
+
return TRUE;
+
+__FAILED:
+ if (new_caps)
+ gst_caps_unref(new_caps);
+
+ if (codec_data)
+ free(codec_data);
+
+ return FALSE;
}