blob: a5d3627bc9575e32750e9c951d85dee7601ad218 [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 1998-2009 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
#ifndef PVMF_SM_TUNABLES_H_INCLUDED
#define PVMF_SM_TUNABLES_H_INCLUDED
#ifndef PVMF_STREAMING_MEM_CONFIG_H_INCLUDED
#include "pvmf_streaming_mem_config.h"
#endif
/**
* This file contains all the tunable parameters in streaming manager
* and its children nodes. These are compile time constants for now
* and once we have the capability and config interface implemented
* for all the nodes, these would be configured thru that interface
*/
/*
* Streaming Manager Node config constants
*/
/*
* Session Controller Node config constants
*/
/*
* Jitter Buffer Node config constants
*/
#define PVMF_JITTER_BUFFER_NODE_MEDIA_MSG_SIZE 128
#define DEFAULT_MAX_INACTIVITY_DURATION_IN_MS 70000
#define DEFAULT_NUM_FRAGMENTS_IN_MEDIA_MSG 1
#define DEFAULT_NUM_MEDIA_MSGS_IN_JITTER_BUFFER 2048 //64
#define PVMF_JITTER_BUFFER_NODE_THINNING_PERCENT 10
#define PVMF_JITTER_BUFFER_NODE_THINNING_LIVE_INTERVAL_MS 300000
#define PVMF_JITTER_BUFFER_NODE_THINNING_MIN_DURATION_MS 300000
/* Percentage of the jitter buffer occupancy */
/* High water mark is in terms of buffer occupancy */
/* Low water mark is in terms of time */
#define DEFAULT_JITTER_BUFFER_HIGH_WATER_MARK 0.80
#define DEFAULT_JITTER_BUFFER_LOW_WATER_MARK 0.40
#if (PMVF_JITTER_BUFFER_NODE_USE_NO_RESIZE_ALLOC)
#define MAX_SOCKET_BUFFER_SIZE 1500
#else
//This should be the same size as DEFAULT_RTPPACKETSOURCE_TCP_BUFFER_SIZE.
#define MAX_SOCKET_BUFFER_SIZE (16*1024)
#define MIN_SOCKET_BUFFER_SIZE (2*1024)
#endif
#define MAX_FEEDBACK_SOCKET_BUFFER_SIZE (1500)
/* Based on 128 Kbps for a jitter of 7 seconds */
#define DEFAULT_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES 112000
//This must be 2*MAX_SOCKET_BUFFER_SIZE because the PS Node allocates
//MAX_SOCKET_BUFFER_SIZE for receive data per request. It must be at least 2x
//to prevent packet loss due to out-of-memory because the PS Node will
//immediately requests the next packet when one comes in but before the
//previous packet is consumed.
#define DEFAULT_RTCP_SOCKET_MEM_POOL_SIZE_IN_BYTES (2 * MAX_SOCKET_BUFFER_SIZE)
/* Expressed as a percentage to account for PVMF media msg overhead */
#define PVMF_JITTER_BUFFER_NODE_MEM_POOL_OVERHEAD 10
//This should be at least 2x the max socket buffer size to prevent
//packet loss due to waiting for free buffers.
#define MIN_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES (8 * MAX_SOCKET_BUFFER_SIZE)
#define SOCKET_MEM_POOL_OVERHEAD_IN_BYTES 256
// ************* PVMFSMSharedBufferAllocWithReSize constants
// default number of times we can add another buffer
#define DEFAULT_MAX_NUM_SOCKETMEMPOOL_RESIZES 1 // allow one resize only
#define MAX_NUM_SOCKETMEMPOOL_RESIZES 1000
#define MIN_NUM_SOCKETMEMPOOL_RESIZES 0
// default size of added buffers
#define DEFAULT_MAX_SOCKETMEMPOOL_RESIZELEN_FEEDBACK_PORT \
MIN_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES
#define DEFAULT_MAX_SOCKETMEMPOOL_RESIZELEN_INPUT_PORT \
(MIN_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES + 2*MAX_SOCKET_BUFFER_SIZE)
#define MIN_SOCKETMEMPOOL_RESIZELEN_INPUT_PORT 0
#define MAX_SOCKETMEMPOOL_RESIZELEN_INPUT_PORT 128*1024
// *************
#define MAX_RTCP_SOURCES 31
#define MAX_RTCP_BLOCK_SIZE 512
#define DEFAULT_RTCP_MEM_POOL_BUFFERS 4
#define RTCP_RAND_SEED 666
#define MIN_RTSP_SERVER_INACTIVITY_TIMEOUT_IN_SEC 1
#define MAX_RTSP_SERVER_INACTIVITY_TIMEOUT_IN_SEC 300
// RTCP INTERVAL related
#define DEFAULT_RTCP_INTERVAL_USEC 1000000
#define DEFAULT_RTCP_INTERVAL_SEC 1
#define RTCP_FIXED_INTERVAL_MODE 1
#define DEFAULT_JITTER_BUFFER_DURATION_IN_MS 4000
#define MAX_JITTER_BUFFER_DURATION_IN_MS 100000
#define MIN_JITTER_BUFFER_DURATION_IN_MS 1000
#define DEFAULT_JITTER_BUFFER_UNDERFLOW_THRESHOLD_IN_MS 500
#define DEFAULT_PLAY_BACK_THRESHOLD_IN_MS 250
#define DEFAULT_ESTIMATED_SERVER_KEEPAHEAD_FOR_OOO_SYNC_IN_MS 500
/* Status event happends at 5 Hz (200 msec) intervals */
#define PVMF_JITTER_BUFFER_BUFFERING_STATUS_EVENT_FREQUENCY 5
#define PVMF_JITTER_BUFFER_BUFFERING_STATUS_EVENT_CYCLES 1
#define PVMF_JITTER_BUFFER_NODE_SESSION_DURATION_MONITORING_INTERVAL_MAX_IN_MS (10*60*1000)
/* Non-resizable allocator related constants */
#define PVMF_JB_NO_RESIZE_ALLOC_NUM_CHUNKS_RTP 256
#define PVMF_JB_NO_RESIZE_ALLOC_NUM_CHUNKS_FB 16
#define PVMF_JB_NO_RESIZE_ALLOC_CHUNK_SIZE (MAX_SOCKET_BUFFER_SIZE + 128)
#define PVMF_EOS_TIMER_GAURD_BAND_IN_MS 200
/* Firewall packet related */
#define PVMF_JITTER_BUFFER_NODE_DEFAULT_FIREWALL_PKT_ATTEMPTS 3
#define PVMF_JITTER_BUFFER_NODE_MAX_FIREWALL_PKT_SIZE 8
#define PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_MEMPOOL_SIZE 256
#define PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_DEFAULT_SERVER_RESPONSE_TIMEOUT_IN_MS 1000
#define PVMF_JITTER_BUFFER_NODE_MAX_RTP_FIREWALL_PKT_SIZE 12
#define PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_DEFAULT_PAUSE_DURATION_IN_MS 20000
#define JITTERBUFFERNODE_MAX_RUNL_TIME_IN_MS 25
#define PVMF_SM_MSHTTP_NODE_DEFAULT_JITTER_BUFFER_SIZE (2*1024*1024)
/* Media layer node related */
#define MEDIALAYERNODE_MAXNUM_MEDIA_DATA 10
#define MEDIALAYERNODE_MAX_RUNL_TIME_IN_MS 25
/* Jitter buffer overflow related */
#define CONSECUTIVE_LOW_BUFFER_COUNT_THRESHOLD 100
#define MIN_PERCENT_OCCUPANCY_THRESHOLD 10
#define JITTER_BUFFER_DURATION_MULTIPLIER_THRESHOLD 1.5
#endif