int _create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source, bool need_capsfilter, GList **element_list, bool is_audio);
int _set_encoder_element_bitrate(GstElement *encoder, int target_bitrate);
int _get_encoder_element_bitrate(GstElement *encoder, int *target_bitrate);
+void _set_caps_for_render(webrtc_gst_slot_s *source, GstCaps *caps, int av_idx);
+void _unset_caps_for_render(webrtc_gst_slot_s *source, int av_idx);
#endif /* __TIZEN_MEDIA_WEBRTC_SOURCE_COMMON_H__ */
gst_caps_unref(new_caps);
}
+ if (webrtc->state != WEBRTC_STATE_IDLE) {
+ GstCaps *new_caps;
+
+ if (!(new_caps = __make_video_raw_caps_with_resolution(source, &webrtc->ini, width, height)))
+ return WEBRTC_ERROR_INVALID_OPERATION;
+ PRINT_CAPS(new_caps, "appsrc");
+
+ _unset_caps_for_render(source, AV_IDX_VIDEO);
+ _set_caps_for_render(source, new_caps, AV_IDX_VIDEO);
+ }
+
source->video_info.width = width;
source->video_info.height = height;
gst_element_set_state(source->av[AV_IDX_AUDIO].render.pipeline, GST_STATE_NULL);
SAFE_GST_OBJECT_UNREF(source->av[AV_IDX_AUDIO].render.pipeline);
+ source->av[AV_IDX_AUDIO].render.appsrc = NULL;
+
return WEBRTC_ERROR_NONE;
}
gst_element_set_state(source->av[AV_IDX_VIDEO].render.pipeline, GST_STATE_NULL);
SAFE_GST_OBJECT_UNREF(source->av[AV_IDX_VIDEO].render.pipeline);
+ source->av[AV_IDX_VIDEO].render.appsrc = NULL;
+
return WEBRTC_ERROR_NONE;
}
gst_object_unref(source->av[idx].render.src_pad);
source->av[idx].render.src_pad = NULL;
- if (source->av[idx].render.appsrc_caps) {
- gst_caps_unref(source->av[idx].render.appsrc_caps);
- source->av[idx].render.appsrc_caps = NULL;
- }
+ _unset_caps_for_render(source, idx);
}
rtp_payload_info_s * _get_payload_info(webrtc_transceiver_codec_e codec)
if ((sink_caps = __make_default_encoded_caps(source, &webrtc->ini, NULL))) {
PRINT_CAPS(sink_caps, "capsfilter");
g_object_set(G_OBJECT(capsfilter), "caps", sink_caps, NULL);
- source->av[idx].render.appsrc_caps = sink_caps;
- if (source->av[idx].render.appsrc)
- g_object_set(G_OBJECT(source->av[idx].render.appsrc), "caps", sink_caps, NULL);
+
+ _set_caps_for_render(source, sink_caps, idx);
}
source->av[idx].render.need_decoding = true;
if ((sink_caps = __make_default_raw_caps(source, &webrtc->ini))) {
PRINT_CAPS(sink_caps, "capsfilter");
g_object_set(G_OBJECT(capsfilter), "caps", sink_caps, NULL);
- source->av[idx].render.appsrc_caps = sink_caps;
- if (source->av[idx].render.appsrc)
- g_object_set(G_OBJECT(source->av[idx].render.appsrc), "caps", sink_caps, NULL);
+
+ _set_caps_for_render(source, sink_caps, idx);
}
_add_probe_to_pad_for_render(source, idx, gst_element_get_static_pad(capsfilter, "src"), _source_data_probe_cb);
return WEBRTC_ERROR_INVALID_OPERATION;
}
+
+void _set_caps_for_render(webrtc_gst_slot_s *source, GstCaps *caps, int av_idx)
+{
+ RET_IF(source == NULL, "source is NULL");
+ RET_IF(caps == NULL, "caps is NULL");
+
+ source->av[av_idx].render.appsrc_caps = caps;
+
+ if (source->av[av_idx].render.appsrc)
+ g_object_set(G_OBJECT(source->av[av_idx].render.appsrc), "caps", caps, NULL);
+}
+
+void _unset_caps_for_render(webrtc_gst_slot_s *source, int av_idx)
+{
+ RET_IF(source == NULL, "source is NULL");
+
+ if (!(source->av[av_idx].render.appsrc_caps))
+ return;
+
+ gst_caps_unref(source->av[av_idx].render.appsrc_caps);
+ source->av[av_idx].render.appsrc_caps = NULL;
+}