Fixed #1271: protected all video features with PJMEDIA_HAS_VIDEO macro setting.

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@3667 74dad513-b988-da41-8d7b-12977e46ad98
This commit is contained in:
Nanang Izzuddin 2011-07-19 11:11:07 +00:00
parent d93c68a997
commit 63b3c13cd2
30 changed files with 255 additions and 71 deletions

View File

@ -31,9 +31,11 @@
/*
* Only build this file if PJMEDIA_HAS_FFMPEG_CODEC != 0
* Only build this file if PJMEDIA_HAS_FFMPEG_CODEC != 0 and
* PJMEDIA_HAS_VIDEO != 0
*/
#if defined(PJMEDIA_HAS_FFMPEG_CODEC) && PJMEDIA_HAS_FFMPEG_CODEC != 0
#if defined(PJMEDIA_HAS_FFMPEG_CODEC) && PJMEDIA_HAS_FFMPEG_CODEC != 0 && \
defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define THIS_FILE "ffmpeg_codecs.c"

View File

@ -22,6 +22,10 @@
#include <pj/errno.h>
#include <pj/string.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define THIS_FILE "h263_packetizer.c"
@ -285,3 +289,6 @@ PJ_DEF(pj_status_t) pjmedia_h263_unpacketize (pjmedia_h263_packetizer *pktz,
return PJ_SUCCESS;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -24,6 +24,10 @@
#include <pj/pool.h>
#include <pj/string.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define THIS_FILE "h264_packetizer.c"
#define DBG_PACKETIZE 0
@ -528,3 +532,6 @@ PJ_DEF(pj_status_t) pjmedia_h264_unpacketize(pjmedia_h264_packetizer *pktz,
return PJ_SUCCESS;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -22,7 +22,10 @@
#include <pj/os.h>
#include <pj/rand.h>
#if PJMEDIA_VIDEO_DEV_HAS_CBAR_SRC
#if defined(PJMEDIA_VIDEO_DEV_HAS_CBAR_SRC) && \
PJMEDIA_VIDEO_DEV_HAS_CBAR_SRC != 0
#define THIS_FILE "colorbar_dev.c"
#define DEFAULT_CLOCK_RATE 90000

View File

@ -22,7 +22,9 @@
#include <pj/os.h>
#include <pj/unicode.h>
#if PJMEDIA_VIDEO_DEV_HAS_DSHOW
#if defined(PJMEDIA_VIDEO_DEV_HAS_DSHOW) && PJMEDIA_VIDEO_DEV_HAS_DSHOW != 0
#ifdef _MSC_VER
# pragma warning(push, 3)

View File

@ -19,7 +19,9 @@
#include <pjmedia-videodev/config.h>
#if PJMEDIA_VIDEO_DEV_HAS_DSHOW
#if defined(PJMEDIA_VIDEO_DEV_HAS_DSHOW) && PJMEDIA_VIDEO_DEV_HAS_DSHOW != 0
#include <assert.h>
#include <streams.h>
@ -242,4 +244,5 @@ extern "C" void SourceFilter_SetMediaType(SourceFilter *src,
((OutputPin *)src->GetPin(0))->bufSize = pmt->lSampleSize;
}
#endif /* PJMEDIA_VIDEO_DEV_HAS_DSHOW */

View File

@ -25,6 +25,10 @@
* Message must be limited to 64 chars!
*/
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#if defined(PJ_HAS_ERROR_STRING) && (PJ_HAS_ERROR_STRING != 0)
static const struct
@ -110,3 +114,6 @@ PJ_DEF(pj_str_t) pjmedia_videodev_strerror(pj_status_t statcode,
return errstr;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -37,7 +37,9 @@
#include <pj/os.h>
#include <pj/unicode.h>
#if PJMEDIA_VIDEO_DEV_HAS_FFMPEG
#if defined(PJMEDIA_VIDEO_DEV_HAS_FFMPEG) && PJMEDIA_VIDEO_DEV_HAS_FFMPEG != 0
#define THIS_FILE "ffmpeg.c"
@ -511,4 +513,5 @@ static pj_status_t ffmpeg_stream_destroy(pjmedia_vid_dev_stream *s)
# pragma comment( lib, "avutil.lib")
#endif
#endif /* PJMEDIA_VIDEO_DEV_HAS_FFMPEG */

View File

@ -22,7 +22,9 @@
#include <pj/log.h>
#include <pj/os.h>
#if PJMEDIA_VIDEO_DEV_HAS_SDL
#if defined(PJMEDIA_VIDEO_DEV_HAS_SDL) && PJMEDIA_VIDEO_DEV_HAS_SDL != 0
#if defined(PJ_DARWINOS) && PJ_DARWINOS!=0
# include <Foundation/Foundation.h>
@ -1288,4 +1290,5 @@ static pj_status_t sdl_stream_destroy(pjmedia_vid_dev_stream *strm)
# endif
#endif
#endif /* PJMEDIA_VIDEO_DEV_HAS_SDL */

View File

@ -23,6 +23,10 @@
#include <pj/pool.h>
#include <pj/string.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define THIS_FILE "videodev.c"
#define DEFINE_CAP(name, info) {name, info}
@ -804,3 +808,6 @@ PJ_DEF(pj_status_t) pjmedia_vid_dev_stream_destroy(
{
return strm->op->destroy(strm);
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -32,6 +32,9 @@
#include <pj/string.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define THIS_FILE "avi_player.c"
#define AVIF_MUSTUSEINDEX 0x00000020
@ -709,3 +712,6 @@ static pj_status_t avi_on_destroy(pjmedia_port *this_port)
pj_file_close(fport->fd);
return PJ_SUCCESS;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -523,6 +523,9 @@ PJ_DEF(pj_status_t) pjmedia_endpt_create_audio_sdp(pjmedia_endpt *endpt,
return PJ_SUCCESS;
}
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
/* Create m=video SDP media line */
PJ_DEF(pj_status_t) pjmedia_endpt_create_video_sdp(pjmedia_endpt *endpt,
pj_pool_t *pool,
@ -530,6 +533,8 @@ PJ_DEF(pj_status_t) pjmedia_endpt_create_video_sdp(pjmedia_endpt *endpt,
unsigned options,
pjmedia_sdp_media **p_m)
{
const pj_str_t STR_VIDEO = { "video", 5 };
pjmedia_sdp_media *m;
pjmedia_vid_codec_info codec_info[PJMEDIA_VID_CODEC_MGR_MAX_CODECS];
@ -661,6 +666,8 @@ PJ_DEF(pj_status_t) pjmedia_endpt_create_video_sdp(pjmedia_endpt *endpt,
return PJ_SUCCESS;
}
#endif /* PJMEDIA_HAS_VIDEO */
/**
* Create a "blank" SDP session description. The SDP will contain basic SDP
@ -729,7 +736,6 @@ PJ_DEF(pj_status_t) pjmedia_endpt_create_sdp( pjmedia_endpt *endpt,
const pj_sockaddr *addr0;
pjmedia_sdp_session *sdp;
pjmedia_sdp_media *m;
unsigned i;
pj_status_t status;
/* Sanity check arguments */
@ -750,14 +756,20 @@ PJ_DEF(pj_status_t) pjmedia_endpt_create_sdp( pjmedia_endpt *endpt,
return status;
sdp->media[sdp->media_count++] = m;
/* The remaining stream, if any, are videos (by convention as well) */
for (i=1; i<stream_cnt; ++i) {
status = pjmedia_endpt_create_video_sdp(endpt, pool,
&sock_info[i], 0, &m);
if (status != PJ_SUCCESS)
return status;
sdp->media[sdp->media_count++] = m;
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
{
unsigned i;
/* The remaining stream, if any, are videos (by convention as well) */
for (i=1; i<stream_cnt; ++i) {
status = pjmedia_endpt_create_video_sdp(endpt, pool,
&sock_info[i], 0, &m);
if (status != PJ_SUCCESS)
return status;
sdp->media[sdp->media_count++] = m;
}
}
#endif
/* Done */
*p_sdp = sdp;

View File

@ -23,6 +23,52 @@
#include <pj/pool.h>
#include <pj/string.h>
PJ_DEF(void) pjmedia_format_init_audio( pjmedia_format *fmt,
pj_uint32_t fmt_id,
unsigned clock_rate,
unsigned channel_count,
unsigned bits_per_sample,
unsigned frame_time_usec,
pj_uint32_t avg_bps,
pj_uint32_t max_bps)
{
fmt->id = fmt_id;
fmt->type = PJMEDIA_TYPE_AUDIO;
fmt->detail_type = PJMEDIA_FORMAT_DETAIL_AUDIO;
fmt->det.aud.clock_rate = clock_rate;
fmt->det.aud.channel_count = channel_count;
fmt->det.aud.bits_per_sample = bits_per_sample;
fmt->det.aud.frame_time_usec = frame_time_usec;
fmt->det.aud.avg_bps = avg_bps;
fmt->det.aud.max_bps = max_bps;
}
PJ_DEF(pjmedia_audio_format_detail*)
pjmedia_format_get_audio_format_detail(const pjmedia_format *fmt,
pj_bool_t assert_valid)
{
if (fmt->detail_type==PJMEDIA_FORMAT_DETAIL_AUDIO) {
return (pjmedia_audio_format_detail*) &fmt->det.aud;
} else {
pj_assert(!assert_valid || !"Invalid audio format detail");
return NULL;
}
}
PJ_DEF(pjmedia_format*) pjmedia_format_copy(pjmedia_format *dst,
const pjmedia_format *src)
{
return (pjmedia_format*)pj_memcpy(dst, src, sizeof(*src));
}
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
static pj_status_t apply_packed_fmt(const pjmedia_video_format_info *fi,
pjmedia_video_apply_fmt_param *aparam);
@ -56,28 +102,6 @@ static pjmedia_video_format_info built_in_vid_fmt_info[] =
{PJMEDIA_FORMAT_I422JPEG, "I422JPG", PJMEDIA_COLOR_MODEL_YUV, 16, 3, &apply_planar_422},
};
PJ_DEF(void) pjmedia_format_init_audio( pjmedia_format *fmt,
pj_uint32_t fmt_id,
unsigned clock_rate,
unsigned channel_count,
unsigned bits_per_sample,
unsigned frame_time_usec,
pj_uint32_t avg_bps,
pj_uint32_t max_bps)
{
fmt->id = fmt_id;
fmt->type = PJMEDIA_TYPE_AUDIO;
fmt->detail_type = PJMEDIA_FORMAT_DETAIL_AUDIO;
fmt->det.aud.clock_rate = clock_rate;
fmt->det.aud.channel_count = channel_count;
fmt->det.aud.bits_per_sample = bits_per_sample;
fmt->det.aud.frame_time_usec = frame_time_usec;
fmt->det.aud.avg_bps = avg_bps;
fmt->det.aud.max_bps = max_bps;
}
PJ_DEF(void) pjmedia_format_init_video( pjmedia_format *fmt,
pj_uint32_t fmt_id,
unsigned width,
@ -112,18 +136,6 @@ PJ_DEF(void) pjmedia_format_init_video( pjmedia_format *fmt,
}
}
PJ_DEF(pjmedia_audio_format_detail*)
pjmedia_format_get_audio_format_detail(const pjmedia_format *fmt,
pj_bool_t assert_valid)
{
if (fmt->detail_type==PJMEDIA_FORMAT_DETAIL_AUDIO) {
return (pjmedia_audio_format_detail*) &fmt->det.aud;
} else {
pj_assert(!assert_valid || !"Invalid audio format detail");
return NULL;
}
}
PJ_DEF(pjmedia_video_format_detail*)
pjmedia_format_get_video_format_detail(const pjmedia_format *fmt,
pj_bool_t assert_valid)
@ -136,12 +148,6 @@ pjmedia_format_get_video_format_detail(const pjmedia_format *fmt,
}
}
PJ_DEF(pjmedia_format*) pjmedia_format_copy(pjmedia_format *dst,
const pjmedia_format *src)
{
return (pjmedia_format*)pj_memcpy(dst, src, sizeof(*src));
}
static pj_status_t apply_packed_fmt(const pjmedia_video_format_info *fi,
pjmedia_video_apply_fmt_param *aparam)
@ -364,3 +370,4 @@ PJ_DEF(void) pjmedia_video_format_mgr_destroy(pjmedia_video_format_mgr *mgr)
video_format_mgr_instance = NULL;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -24,6 +24,10 @@
#include <pj/log.h>
#include <pj/string.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define THIS_FILE "vid_codec.c"
static pjmedia_vid_codec_mgr *def_vid_codec_mgr;
@ -729,3 +733,5 @@ pjmedia_vid_codec_mgr_dealloc_codec(pjmedia_vid_codec_mgr *mgr,
return (*codec->factory->op->dealloc_codec)(codec->factory, codec);
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -24,6 +24,10 @@
#include <pj/ctype.h>
#include <pj/math.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define THIS_FILE "vid_codec_util.c"
/* If this is set to non-zero, H.264 custom negotiation will require
@ -617,3 +621,6 @@ PJ_DEF(pj_status_t) pjmedia_vid_codec_h264_apply_fmtp(
return PJ_SUCCESS;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -25,6 +25,10 @@
#include <pj/log.h>
#include <pj/pool.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define SIGNATURE PJMEDIA_SIG_VID_PORT
#define THIS_FILE "vid_port.c"
@ -946,3 +950,6 @@ static pj_status_t vid_pasv_port_get_frame(struct pjmedia_port *this_port,
return status;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -38,6 +38,9 @@
#include <pj/string.h> /* memcpy() */
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define THIS_FILE "vid_stream.c"
#define ERRLEVEL 1
#define LOGERR_(expr) stream_perror expr
@ -1938,3 +1941,4 @@ PJ_DEF(pj_status_t) pjmedia_vid_stream_info_from_sdp(
return status;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -23,6 +23,10 @@
#include <pj/log.h>
#include <pj/pool.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define TEE_PORT_NAME "vid_tee"
#define TEE_PORT_SIGN PJMEDIA_SIG_PORT_VID_TEE
#define MAX_DST_PORT_COUNT 20
@ -382,3 +386,6 @@ static pj_status_t tee_destroy(pjmedia_port *port)
return PJ_SUCCESS;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -58,9 +58,11 @@ int test_main(void)
mem = &caching_pool.factory;
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
pjmedia_video_format_mgr_create(pool, 64, 0, NULL);
pjmedia_converter_mgr_create(pool, NULL);
pjmedia_vid_codec_mgr_create(pool, NULL);
#endif
#if HAS_VID_PORT_TEST
DO_TEST(vid_port_test());
@ -99,10 +101,12 @@ on_return:
PJ_LOG(3,(THIS_FILE,"Looks like everything is okay!"));
}
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
pjmedia_video_format_mgr_destroy(pjmedia_video_format_mgr_instance());
pjmedia_converter_mgr_destroy(pjmedia_converter_mgr_instance());
pjmedia_vid_codec_mgr_destroy(pjmedia_vid_codec_mgr_instance());
#endif
pj_pool_release(pool);
pj_caching_pool_destroy(&caching_pool);

View File

@ -23,9 +23,9 @@
#include <pjmedia.h>
#include <pjlib.h>
#define HAS_VID_DEV_TEST 1
#define HAS_VID_PORT_TEST 0
#define HAS_VID_CODEC_TEST 1
#define HAS_VID_DEV_TEST PJMEDIA_HAS_VIDEO
#define HAS_VID_PORT_TEST PJMEDIA_HAS_VIDEO
#define HAS_VID_CODEC_TEST PJMEDIA_HAS_VIDEO
#define HAS_SDP_NEG_TEST 1
#define HAS_JBUF_TEST 1
#define HAS_MIPS_TEST 1

View File

@ -4,6 +4,10 @@
#include <pjmedia/vid_codec.h>
#include <pjmedia/port.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define THIS_FILE "vid_codec.c"
#define BYPASS_CODEC 0
@ -465,3 +469,4 @@ on_return:
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -23,6 +23,10 @@
#include <pjmedia/vid_codec.h>
#include <pjmedia_videodev.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define THIS_FILE "vid_dev_test.c"
#define LOOP_DURATION 10
@ -292,3 +296,6 @@ on_return:
return rc;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -23,6 +23,10 @@
#include <pjmedia/vid_codec.h>
#include <pjmedia_videodev.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#define THIS_FILE "vid_dev_test.c"
#define LOOP_DURATION 6
@ -239,3 +243,6 @@ on_return:
return rc;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -54,6 +54,9 @@
*/
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
/* For logging purpose. */
#define THIS_FILE "aviplay.c"
@ -529,3 +532,15 @@ int main(int argc, char *argv[])
{
return pj_run_app(&main_func, argc, argv, 0);
}
#else
int main(int argc, char *argv[])
{
PJ_UNUSED_ARG(argc);
PJ_UNUSED_ARG(argv);
puts("Error: this sample requires video capability (PJMEDIA_HAS_VIDEO == 1)");
return -1;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -103,7 +103,7 @@ static pjsip_inv_session *g_inv; /* Current invite session. */
static pjmedia_stream *g_med_stream; /* Call's audio stream. */
static pjmedia_snd_port *g_snd_port; /* Sound device. */
#if PJMEDIA_HAS_VIDEO
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
static pjmedia_vid_stream *g_med_vstream; /* Call's video stream. */
static pjmedia_vid_port *g_vid_capturer;/* Call's video capturer. */
static pjmedia_vid_port *g_vid_renderer;/* Call's video renderer. */
@ -373,8 +373,8 @@ int main(int argc, char *argv[])
#endif
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
/* Init video subsystem */
#if PJMEDIA_HAS_VIDEO
pool = pjmedia_endpt_create_pool(g_med_endpt, "Video subsystem", 512, 512);
status = pjmedia_video_format_mgr_create(pool, 64, 0, NULL);
PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1);
@ -385,7 +385,7 @@ int main(int argc, char *argv[])
status = pjmedia_vid_dev_subsys_init(&cp.factory);
PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1);
# if PJMEDIA_HAS_FFMPEG_CODEC
# if defined(PJMEDIA_HAS_FFMPEG_CODEC) && PJMEDIA_HAS_FFMPEG_CODEC!=0
/* Init ffmpeg video codecs */
status = pjmedia_codec_ffmpeg_init(NULL, &cp.factory);
PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1);
@ -557,8 +557,8 @@ int main(int argc, char *argv[])
if (g_snd_port)
pjmedia_snd_port_destroy(g_snd_port);
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
/* Destroy video ports */
#if PJMEDIA_HAS_VIDEO
if (g_vid_capturer)
pjmedia_vid_port_destroy(g_vid_capturer);
if (g_vid_renderer)
@ -568,9 +568,15 @@ int main(int argc, char *argv[])
/* Destroy streams */
if (g_med_stream)
pjmedia_stream_destroy(g_med_stream);
#if PJMEDIA_HAS_VIDEO
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
if (g_med_vstream)
pjmedia_vid_stream_destroy(g_med_vstream);
/* Deinit ffmpeg codec */
# if defined(PJMEDIA_HAS_FFMPEG_CODEC) && PJMEDIA_HAS_FFMPEG_CODEC!=0
pjmedia_codec_ffmpeg_deinit();
# endif
#endif
/* Destroy media transports */
@ -579,11 +585,6 @@ int main(int argc, char *argv[])
pjmedia_transport_close(g_med_transport[i]);
}
/* Deinit ffmpeg codec */
#if PJMEDIA_HAS_FFMPEG_CODEC
pjmedia_codec_ffmpeg_deinit();
#endif
/* Deinit pjmedia endpoint */
if (g_med_endpt)
pjmedia_endpt_destroy(g_med_endpt);
@ -885,7 +886,7 @@ static void call_on_media_update( pjsip_inv_session *inv,
* which is video stream. With this media port interface, we can attach
* the port directly to a renderer/capture video device.
*/
#if PJMEDIA_HAS_VIDEO
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
if (local_sdp->media_count > 1) {
pjmedia_vid_stream_info vstream_info;
pjmedia_vid_port_param vport_param;

View File

@ -35,6 +35,10 @@
#include <pjmedia-codec.h>
#include <pjmedia/transport_srtp.h>
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
#include <stdlib.h> /* atoi() */
#include <stdio.h>
@ -927,3 +931,16 @@ on_exit:
return (status == PJ_SUCCESS) ? 0 : 1;
}
#else
int main(int argc, char *argv[])
{
PJ_UNUSED_ARG(argc);
PJ_UNUSED_ARG(argv);
puts("Error: this sample requires video capability (PJMEDIA_HAS_VIDEO == 1)");
return -1;
}
#endif /* PJMEDIA_HAS_VIDEO */

View File

@ -382,6 +382,13 @@ PJ_DEF(pj_status_t) pjsua_acc_add( const pjsua_acc_config *cfg,
/* Must have a transport */
PJ_ASSERT_RETURN(pjsua_var.tpdata[0].data.ptr != NULL, PJ_EINVALIDOP);
/* Verify media count */
#if !defined(PJMEDIA_HAS_VIDEO) || (PJMEDIA_HAS_VIDEO == 0)
PJ_ASSERT_RETURN(cfg->max_video_cnt == 0, PJ_EINVAL);
#endif
PJ_ASSERT_RETURN(cfg->max_audio_cnt + cfg->max_video_cnt <=
PJSUA_MAX_CALL_MEDIA, PJ_ETOOMANY);
PJSUA_LOCK();
/* Find empty account id. */
@ -641,6 +648,14 @@ PJ_DEF(pj_status_t) pjsua_acc_modify( pjsua_acc_id acc_id,
PJ_ASSERT_RETURN(acc_id>=0 && acc_id<(int)PJ_ARRAY_SIZE(pjsua_var.acc),
PJ_EINVAL);
/* Verify media count */
#if !defined(PJMEDIA_HAS_VIDEO) || (PJMEDIA_HAS_VIDEO == 0)
PJ_ASSERT_RETURN(cfg->max_video_cnt == 0, PJ_EINVAL);
#endif
PJ_ASSERT_RETURN(cfg->max_audio_cnt + cfg->max_video_cnt <=
PJSUA_MAX_CALL_MEDIA, PJ_ETOOMANY);
PJSUA_LOCK();
acc = &pjsua_var.acc[acc_id];

View File

@ -1465,10 +1465,12 @@ PJ_DEF(pj_status_t) pjsua_call_get_stream_info( pjsua_call_id call_id,
status = pjmedia_stream_get_info(call_med->strm.a.stream,
&psi->info.aud);
break;
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
case PJMEDIA_TYPE_VIDEO:
status = pjmedia_vid_stream_get_info(call_med->strm.v.stream,
&psi->info.vid);
break;
#endif
default:
status = PJMEDIA_EINVALIMEDIATYPE;
break;
@ -1512,6 +1514,7 @@ PJ_DEF(pj_status_t) pjsua_call_get_stream_stat( pjsua_call_id call_id,
status = pjmedia_stream_get_stat_jbuf(call_med->strm.a.stream,
&stat->jbuf);
break;
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
case PJMEDIA_TYPE_VIDEO:
status = pjmedia_vid_stream_get_stat(call_med->strm.v.stream,
&stat->rtcp);
@ -1519,6 +1522,7 @@ PJ_DEF(pj_status_t) pjsua_call_get_stream_stat( pjsua_call_id call_id,
status = pjmedia_vid_stream_get_stat_jbuf(call_med->strm.v.stream,
&stat->jbuf);
break;
#endif
default:
status = PJMEDIA_EINVALIMEDIATYPE;
break;

View File

@ -312,6 +312,8 @@ static void dump_media_session(const char *indent,
info.tx_pt,
info.param->setting.frm_per_pkt*
info.param->info.frm_ptime);
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
} else if (call_med->type == PJMEDIA_TYPE_VIDEO) {
pjmedia_vid_stream *stream = call_med->strm.v.stream;
pjmedia_vid_stream_info info;
@ -343,6 +345,8 @@ static void dump_media_session(const char *indent,
vfd->size.w, vfd->size.h,
vfd->fps.num*1.0/vfd->fps.denum);
}
#endif /* PJMEDIA_HAS_VIDEO */
} else {
has_stat = PJ_FALSE;
}

View File

@ -1247,6 +1247,7 @@ pj_status_t pjsua_call_media_init(pjsua_call_media *call_med,
call_med->tp_st = PJSUA_MED_TP_IDLE;
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
/* While in initial call, set default video devices */
if (type == PJMEDIA_TYPE_VIDEO) {
call_med->strm.v.rdr_dev = acc->cfg.vid_rend_dev;
@ -1262,6 +1263,8 @@ pj_status_t pjsua_call_media_init(pjsua_call_media *call_med,
call_med->strm.v.cap_dev = info.id;
}
}
#endif
} else if (call_med->tp_st == PJSUA_MED_TP_DISABLED) {
/* Media is being reenabled. */
call_med->tp_st = PJSUA_MED_TP_INIT;
@ -1650,10 +1653,12 @@ pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id,
status = pjmedia_endpt_create_audio_sdp(pjsua_var.med_endpt, pool,
&tpinfo.sock_info, 0, &m);
break;
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
case PJMEDIA_TYPE_VIDEO:
status = pjmedia_endpt_create_video_sdp(pjsua_var.med_endpt, pool,
&tpinfo.sock_info, 0, &m);
break;
#endif
default:
pj_assert(!"Invalid call_med media type");
return PJ_EBUG;
@ -2124,7 +2129,7 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id,
call->audio_idx = mi;
}
break;
#if PJMEDIA_HAS_VIDEO
#if defined(PJMEDIA_HAS_VIDEO) && (PJMEDIA_HAS_VIDEO != 0)
case PJMEDIA_TYPE_VIDEO:
status = video_channel_update(call_med, tmp_pool,
local_sdp, remote_sdp);