1/* ------------------------------------------------------------------
2 * Copyright (C) 1998-2009 PacketVideo
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13 * express or implied.
14 * See the License for the specific language governing permissions
15 * and limitations under the License.
16 * -------------------------------------------------------------------
17 */
18#ifndef PVMF_SM_TUNABLES_H_INCLUDED
19#define PVMF_SM_TUNABLES_H_INCLUDED
20
21#ifndef PVMF_STREAMING_MEM_CONFIG_H_INCLUDED
22#include "pvmf_streaming_mem_config.h"
23#endif
24
25/**
26 * This file contains all the tunable parameters in streaming manager
27 * and its children nodes. These are compile time constants for now
28 * and once we have the capability and config interface implemented
29 * for all the nodes, these would be configured thru that interface
30 */
31
32/*
33 * Streaming Manager Node config constants
34 */
35
36
37/*
38 * Session Controller Node config constants
39 */
40
41/*
42 * Jitter Buffer Node config constants
43 */
44#define PVMF_JITTER_BUFFER_NODE_MEDIA_MSG_SIZE 128
45
46#define DEFAULT_MAX_INACTIVITY_DURATION_IN_MS 70000
47
48#define DEFAULT_NUM_FRAGMENTS_IN_MEDIA_MSG 1
49
50#define DEFAULT_NUM_MEDIA_MSGS_IN_JITTER_BUFFER    2048 //64
51
52#define PVMF_JITTER_BUFFER_NODE_THINNING_PERCENT 10
53
54#define PVMF_JITTER_BUFFER_NODE_THINNING_LIVE_INTERVAL_MS 300000
55
56#define PVMF_JITTER_BUFFER_NODE_THINNING_MIN_DURATION_MS 300000
57
58/* Percentage of the jitter buffer occupancy */
59/* High water mark is in terms of buffer occupancy */
60/* Low water mark is in terms of time */
61#define DEFAULT_JITTER_BUFFER_HIGH_WATER_MARK 0.80
62#define DEFAULT_JITTER_BUFFER_LOW_WATER_MARK  0.40
63
64#if (PMVF_JITTER_BUFFER_NODE_USE_NO_RESIZE_ALLOC)
65#define MAX_SOCKET_BUFFER_SIZE        1500
66#else
67//This should be the same size as DEFAULT_RTPPACKETSOURCE_TCP_BUFFER_SIZE.
68#define MAX_SOCKET_BUFFER_SIZE        (16*1024)
69#define MIN_SOCKET_BUFFER_SIZE        (2*1024)
70#endif
71#define MAX_FEEDBACK_SOCKET_BUFFER_SIZE   (1500)
72
73/* Based on 128 Kbps for a jitter of 7 seconds */
74#define DEFAULT_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES 112000
75//This must be 2*MAX_SOCKET_BUFFER_SIZE because the PS Node allocates
76//MAX_SOCKET_BUFFER_SIZE for receive data per request.  It must be at least 2x
77//to prevent packet loss due to out-of-memory because the PS Node will
78//immediately requests the next packet when one comes in but before the
79//previous packet is consumed.
80#define DEFAULT_RTCP_SOCKET_MEM_POOL_SIZE_IN_BYTES (2 * MAX_SOCKET_BUFFER_SIZE)
81/* Expressed as a percentage to account for PVMF media msg overhead */
82#define PVMF_JITTER_BUFFER_NODE_MEM_POOL_OVERHEAD  10
83//This should be at least 2x the max socket buffer size to prevent
84//packet loss due to waiting for free buffers.
85#define MIN_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES      (8 * MAX_SOCKET_BUFFER_SIZE)
86#define SOCKET_MEM_POOL_OVERHEAD_IN_BYTES          256
87
88// ************* PVMFSMSharedBufferAllocWithReSize  constants
89
90// default number of times we can add another buffer
91#define DEFAULT_MAX_NUM_SOCKETMEMPOOL_RESIZES      1   // allow one resize only
92#define MAX_NUM_SOCKETMEMPOOL_RESIZES              1000
93#define MIN_NUM_SOCKETMEMPOOL_RESIZES              0
94
95// default size of added buffers
96#define DEFAULT_MAX_SOCKETMEMPOOL_RESIZELEN_FEEDBACK_PORT  \
97                                MIN_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES
98#define DEFAULT_MAX_SOCKETMEMPOOL_RESIZELEN_INPUT_PORT  \
99                (MIN_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES + 2*MAX_SOCKET_BUFFER_SIZE)
100
101#define MIN_SOCKETMEMPOOL_RESIZELEN_INPUT_PORT     0
102#define MAX_SOCKETMEMPOOL_RESIZELEN_INPUT_PORT     128*1024
103
104// *************
105
106#define MAX_RTCP_SOURCES 31
107#define MAX_RTCP_BLOCK_SIZE 512
108#define DEFAULT_RTCP_MEM_POOL_BUFFERS 4
109#define RTCP_RAND_SEED 666
110
111#define MIN_RTSP_SERVER_INACTIVITY_TIMEOUT_IN_SEC   1
112#define MAX_RTSP_SERVER_INACTIVITY_TIMEOUT_IN_SEC   300
113
114// RTCP INTERVAL related
115#define DEFAULT_RTCP_INTERVAL_USEC 1000000
116#define DEFAULT_RTCP_INTERVAL_SEC  1
117#define RTCP_FIXED_INTERVAL_MODE   1
118
119
120#define DEFAULT_JITTER_BUFFER_DURATION_IN_MS 4000
121#define MAX_JITTER_BUFFER_DURATION_IN_MS     100000
122#define MIN_JITTER_BUFFER_DURATION_IN_MS     1000
123
124#define DEFAULT_JITTER_BUFFER_UNDERFLOW_THRESHOLD_IN_MS 500
125#define DEFAULT_PLAY_BACK_THRESHOLD_IN_MS    250
126#define DEFAULT_ESTIMATED_SERVER_KEEPAHEAD_FOR_OOO_SYNC_IN_MS   500
127
128/* Status event happends at 5 Hz (200 msec) intervals */
129#define PVMF_JITTER_BUFFER_BUFFERING_STATUS_EVENT_FREQUENCY 5
130#define PVMF_JITTER_BUFFER_BUFFERING_STATUS_EVENT_CYCLES 1
131
132#define PVMF_JITTER_BUFFER_NODE_SESSION_DURATION_MONITORING_INTERVAL_MAX_IN_MS (10*60*1000)
133
134/* Non-resizable allocator related constants */
135#define PVMF_JB_NO_RESIZE_ALLOC_NUM_CHUNKS_RTP 256
136#define PVMF_JB_NO_RESIZE_ALLOC_NUM_CHUNKS_FB  16
137#define PVMF_JB_NO_RESIZE_ALLOC_CHUNK_SIZE (MAX_SOCKET_BUFFER_SIZE + 128)
138
139#define PVMF_EOS_TIMER_GAURD_BAND_IN_MS 200
140
141/* Firewall packet related */
142#define PVMF_JITTER_BUFFER_NODE_DEFAULT_FIREWALL_PKT_ATTEMPTS 3
143#define PVMF_JITTER_BUFFER_NODE_MAX_FIREWALL_PKT_SIZE       8
144#define PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_MEMPOOL_SIZE   256
145#define PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_DEFAULT_SERVER_RESPONSE_TIMEOUT_IN_MS 1000
146#define PVMF_JITTER_BUFFER_NODE_MAX_RTP_FIREWALL_PKT_SIZE   12
147#define PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_DEFAULT_PAUSE_DURATION_IN_MS 20000
148
149#define JITTERBUFFERNODE_MAX_RUNL_TIME_IN_MS 25
150
151#define PVMF_SM_MSHTTP_NODE_DEFAULT_JITTER_BUFFER_SIZE (2*1024*1024)
152/* Media layer node related */
153#define MEDIALAYERNODE_MAXNUM_MEDIA_DATA     10
154#define MEDIALAYERNODE_MAX_RUNL_TIME_IN_MS   25
155
156/* Jitter buffer overflow related */
157#define CONSECUTIVE_LOW_BUFFER_COUNT_THRESHOLD 100
158#define MIN_PERCENT_OCCUPANCY_THRESHOLD 10
159#define JITTER_BUFFER_DURATION_MULTIPLIER_THRESHOLD 1.5
160#endif
161
162
163