void media_stream_free(MediaStream *stream) { if (stream->sessions.rtp_session != NULL){ rtp_session_unregister_event_queue(stream->sessions.rtp_session, stream->evq); } if (stream->owns_sessions){ ms_media_stream_sessions_uninit(&stream->sessions); } if (stream->evq) ortp_ev_queue_destroy(stream->evq); if (stream->rc != NULL) ms_bitrate_controller_destroy(stream->rc); if (stream->rtpsend != NULL) ms_filter_destroy(stream->rtpsend); if (stream->rtprecv != NULL) ms_filter_destroy(stream->rtprecv); if (stream->encoder != NULL) ms_filter_destroy(stream->encoder); if (stream->decoder != NULL) ms_filter_destroy(stream->decoder); if (stream->voidsink != NULL) ms_filter_destroy(stream->voidsink); if (stream->qi) ms_quality_indicator_destroy(stream->qi); }
/* this code is not part of the library itself, it is part of the mediastream program */ void video_stream_free (VideoStream * stream) { if (stream->ortpZrtpContext) ortp_zrtp_context_destroy(stream->ortpZrtpContext); if (stream->session!=NULL){ rtp_session_unregister_event_queue(stream->session,stream->evq); rtp_session_destroy(stream->session); } if (stream->rtprecv != NULL) ms_filter_destroy (stream->rtprecv); if (stream->rtpsend!=NULL) ms_filter_destroy (stream->rtpsend); if (stream->source != NULL) ms_filter_destroy (stream->source); if (stream->output != NULL) ms_filter_destroy (stream->output); if (stream->encoder != NULL) ms_filter_destroy (stream->encoder); if (stream->decoder != NULL) ms_filter_destroy (stream->decoder); if (stream->sizeconv != NULL) ms_filter_destroy (stream->sizeconv); if (stream->pixconv!=NULL) ms_filter_destroy(stream->pixconv); if (stream->tee!=NULL) ms_filter_destroy(stream->tee); if (stream->tee2!=NULL) ms_filter_destroy(stream->tee2); if (stream->jpegwriter!=NULL) ms_filter_destroy(stream->jpegwriter); if (stream->output2!=NULL) ms_filter_destroy(stream->output2); if (stream->voidsink!=NULL) ms_filter_destroy(stream->voidsink); if (stream->ticker != NULL) ms_ticker_destroy (stream->ticker); if (stream->evq!=NULL) ortp_ev_queue_destroy(stream->evq); if (stream->display_name!=NULL) ms_free(stream->display_name); if (stream->rc!=NULL){ ms_bitrate_controller_destroy(stream->rc); } ms_free (stream); }
static void configure_video_source(VideoStream *stream){ MSVideoSize vsize,cam_vsize; float fps=15; MSPixFmt format; bool_t encoder_has_builtin_converter = FALSE; /* transmit orientation to source filter */ ms_filter_call_method(stream->source,MS_VIDEO_CAPTURE_SET_DEVICE_ORIENTATION,&stream->device_orientation); /* transmit its preview window id if any to source filter*/ if (stream->preview_window_id!=0){ video_stream_set_native_preview_window_id(stream, stream->preview_window_id); } ms_filter_call_method(stream->ms.encoder, MS_VIDEO_ENCODER_HAS_BUILTIN_CONVERTER, &encoder_has_builtin_converter); ms_filter_call_method(stream->ms.encoder,MS_FILTER_GET_VIDEO_SIZE,&vsize); vsize=get_compatible_size(vsize,stream->sent_vsize); ms_filter_call_method(stream->source,MS_FILTER_SET_VIDEO_SIZE,&vsize); /*the camera may not support the target size and suggest a one close to the target */ ms_filter_call_method(stream->source,MS_FILTER_GET_VIDEO_SIZE,&cam_vsize); if (cam_vsize.width*cam_vsize.height<=vsize.width*vsize.height && cam_vsize.width != vsize.width){ vsize=cam_vsize; ms_message("Output video size adjusted to match camera resolution (%ix%i)\n",vsize.width,vsize.height); } else if (cam_vsize.width*cam_vsize.height>vsize.width*vsize.height){ #if TARGET_IPHONE_SIMULATOR || defined(__arm__) ms_error("Camera is proposing a size bigger than encoder's suggested size (%ix%i > %ix%i) " "Using the camera size as fallback because cropping or resizing is not implemented for arm.", cam_vsize.width,cam_vsize.height,vsize.width,vsize.height); vsize=cam_vsize; #else vsize=get_with_same_orientation(vsize,cam_vsize); ms_warning("Camera video size greater than encoder one. A scaling filter will be used!\n"); #endif } ms_filter_call_method(stream->ms.encoder,MS_FILTER_SET_VIDEO_SIZE,&vsize); ms_filter_call_method(stream->ms.encoder,MS_FILTER_GET_FPS,&fps); ms_message("Setting sent vsize=%ix%i, fps=%f",vsize.width,vsize.height,fps); /* configure the filters */ if (ms_filter_get_id(stream->source)!=MS_STATIC_IMAGE_ID) { ms_filter_call_method(stream->source,MS_FILTER_SET_FPS,&fps); } /* get the output format for webcam reader */ ms_filter_call_method(stream->source,MS_FILTER_GET_PIX_FMT,&format); if ((encoder_has_builtin_converter == TRUE) || (stream->source_performs_encoding == TRUE)) { ms_filter_call_method(stream->ms.encoder, MS_FILTER_SET_PIX_FMT, &format); } else { if (format==MS_MJPEG){ stream->pixconv=ms_filter_new(MS_MJPEG_DEC_ID); }else{ stream->pixconv = ms_filter_new(MS_PIX_CONV_ID); /*set it to the pixconv */ ms_filter_call_method(stream->pixconv,MS_FILTER_SET_PIX_FMT,&format); ms_filter_call_method(stream->pixconv,MS_FILTER_SET_VIDEO_SIZE,&cam_vsize); } stream->sizeconv=ms_filter_new(MS_SIZE_CONV_ID); ms_filter_call_method(stream->sizeconv,MS_FILTER_SET_VIDEO_SIZE,&vsize); } if (stream->ms.rc){ ms_bitrate_controller_destroy(stream->ms.rc); stream->ms.rc=NULL; } if (stream->ms.use_rc){ stream->ms.rc=ms_av_bitrate_controller_new(NULL,NULL,stream->ms.session,stream->ms.encoder); } }