From 0925db939b62aee050a112530461f29f3a2262d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joni=20R=C3=A4s=C3=A4nen?= Date: Wed, 11 Sep 2024 15:28:59 +0300 Subject: [PATCH] Release 3.1.3 --- cmake/ProjectDetails.cmake | 2 +- docs/Doxyfile | 2 +- docs/html/annotated.html | 34 +- docs/html/bdwn.png | Bin 147 -> 0 bytes docs/html/classes.html | 28 +- docs/html/classuvgrtp_1_1context-members.html | 28 +- docs/html/classuvgrtp_1_1context.html | 59 +- .../classuvgrtp_1_1media__stream-members.html | 28 +- docs/html/classuvgrtp_1_1media__stream.html | 217 ++-- docs/html/classuvgrtp_1_1rtcp-members.html | 28 +- docs/html/classuvgrtp_1_1rtcp.html | 141 ++- docs/html/classuvgrtp_1_1session-members.html | 28 +- docs/html/classuvgrtp_1_1session.html | 70 +- docs/html/clipboard.js | 61 ++ docs/html/clock_8hh_source.html | 28 +- docs/html/context_8hh_source.html | 34 +- docs/html/cookie.js | 58 ++ .../dir_9cba3ccb450b89ac6f0c2a18abcbadf0.html | 28 +- .../dir_d44c64559bbebec7f509842c48db8b23.html | 30 +- .../dir_e3f96ff476f8286b6e150580a2f7bd74.html | 48 +- docs/html/doc.png | Bin 746 -> 0 bytes docs/html/doc.svg | 12 + docs/html/docd.png | Bin 756 -> 0 bytes docs/html/docd.svg | 12 + docs/html/doxygen.css | 356 +++++-- docs/html/doxygen.svg | 4 +- docs/html/doxygen_crawl.html | 297 ++++++ docs/html/dynsections.js | 257 +++-- docs/html/files.html | 34 +- docs/html/folderclosed.png | Bin 616 -> 0 bytes docs/html/folderclosed.svg | 11 + docs/html/folderclosedd.svg | 11 + docs/html/folderopen.png | Bin 597 -> 0 bytes docs/html/folderopen.svg | 17 + docs/html/folderopend.svg | 12 + docs/html/frame_8hh_source.html | 116 ++- docs/html/functions.html | 28 +- docs/html/functions_func.html | 30 +- docs/html/functions_vars.html | 30 +- docs/html/globals.html | 29 +- docs/html/globals_enum.html | 30 +- docs/html/globals_eval.html | 31 +- docs/html/index.html | 32 +- docs/html/jquery.js | 190 +++- docs/html/lib_8hh_source.html | 28 +- docs/html/media__stream_8hh_source.html | 139 +-- docs/html/menu.js | 38 +- docs/html/minus.svg | 8 + docs/html/minusd.svg | 8 + docs/html/navtree.css | 149 +++ docs/html/plus.svg | 9 + docs/html/plusd.svg | 9 + docs/html/resize.js | 147 +++ docs/html/rtcp_8hh_source.html | 46 +- docs/html/search/all_0.js | 3 +- docs/html/search/all_1.js | 3 +- docs/html/search/all_10.js | 7 + docs/html/search/all_11.js | 4 + docs/html/search/all_12.js | 9 + docs/html/search/all_13.js | 112 +++ docs/html/search/all_14.js | 20 + docs/html/search/all_15.js | 4 + docs/html/search/all_16.js | 5 + docs/html/search/all_17.js | 4 + docs/html/search/all_18.js | 4 + docs/html/search/all_19.js | 4 + docs/html/search/all_2.js | 9 +- docs/html/search/all_3.js | 3 +- docs/html/search/all_4.js | 2 +- docs/html/search/all_5.js | 4 +- docs/html/search/all_6.js | 7 +- docs/html/search/all_7.js | 2 +- docs/html/search/all_8.js | 12 +- docs/html/search/all_9.js | 5 +- docs/html/search/all_a.js | 8 +- docs/html/search/all_b.js | 109 +- docs/html/search/all_c.js | 9 +- docs/html/search/all_d.js | 8 +- docs/html/search/all_e.js | 2 +- docs/html/search/all_f.js | 5 + docs/html/search/close.svg | 19 +- docs/html/search/enumvalues_0.js | 157 +-- docs/html/search/mag.svg | 19 +- docs/html/search/mag_d.svg | 19 +- docs/html/search/mag_sel.svg | 53 +- docs/html/search/mag_seld.svg | 59 +- docs/html/search/search.js | 942 ++++++++---------- docs/html/search/searchdata.js | 2 +- docs/html/search/variables_5.js | 2 +- docs/html/search/variables_7.js | 4 + docs/html/session_8hh_source.html | 34 +- ...1_1frame_1_1rtcp__app__packet-members.html | 28 +- ...tuvgrtp_1_1frame_1_1rtcp__app__packet.html | 40 +- ...rtp_1_1frame_1_1rtcp__fb__fci-members.html | 108 ++ ...tructuvgrtp_1_1frame_1_1rtcp__fb__fci.html | 181 ++++ ..._1_1frame_1_1rtcp__fb__packet-members.html | 110 ++ ...ctuvgrtp_1_1frame_1_1rtcp__fb__packet.html | 215 ++++ ...uvgrtp_1_1frame_1_1rtcp__fir-members.html} | 41 +- .../structuvgrtp_1_1frame_1_1rtcp__fir.html | 158 +++ ...grtp_1_1frame_1_1rtcp__header-members.html | 28 +- ...structuvgrtp_1_1frame_1_1rtcp__header.html | 57 +- ...ame_1_1rtcp__receiver__report-members.html | 28 +- ...tp_1_1frame_1_1rtcp__receiver__report.html | 36 +- ...1frame_1_1rtcp__report__block-members.html | 28 +- ...vgrtp_1_1frame_1_1rtcp__report__block.html | 44 +- ...uvgrtp_1_1frame_1_1rtcp__rpsi-members.html | 108 ++ .../structuvgrtp_1_1frame_1_1rtcp__rpsi.html | 176 ++++ ...1_1frame_1_1rtcp__sdes__chunk-members.html | 28 +- ...tuvgrtp_1_1frame_1_1rtcp__sdes__chunk.html | 34 +- ..._1_1frame_1_1rtcp__sdes__item-members.html | 28 +- ...ctuvgrtp_1_1frame_1_1rtcp__sdes__item.html | 36 +- ..._1frame_1_1rtcp__sdes__packet-members.html | 28 +- ...uvgrtp_1_1frame_1_1rtcp__sdes__packet.html | 34 +- ..._1frame_1_1rtcp__sender__info-members.html | 28 +- ...uvgrtp_1_1frame_1_1rtcp__sender__info.html | 40 +- ...frame_1_1rtcp__sender__report-members.html | 28 +- ...grtp_1_1frame_1_1rtcp__sender__report.html | 38 +- ...tuvgrtp_1_1frame_1_1rtcp__sli-members.html | 108 ++ .../structuvgrtp_1_1frame_1_1rtcp__sli.html | 176 ++++ ...uvgrtp_1_1frame_1_1rtp__frame-members.html | 28 +- .../structuvgrtp_1_1frame_1_1rtp__frame.html | 42 +- docs/html/tabs.css | 2 +- docs/html/util_8hh.html | 243 ++--- docs/html/util_8hh_source.html | 229 +++-- docs/html/version_8hh_source.html | 28 +- docs/html/wrapper__c_8hh_source.html | 28 +- 126 files changed, 5299 insertions(+), 2039 deletions(-) delete mode 100644 docs/html/bdwn.png create mode 100644 docs/html/clipboard.js create mode 100644 docs/html/cookie.js delete mode 100644 docs/html/doc.png create mode 100644 docs/html/doc.svg delete mode 100644 docs/html/docd.png create mode 100644 docs/html/docd.svg create mode 100644 docs/html/doxygen_crawl.html delete mode 100644 docs/html/folderclosed.png create mode 100644 docs/html/folderclosed.svg create mode 100644 docs/html/folderclosedd.svg delete mode 100644 docs/html/folderopen.png create mode 100644 docs/html/folderopen.svg create mode 100644 docs/html/folderopend.svg create mode 100644 docs/html/minus.svg create mode 100644 docs/html/minusd.svg create mode 100644 docs/html/navtree.css create mode 100644 docs/html/plus.svg create mode 100644 docs/html/plusd.svg create mode 100644 docs/html/resize.js create mode 100644 docs/html/search/all_10.js create mode 100644 docs/html/search/all_11.js create mode 100644 docs/html/search/all_12.js create mode 100644 docs/html/search/all_13.js create mode 100644 docs/html/search/all_14.js create mode 100644 docs/html/search/all_15.js create mode 100644 docs/html/search/all_16.js create mode 100644 docs/html/search/all_17.js create mode 100644 docs/html/search/all_18.js create mode 100644 docs/html/search/all_19.js create mode 100644 docs/html/search/all_f.js create mode 100644 docs/html/search/variables_7.js create mode 100644 docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__fci-members.html create mode 100644 docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__fci.html create mode 100644 docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__packet-members.html create mode 100644 docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__packet.html rename docs/html/{dir_49e56c817e5e54854c35e136979f97ca.html => structuvgrtp_1_1frame_1_1rtcp__fir-members.html} (56%) create mode 100644 docs/html/structuvgrtp_1_1frame_1_1rtcp__fir.html create mode 100644 docs/html/structuvgrtp_1_1frame_1_1rtcp__rpsi-members.html create mode 100644 docs/html/structuvgrtp_1_1frame_1_1rtcp__rpsi.html create mode 100644 docs/html/structuvgrtp_1_1frame_1_1rtcp__sli-members.html create mode 100644 docs/html/structuvgrtp_1_1frame_1_1rtcp__sli.html diff --git a/cmake/ProjectDetails.cmake b/cmake/ProjectDetails.cmake index 1bd1976e..0c88126c 100644 --- a/cmake/ProjectDetails.cmake +++ b/cmake/ProjectDetails.cmake @@ -1,3 +1,3 @@ -set(uvgrtp_VER 3.1.2) +set(uvgrtp_VER 3.1.3) set(uvgrtp_DESCR "uvgRTP is an Real-Time Transport Protocol (RTP) library written in C++ with a focus on simple to use and high-efficiency media delivery over the internet") set(uvgrtp_URL "https://github.com/ultravideo/uvgRTP") \ No newline at end of file diff --git a/docs/Doxyfile b/docs/Doxyfile index c6b8f900..a9dede4b 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -48,7 +48,7 @@ PROJECT_NAME = uvgRTP # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 3.1.2 +PROJECT_NUMBER = 3.1.3 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/docs/html/annotated.html b/docs/html/annotated.html index 02da174b..792bdbc1 100644 --- a/docs/html/annotated.html +++ b/docs/html/annotated.html @@ -3,12 +3,16 @@ - + uvgRTP: Class List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,24 +34,35 @@
- + + +
+
Here are the classes, structs, unions and interfaces with brief descriptions:
-
[detail level 123]
- - +
[detail level 123]
 Nuvgrtp
 Nframe
+ + @@ -101,7 +116,8 @@ + diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png deleted file mode 100644 index 940a0b950443a0bb1b216ac03c45b8a16c955452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T - + uvgRTP: Class Index + + + + @@ -21,7 +25,7 @@ @@ -30,24 +34,35 @@
 Nuvgrtp
 Nframe
 Crtcp_app_packetSee RFC 3550 section 6.7
 Crtcp_fb_fciRTCP Feedback Control Information, See RFC 4585 section 6.1
 Crtcp_fb_packetFeedback message. See RFC 4585 section 6.1
-
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
- + +
+
+
+
diff --git a/docs/html/classuvgrtp_1_1context-members.html b/docs/html/classuvgrtp_1_1context-members.html index 1d966469..0b977386 100644 --- a/docs/html/classuvgrtp_1_1context-members.html +++ b/docs/html/classuvgrtp_1_1context-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::context Member List
@@ -89,7 +104,8 @@
+
diff --git a/docs/html/classuvgrtp_1_1context.html b/docs/html/classuvgrtp_1_1context.html index 7607fa1c..c2648f6d 100644 --- a/docs/html/classuvgrtp_1_1context.html +++ b/docs/html/classuvgrtp_1_1context.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::context Class Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Public Member Functions | @@ -82,28 +97,28 @@

Provides CNAME isolation and can be used to create uvgrtp::session objects. - More...

+ More...

#include <context.hh>

- + - + - + - + - + - +

Public Member Functions

 context ()
 context ()
 RTP context constructor.
 
 ~context ()
 ~context ()
 RTP context destructor.
 
uvgrtp::sessioncreate_session (std::pair< std::string, std::string > addresses)
uvgrtp::sessioncreate_session (std::pair< std::string, std::string > addresses)
 Create a new RTP session between two IP addresses.
 
uvgrtp::sessioncreate_session (std::string address)
uvgrtp::sessioncreate_session (std::string address)
 Create a new RTP session.
 
rtp_error_t destroy_session (uvgrtp::session *session)
rtp_error_t destroy_session (uvgrtp::session *session)
 Destroy RTP session and all of its media streams.
 
bool crypto_enabled () const
bool crypto_enabled () const
 Has Crypto++ been included in uvgRTP library.
 
@@ -121,7 +136,7 @@

uvgrtp::context::context ( - ) + ) @@ -141,14 +156,14 @@

uvgrtp::context::~context ( - ) + )

@@ -162,8 +177,7 @@

uvgrtp::session * uvgrtp::context::create_session ( - std::pair< std::string, std::string >  - addresses) + std::pair< std::string, std::string > addresses) @@ -196,8 +210,7 @@

uvgrtp::session * uvgrtp::context::create_session ( - std::string  - address) + std::string address) @@ -230,7 +243,7 @@

bool uvgrtp::context::crypto_enabled ( - ) + ) const @@ -256,8 +269,7 @@

rtp_error_t uvgrtp::context::destroy_session ( - uvgrtp::session *  - session) + uvgrtp::session * session) @@ -287,7 +299,8 @@

+

diff --git a/docs/html/classuvgrtp_1_1media__stream-members.html b/docs/html/classuvgrtp_1_1media__stream-members.html index ba72f4a3..04f45c5b 100644 --- a/docs/html/classuvgrtp_1_1media__stream-members.html +++ b/docs/html/classuvgrtp_1_1media__stream-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::media_stream Member List
@@ -98,7 +113,8 @@
+ diff --git a/docs/html/classuvgrtp_1_1media__stream.html b/docs/html/classuvgrtp_1_1media__stream.html index ae2ee2a1..1dfa87b0 100644 --- a/docs/html/classuvgrtp_1_1media__stream.html +++ b/docs/html/classuvgrtp_1_1media__stream.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::media_stream Class Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + + +
Public Member Functions | @@ -82,62 +97,62 @@

The media_stream is an entity which represents one RTP stream. - More...

+ More...

#include <media_stream.hh>

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - +

Public Member Functions

rtp_error_t start_zrtp ()
rtp_error_t start_zrtp ()
 Start the ZRTP negotiation manually.
 
rtp_error_t add_srtp_ctx (uint8_t *key, uint8_t *salt)
rtp_error_t add_srtp_ctx (uint8_t *key, uint8_t *salt)
 Add keying information for user-managed SRTP session.
 
rtp_error_t push_frame (uint8_t *data, size_t data_len, int rtp_flags)
rtp_error_t push_frame (uint8_t *data, size_t data_len, int rtp_flags)
 Send data to remote participant with a custom timestamp.
 
rtp_error_t push_frame (std::unique_ptr< uint8_t[]> data, size_t data_len, int rtp_flags)
rtp_error_t push_frame (std::unique_ptr< uint8_t[]> data, size_t data_len, int rtp_flags)
 Send data to remote participant with a custom timestamp.
 
rtp_error_t push_frame (uint8_t *data, size_t data_len, uint32_t ts, int rtp_flags)
rtp_error_t push_frame (uint8_t *data, size_t data_len, uint32_t ts, int rtp_flags)
 Send data to remote participant with a custom timestamp.
 
rtp_error_t push_frame (uint8_t *data, size_t data_len, uint32_t ts, uint64_t ntp_ts, int rtp_flags)
rtp_error_t push_frame (uint8_t *data, size_t data_len, uint32_t ts, uint64_t ntp_ts, int rtp_flags)
 Send data to remote participant with custom RTP and NTP timestamps.
 
rtp_error_t push_frame (std::unique_ptr< uint8_t[]> data, size_t data_len, uint32_t ts, int rtp_flags)
rtp_error_t push_frame (std::unique_ptr< uint8_t[]> data, size_t data_len, uint32_t ts, int rtp_flags)
 Send data to remote participant with a custom timestamp.
 
rtp_error_t push_frame (std::unique_ptr< uint8_t[]> data, size_t data_len, uint32_t ts, uint64_t ntp_ts, int rtp_flags)
rtp_error_t push_frame (std::unique_ptr< uint8_t[]> data, size_t data_len, uint32_t ts, uint64_t ntp_ts, int rtp_flags)
 Send data to remote participant with custom RTP and NTP timestamps.
 
uvgrtp::frame::rtp_framepull_frame ()
uvgrtp::frame::rtp_framepull_frame ()
 Poll a frame indefinitely from the media stream object.
 
uvgrtp::frame::rtp_framepull_frame (size_t timeout_ms)
uvgrtp::frame::rtp_framepull_frame (size_t timeout_ms)
 Poll a frame for a specified time from the media stream object.
 
rtp_error_t install_receive_hook (void *arg, void(*hook)(void *, uvgrtp::frame::rtp_frame *))
rtp_error_t install_receive_hook (void *arg, void(*hook)(void *, uvgrtp::frame::rtp_frame *))
 Asynchronous way of getting frames.
 
rtp_error_t configure_ctx (int rcc_flag, ssize_t value)
rtp_error_t configure_ctx (int rcc_flag, ssize_t value)
 Configure the media stream, see RTP_CTX_CONFIGURATION_FLAGS for more details.
 
int get_configuration_value (int rcc_flag)
int get_configuration_value (int rcc_flag)
 Get the values associated with configuration flags, see RTP_CTX_CONFIGURATION_FLAGS for more details.
 
uvgrtp::rtcpget_rtcp ()
uvgrtp::rtcpget_rtcp ()
 Get pointer to the RTCP object of the media stream.
 
uint32_t get_ssrc () const
uint32_t get_ssrc () const
 Get SSRC identifier. You can use the SSRC value for example to find the report block belonging to this media_stream in RTCP sender/receiver report.
 

Detailed Description

The media_stream is an entity which represents one RTP stream.

media_stream is defined by the ports which are used for sending and/or receiving media. It is possible for media_stream to be bi- or unidirectional. The unidirectionality is achieved by specifying RCE_SEND_ONLY or RCE_RECEIVE_ONLY flag when creating media_stream.

-

If RCE_RTCP was given when creating media_stream, you can get the uvgrtp::rtcp object with get_rtcp()-function.

+

If RCE_RTCP was given when creating media_stream, you can get the uvgrtp::rtcp object with get_rtcp()-function.

media_stream corresponds to one RTP session in RFC 3550.

Definition at line 53 of file media_stream.hh.

@@ -151,25 +166,18 @@

rtp_error_t uvgrtp::media_stream::add_srtp_ctx ( - uint8_t *  - key, + uint8_t * key, - uint8_t *  - salt  - - - - ) - + uint8_t * salt )

Add keying information for user-managed SRTP session.

-

For user-managed SRTP session (flag RCE_SRTP_KMNGMNT_USER), the media stream is not started until SRTP key has been added and all calls to push_frame() will fail.

+

For user-managed SRTP session (flag RCE_SRTP_KMNGMNT_USER), the media stream is not started until SRTP key has been added and all calls to push_frame() will fail.

Parameters
@@ -198,19 +206,12 @@

rtp_error_t uvgrtp::media_stream::configure_ctx

- - + - - - - - - - +
keySRTP master key, default is 128-bit long
(int rcc_flag, int rcc_flag,
ssize_t value 
)ssize_t value )

Asynchronous way of getting frames.

-

Receive hook is an alternative to polling frames using uvgrtp::media_stream::pull_frame(). Instead of application asking from uvgRTP if there are any new frames available, uvgRTP will notify the application when a frame has been received

+

Receive hook is an alternative to polling frames using uvgrtp::media_stream::pull_frame(). Instead of application asking from uvgRTP if there are any new frames available, uvgRTP will notify the application when a frame has been received

The hook should not be used for media processing as it will block the receiver from reading more frames. Instead, it should only be used as an interface between uvgRTP and the calling application where the frame hand-off happens.

Parameters
@@ -360,7 +353,7 @@

uvgrtp::frame::rtp_frame * uvgrtp::media_stream::pull_frame

- +
())
@@ -387,8 +380,7 @@

uvgrtp::frame::rtp_frame * uvgrtp::media_stream::pull_frame ( - size_t  - timeout_ms) + size_t timeout_ms) @@ -421,25 +413,17 @@

rtp_error_t uvgrtp::media_stream::push_frame ( - std::unique_ptr< uint8_t[]>  - data, + std::unique_ptr< uint8_t[]> data, - size_t  - data_len, + size_t data_len, - int  - rtp_flags  - - - - ) - + int rtp_flags )

diff --git a/docs/html/classuvgrtp_1_1rtcp-members.html b/docs/html/classuvgrtp_1_1rtcp-members.html index f3d6357a..ac39ba68 100644 --- a/docs/html/classuvgrtp_1_1rtcp-members.html +++ b/docs/html/classuvgrtp_1_1rtcp-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::rtcp Member List
@@ -98,7 +113,8 @@
+
diff --git a/docs/html/classuvgrtp_1_1rtcp.html b/docs/html/classuvgrtp_1_1rtcp.html index e9682a1c..1c546b05 100644 --- a/docs/html/classuvgrtp_1_1rtcp.html +++ b/docs/html/classuvgrtp_1_1rtcp.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::rtcp Class Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Public Member Functions | @@ -82,63 +97,63 @@

RTCP instance handles all incoming and outgoing RTCP traffic, including report generation. - More...

+ More...

#include <rtcp.hh>

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - +

Public Member Functions

rtp_error_t send_sdes_packet (const std::vector< uvgrtp::frame::rtcp_sdes_item > &items)
rtp_error_t send_sdes_packet (const std::vector< uvgrtp::frame::rtcp_sdes_item > &items)
 Send an RTCP SDES packet.
 
rtp_error_t send_app_packet (const char *name, uint8_t subtype, uint32_t payload_len, const uint8_t *payload)
rtp_error_t send_app_packet (const char *name, uint8_t subtype, uint32_t payload_len, const uint8_t *payload)
 Send an RTCP APP packet.
 
rtp_error_t send_bye_packet (std::vector< uint32_t > ssrcs)
rtp_error_t send_bye_packet (std::vector< uint32_t > ssrcs)
 Send an RTCP BYE packet.
 
void set_ts_info (uint64_t clock_start, uint32_t clock_rate, uint32_t rtp_ts_start)
void set_ts_info (uint64_t clock_start, uint32_t clock_rate, uint32_t rtp_ts_start)
 Provide timestamping information for RTCP.
 
rtp_error_t install_sender_hook (void(*hook)(uvgrtp::frame::rtcp_sender_report *))
rtp_error_t install_sender_hook (void(*hook)(uvgrtp::frame::rtcp_sender_report *))
 Install an RTCP Sender Report hook.
 
rtp_error_t install_sender_hook (std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_sender_report >)> sr_handler)
rtp_error_t install_sender_hook (std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_sender_report >)> sr_handler)
 Install an RTCP Sender Report hook.
 
rtp_error_t install_receiver_hook (void(*hook)(uvgrtp::frame::rtcp_receiver_report *))
rtp_error_t install_receiver_hook (void(*hook)(uvgrtp::frame::rtcp_receiver_report *))
 Install an RTCP Receiver Report hook.
 
rtp_error_t install_receiver_hook (std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_receiver_report >)> rr_handler)
rtp_error_t install_receiver_hook (std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_receiver_report >)> rr_handler)
 Install an RTCP Receiver Report hook.
 
rtp_error_t install_sdes_hook (void(*hook)(uvgrtp::frame::rtcp_sdes_packet *))
rtp_error_t install_sdes_hook (void(*hook)(uvgrtp::frame::rtcp_sdes_packet *))
 Install an RTCP SDES packet hook.
 
rtp_error_t install_sdes_hook (std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_sdes_packet >)> sdes_handler)
rtp_error_t install_sdes_hook (std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_sdes_packet >)> sdes_handler)
 Install an RTCP SDES packet hook.
 
rtp_error_t install_app_hook (void(*hook)(uvgrtp::frame::rtcp_app_packet *))
rtp_error_t install_app_hook (void(*hook)(uvgrtp::frame::rtcp_app_packet *))
 Install an RTCP APP packet hook.
 
rtp_error_t install_app_hook (std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_app_packet >)> app_handler)
rtp_error_t install_app_hook (std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_app_packet >)> app_handler)
 Install an RTCP APP packet hook.
 
rtp_error_t install_send_app_hook (std::string app_name, std::function< std::unique_ptr< uint8_t[]>(uint8_t &subtype, uint32_t &payload_len)> app_sending_func)
rtp_error_t install_send_app_hook (std::string app_name, std::function< std::unique_ptr< uint8_t[]>(uint8_t &subtype, uint32_t &payload_len)> app_sending_func)
 Install hook for one type of APP packets.
 
rtp_error_t remove_all_hooks ()
rtp_error_t remove_all_hooks ()
 Remove all installed hooks for RTCP.
 
rtp_error_t remove_send_app_hook (std::string app_name)
rtp_error_t remove_send_app_hook (std::string app_name)
 Remove a hook for sending APP packets *.
 

Detailed Description

RTCP instance handles all incoming and outgoing RTCP traffic, including report generation.

If media_stream was created with RCE_RTCP flag, RTCP is enabled. RTCP periodically sends compound RTCP packets. The bit rate of RTP session influences the reporting interval, but changing this has not yet been implemented.

-

The compound RTCP packet begins with either Sender Reports if we sent RTP packets recently or Receiver Report if we didn't send RTP packets recently. Both of these report types include report blocks for all the RTP sources we have received packets from during reporting period. The compound packets also always have an SDES packet and calling send_sdes_packet()-function will modify the contents of this SDES packet.

-

You can use the APP packet to test new RTCP packet types using the send_app_packet()-function. The APP packets are added to these periodically sent compound packets.

+

The compound RTCP packet begins with either Sender Reports if we sent RTP packets recently or Receiver Report if we didn't send RTP packets recently. Both of these report types include report blocks for all the RTP sources we have received packets from during reporting period. The compound packets also always have an SDES packet and calling send_sdes_packet()-function will modify the contents of this SDES packet.

+

You can use the APP packet to test new RTCP packet types using the send_app_packet()-function. The APP packets are added to these periodically sent compound packets.

See RFC 3550 section 6 for more details.

Definition at line 120 of file rtcp.hh.

@@ -152,8 +167,7 @@

rtp_error_t uvgrtp::rtcp::install_app_hook ( - std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_app_packet >)>  - app_handler) + std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_app_packet >)> app_handler) @@ -186,8 +200,7 @@

rtp_error_t uvgrtp::rtcp::install_app_hook ( - void(*)(uvgrtp::frame::rtcp_app_packet *)  - hook) + void(* hook )(uvgrtp::frame::rtcp_app_packet *)) @@ -220,8 +233,7 @@

rtp_error_t uvgrtp::rtcp::install_receiver_hook ( - std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_receiver_report >)>  - rr_handler) + std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_receiver_report >)> rr_handler) @@ -254,8 +266,7 @@

rtp_error_t uvgrtp::rtcp::install_receiver_hook ( - void(*)(uvgrtp::frame::rtcp_receiver_report *)  - hook) + void(* hook )(uvgrtp::frame::rtcp_receiver_report *)) @@ -288,8 +299,7 @@

rtp_error_t uvgrtp::rtcp::install_sdes_hook ( - std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_sdes_packet >)>  - sdes_handler) + std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_sdes_packet >)> sdes_handler) @@ -322,8 +332,7 @@

rtp_error_t uvgrtp::rtcp::install_sdes_hook ( - void(*)(uvgrtp::frame::rtcp_sdes_packet *)  - hook) + void(* hook )(uvgrtp::frame::rtcp_sdes_packet *)) @@ -356,19 +365,12 @@

rtp_error_t uvgrtp::rtcp::install_send_app_hook ( - std::string  - app_name, + std::string app_name, - std::function< std::unique_ptr< uint8_t[]>(uint8_t &subtype, uint32_t &payload_len)>  - app_sending_func  - - - - ) - + std::function< std::unique_ptr< uint8_t[]>(uint8_t &subtype, uint32_t &payload_len)> app_sending_func )

@@ -699,7 +679,8 @@

+

diff --git a/docs/html/classuvgrtp_1_1session-members.html b/docs/html/classuvgrtp_1_1session-members.html index 144612e9..e92a559d 100644 --- a/docs/html/classuvgrtp_1_1session-members.html +++ b/docs/html/classuvgrtp_1_1session-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::session Member List
@@ -86,7 +101,8 @@
+
diff --git a/docs/html/classuvgrtp_1_1session.html b/docs/html/classuvgrtp_1_1session.html index 921a8e98..ef40270d 100644 --- a/docs/html/classuvgrtp_1_1session.html +++ b/docs/html/classuvgrtp_1_1session.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::session Class Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Public Member Functions | @@ -82,19 +97,19 @@

Provides ZRTP synchronization and can be used to create uvgrtp::media_stream objects. - More...

+ More...

#include <session.hh>

- + - + - +

Public Member Functions

uvgrtp::media_streamcreate_stream (uint16_t src_port, uint16_t dst_port, rtp_format_t fmt, int rce_flags)
uvgrtp::media_streamcreate_stream (uint16_t src_port, uint16_t dst_port, rtp_format_t fmt, int rce_flags)
 Create a uni- or bidirectional media stream.
 
uvgrtp::media_streamcreate_stream (uint16_t port, rtp_format_t fmt, int rce_flags)
uvgrtp::media_streamcreate_stream (uint16_t port, rtp_format_t fmt, int rce_flags)
 Create a unidirectional media_stream for an RTP session.
 
rtp_error_t destroy_stream (uvgrtp::media_stream *stream)
rtp_error_t destroy_stream (uvgrtp::media_stream *stream)
 Destroy a media stream.
 
@@ -113,25 +128,17 @@

uvgrtp::media_stream * uvgrtp::session::create_stream ( - uint16_t  - port, + uint16_t port, - rtp_format_t  - fmt, + rtp_format_t fmt, - int  - rce_flags  - - - - ) - + int rce_flags )

@@ -167,31 +174,22 @@

uvgrtp::media_stream * uvgrtp::session::create_stream ( - uint16_t  - src_port, + uint16_t src_port, - uint16_t  - dst_port, + uint16_t dst_port, - rtp_format_t  - fmt, + rtp_format_t fmt, - int  - rce_flags  - - - - ) - + int rce_flags )

@@ -229,8 +227,7 @@

rtp_error_t uvgrtp::session::destroy_stream ( - uvgrtp::media_stream *  - stream) + uvgrtp::media_stream * stream) @@ -261,7 +258,8 @@

+

diff --git a/docs/html/clipboard.js b/docs/html/clipboard.js new file mode 100644 index 00000000..42c1fb0e --- /dev/null +++ b/docs/html/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/docs/html/clock_8hh_source.html b/docs/html/clock_8hh_source.html index e8c3c56a..54cb4635 100644 --- a/docs/html/clock_8hh_source.html +++ b/docs/html/clock_8hh_source.html @@ -3,12 +3,16 @@ - + uvgRTP: clock.hh Source File + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
clock.hh
@@ -129,7 +144,8 @@
+
diff --git a/docs/html/context_8hh_source.html b/docs/html/context_8hh_source.html index eb298354..fe0d27f9 100644 --- a/docs/html/context_8hh_source.html +++ b/docs/html/context_8hh_source.html @@ -3,12 +3,16 @@ - + uvgRTP: context.hh Source File + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
context.hh
@@ -91,6 +106,7 @@
12 class session;
13 class socketfactory;
14
+
18 class context {
19 public:
@@ -118,22 +134,24 @@
94 std::string cname_;
95 std::shared_ptr<uvgrtp::socketfactory> sfp_;
96 };
+
97}
98
99namespace uvg_rtp = uvgrtp;
-
Provides CNAME isolation and can be used to create uvgrtp::session objects.
Definition: context.hh:18
+
Provides CNAME isolation and can be used to create uvgrtp::session objects.
Definition context.hh:18
bool crypto_enabled() const
Has Crypto++ been included in uvgRTP library.
rtp_error_t destroy_session(uvgrtp::session *session)
Destroy RTP session and all of its media streams.
~context()
RTP context destructor.
uvgrtp::session * create_session(std::string address)
Create a new RTP session.
context()
RTP context constructor.
uvgrtp::session * create_session(std::pair< std::string, std::string > addresses)
Create a new RTP session between two IP addresses.
-
Provides ZRTP synchronization and can be used to create uvgrtp::media_stream objects.
Definition: session.hh:27
+
Provides ZRTP synchronization and can be used to create uvgrtp::media_stream objects.
Definition session.hh:27
+ diff --git a/docs/html/cookie.js b/docs/html/cookie.js new file mode 100644 index 00000000..53ad21d9 --- /dev/null +++ b/docs/html/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/docs/html/dir_9cba3ccb450b89ac6f0c2a18abcbadf0.html b/docs/html/dir_9cba3ccb450b89ac6f0c2a18abcbadf0.html index 2da5b0d8..e40ae70c 100644 --- a/docs/html/dir_9cba3ccb450b89ac6f0c2a18abcbadf0.html +++ b/docs/html/dir_9cba3ccb450b89ac6f0c2a18abcbadf0.html @@ -3,12 +3,16 @@ - + uvgRTP: html Directory Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + + +
html Directory Reference
@@ -80,7 +95,8 @@
+ diff --git a/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html index 9f6c317f..53f74f21 100644 --- a/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html +++ b/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html @@ -3,12 +3,16 @@ - + uvgRTP: include Directory Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + + +
include Directory Reference
@@ -80,13 +95,14 @@ - +

Directories

directory  uvgrtp
 uvgrtp
 
+ diff --git a/docs/html/dir_e3f96ff476f8286b6e150580a2f7bd74.html b/docs/html/dir_e3f96ff476f8286b6e150580a2f7bd74.html index 95784fe6..2087cba6 100644 --- a/docs/html/dir_e3f96ff476f8286b6e150580a2f7bd74.html +++ b/docs/html/dir_e3f96ff476f8286b6e150580a2f7bd74.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp Directory Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + + +
uvgrtp Directory Reference
@@ -80,31 +95,32 @@ - + - + - + - + - + - + - + - + - + - +

Files

file  clock.hh [code]
 clock.hh
 
file  context.hh [code]
 context.hh
 
file  frame.hh [code]
 frame.hh
 
file  lib.hh [code]
 lib.hh
 
file  media_stream.hh [code]
 media_stream.hh
 
file  rtcp.hh [code]
 rtcp.hh
 
file  session.hh [code]
 session.hh
 
file  util.hh [code]
 util.hh
 
file  version.hh [code]
 version.hh
 
file  wrapper_c.hh [code]
 wrapper_c.hh
 
+ diff --git a/docs/html/doc.png b/docs/html/doc.png deleted file mode 100644 index 17edabff95f7b8da13c9516a04efe05493c29501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t diff --git a/docs/html/doc.svg b/docs/html/doc.svg new file mode 100644 index 00000000..0b928a53 --- /dev/null +++ b/docs/html/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/docd.png b/docs/html/docd.png deleted file mode 100644 index d7c94fda9bf08ecc02c7190d968452b7a2dbf04b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmV1wr-rhpn+wxm%q2)IkAYsr{iGq<}_z5JCD4J;FN?6Qh;@TCubdp(_XdD-^ zG_#)IP7_z6hKNdx5^+FGArwLWTWCG!j+oKji?U!hxA#d-ljgkN`+e^@-P+RWG{Bx= z2iQyYTtEf*o~ySWrIVW}HWHi0_hd4~$E6Jx1U`>Owo}EYJ1O>iZvS?!z8}B}QwLMA zC3Keqf1c}K@?C`X>68b(EUzYUYAS&OH^VPteZLPr{S&|nQvp@6W4GH-1U8!u&7l~A zx~RUSNH+>7@q38W6!BzirtjLFCzc|XGx)EF#G%^pWION*k@?vP<2O>|XkCD3ujl%1 z{55JSVkw{~HbX>iEZ2%yJ2eHj5Yh8OTpzs0A2;tZ^x!#5D+y-es{k1&0|Ns9-|+Xt ziGiTsZ8(^nUo#wdTpIDkb-Zp(3|A*FzW}GZ5SQD-r^R`&X@`26E3W|GyrwDIZjtQ& z$g5f8Sv=VgVtDien@J(!^BK+#l;s-LgP--p7C;7;E!ysXcXK6?+9D>_-B(?Wm(U zQbNm-5TyYxIU=rs0+)!ixqzhuxw(AqKc3?KKX32{D~Qibp*r0x&Wux5-9WCMMRi3U zTd6dOCQlj>a;gr;gLwRKulT&(m@^L{&HkSC(qH05HSSf$YEhynGvH zWNez``Z8FJXE+BSg=%ak{OR z+Nylcb{?evLYLuE1_HngYw0g%LC#=$a@?4~Tx>F9295Q>9UJ|_6v-KMw;!YZSgGj@ zR8fRov=hJ#QvsO@xw*{0%zH@OKVEUr + + + + + + + + + + diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css index 08cc53ab..574b3335 100644 --- a/docs/html/doxygen.css +++ b/docs/html/doxygen.css @@ -1,4 +1,4 @@ -/* The standard CSS for doxygen 1.9.6*/ +/* The standard CSS for doxygen 1.12.0*/ html { /* page base colors */ @@ -39,7 +39,9 @@ html { --icon-background-color: #728DC1; --icon-foreground-color: white; ---icon-doc-image: url('doc.png'); +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); /* brief member declaration list */ --memdecl-background-color: #F9FAFC; @@ -100,6 +102,7 @@ html { --toc-background-color: #F4F6FA; --toc-border-color: #D8DFEE; --toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); /** search field */ --search-background-color: white; @@ -125,6 +128,7 @@ html { --code-preprocessor-color: #806020; --code-string-literal-color: #002080; --code-char-literal-color: #008080; +--code-xml-cdata-color: black; --code-vhdl-digit-color: #FF00FF; --code-vhdl-char-color: #000000; --code-vhdl-keyword-color: #700070; @@ -141,6 +145,7 @@ html { --fragment-lineno-link-bg-color: #D8D8D8; --fragment-lineno-link-hover-fg-color: #4665A2; --fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; --tooltip-foreground-color: black; --tooltip-background-color: white; --tooltip-border-color: gray; @@ -148,10 +153,15 @@ html { --tooltip-declaration-color: #006318; --tooltip-link-color: #4665A2; --tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); /** font-family */ --font-family-normal: Roboto,sans-serif; ---font-family-monospace: monospace,fixed; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; --font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; --font-family-title: Tahoma,Arial,sans-serif; --font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; @@ -159,6 +169,28 @@ html { --font-family-icon: Arial,Helvetica; --font-family-tooltip: Roboto,sans-serif; +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; } @media (prefers-color-scheme: dark) { @@ -203,7 +235,9 @@ html { --icon-background-color: #334975; --icon-foreground-color: #C4CFE5; ---icon-doc-image: url('docd.png'); +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); /* brief member declaration list */ --memdecl-background-color: #0B101A; @@ -264,6 +298,7 @@ html { --toc-background-color: #151E30; --toc-border-color: #202E4A; --toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); /** search field */ --search-background-color: black; @@ -289,14 +324,15 @@ html { --code-preprocessor-color: #65CABE; --code-string-literal-color: #7EC699; --code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; --code-vhdl-digit-color: #FF00FF; ---code-vhdl-char-color: #000000; ---code-vhdl-keyword-color: #700070; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; --code-vhdl-logic-color: #FF0000; --code-link-color: #79C0FF; --code-external-link-color: #79C0FF; --fragment-foreground-color: #C9D1D9; ---fragment-background-color: black; +--fragment-background-color: #090D16; --fragment-border-color: #30363D; --fragment-lineno-border-color: #30363D; --fragment-lineno-background-color: black; @@ -305,6 +341,7 @@ html { --fragment-lineno-link-bg-color: #303030; --fragment-lineno-link-hover-fg-color: #8E96A1; --fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; --tooltip-foreground-color: #C9D1D9; --tooltip-background-color: #202020; --tooltip-border-color: #C9D1D9; @@ -312,10 +349,15 @@ html { --tooltip-declaration-color: #20C348; --tooltip-link-color: #79C0FF; --tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); /** font-family */ --font-family-normal: Roboto,sans-serif; ---font-family-monospace: monospace,fixed; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; --font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; --font-family-title: Tahoma,Arial,sans-serif; --font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; @@ -323,6 +365,28 @@ html { --font-family-icon: Arial,Helvetica; --font-family-tooltip: Roboto,sans-serif; +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; }} body { background-color: var(--page-background-color); @@ -339,8 +403,6 @@ body, table, div, p, dl { /* @group Heading Levels */ .title { - font-weight: 400; - font-size: 14px; font-family: var(--font-family-normal); line-height: 28px; font-size: 150%; @@ -473,6 +535,12 @@ div.qindex{ color: var(--index-separator-color); } +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + dt.alphachar{ font-size: 180%; font-weight: bold; @@ -532,7 +600,13 @@ a { } a:hover { - text-decoration: underline; + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : var(--nav-background-color); } a.el { @@ -583,7 +657,24 @@ dl.el { margin-left: -1cm; } +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + ul { + text-indent: 0px; overflow: visible; } @@ -608,37 +699,70 @@ ul.multicol { .fragment { text-align: left; direction: ltr; - overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-x: auto; overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); } pre.fragment { - border: 1px solid var(--fragment-border-color); - background-color: var(--fragment-background-color); - color: var(--fragment-foreground-color); - padding: 4px 6px; - margin: 4px 8px 4px 2px; + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: var(--font-family-monospace); - font-size: 105%; + fill: var(--fragment-foreground-color); + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); } -div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; - color: var(--fragment-foreground-color); - background-color: var(--fragment-background-color); - border: 1px solid var(--fragment-border-color); +.clipboard.success { + border-color: var(--fragment-copy-ok-color); } div.line { font-family: var(--font-family-monospace); font-size: 13px; min-height: 13px; - line-height: 1.0; + line-height: 1.2; text-wrap: unrestricted; white-space: -moz-pre-wrap; /* Moz */ white-space: -pre-wrap; /* Opera 4-6 */ @@ -671,6 +795,18 @@ div.line.glow { box-shadow: 0 0 10px var(--glow-color); } +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} span.lineno { padding-right: 4px; @@ -742,10 +878,6 @@ img.light-mode-visible { display: none; } -img.formulaDsp { - -} - img.formulaInl, img.inline { vertical-align: middle; } @@ -808,6 +940,10 @@ span.charliteral { color: var(--code-char-literal-color); } +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + span.vhdldigit { color: var(--code-vhdl-digit-color); } @@ -1041,17 +1177,25 @@ dl.reflist dd { .paramtype { white-space: nowrap; + padding: 0px; + padding-bottom: 1px; } .paramname { - color: var(--memdef-param-name-color); white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; } + .paramname em { + color: var(--memdef-param-name-color); font-style: normal; + margin-right: 1px; } -.paramname code { - line-height: 14px; + +.paramname .paramdefval { + font-family: var(--font-family-monospace); } .params, .retval, .exception, .tparams { @@ -1222,8 +1366,7 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; + background-image:var(--icon-folder-open-image); background-repeat: repeat-y; vertical-align:top; display: inline-block; @@ -1233,8 +1376,7 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; + background-image:var(--icon-folder-closed-image); background-repeat: repeat-y; vertical-align:top; display: inline-block; @@ -1303,7 +1445,7 @@ table.fieldtable { padding: 3px 7px 2px; } -.fieldtable td.fieldtype, .fieldtable td.fieldname { +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { white-space: nowrap; border-right: 1px solid var(--memdef-border-color); border-bottom: 1px solid var(--memdef-border-color); @@ -1314,6 +1456,12 @@ table.fieldtable { padding-top: 3px; } +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + .fieldtable td.fielddoc { border-bottom: 1px solid var(--memdef-border-color); } @@ -1387,7 +1535,6 @@ table.fieldtable { { height:32px; display:block; - text-decoration: none; outline: none; color: var(--nav-text-normal-color); font-family: var(--font-family-nav); @@ -1476,7 +1623,8 @@ dl { padding: 0 0 0 0; } -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +/* + dl.section { margin-left: 0px; padding-left: 0px; @@ -1489,7 +1637,7 @@ dl.note { border-color: #D0C000; } -dl.warning, dl.attention { +dl.warning, dl.attention, dl.important { margin-left: -7px; padding-left: 3px; border-left: 4px solid; @@ -1531,8 +1679,103 @@ dl.bug { border-color: #C08050; } +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + dl.section dd { - margin-bottom: 6px; + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); } @@ -1547,12 +1790,12 @@ dl.section dd { vertical-align: bottom; border-collapse: separate; } - + #projectlogo img -{ +{ border: 0px none; } - + #projectalign { vertical-align: middle; @@ -1653,7 +1896,7 @@ div.toc { } div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; font: 10px/1.2 var(--font-family-toc); margin-top: 5px; padding-left: 10px; @@ -1673,20 +1916,17 @@ div.toc ul { padding: 0px; } -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { +div.toc li[class^='level'] { margin-left: 15px; } -div.toc li.level3 { - margin-left: 30px; +div.toc li.level1 { + margin-left: 0px; } -div.toc li.level4 { - margin-left: 45px; +div.toc li.empty { + background-image: none; + margin-top: 0px; } span.emoji { diff --git a/docs/html/doxygen.svg b/docs/html/doxygen.svg index d42dad52..79a76354 100644 --- a/docs/html/doxygen.svg +++ b/docs/html/doxygen.svg @@ -1,4 +1,6 @@ + @@ -17,7 +19,7 @@ - + diff --git a/docs/html/doxygen_crawl.html b/docs/html/doxygen_crawl.html new file mode 100644 index 00000000..eafef853 --- /dev/null +++ b/docs/html/doxygen_crawl.html @@ -0,0 +1,297 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js index 1f4cd14a..8985f424 100644 --- a/docs/html/dynsections.js +++ b/docs/html/dynsections.js @@ -22,106 +22,181 @@ @licend The above is the entire license notice for the JavaScript code in this file */ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); - $('table.directory tr'). - removeClass('odd').filter(':visible:odd').addClass('odd'); +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); } -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; /* @license-end */ -$(document).ready(function() { +$(function() { $('.code,.codeRef').each(function() { $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); $.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ]; diff --git a/docs/html/files.html b/docs/html/files.html index d2a8c003..53bfa94b 100644 --- a/docs/html/files.html +++ b/docs/html/files.html @@ -3,12 +3,16 @@ - + uvgRTP: File List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,24 +34,35 @@
- + + +
+
Here is a list of all documented files with brief descriptions:
-
[detail level 123]
- - +
[detail level 123]
  include
  uvgrtp
+ + @@ -92,7 +107,8 @@ + diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png deleted file mode 100644 index bb8ab35edce8e97554e360005ee9fc5bffb36e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000 + + + + + + + + + diff --git a/docs/html/folderclosedd.svg b/docs/html/folderclosedd.svg new file mode 100644 index 00000000..52f0166a --- /dev/null +++ b/docs/html/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/html/folderopen.png b/docs/html/folderopen.png deleted file mode 100644 index d6c7f676a3b3ef8c2c307d319dff3c6a604eb227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmV-b0;>IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA diff --git a/docs/html/folderopen.svg b/docs/html/folderopen.svg new file mode 100644 index 00000000..f6896dd2 --- /dev/null +++ b/docs/html/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/docs/html/folderopend.svg b/docs/html/folderopend.svg new file mode 100644 index 00000000..2d1f06e7 --- /dev/null +++ b/docs/html/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/frame_8hh_source.html b/docs/html/frame_8hh_source.html index d97970bf..bd532ae6 100644 --- a/docs/html/frame_8hh_source.html +++ b/docs/html/frame_8hh_source.html @@ -3,12 +3,16 @@ - + uvgRTP: frame.hh Source File + + + + @@ -21,7 +25,7 @@ @@ -30,23 +34,33 @@
  include
  uvgrtp
 clock.hh
 context.hh
 frame.hh
-
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
- + + +
+
frame.hh
@@ -143,6 +158,7 @@
64 uint8_t *data = nullptr;
65 });
66
+
68 struct rtp_frame {
69 struct rtp_header header;
70 uint32_t *csrc = nullptr;
@@ -156,7 +172,9 @@
83 uint8_t *dgram = nullptr; /* pointer to the UDP datagram (for internal use only) */
84 size_t dgram_size = 0; /* size of the UDP datagram */
86 };
+
87
+
89 struct rtcp_header {
92 uint8_t version = 0;
94 uint8_t padding = 0;
@@ -168,7 +186,9 @@
104 uint8_t pkt_type = 0;
106 uint16_t length = 0;
107 };
+
108
+
112 uint32_t ntp_msw = 0;
114 uint32_t ntp_lsw = 0;
@@ -176,7 +196,9 @@
117 uint32_t pkt_cnt = 0;
119 uint32_t byte_cnt = 0;
120 };
+
121
+
124 uint32_t ssrc = 0;
125 uint8_t fraction = 0;
@@ -186,36 +208,48 @@
129 uint32_t lsr = 0; /* last Sender Report */
130 uint32_t dlsr = 0; /* delay since last Sender Report */
131 };
+
132
+
135 struct rtcp_header header;
136 uint32_t ssrc = 0;
137 std::vector<rtcp_report_block> report_blocks;
138 };
+
139
+
142 struct rtcp_header header;
143 uint32_t ssrc = 0;
144 struct rtcp_sender_info sender_info;
145 std::vector<rtcp_report_block> report_blocks;
146 };
+
147
+
150 uint8_t type = 0;
151 uint8_t length = 0;
152 uint8_t *data = nullptr;
153 };
+
154
+
157 uint32_t ssrc = 0;
158 std::vector<rtcp_sdes_item> items;
159 };
+
160
+
163 struct rtcp_header header;
164 std::vector<rtcp_sdes_chunk> chunks;
165 };
+
166
+
169 struct rtcp_header header;
170 uint32_t ssrc = 0;
@@ -223,22 +257,30 @@
172 uint8_t *payload = nullptr;
174 size_t payload_len = 0;
175 };
+
176
+
178 struct rtcp_fir {
179 uint32_t ssrc = 0;
180 uint8_t seq = 0;
181 };
+
+
183 struct rtcp_sli {
184 uint16_t first = 0;
185 uint16_t num = 0;
186 uint8_t picture_id = 0;
187 };
+
+
189 struct rtcp_rpsi {
190 uint8_t pb = 0;
191 uint8_t pt = 0;
192 uint8_t* str = nullptr;
193 };
+
194
+
196 struct rtcp_fb_fci {
197
198 union {
@@ -247,7 +289,9 @@
201 rtcp_rpsi rpsi;
202 };
203 };
+
204
+
207 struct rtcp_header header;
208 uint32_t sender_ssrc = 0;
@@ -255,6 +299,7 @@
210 std::vector<rtcp_fb_fci> items;
212 size_t payload_len = 0;
213 };
+
214
215
216 PACK(struct zrtp_frame {
@@ -308,40 +353,41 @@
264}
265
266namespace uvg_rtp = uvgrtp;
-
See RFC 3550 section 6.7
Definition: frame.hh:168
-
size_t payload_len
Size of the payload in bytes. Added by uvgRTP to help process the payload.
Definition: frame.hh:174
-
RTCP Feedback Control Information, See RFC 4585 section 6.1.
Definition: frame.hh:196
-
Feedback message. See RFC 4585 section 6.1.
Definition: frame.hh:206
-
size_t payload_len
Size of the payload in bytes. Added by uvgRTP to help process the payload.
Definition: frame.hh:212
-
Full Intra Request, See RFC 5104 section 4.3.1.
Definition: frame.hh:178
-
Header of for all RTCP packets defined in RFC 3550 section 6
Definition: frame.hh:89
-
uint8_t pkt_type
Identifies the RTCP packet type.
Definition: frame.hh:104
-
uint8_t version
This field identifies the version of RTP. The version defined by RFC 3550 is two (2).
Definition: frame.hh:92
-
uint8_t fmt
Feedback message type (FMT), specified in RFC 5104 section 4.3. Alternative to count and pkt_subtype.
Definition: frame.hh:101
-
uint16_t length
Length of the whole message measured in 32-bit words.
Definition: frame.hh:106
-
uint8_t padding
Does this packet contain padding at the end.
Definition: frame.hh:94
-
uint8_t pkt_subtype
Subtype in APP packets. Alternative to count.
Definition: frame.hh:99
-
uint8_t count
Source count or report count. Alternative to pkt_subtype.
Definition: frame.hh:97
-
See RFC 3550 section 6.4.2
Definition: frame.hh:134
-
See RFC 3550 section 6.4.1
Definition: frame.hh:123
-
Reference Picture Selection Indication, See RFC 4585 section 6.3.3.
Definition: frame.hh:189
-
See RFC 3550 section 6.5
Definition: frame.hh:156
-
See RFC 3550 section 6.5
Definition: frame.hh:149
-
See RFC 3550 section 6.5
Definition: frame.hh:162
-
See RFC 3550 section 6.4.1
Definition: frame.hh:110
-
uint32_t rtp_ts
RTP timestamp corresponding to this NTP timestamp.
Definition: frame.hh:116
-
uint32_t byte_cnt
Also known as octet count.
Definition: frame.hh:119
-
uint32_t ntp_lsw
NTP timestamp, least significant word.
Definition: frame.hh:114
-
uint32_t ntp_msw
NTP timestamp, most significant word.
Definition: frame.hh:112
-
See RFC 3550 section 6.4.1
Definition: frame.hh:141
-
Slice Loss Indication, See RFC 4585 section 6.3.2.
Definition: frame.hh:183
-
See RFC 3550 section 5
Definition: frame.hh:68
-
size_t payload_len
Length of the packet payload in bytes added by uvgRTP to help process the frame.
Definition: frame.hh:79
+
See RFC 3550 section 6.7
Definition frame.hh:168
+
size_t payload_len
Size of the payload in bytes. Added by uvgRTP to help process the payload.
Definition frame.hh:174
+
RTCP Feedback Control Information, See RFC 4585 section 6.1.
Definition frame.hh:196
+
Feedback message. See RFC 4585 section 6.1.
Definition frame.hh:206
+
size_t payload_len
Size of the payload in bytes. Added by uvgRTP to help process the payload.
Definition frame.hh:212
+
Full Intra Request, See RFC 5104 section 4.3.1.
Definition frame.hh:178
+
Header of for all RTCP packets defined in RFC 3550 section 6
Definition frame.hh:89
+
uint8_t pkt_type
Identifies the RTCP packet type.
Definition frame.hh:104
+
uint8_t version
This field identifies the version of RTP. The version defined by RFC 3550 is two (2).
Definition frame.hh:92
+
uint8_t fmt
Feedback message type (FMT), specified in RFC 5104 section 4.3. Alternative to count and pkt_subtype.
Definition frame.hh:101
+
uint16_t length
Length of the whole message measured in 32-bit words.
Definition frame.hh:106
+
uint8_t padding
Does this packet contain padding at the end.
Definition frame.hh:94
+
uint8_t pkt_subtype
Subtype in APP packets. Alternative to count.
Definition frame.hh:99
+
uint8_t count
Source count or report count. Alternative to pkt_subtype.
Definition frame.hh:97
+
See RFC 3550 section 6.4.2
Definition frame.hh:134
+
See RFC 3550 section 6.4.1
Definition frame.hh:123
+
Reference Picture Selection Indication, See RFC 4585 section 6.3.3.
Definition frame.hh:189
+
See RFC 3550 section 6.5
Definition frame.hh:156
+
See RFC 3550 section 6.5
Definition frame.hh:149
+
See RFC 3550 section 6.5
Definition frame.hh:162
+
See RFC 3550 section 6.4.1
Definition frame.hh:110
+
uint32_t rtp_ts
RTP timestamp corresponding to this NTP timestamp.
Definition frame.hh:116
+
uint32_t byte_cnt
Also known as octet count.
Definition frame.hh:119
+
uint32_t ntp_lsw
NTP timestamp, least significant word.
Definition frame.hh:114
+
uint32_t ntp_msw
NTP timestamp, most significant word.
Definition frame.hh:112
+
See RFC 3550 section 6.4.1
Definition frame.hh:141
+
Slice Loss Indication, See RFC 4585 section 6.3.2.
Definition frame.hh:183
+
See RFC 3550 section 5
Definition frame.hh:68
+
size_t payload_len
Length of the packet payload in bytes added by uvgRTP to help process the frame.
Definition frame.hh:79
+
diff --git a/docs/html/functions.html b/docs/html/functions.html index 0e257dac..b2da8271 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -3,12 +3,16 @@ - + uvgRTP: Class Members + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,24 +34,35 @@
- + + +
+
- ~ -
+
diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html index d1155f6a..da68df21 100644 --- a/docs/html/functions_func.html +++ b/docs/html/functions_func.html @@ -3,12 +3,16 @@ - + uvgRTP: Class Members - Functions + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,24 +34,35 @@
- + + +
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:

- a -

+
diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html index 317a4d7f..3dfabfbc 100644 --- a/docs/html/functions_vars.html +++ b/docs/html/functions_vars.html @@ -3,12 +3,16 @@ - + uvgRTP: Class Members - Variables + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,24 +34,35 @@
- + +
+
+
+
diff --git a/docs/html/globals.html b/docs/html/globals.html index cfba9840..4560675e 100644 --- a/docs/html/globals.html +++ b/docs/html/globals.html @@ -3,12 +3,16 @@ - + uvgRTP: File Members + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,24 +34,35 @@
- + +
+
+
- r -
+
diff --git a/docs/html/globals_enum.html b/docs/html/globals_enum.html index f0ef348c..89c5b66a 100644 --- a/docs/html/globals_enum.html +++ b/docs/html/globals_enum.html @@ -3,12 +3,16 @@ - + uvgRTP: File Members + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,24 +34,35 @@
- + + +
+
    +
    Here is a list of all documented enums with links to the documentation:
    • RTP_CTX_CONFIGURATION_FLAGS : util.hh
    • RTP_CTX_ENABLE_FLAGS : util.hh
    • RTP_ERROR : util.hh
    • @@ -80,7 +95,8 @@
+
diff --git a/docs/html/globals_eval.html b/docs/html/globals_eval.html index b0fa31bf..1a502dd1 100644 --- a/docs/html/globals_eval.html +++ b/docs/html/globals_eval.html @@ -3,12 +3,16 @@ - + uvgRTP: File Members + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,24 +34,35 @@
- + +
+
+
-  +
Here is a list of all documented enum values with links to the documentation:

- r -

  • RCC_CLOCK_RATE : util.hh
  • @@ -78,6 +93,7 @@

    - r -

+
diff --git a/docs/html/index.html b/docs/html/index.html index 87ee0c6a..147b74bf 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgRTP + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,24 +34,35 @@
- + +
+
+
uvgRTP
-

uvgRTP is an Real-Time Transport Protocol (RTP) library written in C++ with a focus on simple to use and high-efficiency media delivery over the Internet. It features an intuitive and easy-to-use Application Programming Interface (API), built-in support for transporting Versatile Video Coding (VVC), High Efficiency Video Coding (HEVC), Advanced Video Coding (AVC) encoded video and Opus encoded audio. uvgRTP also supports End-to-End Encrypted (E2EE) media delivery using the combination of Secure RTP (SRTP) and ZRTP. uvgRTP has been designed to minimize memory operations to reduce its CPU usage and latency.

+

+

uvgRTP is an Real-Time Transport Protocol (RTP) library written in C++ with a focus on simple to use and high-efficiency media delivery over the Internet. It features an intuitive and easy-to-use Application Programming Interface (API), built-in support for transporting Versatile Video Coding (VVC), High Efficiency Video Coding (HEVC), Advanced Video Coding (AVC) encoded video and Opus encoded audio. uvgRTP also supports End-to-End Encrypted (E2EE) media delivery using the combination of Secure RTP (SRTP) and ZRTP. uvgRTP has been designed to minimize memory operations to reduce its CPU usage and latency.

uvgRTP is licensed under the permissive BSD 2-Clause License. This cross-platform library can be run on both Linux and Windows operating systems. Mac OS is also supported, but the support relies on community contributions. For SRTP/ZRTP support, uvgRTP uses the Crypto++ library.

Currently supported specifications:

+ + diff --git a/docs/html/jquery.js b/docs/html/jquery.js index 1dffb65b..875ada73 100644 --- a/docs/html/jquery.js +++ b/docs/html/jquery.js @@ -1,17 +1,143 @@ /*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + */!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 * http://www.smartmenus.org/ - * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/docs/html/lib_8hh_source.html b/docs/html/lib_8hh_source.html index a1387939..07907d22 100644 --- a/docs/html/lib_8hh_source.html +++ b/docs/html/lib_8hh_source.html @@ -3,12 +3,16 @@ - + uvgRTP: lib.hh Source File + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
lib.hh
@@ -96,7 +111,8 @@
+ diff --git a/docs/html/media__stream_8hh_source.html b/docs/html/media__stream_8hh_source.html index 5741b6e0..6feacde8 100644 --- a/docs/html/media__stream_8hh_source.html +++ b/docs/html/media__stream_8hh_source.html @@ -3,12 +3,16 @@ - + uvgRTP: media_stream.hh Source File + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + + +
media_stream.hh
@@ -118,6 +133,7 @@
39 class media;
40 }
41
+
54 public:
56 media_stream(std::string cname, std::string remote_addr, std::string local_addr, uint16_t src_port, uint16_t dst_port,
@@ -208,61 +224,65 @@
411 bool check_pull_preconditions();
412 rtp_error_t check_push_preconditions(int rtp_flags, bool smart_pointer);
413
-
414 inline uint8_t* copy_frame(uint8_t* original, size_t data_len);
+
414 void holepuncher();
415
-
416 uint32_t key_;
+
416 inline uint8_t* copy_frame(uint8_t* original, size_t data_len);
417
-
418 std::shared_ptr<uvgrtp::srtp> srtp_;
-
419 std::shared_ptr<uvgrtp::srtcp> srtcp_;
-
420 std::shared_ptr<uvgrtp::socket> socket_;
-
421 std::shared_ptr<uvgrtp::rtp> rtp_;
-
422 std::shared_ptr<uvgrtp::rtcp> rtcp_;
-
423 std::shared_ptr<uvgrtp::zrtp> zrtp_;
-
424
-
425 std::shared_ptr<uvgrtp::socketfactory> sfp_;
+
418 uint32_t key_;
+
419
+
420 std::shared_ptr<uvgrtp::srtp> srtp_;
+
421 std::shared_ptr<uvgrtp::srtcp> srtcp_;
+
422 std::shared_ptr<uvgrtp::socket> socket_;
+
423 std::shared_ptr<uvgrtp::rtp> rtp_;
+
424 std::shared_ptr<uvgrtp::rtcp> rtcp_;
+
425 std::shared_ptr<uvgrtp::zrtp> zrtp_;
426
-
427 sockaddr_in remote_sockaddr_;
-
428 sockaddr_in6 remote_sockaddr_ip6_;
-
429 std::string remote_address_;
-
430 std::string local_address_;
-
431 uint16_t src_port_;
-
432 uint16_t dst_port_;
-
433 bool ipv6_;
-
434 rtp_format_t fmt_;
-
435 bool new_socket_;
-
436
-
437 /* Media context config */
-
438 int rce_flags_ = 0;
-
439
-
440 /* Has the media stream been initialized */
-
441 bool initialized_;
-
442
-
443 /* RTP packet reception flow. Dispatches packets to other components */
-
444 std::shared_ptr<uvgrtp::reception_flow> reception_flow_;
-
445
-
446 /* Media object associated with this media stream. */
-
447 std::unique_ptr<uvgrtp::formats::media> media_;
-
448
-
449 /* Thread that keeps the holepunched connection open for unidirectional streams */
-
450 std::unique_ptr<uvgrtp::holepuncher> holepuncher_;
-
451
-
452 std::string cname_;
+
427 std::shared_ptr<uvgrtp::socketfactory> sfp_;
+
428
+
429 sockaddr_in remote_sockaddr_;
+
430 sockaddr_in6 remote_sockaddr_ip6_;
+
431 std::string remote_address_;
+
432 std::string local_address_;
+
433 uint16_t src_port_;
+
434 uint16_t dst_port_;
+
435 bool ipv6_;
+
436 rtp_format_t fmt_;
+
437 bool new_socket_;
+
438
+
439 /* Media context config */
+
440 int rce_flags_ = 0;
+
441
+
442 /* Has the media stream been initialized */
+
443 bool initialized_;
+
444
+
445 /* RTP packet reception flow. Dispatches packets to other components */
+
446 std::shared_ptr<uvgrtp::reception_flow> reception_flow_;
+
447
+
448 /* Media object associated with this media stream. */
+
449 std::unique_ptr<uvgrtp::formats::media> media_;
+
450
+
451 /* Thread that keeps the holepunched connection open for unidirectional streams */
+
452 std::unique_ptr<uvgrtp::holepuncher> holepuncher_;
453
-
454 ssize_t fps_numerator_ = 30;
-
455 ssize_t fps_denominator_ = 1;
-
456 uint32_t bandwidth_ = 0;
-
457 std::shared_ptr<std::atomic<std::uint32_t>> ssrc_;
-
458 std::shared_ptr<std::atomic<std::uint32_t>> remote_ssrc_;
-
459
-
460 // Save values associated with context flags, to be returned with get_configuration_value
-
461 // Values are initialized to -2, which means value not set
-
462 int snd_buf_size_;
-
463 int rcv_buf_size_;
-
464 };
-
465}
-
466
-
467namespace uvg_rtp = uvgrtp;
-
The media_stream is an entity which represents one RTP stream.
Definition: media_stream.hh:53
+
454 std::string cname_;
+
455
+
456 ssize_t fps_numerator_ = 30;
+
457 ssize_t fps_denominator_ = 1;
+
458 uint32_t bandwidth_ = 0;
+
459 std::shared_ptr<std::atomic<std::uint32_t>> ssrc_;
+
460 std::shared_ptr<std::atomic<std::uint32_t>> remote_ssrc_;
+
461
+
462 // Save values associated with context flags, to be returned with get_configuration_value
+
463 // Values are initialized to -2, which means value not set
+
464 int snd_buf_size_;
+
465 int rcv_buf_size_;
+
466 int multicast_ttl_;
+
467 };
+
+
468}
+
469
+
470namespace uvg_rtp = uvgrtp;
+
The media_stream is an entity which represents one RTP stream.
rtp_error_t push_frame(std::unique_ptr< uint8_t[]> data, size_t data_len, int rtp_flags)
Send data to remote participant with a custom timestamp.
rtp_error_t add_srtp_ctx(uint8_t *key, uint8_t *salt)
Add keying information for user-managed SRTP session.
rtp_error_t push_frame(uint8_t *data, size_t data_len, int rtp_flags)
Send data to remote participant with a custom timestamp.
@@ -278,13 +298,14 @@
rtp_error_t push_frame(std::unique_ptr< uint8_t[]> data, size_t data_len, uint32_t ts, int rtp_flags)
Send data to remote participant with a custom timestamp.
rtp_error_t push_frame(uint8_t *data, size_t data_len, uint32_t ts, int rtp_flags)
Send data to remote participant with a custom timestamp.
int get_configuration_value(int rcc_flag)
Get the values associated with configuration flags, see RTP_CTX_CONFIGURATION_FLAGS for more details.
-
RTCP instance handles all incoming and outgoing RTCP traffic, including report generation.
Definition: rtcp.hh:120
-
See RFC 3550 section 5
Definition: frame.hh:68
+
RTCP instance handles all incoming and outgoing RTCP traffic, including report generation.
Definition rtcp.hh:120
+
See RFC 3550 section 5
Definition frame.hh:68
+ diff --git a/docs/html/menu.js b/docs/html/menu.js index b0b26936..0fd1e990 100644 --- a/docs/html/menu.js +++ b/docs/html/menu.js @@ -22,15 +22,14 @@ @licend The above is the entire license notice for the JavaScript code in this file */ -function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { function makeTree(data,relPath) { - var result=''; + let result=''; if ('children' in data) { result+='
    '; - for (var i in data.children) { - var url; - var link; - link = data.children[i].url; + for (let i in data.children) { + let url; + const link = data.children[i].url; if (link.substring(0,1)=='^') { url = link.substring(1); } else { @@ -44,7 +43,7 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { } return result; } - var searchBoxHtml; + let searchBoxHtml; if (searchEnabled) { if (serverSide) { searchBoxHtml='
    '+ @@ -88,29 +87,28 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { if (searchBoxHtml) { $('#main-menu').append('
  • '); } - var $mainMenuState = $('#main-menu-state'); - var prevWidth = 0; + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; if ($mainMenuState.length) { - function initResizableIfExists() { - if (typeof initResizable==='function') initResizable(); + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); } // animate mobile menu - $mainMenuState.change(function(e) { - var $menu = $('#main-menu'); - var options = { duration: 250, step: initResizableIfExists }; + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; if (this.checked) { - options['complete'] = function() { $menu.css('display', 'block') }; + options['complete'] = () => $menu.css('display', 'block'); $menu.hide().slideDown(options); } else { - options['complete'] = function() { $menu.css('display', 'none') }; + options['complete'] = () => $menu.css('display', 'none'); $menu.show().slideUp(options); } }); // set default menu visibility - function resetState() { - var $menu = $('#main-menu'); - var $mainMenuState = $('#main-menu-state'); - var newWidth = $(window).outerWidth(); + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); if (newWidth!=prevWidth) { if ($(window).outerWidth()<768) { $mainMenuState.prop('checked',false); $menu.hide(); diff --git a/docs/html/minus.svg b/docs/html/minus.svg new file mode 100644 index 00000000..f70d0c1a --- /dev/null +++ b/docs/html/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/html/minusd.svg b/docs/html/minusd.svg new file mode 100644 index 00000000..5f8e8796 --- /dev/null +++ b/docs/html/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/html/navtree.css b/docs/html/navtree.css new file mode 100644 index 00000000..69211d4a --- /dev/null +++ b/docs/html/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: var(--nav-text-active-color); + text-shadow: var(--nav-text-active-shadow); +} + +#nav-tree .selected .arrow { + color: var(--nav-arrow-selected-color); + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px var(--font-family-nav); +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:var(--nav-text-active-color); +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:var(--nav-splitbar-image); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: var(--nav-background-color); + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/docs/html/plus.svg b/docs/html/plus.svg new file mode 100644 index 00000000..07520165 --- /dev/null +++ b/docs/html/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/plusd.svg b/docs/html/plusd.svg new file mode 100644 index 00000000..0c65bfe9 --- /dev/null +++ b/docs/html/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/resize.js b/docs/html/resize.js new file mode 100644 index 00000000..178d03bc --- /dev/null +++ b/docs/html/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/docs/html/rtcp_8hh_source.html b/docs/html/rtcp_8hh_source.html index a6491bde..b30fab69 100644 --- a/docs/html/rtcp_8hh_source.html +++ b/docs/html/rtcp_8hh_source.html @@ -3,12 +3,16 @@ - + uvgRTP: rtcp.hh Source File + + + + @@ -21,7 +25,7 @@ -
    uvgRTP 3.1.2 +
    uvgRTP 3.1.3
    An open-source library for RTP/SRTP media delivery
    @@ -30,23 +34,33 @@
    - + + +
+
rtcp.hh
@@ -177,6 +192,7 @@
99 std::unique_ptr<uint8_t[]> payload;
100 };
102
+
120 class rtcp {
121 public:
123 rtcp(std::shared_ptr<uvgrtp::rtp> rtp, std::shared_ptr<std::atomic<std::uint32_t>> ssrc, std::shared_ptr<std::atomic<uint32_t>> remote_ssrc,
@@ -589,10 +605,11 @@
690
691 size_t mtu_size_;
692 };
+
693}
694
695namespace uvg_rtp = uvgrtp;
-
RTCP instance handles all incoming and outgoing RTCP traffic, including report generation.
Definition: rtcp.hh:120
+
RTCP instance handles all incoming and outgoing RTCP traffic, including report generation.
Definition rtcp.hh:120
rtp_error_t install_receiver_hook(void(*hook)(uvgrtp::frame::rtcp_receiver_report *))
Install an RTCP Receiver Report hook.
rtp_error_t send_app_packet(const char *name, uint8_t subtype, uint32_t payload_len, const uint8_t *payload)
Send an RTCP APP packet.
rtp_error_t install_receiver_hook(std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_receiver_report >)> rr_handler)
Install an RTCP Receiver Report hook.
@@ -608,18 +625,19 @@
rtp_error_t install_app_hook(void(*hook)(uvgrtp::frame::rtcp_app_packet *))
Install an RTCP APP packet hook.
rtp_error_t install_send_app_hook(std::string app_name, std::function< std::unique_ptr< uint8_t[]>(uint8_t &subtype, uint32_t &payload_len)> app_sending_func)
Install hook for one type of APP packets.
rtp_error_t install_sdes_hook(void(*hook)(uvgrtp::frame::rtcp_sdes_packet *))
Install an RTCP SDES packet hook.
-
See RFC 3550 section 6.7
Definition: frame.hh:168
-
Header of for all RTCP packets defined in RFC 3550 section 6
Definition: frame.hh:89
-
See RFC 3550 section 6.4.2
Definition: frame.hh:134
-
See RFC 3550 section 6.5
Definition: frame.hh:149
-
See RFC 3550 section 6.5
Definition: frame.hh:162
-
See RFC 3550 section 6.4.1
Definition: frame.hh:141
-
See RFC 3550 section 5
Definition: frame.hh:68
+
See RFC 3550 section 6.7
Definition frame.hh:168
+
Header of for all RTCP packets defined in RFC 3550 section 6
Definition frame.hh:89
+
See RFC 3550 section 6.4.2
Definition frame.hh:134
+
See RFC 3550 section 6.5
Definition frame.hh:149
+
See RFC 3550 section 6.5
Definition frame.hh:162
+
See RFC 3550 section 6.4.1
Definition frame.hh:141
+
See RFC 3550 section 5
Definition frame.hh:68
+ diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js index 85877691..d5d00d49 100644 --- a/docs/html/search/all_0.js +++ b/docs/html/search/all_0.js @@ -1,4 +1,5 @@ var searchData= [ - ['add_5fsrtp_5fctx_0',['add_srtp_ctx',['../classuvgrtp_1_1media__stream.html#a0950a91bd645cbf842d8218ae4171aed',1,'uvgrtp::media_stream']]] + ['1_3a_20create_20context_0',['Step 1: Create context',['../index.html#autotoc_md3',1,'']]], + ['1_3a_20encryption_20optional_1',['Step 3.1: Encryption (optional)',['../index.html#autotoc_md6',1,'']]] ]; diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js index 92b38455..f602a4a9 100644 --- a/docs/html/search/all_1.js +++ b/docs/html/search/all_1.js @@ -1,4 +1,5 @@ var searchData= [ - ['byte_5fcnt_0',['byte_cnt',['../structuvgrtp_1_1frame_1_1rtcp__sender__info.html#a41290b62c283bf5d4c8f3a86ac5975ce',1,'uvgrtp::frame::rtcp_sender_info']]] + ['2_3a_20configure_20media_5fstream_20optional_0',['Step 3.2: Configure media_stream (optional)',['../index.html#autotoc_md7',1,'']]], + ['2_3a_20create_20session_1',['Step 2: Create session',['../index.html#autotoc_md4',1,'']]] ]; diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js new file mode 100644 index 00000000..70d8fb4a --- /dev/null +++ b/docs/html/search/all_10.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['non_20working_0',['Simple sending example (non-working)',['../index.html#autotoc_md11',1,'']]], + ['notable_20features_1',['Notable features',['../index.html#autotoc_md1',1,'']]], + ['ntp_5flsw_2',['ntp_lsw',['../structuvgrtp_1_1frame_1_1rtcp__sender__info.html#a7c80f6082983dae0f3a5eea55a7c8ef6',1,'uvgrtp::frame::rtcp_sender_info']]], + ['ntp_5fmsw_3',['ntp_msw',['../structuvgrtp_1_1frame_1_1rtcp__sender__info.html#ae22a2bcad293efb1d642762d3eac3143',1,'uvgrtp::frame::rtcp_sender_info']]] +]; diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js new file mode 100644 index 00000000..03792540 --- /dev/null +++ b/docs/html/search/all_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['optional_0',['optional',['../index.html#autotoc_md6',1,'Step 3.1: Encryption (optional)'],['../index.html#autotoc_md7',1,'Step 3.2: Configure media_stream (optional)']]] +]; diff --git a/docs/html/search/all_12.js b/docs/html/search/all_12.js new file mode 100644 index 00000000..a86f594e --- /dev/null +++ b/docs/html/search/all_12.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['padding_0',['padding',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a4309061d7fae17a13db3d5eea71d6639',1,'uvgrtp::frame::rtcp_header']]], + ['payload_5flen_1',['payload_len',['../structuvgrtp_1_1frame_1_1rtp__frame.html#a2d158e0aaf23398a8a3b02c95d06e366',1,'uvgrtp::frame::rtp_frame::payload_len'],['../structuvgrtp_1_1frame_1_1rtcp__app__packet.html#acefa08e5025c52c0e4a0ae14255f6d01',1,'uvgrtp::frame::rtcp_app_packet::payload_len'],['../structuvgrtp_1_1frame_1_1rtcp__fb__packet.html#a03976200a7d64f842778f2880361f981',1,'uvgrtp::frame::rtcp_fb_packet::payload_len']]], + ['pkt_5fsubtype_2',['pkt_subtype',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a829dd160ba7f473f3d6c5ff2d2dae5ab',1,'uvgrtp::frame::rtcp_header']]], + ['pkt_5ftype_3',['pkt_type',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a08120f0b6526c473c6488803388c7855',1,'uvgrtp::frame::rtcp_header']]], + ['pull_5fframe_4',['pull_frame',['../classuvgrtp_1_1media__stream.html#ab0c854a4c36572f91008a8e1e49e38bb',1,'uvgrtp::media_stream::pull_frame()'],['../classuvgrtp_1_1media__stream.html#a466067ad9924a52530c62c53c1b397b4',1,'uvgrtp::media_stream::pull_frame(size_t timeout_ms)']]], + ['push_5fframe_5',['push_frame',['../classuvgrtp_1_1media__stream.html#a157e9973d92b65e82914d4028690c770',1,'uvgrtp::media_stream::push_frame(uint8_t *data, size_t data_len, int rtp_flags)'],['../classuvgrtp_1_1media__stream.html#a068a0963e06f789b4e4310a45cbe4409',1,'uvgrtp::media_stream::push_frame(std::unique_ptr< uint8_t[]> data, size_t data_len, int rtp_flags)'],['../classuvgrtp_1_1media__stream.html#ac0cb1cf34b639c9ba71b047b3ba26d22',1,'uvgrtp::media_stream::push_frame(uint8_t *data, size_t data_len, uint32_t ts, int rtp_flags)'],['../classuvgrtp_1_1media__stream.html#a5577c57f1bdd5b888aa4e8c4f939eba7',1,'uvgrtp::media_stream::push_frame(uint8_t *data, size_t data_len, uint32_t ts, uint64_t ntp_ts, int rtp_flags)'],['../classuvgrtp_1_1media__stream.html#abe9099254c6bf16f255f5f50441ec9d2',1,'uvgrtp::media_stream::push_frame(std::unique_ptr< uint8_t[]> data, size_t data_len, uint32_t ts, int rtp_flags)'],['../classuvgrtp_1_1media__stream.html#a56d2a209b2647d0f3ee7948e8cf45438',1,'uvgrtp::media_stream::push_frame(std::unique_ptr< uint8_t[]> data, size_t data_len, uint32_t ts, uint64_t ntp_ts, int rtp_flags)']]] +]; diff --git a/docs/html/search/all_13.js b/docs/html/search/all_13.js new file mode 100644 index 00000000..47bcbd91 --- /dev/null +++ b/docs/html/search/all_13.js @@ -0,0 +1,112 @@ +var searchData= +[ + ['rcc_5fclock_5frate_0',['RCC_CLOCK_RATE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587faece26b6edb4fc1fe6733b8fec0504b99',1,'util.hh']]], + ['rcc_5fdyn_5fpayload_5ftype_1',['RCC_DYN_PAYLOAD_TYPE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fac758a522806ada30386b262660f30617',1,'util.hh']]], + ['rcc_5ffps_5fdenominator_2',['RCC_FPS_DENOMINATOR',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa9e60e576f72eafe6219cd9f0a9615ce9',1,'util.hh']]], + ['rcc_5ffps_5fnumerator_3',['RCC_FPS_NUMERATOR',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa51034849ac8a4078f0c3b5198b92ab54',1,'util.hh']]], + ['rcc_5fmtu_5fsize_4',['RCC_MTU_SIZE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa7667fb72b42a2c11991b4879619f9f83',1,'util.hh']]], + ['rcc_5fmulticast_5fttl_5',['RCC_MULTICAST_TTL',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa8cd123197abdfeb04230803730132f9a',1,'util.hh']]], + ['rcc_5fpkt_5fmax_5fdelay_6',['RCC_PKT_MAX_DELAY',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa5ac1245e18a420489083adddfa97b135',1,'util.hh']]], + ['rcc_5fpoll_5ftimeout_7',['RCC_POLL_TIMEOUT',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa97b5a85e591372f65274238d0d1a73f8',1,'util.hh']]], + ['rcc_5fremote_5fssrc_8',['RCC_REMOTE_SSRC',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa15b4ff7295eae57338f4c3864c5146b7',1,'util.hh']]], + ['rcc_5fring_5fbuffer_5fsize_9',['RCC_RING_BUFFER_SIZE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa9be732aa645fc09adde5c84a2d07e0f6',1,'util.hh']]], + ['rcc_5fsession_5fbandwidth_10',['RCC_SESSION_BANDWIDTH',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa9a5a95ba2f189fb0350cbc44ba2b95c7',1,'util.hh']]], + ['rcc_5fssrc_11',['RCC_SSRC',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fad93dccbcd813299ea0b976d4dea79937',1,'util.hh']]], + ['rcc_5fudp_5frcv_5fbuf_5fsize_12',['RCC_UDP_RCV_BUF_SIZE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fac52afca9d1a8c24b1a788bc5b8524663',1,'util.hh']]], + ['rcc_5fudp_5fsnd_5fbuf_5fsize_13',['RCC_UDP_SND_BUF_SIZE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fad4eba6c62183db35dd4bd0e09ddd107b',1,'util.hh']]], + ['rce_5ffragment_5fgeneric_14',['RCE_FRAGMENT_GENERIC',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa5b0a8dbb22c20ebe8c0711541fb68a79',1,'util.hh']]], + ['rce_5fframe_5frate_15',['RCE_FRAME_RATE',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afae175f37ce4fdc6e7d9e01d200b8d9abc',1,'util.hh']]], + ['rce_5fh26x_5fdependency_5fenforcement_16',['RCE_H26X_DEPENDENCY_ENFORCEMENT',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa121da451fe2a4008cec78ac4642399b2',1,'util.hh']]], + ['rce_5fholepunch_5fkeepalive_17',['RCE_HOLEPUNCH_KEEPALIVE',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa8e66f45819774772a0156647d3788a95',1,'util.hh']]], + ['rce_5fno_5fflags_18',['RCE_NO_FLAGS',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa4952226c012292c16fe04477f76e5bcb',1,'util.hh']]], + ['rce_5fno_5fh26x_5fprepend_5fsc_19',['RCE_NO_H26X_PREPEND_SC',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa877835beb990d36f59f4d9c1d61d2c35',1,'util.hh']]], + ['rce_5fpace_5ffragment_5fsending_20',['RCE_PACE_FRAGMENT_SENDING',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa836063a6ef3da262d0805cf1571ab35c',1,'util.hh']]], + ['rce_5freceive_5fonly_21',['RCE_RECEIVE_ONLY',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afaf89817eda89d32c43e18ed0645ac4d73',1,'util.hh']]], + ['rce_5frtcp_22',['RCE_RTCP',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afab1342138e5af3f03d6eaf1378382bf3d',1,'util.hh']]], + ['rce_5frtcp_5fmux_23',['RCE_RTCP_MUX',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa3dc772b2aab5eae239afae6cef8c68a7',1,'util.hh']]], + ['rce_5fsend_5fonly_24',['RCE_SEND_ONLY',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa6bb67e1962af60c05c6062fb6f1df374',1,'util.hh']]], + ['rce_5fsrtp_25',['RCE_SRTP',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afaf235cba606675b9c38284ee1a491696b',1,'util.hh']]], + ['rce_5fsrtp_5fauthenticate_5frtp_26',['RCE_SRTP_AUTHENTICATE_RTP',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa820625b96886d955bc42e0cbc52cdd1e',1,'util.hh']]], + ['rce_5fsrtp_5fkeysize_5f192_27',['RCE_SRTP_KEYSIZE_192',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afaedeac11cc80833b61b51ae32f787db73',1,'util.hh']]], + ['rce_5fsrtp_5fkeysize_5f256_28',['RCE_SRTP_KEYSIZE_256',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa163744fe7c054b8396a4a07ae82a80c0',1,'util.hh']]], + ['rce_5fsrtp_5fkmngmnt_5fuser_29',['RCE_SRTP_KMNGMNT_USER',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa4722105b4fd34467a56b8aca8fc03773',1,'util.hh']]], + ['rce_5fsrtp_5fkmngmnt_5fzrtp_30',['RCE_SRTP_KMNGMNT_ZRTP',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa40a3deab3893524daf7e057c6dfdaa75',1,'util.hh']]], + ['rce_5fsrtp_5fnull_5fcipher_31',['RCE_SRTP_NULL_CIPHER',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa4ddec7d182cec161d6b582589bc9baba',1,'util.hh']]], + ['rce_5fsrtp_5freplay_5fprotection_32',['RCE_SRTP_REPLAY_PROTECTION',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afaddd5fdb170d7cc194e4165d3f9e9a1c1',1,'util.hh']]], + ['rce_5fsystem_5fcall_5fclustering_33',['RCE_SYSTEM_CALL_CLUSTERING',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa9e41141dacd18def5ab83e9f671f4263',1,'util.hh']]], + ['rce_5fzrtp_5fdiffie_5fhellman_5fmode_34',['RCE_ZRTP_DIFFIE_HELLMAN_MODE',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa4fdf2b1f3f934315158b4204e71f9171',1,'util.hh']]], + ['rce_5fzrtp_5fmultistream_5fmode_35',['RCE_ZRTP_MULTISTREAM_MODE',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa9127265f0b1a1a45bac8e6fa7270a98a',1,'util.hh']]], + ['receiving_20data_36',['Step 5: Receiving data',['../index.html#autotoc_md9',1,'']]], + ['remove_5fall_5fhooks_37',['remove_all_hooks',['../classuvgrtp_1_1rtcp.html#a81198428cc697c0c7cbb2a4191f294d8',1,'uvgrtp::rtcp']]], + ['remove_5fsend_5fapp_5fhook_38',['remove_send_app_hook',['../classuvgrtp_1_1rtcp.html#a27adb6b5965dab3918bd02a2e7a2dfd2',1,'uvgrtp::rtcp']]], + ['rtcp_39',['rtcp',['../classuvgrtp_1_1rtcp.html',1,'uvgrtp']]], + ['rtcp_5fapp_5fpacket_40',['rtcp_app_packet',['../structuvgrtp_1_1frame_1_1rtcp__app__packet.html',1,'uvgrtp::frame']]], + ['rtcp_5ffb_5ffci_41',['rtcp_fb_fci',['../structuvgrtp_1_1frame_1_1rtcp__fb__fci.html',1,'uvgrtp::frame']]], + ['rtcp_5ffb_5fpacket_42',['rtcp_fb_packet',['../structuvgrtp_1_1frame_1_1rtcp__fb__packet.html',1,'uvgrtp::frame']]], + ['rtcp_5ffir_43',['rtcp_fir',['../structuvgrtp_1_1frame_1_1rtcp__fir.html',1,'uvgrtp::frame']]], + ['rtcp_5fheader_44',['rtcp_header',['../structuvgrtp_1_1frame_1_1rtcp__header.html',1,'uvgrtp::frame']]], + ['rtcp_5freceiver_5freport_45',['rtcp_receiver_report',['../structuvgrtp_1_1frame_1_1rtcp__receiver__report.html',1,'uvgrtp::frame']]], + ['rtcp_5freport_5fblock_46',['rtcp_report_block',['../structuvgrtp_1_1frame_1_1rtcp__report__block.html',1,'uvgrtp::frame']]], + ['rtcp_5frpsi_47',['rtcp_rpsi',['../structuvgrtp_1_1frame_1_1rtcp__rpsi.html',1,'uvgrtp::frame']]], + ['rtcp_5fsdes_5fchunk_48',['rtcp_sdes_chunk',['../structuvgrtp_1_1frame_1_1rtcp__sdes__chunk.html',1,'uvgrtp::frame']]], + ['rtcp_5fsdes_5fitem_49',['rtcp_sdes_item',['../structuvgrtp_1_1frame_1_1rtcp__sdes__item.html',1,'uvgrtp::frame']]], + ['rtcp_5fsdes_5fpacket_50',['rtcp_sdes_packet',['../structuvgrtp_1_1frame_1_1rtcp__sdes__packet.html',1,'uvgrtp::frame']]], + ['rtcp_5fsender_5finfo_51',['rtcp_sender_info',['../structuvgrtp_1_1frame_1_1rtcp__sender__info.html',1,'uvgrtp::frame']]], + ['rtcp_5fsender_5freport_52',['rtcp_sender_report',['../structuvgrtp_1_1frame_1_1rtcp__sender__report.html',1,'uvgrtp::frame']]], + ['rtcp_5fsli_53',['rtcp_sli',['../structuvgrtp_1_1frame_1_1rtcp__sli.html',1,'uvgrtp::frame']]], + ['rtp_5fauth_5ftag_5fmismatch_54',['RTP_AUTH_TAG_MISMATCH',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba6d62ec0a7250a3db7c0f3a13280ecc65',1,'util.hh']]], + ['rtp_5fbind_5ferror_55',['RTP_BIND_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba000c0166a0c38686389fc2eba0ddc458',1,'util.hh']]], + ['rtp_5fcopy_56',['RTP_COPY',['../util_8hh.html#af03a75996471fc531742cd640c7caf2dab1d5797a23c37a33168046a2ae6aef6a',1,'util.hh']]], + ['rtp_5fctx_5fconfiguration_5fflags_57',['RTP_CTX_CONFIGURATION_FLAGS',['../util_8hh.html#aa98d9238629e33567e73af0d239e587f',1,'util.hh']]], + ['rtp_5fctx_5fenable_5fflags_58',['RTP_CTX_ENABLE_FLAGS',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2af',1,'util.hh']]], + ['rtp_5ferror_59',['RTP_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387b',1,'util.hh']]], + ['rtp_5fflags_60',['RTP_FLAGS',['../util_8hh.html#af03a75996471fc531742cd640c7caf2d',1,'util.hh']]], + ['rtp_5fformat_61',['RTP_FORMAT',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96',1,'util.hh']]], + ['rtp_5fformat_5fatlas_62',['RTP_FORMAT_ATLAS',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a81c1df94bbe9478ae6c1ea212c9a20ee',1,'util.hh']]], + ['rtp_5fformat_5fdvi4_5f32_63',['RTP_FORMAT_DVI4_32',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96abf1f20482ba40b0a4161f339978c65c8',1,'util.hh']]], + ['rtp_5fformat_5fdvi4_5f441_64',['RTP_FORMAT_DVI4_441',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96aa4e91d147dcc0696bae592e0de3ae295',1,'util.hh']]], + ['rtp_5fformat_5fdvi4_5f64_65',['RTP_FORMAT_DVI4_64',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96ae0cb5522bf562899f9001adeb669f3ef',1,'util.hh']]], + ['rtp_5fformat_5fdvi4_5f882_66',['RTP_FORMAT_DVI4_882',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96abb0d59c256c7ed6b0f78aff67f89ac18',1,'util.hh']]], + ['rtp_5fformat_5fg722_67',['RTP_FORMAT_G722',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a2240ad1204186f7c34aacfb27673e692',1,'util.hh']]], + ['rtp_5fformat_5fg723_68',['RTP_FORMAT_G723',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96aa97d1880bfcfba08dfef863dc82426d1',1,'util.hh']]], + ['rtp_5fformat_5fg726_5f16_69',['RTP_FORMAT_G726_16',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96ae118651d66f3af54be3094e7e71336c7',1,'util.hh']]], + ['rtp_5fformat_5fg726_5f24_70',['RTP_FORMAT_G726_24',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a8635bcd6f336c19271e7ea20eb9111cf',1,'util.hh']]], + ['rtp_5fformat_5fg726_5f32_71',['RTP_FORMAT_G726_32',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a266862cd2289619b5c4de4c259a32785',1,'util.hh']]], + ['rtp_5fformat_5fg726_5f40_72',['RTP_FORMAT_G726_40',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96af260843177efa05d95f98d30499db683',1,'util.hh']]], + ['rtp_5fformat_5fg728_73',['RTP_FORMAT_G728',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a0f194f13a6b06211c1411caf0a454313',1,'util.hh']]], + ['rtp_5fformat_5fg729_74',['RTP_FORMAT_G729',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a78da373e5b8fb9a83e28f5b8b715ca19',1,'util.hh']]], + ['rtp_5fformat_5fg729d_75',['RTP_FORMAT_G729D',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96af2981123dc924d80ed50371625927f58',1,'util.hh']]], + ['rtp_5fformat_5fg729e_76',['RTP_FORMAT_G729E',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96adba054e696e9d57d316c598618580a63',1,'util.hh']]], + ['rtp_5fformat_5fgeneric_77',['RTP_FORMAT_GENERIC',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96ad4b1be929d880baa2c2ca85c614f61b9',1,'util.hh']]], + ['rtp_5fformat_5fgsm_78',['RTP_FORMAT_GSM',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96aa6d4ba4fb63005fac69fa371fdf18a68',1,'util.hh']]], + ['rtp_5fformat_5fgsm_5fefr_79',['RTP_FORMAT_GSM_EFR',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a4e41697a659bea307ca6387330d5b9ed',1,'util.hh']]], + ['rtp_5fformat_5fh264_80',['RTP_FORMAT_H264',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96ad785025a8de9a53f17dc84ec3eed85bd',1,'util.hh']]], + ['rtp_5fformat_5fh265_81',['RTP_FORMAT_H265',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a4ee0ab7d51bf50f8f5a5cb995ecc407b',1,'util.hh']]], + ['rtp_5fformat_5fh266_82',['RTP_FORMAT_H266',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a0e3d0414b29804783324399c8a42c85d',1,'util.hh']]], + ['rtp_5fformat_5fl16_5fmono_83',['RTP_FORMAT_L16_MONO',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a4c34cf9ef36a41ba3565b0e3f6ea534a',1,'util.hh']]], + ['rtp_5fformat_5fl16_5fstereo_84',['RTP_FORMAT_L16_STEREO',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a1de81aee545949cf4609fe3cca3ab1b8',1,'util.hh']]], + ['rtp_5fformat_5fl8_85',['RTP_FORMAT_L8',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96abee7466b11e455f2f2362dc39e61c6a8',1,'util.hh']]], + ['rtp_5fformat_5flpc_86',['RTP_FORMAT_LPC',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a61c2e69b79b0fd2a8fd0bb24fb359ecd',1,'util.hh']]], + ['rtp_5fformat_5fopus_87',['RTP_FORMAT_OPUS',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a4e6ef095b4645cdc8aef241aad1f974b',1,'util.hh']]], + ['rtp_5fformat_5fpcma_88',['RTP_FORMAT_PCMA',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a518313e0a5342ff1b5b79ead46791b2e',1,'util.hh']]], + ['rtp_5fformat_5fpcmu_89',['RTP_FORMAT_PCMU',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a12448ad5b424a2f6d5028a7fd06019b7',1,'util.hh']]], + ['rtp_5fformat_5fvdvi_90',['RTP_FORMAT_VDVI',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a91525c8b53f821a6644803967be0e3ed',1,'util.hh']]], + ['rtp_5fframe_91',['rtp_frame',['../structuvgrtp_1_1frame_1_1rtp__frame.html',1,'uvgrtp::frame']]], + ['rtp_5fgeneric_5ferror_92',['RTP_GENERIC_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387bafde486de26be732acf472480e3693b19',1,'util.hh']]], + ['rtp_5fh26x_5fdo_5fnot_5faggr_93',['RTP_H26X_DO_NOT_AGGR',['../util_8hh.html#af03a75996471fc531742cd640c7caf2da06bebd993fe336bb646a5e2fbfa23662',1,'util.hh']]], + ['rtp_5finitialized_94',['RTP_INITIALIZED',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba0759e9bb74c7a15ef09513547ed5cc2a',1,'util.hh']]], + ['rtp_5finvalid_5fvalue_95',['RTP_INVALID_VALUE',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba4cdd3c5db294a4f05294b264afbf678b',1,'util.hh']]], + ['rtp_5fmemory_5ferror_96',['RTP_MEMORY_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387bac54e582250aec15bf2aea189ccbb0348',1,'util.hh']]], + ['rtp_5fno_5fflags_97',['RTP_NO_FLAGS',['../util_8hh.html#af03a75996471fc531742cd640c7caf2da084c095dae54bbbc6d9509568c58f9a6',1,'util.hh']]], + ['rtp_5fno_5fh26x_5fscl_98',['RTP_NO_H26X_SCL',['../util_8hh.html#af03a75996471fc531742cd640c7caf2dafd917713b62c18d5fa4106e42f3fbde8',1,'util.hh']]], + ['rtp_5fnot_5ffound_99',['RTP_NOT_FOUND',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba0a18f9856d2dd5890bb6ec25e4acf631',1,'util.hh']]], + ['rtp_5fnot_5finitialized_100',['RTP_NOT_INITIALIZED',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba32d67254c4da35568e7007ec3825f98a',1,'util.hh']]], + ['rtp_5fnot_5fsupported_101',['RTP_NOT_SUPPORTED',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba756d5cd372b045f069a493ed2f2cfa22',1,'util.hh']]], + ['rtp_5fok_102',['RTP_OK',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba0d701531b2bb1c027f5e5bcc64ed29e1',1,'util.hh']]], + ['rtp_5frecv_5ferror_103',['RTP_RECV_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387baa499befa487c22503360adffc590f33b',1,'util.hh']]], + ['rtp_5fsend_5ferror_104',['RTP_SEND_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba6c47e86944dbed4d33531236a6e28079',1,'util.hh']]], + ['rtp_5fsocket_5ferror_105',['RTP_SOCKET_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387bab392a7774c551eed903855248760ad06',1,'util.hh']]], + ['rtp_5fssrc_5fcollision_106',['RTP_SSRC_COLLISION',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba80aa5b74c1e252c2ef49e0796d4183d3',1,'util.hh']]], + ['rtp_5ftimeout_107',['RTP_TIMEOUT',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387bacb40716d1ab0663c0cce56f6d03f0902',1,'util.hh']]], + ['rtp_5fts_108',['rtp_ts',['../structuvgrtp_1_1frame_1_1rtcp__sender__info.html#a2e9c3d1fe1b522a1d4c6fb4bc1fbdbdf',1,'uvgrtp::frame::rtcp_sender_info']]] +]; diff --git a/docs/html/search/all_14.js b/docs/html/search/all_14.js new file mode 100644 index 00000000..47361156 --- /dev/null +++ b/docs/html/search/all_14.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['send_5fapp_5fpacket_0',['send_app_packet',['../classuvgrtp_1_1rtcp.html#a0c092bca6edda19218a2cb84ed776c34',1,'uvgrtp::rtcp']]], + ['send_5fbye_5fpacket_1',['send_bye_packet',['../classuvgrtp_1_1rtcp.html#a2b831698320212e382e3d565e62d31c4',1,'uvgrtp::rtcp']]], + ['send_5fsdes_5fpacket_2',['send_sdes_packet',['../classuvgrtp_1_1rtcp.html#a65680d4ba308fc8cb92fd41f0d313c84',1,'uvgrtp::rtcp']]], + ['sending_20data_3',['Step 4: Sending data',['../index.html#autotoc_md8',1,'']]], + ['sending_20example_20non_20working_4',['Simple sending example (non-working)',['../index.html#autotoc_md11',1,'']]], + ['session_5',['session',['../classuvgrtp_1_1session.html',1,'uvgrtp::session'],['../index.html#autotoc_md4',1,'Step 2: Create session']]], + ['set_5fts_5finfo_6',['set_ts_info',['../classuvgrtp_1_1rtcp.html#a5d0d06f9b4b7779d96d8d60938627316',1,'uvgrtp::rtcp']]], + ['simple_20sending_20example_20non_20working_7',['Simple sending example (non-working)',['../index.html#autotoc_md11',1,'']]], + ['start_5fzrtp_8',['start_zrtp',['../classuvgrtp_1_1media__stream.html#a9e22ebbe9f903abe0fcae267f98cafeb',1,'uvgrtp::media_stream']]], + ['step_201_3a_20create_20context_9',['Step 1: Create context',['../index.html#autotoc_md3',1,'']]], + ['step_202_3a_20create_20session_10',['Step 2: Create session',['../index.html#autotoc_md4',1,'']]], + ['step_203_201_3a_20encryption_20optional_11',['Step 3.1: Encryption (optional)',['../index.html#autotoc_md6',1,'']]], + ['step_203_202_3a_20configure_20media_5fstream_20optional_12',['Step 3.2: Configure media_stream (optional)',['../index.html#autotoc_md7',1,'']]], + ['step_203_3a_20create_20media_5fstream_13',['Step 3: Create media_stream',['../index.html#autotoc_md5',1,'']]], + ['step_204_3a_20sending_20data_14',['Step 4: Sending data',['../index.html#autotoc_md8',1,'']]], + ['step_205_3a_20receiving_20data_15',['Step 5: Receiving data',['../index.html#autotoc_md9',1,'']]], + ['step_206_3a_20cleanup_16',['Step 6: Cleanup',['../index.html#autotoc_md10',1,'']]] +]; diff --git a/docs/html/search/all_15.js b/docs/html/search/all_15.js new file mode 100644 index 00000000..026b88d3 --- /dev/null +++ b/docs/html/search/all_15.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['tutorial_0',['Tutorial',['../index.html#autotoc_md2',1,'']]] +]; diff --git a/docs/html/search/all_16.js b/docs/html/search/all_16.js new file mode 100644 index 00000000..4d0e5064 --- /dev/null +++ b/docs/html/search/all_16.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['util_2ehh_0',['util.hh',['../util_8hh.html',1,'']]], + ['uvgrtp_1',['uvgRTP',['../index.html',1,'']]] +]; diff --git a/docs/html/search/all_17.js b/docs/html/search/all_17.js new file mode 100644 index 00000000..bd365c95 --- /dev/null +++ b/docs/html/search/all_17.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['version_0',['version',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a096fae3005310de937f1dab442c3b9d7',1,'uvgrtp::frame::rtcp_header']]] +]; diff --git a/docs/html/search/all_18.js b/docs/html/search/all_18.js new file mode 100644 index 00000000..408f97e5 --- /dev/null +++ b/docs/html/search/all_18.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['working_0',['Simple sending example (non-working)',['../index.html#autotoc_md11',1,'']]] +]; diff --git a/docs/html/search/all_19.js b/docs/html/search/all_19.js new file mode 100644 index 00000000..24502fa2 --- /dev/null +++ b/docs/html/search/all_19.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_7econtext_0',['~context',['../classuvgrtp_1_1context.html#a652a201ae11685961267455ab823eb60',1,'uvgrtp::context']]] +]; diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js index bd1f5897..64bfd1d5 100644 --- a/docs/html/search/all_2.js +++ b/docs/html/search/all_2.js @@ -1,9 +1,6 @@ var searchData= [ - ['configure_5fctx_0',['configure_ctx',['../classuvgrtp_1_1media__stream.html#a2cee4fe3bf423ec317b4a3eacc136238',1,'uvgrtp::media_stream']]], - ['context_1',['context',['../classuvgrtp_1_1context.html#a98be18c2848404549cfadf910ba1573a',1,'uvgrtp::context::context()'],['../classuvgrtp_1_1context.html',1,'uvgrtp::context']]], - ['count_2',['count',['../structuvgrtp_1_1frame_1_1rtcp__header.html#af121a4cae797537270add50efd7a4e3d',1,'uvgrtp::frame::rtcp_header']]], - ['create_5fsession_3',['create_session',['../classuvgrtp_1_1context.html#ae4417159d9b136b2d696fb7571fc3266',1,'uvgrtp::context::create_session(std::pair< std::string, std::string > addresses)'],['../classuvgrtp_1_1context.html#a81b2dc23ebf64d1153410376503eccb4',1,'uvgrtp::context::create_session(std::string address)']]], - ['create_5fstream_4',['create_stream',['../classuvgrtp_1_1session.html#a0b9fb48e95cbfdb76fd9f61e8cafe8e4',1,'uvgrtp::session::create_stream(uint16_t src_port, uint16_t dst_port, rtp_format_t fmt, int rce_flags)'],['../classuvgrtp_1_1session.html#a07a96e787de86d902d5c4d6bcb3dc416',1,'uvgrtp::session::create_stream(uint16_t port, rtp_format_t fmt, int rce_flags)']]], - ['crypto_5fenabled_5',['crypto_enabled',['../classuvgrtp_1_1context.html#a0ddad3f0a78b6a4b13f2b8fdd15c9087',1,'uvgrtp::context']]] + ['3_201_3a_20encryption_20optional_0',['Step 3.1: Encryption (optional)',['../index.html#autotoc_md6',1,'']]], + ['3_202_3a_20configure_20media_5fstream_20optional_1',['Step 3.2: Configure media_stream (optional)',['../index.html#autotoc_md7',1,'']]], + ['3_3a_20create_20media_5fstream_2',['Step 3: Create media_stream',['../index.html#autotoc_md5',1,'']]] ]; diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js index 687611af..e8dfecdb 100644 --- a/docs/html/search/all_3.js +++ b/docs/html/search/all_3.js @@ -1,5 +1,4 @@ var searchData= [ - ['destroy_5fsession_0',['destroy_session',['../classuvgrtp_1_1context.html#a61daf2f3cdcdf2542ee997ab6de5efa9',1,'uvgrtp::context']]], - ['destroy_5fstream_1',['destroy_stream',['../classuvgrtp_1_1session.html#a291629a3bfb910463b88d8edb3984149',1,'uvgrtp::session']]] + ['4_3a_20sending_20data_0',['Step 4: Sending data',['../index.html#autotoc_md8',1,'']]] ]; diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js index 67fe1f91..7cc4852d 100644 --- a/docs/html/search/all_4.js +++ b/docs/html/search/all_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['fmt_0',['fmt',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a0ca5bbeb0619b824a07189220d27e3de',1,'uvgrtp::frame::rtcp_header']]] + ['5_3a_20receiving_20data_0',['Step 5: Receiving data',['../index.html#autotoc_md9',1,'']]] ]; diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js index cddedd33..a23f5d45 100644 --- a/docs/html/search/all_5.js +++ b/docs/html/search/all_5.js @@ -1,6 +1,4 @@ var searchData= [ - ['get_5fconfiguration_5fvalue_0',['get_configuration_value',['../classuvgrtp_1_1media__stream.html#acee8dd45e8c6ebbb1af52bb54dd7c40d',1,'uvgrtp::media_stream']]], - ['get_5frtcp_1',['get_rtcp',['../classuvgrtp_1_1media__stream.html#ab339f15d5a852beacd901b7b78e887ea',1,'uvgrtp::media_stream']]], - ['get_5fssrc_2',['get_ssrc',['../classuvgrtp_1_1media__stream.html#a8796cb34e0e6c61af8cabd13dd6793b5',1,'uvgrtp::media_stream']]] + ['6_3a_20cleanup_0',['Step 6: Cleanup',['../index.html#autotoc_md10',1,'']]] ]; diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js index 1404b8eb..85877691 100644 --- a/docs/html/search/all_6.js +++ b/docs/html/search/all_6.js @@ -1,9 +1,4 @@ var searchData= [ - ['install_5fapp_5fhook_0',['install_app_hook',['../classuvgrtp_1_1rtcp.html#a977c99cfaa1442553ab12d4c140bbb0f',1,'uvgrtp::rtcp::install_app_hook(void(*hook)(uvgrtp::frame::rtcp_app_packet *))'],['../classuvgrtp_1_1rtcp.html#a76cb98093acfb54050b50ff82106ca94',1,'uvgrtp::rtcp::install_app_hook(std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_app_packet >)> app_handler)']]], - ['install_5freceive_5fhook_1',['install_receive_hook',['../classuvgrtp_1_1media__stream.html#a74a558b23866976e52c5903996544a27',1,'uvgrtp::media_stream']]], - ['install_5freceiver_5fhook_2',['install_receiver_hook',['../classuvgrtp_1_1rtcp.html#a04c887fe95173d55294f57d639a1f602',1,'uvgrtp::rtcp::install_receiver_hook(void(*hook)(uvgrtp::frame::rtcp_receiver_report *))'],['../classuvgrtp_1_1rtcp.html#a2140c6bc5160b4b2bfdf54a91af45422',1,'uvgrtp::rtcp::install_receiver_hook(std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_receiver_report >)> rr_handler)']]], - ['install_5fsdes_5fhook_3',['install_sdes_hook',['../classuvgrtp_1_1rtcp.html#ad694a3a869b1c28309e1f2db6d7c2e50',1,'uvgrtp::rtcp::install_sdes_hook(void(*hook)(uvgrtp::frame::rtcp_sdes_packet *))'],['../classuvgrtp_1_1rtcp.html#a35daabdb93e3bdd40b1ea51e6079bd40',1,'uvgrtp::rtcp::install_sdes_hook(std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_sdes_packet >)> sdes_handler)']]], - ['install_5fsend_5fapp_5fhook_4',['install_send_app_hook',['../classuvgrtp_1_1rtcp.html#ad62ad1cc01e3d0808ac8254ce30756a1',1,'uvgrtp::rtcp']]], - ['install_5fsender_5fhook_5',['install_sender_hook',['../classuvgrtp_1_1rtcp.html#a4a262a814ffa3093ac6829c90b0b3fd1',1,'uvgrtp::rtcp::install_sender_hook(void(*hook)(uvgrtp::frame::rtcp_sender_report *))'],['../classuvgrtp_1_1rtcp.html#a79a46d4dff360019a8a089112998b9eb',1,'uvgrtp::rtcp::install_sender_hook(std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_sender_report >)> sr_handler)']]] + ['add_5fsrtp_5fctx_0',['add_srtp_ctx',['../classuvgrtp_1_1media__stream.html#a0950a91bd645cbf842d8218ae4171aed',1,'uvgrtp::media_stream']]] ]; diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js index bb020cce..92b38455 100644 --- a/docs/html/search/all_7.js +++ b/docs/html/search/all_7.js @@ -1,4 +1,4 @@ var searchData= [ - ['length_0',['length',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a1ed1871349edce32d60c3b1a33049fd0',1,'uvgrtp::frame::rtcp_header']]] + ['byte_5fcnt_0',['byte_cnt',['../structuvgrtp_1_1frame_1_1rtcp__sender__info.html#a41290b62c283bf5d4c8f3a86ac5975ce',1,'uvgrtp::frame::rtcp_sender_info']]] ]; diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js index 31f73514..6a45d4fe 100644 --- a/docs/html/search/all_8.js +++ b/docs/html/search/all_8.js @@ -1,4 +1,14 @@ var searchData= [ - ['media_5fstream_0',['media_stream',['../classuvgrtp_1_1media__stream.html',1,'uvgrtp']]] + ['cleanup_0',['Step 6: Cleanup',['../index.html#autotoc_md10',1,'']]], + ['configure_20media_5fstream_20optional_1',['Step 3.2: Configure media_stream (optional)',['../index.html#autotoc_md7',1,'']]], + ['configure_5fctx_2',['configure_ctx',['../classuvgrtp_1_1media__stream.html#a2cee4fe3bf423ec317b4a3eacc136238',1,'uvgrtp::media_stream']]], + ['context_3',['context',['../classuvgrtp_1_1context.html',1,'uvgrtp::context'],['../classuvgrtp_1_1context.html#a98be18c2848404549cfadf910ba1573a',1,'uvgrtp::context::context()'],['../index.html#autotoc_md3',1,'Step 1: Create context']]], + ['count_4',['count',['../structuvgrtp_1_1frame_1_1rtcp__header.html#af121a4cae797537270add50efd7a4e3d',1,'uvgrtp::frame::rtcp_header']]], + ['create_20context_5',['Step 1: Create context',['../index.html#autotoc_md3',1,'']]], + ['create_20media_5fstream_6',['Step 3: Create media_stream',['../index.html#autotoc_md5',1,'']]], + ['create_20session_7',['Step 2: Create session',['../index.html#autotoc_md4',1,'']]], + ['create_5fsession_8',['create_session',['../classuvgrtp_1_1context.html#ae4417159d9b136b2d696fb7571fc3266',1,'uvgrtp::context::create_session(std::pair< std::string, std::string > addresses)'],['../classuvgrtp_1_1context.html#a81b2dc23ebf64d1153410376503eccb4',1,'uvgrtp::context::create_session(std::string address)']]], + ['create_5fstream_9',['create_stream',['../classuvgrtp_1_1session.html#a0b9fb48e95cbfdb76fd9f61e8cafe8e4',1,'uvgrtp::session::create_stream(uint16_t src_port, uint16_t dst_port, rtp_format_t fmt, int rce_flags)'],['../classuvgrtp_1_1session.html#a07a96e787de86d902d5c4d6bcb3dc416',1,'uvgrtp::session::create_stream(uint16_t port, rtp_format_t fmt, int rce_flags)']]], + ['crypto_5fenabled_10',['crypto_enabled',['../classuvgrtp_1_1context.html#a0ddad3f0a78b6a4b13f2b8fdd15c9087',1,'uvgrtp::context']]] ]; diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js index bcd88346..48cee3b9 100644 --- a/docs/html/search/all_9.js +++ b/docs/html/search/all_9.js @@ -1,5 +1,6 @@ var searchData= [ - ['ntp_5flsw_0',['ntp_lsw',['../structuvgrtp_1_1frame_1_1rtcp__sender__info.html#a7c80f6082983dae0f3a5eea55a7c8ef6',1,'uvgrtp::frame::rtcp_sender_info']]], - ['ntp_5fmsw_1',['ntp_msw',['../structuvgrtp_1_1frame_1_1rtcp__sender__info.html#ae22a2bcad293efb1d642762d3eac3143',1,'uvgrtp::frame::rtcp_sender_info']]] + ['data_0',['data',['../index.html#autotoc_md8',1,'Step 4: Sending data'],['../index.html#autotoc_md9',1,'Step 5: Receiving data']]], + ['destroy_5fsession_1',['destroy_session',['../classuvgrtp_1_1context.html#a61daf2f3cdcdf2542ee997ab6de5efa9',1,'uvgrtp::context']]], + ['destroy_5fstream_2',['destroy_stream',['../classuvgrtp_1_1session.html#a291629a3bfb910463b88d8edb3984149',1,'uvgrtp::session']]] ]; diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js index a9c442b3..3b5a833d 100644 --- a/docs/html/search/all_a.js +++ b/docs/html/search/all_a.js @@ -1,9 +1,5 @@ var searchData= [ - ['padding_0',['padding',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a4309061d7fae17a13db3d5eea71d6639',1,'uvgrtp::frame::rtcp_header']]], - ['payload_5flen_1',['payload_len',['../structuvgrtp_1_1frame_1_1rtp__frame.html#a2d158e0aaf23398a8a3b02c95d06e366',1,'uvgrtp::frame::rtp_frame::payload_len()'],['../structuvgrtp_1_1frame_1_1rtcp__app__packet.html#acefa08e5025c52c0e4a0ae14255f6d01',1,'uvgrtp::frame::rtcp_app_packet::payload_len()'],['../structuvgrtp_1_1frame_1_1rtcp__fb__packet.html#a03976200a7d64f842778f2880361f981',1,'uvgrtp::frame::rtcp_fb_packet::payload_len()']]], - ['pkt_5fsubtype_2',['pkt_subtype',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a829dd160ba7f473f3d6c5ff2d2dae5ab',1,'uvgrtp::frame::rtcp_header']]], - ['pkt_5ftype_3',['pkt_type',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a08120f0b6526c473c6488803388c7855',1,'uvgrtp::frame::rtcp_header']]], - ['pull_5fframe_4',['pull_frame',['../classuvgrtp_1_1media__stream.html#ab0c854a4c36572f91008a8e1e49e38bb',1,'uvgrtp::media_stream::pull_frame()'],['../classuvgrtp_1_1media__stream.html#a466067ad9924a52530c62c53c1b397b4',1,'uvgrtp::media_stream::pull_frame(size_t timeout_ms)']]], - ['push_5fframe_5',['push_frame',['../classuvgrtp_1_1media__stream.html#a157e9973d92b65e82914d4028690c770',1,'uvgrtp::media_stream::push_frame(uint8_t *data, size_t data_len, int rtp_flags)'],['../classuvgrtp_1_1media__stream.html#a068a0963e06f789b4e4310a45cbe4409',1,'uvgrtp::media_stream::push_frame(std::unique_ptr< uint8_t[]> data, size_t data_len, int rtp_flags)'],['../classuvgrtp_1_1media__stream.html#ac0cb1cf34b639c9ba71b047b3ba26d22',1,'uvgrtp::media_stream::push_frame(uint8_t *data, size_t data_len, uint32_t ts, int rtp_flags)'],['../classuvgrtp_1_1media__stream.html#a5577c57f1bdd5b888aa4e8c4f939eba7',1,'uvgrtp::media_stream::push_frame(uint8_t *data, size_t data_len, uint32_t ts, uint64_t ntp_ts, int rtp_flags)'],['../classuvgrtp_1_1media__stream.html#abe9099254c6bf16f255f5f50441ec9d2',1,'uvgrtp::media_stream::push_frame(std::unique_ptr< uint8_t[]> data, size_t data_len, uint32_t ts, int rtp_flags)'],['../classuvgrtp_1_1media__stream.html#a56d2a209b2647d0f3ee7948e8cf45438',1,'uvgrtp::media_stream::push_frame(std::unique_ptr< uint8_t[]> data, size_t data_len, uint32_t ts, uint64_t ntp_ts, int rtp_flags)']]] + ['encryption_20optional_0',['Step 3.1: Encryption (optional)',['../index.html#autotoc_md6',1,'']]], + ['example_20non_20working_1',['Simple sending example (non-working)',['../index.html#autotoc_md11',1,'']]] ]; diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js index 03defd42..f2a7c44e 100644 --- a/docs/html/search/all_b.js +++ b/docs/html/search/all_b.js @@ -1,110 +1,5 @@ var searchData= [ - ['rcc_5fclock_5frate_0',['RCC_CLOCK_RATE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587faece26b6edb4fc1fe6733b8fec0504b99',1,'util.hh']]], - ['rcc_5fdyn_5fpayload_5ftype_1',['RCC_DYN_PAYLOAD_TYPE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fac758a522806ada30386b262660f30617',1,'util.hh']]], - ['rcc_5ffps_5fdenominator_2',['RCC_FPS_DENOMINATOR',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa9e60e576f72eafe6219cd9f0a9615ce9',1,'util.hh']]], - ['rcc_5ffps_5fnumerator_3',['RCC_FPS_NUMERATOR',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa51034849ac8a4078f0c3b5198b92ab54',1,'util.hh']]], - ['rcc_5fmtu_5fsize_4',['RCC_MTU_SIZE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa7667fb72b42a2c11991b4879619f9f83',1,'util.hh']]], - ['rcc_5fpkt_5fmax_5fdelay_5',['RCC_PKT_MAX_DELAY',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa5ac1245e18a420489083adddfa97b135',1,'util.hh']]], - ['rcc_5fpoll_5ftimeout_6',['RCC_POLL_TIMEOUT',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa97b5a85e591372f65274238d0d1a73f8',1,'util.hh']]], - ['rcc_5fremote_5fssrc_7',['RCC_REMOTE_SSRC',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa15b4ff7295eae57338f4c3864c5146b7',1,'util.hh']]], - ['rcc_5fring_5fbuffer_5fsize_8',['RCC_RING_BUFFER_SIZE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa9be732aa645fc09adde5c84a2d07e0f6',1,'util.hh']]], - ['rcc_5fsession_5fbandwidth_9',['RCC_SESSION_BANDWIDTH',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fa9a5a95ba2f189fb0350cbc44ba2b95c7',1,'util.hh']]], - ['rcc_5fssrc_10',['RCC_SSRC',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fad93dccbcd813299ea0b976d4dea79937',1,'util.hh']]], - ['rcc_5fudp_5frcv_5fbuf_5fsize_11',['RCC_UDP_RCV_BUF_SIZE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fac52afca9d1a8c24b1a788bc5b8524663',1,'util.hh']]], - ['rcc_5fudp_5fsnd_5fbuf_5fsize_12',['RCC_UDP_SND_BUF_SIZE',['../util_8hh.html#aa98d9238629e33567e73af0d239e587fad4eba6c62183db35dd4bd0e09ddd107b',1,'util.hh']]], - ['rce_5ffragment_5fgeneric_13',['RCE_FRAGMENT_GENERIC',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa5b0a8dbb22c20ebe8c0711541fb68a79',1,'util.hh']]], - ['rce_5fframe_5frate_14',['RCE_FRAME_RATE',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afae175f37ce4fdc6e7d9e01d200b8d9abc',1,'util.hh']]], - ['rce_5fh26x_5fdependency_5fenforcement_15',['RCE_H26X_DEPENDENCY_ENFORCEMENT',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa121da451fe2a4008cec78ac4642399b2',1,'util.hh']]], - ['rce_5fholepunch_5fkeepalive_16',['RCE_HOLEPUNCH_KEEPALIVE',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa8e66f45819774772a0156647d3788a95',1,'util.hh']]], - ['rce_5fno_5fflags_17',['RCE_NO_FLAGS',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa4952226c012292c16fe04477f76e5bcb',1,'util.hh']]], - ['rce_5fno_5fh26x_5fprepend_5fsc_18',['RCE_NO_H26X_PREPEND_SC',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa877835beb990d36f59f4d9c1d61d2c35',1,'util.hh']]], - ['rce_5fpace_5ffragment_5fsending_19',['RCE_PACE_FRAGMENT_SENDING',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa836063a6ef3da262d0805cf1571ab35c',1,'util.hh']]], - ['rce_5freceive_5fonly_20',['RCE_RECEIVE_ONLY',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afaf89817eda89d32c43e18ed0645ac4d73',1,'util.hh']]], - ['rce_5frtcp_21',['RCE_RTCP',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afab1342138e5af3f03d6eaf1378382bf3d',1,'util.hh']]], - ['rce_5frtcp_5fmux_22',['RCE_RTCP_MUX',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa3dc772b2aab5eae239afae6cef8c68a7',1,'util.hh']]], - ['rce_5fsend_5fonly_23',['RCE_SEND_ONLY',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa6bb67e1962af60c05c6062fb6f1df374',1,'util.hh']]], - ['rce_5fsrtp_24',['RCE_SRTP',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afaf235cba606675b9c38284ee1a491696b',1,'util.hh']]], - ['rce_5fsrtp_5fauthenticate_5frtp_25',['RCE_SRTP_AUTHENTICATE_RTP',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa820625b96886d955bc42e0cbc52cdd1e',1,'util.hh']]], - ['rce_5fsrtp_5fkeysize_5f192_26',['RCE_SRTP_KEYSIZE_192',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afaedeac11cc80833b61b51ae32f787db73',1,'util.hh']]], - ['rce_5fsrtp_5fkeysize_5f256_27',['RCE_SRTP_KEYSIZE_256',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa163744fe7c054b8396a4a07ae82a80c0',1,'util.hh']]], - ['rce_5fsrtp_5fkmngmnt_5fuser_28',['RCE_SRTP_KMNGMNT_USER',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa4722105b4fd34467a56b8aca8fc03773',1,'util.hh']]], - ['rce_5fsrtp_5fkmngmnt_5fzrtp_29',['RCE_SRTP_KMNGMNT_ZRTP',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa40a3deab3893524daf7e057c6dfdaa75',1,'util.hh']]], - ['rce_5fsrtp_5fnull_5fcipher_30',['RCE_SRTP_NULL_CIPHER',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa4ddec7d182cec161d6b582589bc9baba',1,'util.hh']]], - ['rce_5fsrtp_5freplay_5fprotection_31',['RCE_SRTP_REPLAY_PROTECTION',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afaddd5fdb170d7cc194e4165d3f9e9a1c1',1,'util.hh']]], - ['rce_5fsystem_5fcall_5fclustering_32',['RCE_SYSTEM_CALL_CLUSTERING',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa9e41141dacd18def5ab83e9f671f4263',1,'util.hh']]], - ['rce_5fzrtp_5fdiffie_5fhellman_5fmode_33',['RCE_ZRTP_DIFFIE_HELLMAN_MODE',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa4fdf2b1f3f934315158b4204e71f9171',1,'util.hh']]], - ['rce_5fzrtp_5fmultistream_5fmode_34',['RCE_ZRTP_MULTISTREAM_MODE',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2afa9127265f0b1a1a45bac8e6fa7270a98a',1,'util.hh']]], - ['remove_5fall_5fhooks_35',['remove_all_hooks',['../classuvgrtp_1_1rtcp.html#a81198428cc697c0c7cbb2a4191f294d8',1,'uvgrtp::rtcp']]], - ['remove_5fsend_5fapp_5fhook_36',['remove_send_app_hook',['../classuvgrtp_1_1rtcp.html#a27adb6b5965dab3918bd02a2e7a2dfd2',1,'uvgrtp::rtcp']]], - ['rtcp_37',['rtcp',['../classuvgrtp_1_1rtcp.html',1,'uvgrtp']]], - ['rtcp_5fapp_5fpacket_38',['rtcp_app_packet',['../structuvgrtp_1_1frame_1_1rtcp__app__packet.html',1,'uvgrtp::frame']]], - ['rtcp_5ffb_5ffci_39',['rtcp_fb_fci',['../structuvgrtp_1_1frame_1_1rtcp__fb__fci.html',1,'uvgrtp::frame']]], - ['rtcp_5ffb_5fpacket_40',['rtcp_fb_packet',['../structuvgrtp_1_1frame_1_1rtcp__fb__packet.html',1,'uvgrtp::frame']]], - ['rtcp_5ffir_41',['rtcp_fir',['../structuvgrtp_1_1frame_1_1rtcp__fir.html',1,'uvgrtp::frame']]], - ['rtcp_5fheader_42',['rtcp_header',['../structuvgrtp_1_1frame_1_1rtcp__header.html',1,'uvgrtp::frame']]], - ['rtcp_5freceiver_5freport_43',['rtcp_receiver_report',['../structuvgrtp_1_1frame_1_1rtcp__receiver__report.html',1,'uvgrtp::frame']]], - ['rtcp_5freport_5fblock_44',['rtcp_report_block',['../structuvgrtp_1_1frame_1_1rtcp__report__block.html',1,'uvgrtp::frame']]], - ['rtcp_5frpsi_45',['rtcp_rpsi',['../structuvgrtp_1_1frame_1_1rtcp__rpsi.html',1,'uvgrtp::frame']]], - ['rtcp_5fsdes_5fchunk_46',['rtcp_sdes_chunk',['../structuvgrtp_1_1frame_1_1rtcp__sdes__chunk.html',1,'uvgrtp::frame']]], - ['rtcp_5fsdes_5fitem_47',['rtcp_sdes_item',['../structuvgrtp_1_1frame_1_1rtcp__sdes__item.html',1,'uvgrtp::frame']]], - ['rtcp_5fsdes_5fpacket_48',['rtcp_sdes_packet',['../structuvgrtp_1_1frame_1_1rtcp__sdes__packet.html',1,'uvgrtp::frame']]], - ['rtcp_5fsender_5finfo_49',['rtcp_sender_info',['../structuvgrtp_1_1frame_1_1rtcp__sender__info.html',1,'uvgrtp::frame']]], - ['rtcp_5fsender_5freport_50',['rtcp_sender_report',['../structuvgrtp_1_1frame_1_1rtcp__sender__report.html',1,'uvgrtp::frame']]], - ['rtcp_5fsli_51',['rtcp_sli',['../structuvgrtp_1_1frame_1_1rtcp__sli.html',1,'uvgrtp::frame']]], - ['rtp_5fauth_5ftag_5fmismatch_52',['RTP_AUTH_TAG_MISMATCH',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba6d62ec0a7250a3db7c0f3a13280ecc65',1,'util.hh']]], - ['rtp_5fbind_5ferror_53',['RTP_BIND_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba000c0166a0c38686389fc2eba0ddc458',1,'util.hh']]], - ['rtp_5fcopy_54',['RTP_COPY',['../util_8hh.html#af03a75996471fc531742cd640c7caf2dab1d5797a23c37a33168046a2ae6aef6a',1,'util.hh']]], - ['rtp_5fctx_5fconfiguration_5fflags_55',['RTP_CTX_CONFIGURATION_FLAGS',['../util_8hh.html#aa98d9238629e33567e73af0d239e587f',1,'util.hh']]], - ['rtp_5fctx_5fenable_5fflags_56',['RTP_CTX_ENABLE_FLAGS',['../util_8hh.html#a15b2d6364db6065a482c99827f4bd2af',1,'util.hh']]], - ['rtp_5ferror_57',['RTP_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387b',1,'util.hh']]], - ['rtp_5fflags_58',['RTP_FLAGS',['../util_8hh.html#af03a75996471fc531742cd640c7caf2d',1,'util.hh']]], - ['rtp_5fformat_59',['RTP_FORMAT',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96',1,'util.hh']]], - ['rtp_5fformat_5fatlas_60',['RTP_FORMAT_ATLAS',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a81c1df94bbe9478ae6c1ea212c9a20ee',1,'util.hh']]], - ['rtp_5fformat_5fdvi4_5f32_61',['RTP_FORMAT_DVI4_32',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96abf1f20482ba40b0a4161f339978c65c8',1,'util.hh']]], - ['rtp_5fformat_5fdvi4_5f441_62',['RTP_FORMAT_DVI4_441',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96aa4e91d147dcc0696bae592e0de3ae295',1,'util.hh']]], - ['rtp_5fformat_5fdvi4_5f64_63',['RTP_FORMAT_DVI4_64',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96ae0cb5522bf562899f9001adeb669f3ef',1,'util.hh']]], - ['rtp_5fformat_5fdvi4_5f882_64',['RTP_FORMAT_DVI4_882',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96abb0d59c256c7ed6b0f78aff67f89ac18',1,'util.hh']]], - ['rtp_5fformat_5fg722_65',['RTP_FORMAT_G722',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a2240ad1204186f7c34aacfb27673e692',1,'util.hh']]], - ['rtp_5fformat_5fg723_66',['RTP_FORMAT_G723',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96aa97d1880bfcfba08dfef863dc82426d1',1,'util.hh']]], - ['rtp_5fformat_5fg726_5f16_67',['RTP_FORMAT_G726_16',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96ae118651d66f3af54be3094e7e71336c7',1,'util.hh']]], - ['rtp_5fformat_5fg726_5f24_68',['RTP_FORMAT_G726_24',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a8635bcd6f336c19271e7ea20eb9111cf',1,'util.hh']]], - ['rtp_5fformat_5fg726_5f32_69',['RTP_FORMAT_G726_32',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a266862cd2289619b5c4de4c259a32785',1,'util.hh']]], - ['rtp_5fformat_5fg726_5f40_70',['RTP_FORMAT_G726_40',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96af260843177efa05d95f98d30499db683',1,'util.hh']]], - ['rtp_5fformat_5fg728_71',['RTP_FORMAT_G728',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a0f194f13a6b06211c1411caf0a454313',1,'util.hh']]], - ['rtp_5fformat_5fg729_72',['RTP_FORMAT_G729',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a78da373e5b8fb9a83e28f5b8b715ca19',1,'util.hh']]], - ['rtp_5fformat_5fg729d_73',['RTP_FORMAT_G729D',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96af2981123dc924d80ed50371625927f58',1,'util.hh']]], - ['rtp_5fformat_5fg729e_74',['RTP_FORMAT_G729E',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96adba054e696e9d57d316c598618580a63',1,'util.hh']]], - ['rtp_5fformat_5fgeneric_75',['RTP_FORMAT_GENERIC',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96ad4b1be929d880baa2c2ca85c614f61b9',1,'util.hh']]], - ['rtp_5fformat_5fgsm_76',['RTP_FORMAT_GSM',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96aa6d4ba4fb63005fac69fa371fdf18a68',1,'util.hh']]], - ['rtp_5fformat_5fgsm_5fefr_77',['RTP_FORMAT_GSM_EFR',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a4e41697a659bea307ca6387330d5b9ed',1,'util.hh']]], - ['rtp_5fformat_5fh264_78',['RTP_FORMAT_H264',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96ad785025a8de9a53f17dc84ec3eed85bd',1,'util.hh']]], - ['rtp_5fformat_5fh265_79',['RTP_FORMAT_H265',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a4ee0ab7d51bf50f8f5a5cb995ecc407b',1,'util.hh']]], - ['rtp_5fformat_5fh266_80',['RTP_FORMAT_H266',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a0e3d0414b29804783324399c8a42c85d',1,'util.hh']]], - ['rtp_5fformat_5fl16_5fmono_81',['RTP_FORMAT_L16_MONO',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a4c34cf9ef36a41ba3565b0e3f6ea534a',1,'util.hh']]], - ['rtp_5fformat_5fl16_5fstereo_82',['RTP_FORMAT_L16_STEREO',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a1de81aee545949cf4609fe3cca3ab1b8',1,'util.hh']]], - ['rtp_5fformat_5fl8_83',['RTP_FORMAT_L8',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96abee7466b11e455f2f2362dc39e61c6a8',1,'util.hh']]], - ['rtp_5fformat_5flpc_84',['RTP_FORMAT_LPC',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a61c2e69b79b0fd2a8fd0bb24fb359ecd',1,'util.hh']]], - ['rtp_5fformat_5fopus_85',['RTP_FORMAT_OPUS',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a4e6ef095b4645cdc8aef241aad1f974b',1,'util.hh']]], - ['rtp_5fformat_5fpcma_86',['RTP_FORMAT_PCMA',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a518313e0a5342ff1b5b79ead46791b2e',1,'util.hh']]], - ['rtp_5fformat_5fpcmu_87',['RTP_FORMAT_PCMU',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a12448ad5b424a2f6d5028a7fd06019b7',1,'util.hh']]], - ['rtp_5fformat_5fvdvi_88',['RTP_FORMAT_VDVI',['../util_8hh.html#a313c6640ac5ed9384184a94ec57a9a96a91525c8b53f821a6644803967be0e3ed',1,'util.hh']]], - ['rtp_5fframe_89',['rtp_frame',['../structuvgrtp_1_1frame_1_1rtp__frame.html',1,'uvgrtp::frame']]], - ['rtp_5fgeneric_5ferror_90',['RTP_GENERIC_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387bafde486de26be732acf472480e3693b19',1,'util.hh']]], - ['rtp_5fh26x_5fdo_5fnot_5faggr_91',['RTP_H26X_DO_NOT_AGGR',['../util_8hh.html#af03a75996471fc531742cd640c7caf2da06bebd993fe336bb646a5e2fbfa23662',1,'util.hh']]], - ['rtp_5finitialized_92',['RTP_INITIALIZED',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba0759e9bb74c7a15ef09513547ed5cc2a',1,'util.hh']]], - ['rtp_5finvalid_5fvalue_93',['RTP_INVALID_VALUE',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba4cdd3c5db294a4f05294b264afbf678b',1,'util.hh']]], - ['rtp_5fmemory_5ferror_94',['RTP_MEMORY_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387bac54e582250aec15bf2aea189ccbb0348',1,'util.hh']]], - ['rtp_5fno_5fflags_95',['RTP_NO_FLAGS',['../util_8hh.html#af03a75996471fc531742cd640c7caf2da084c095dae54bbbc6d9509568c58f9a6',1,'util.hh']]], - ['rtp_5fno_5fh26x_5fscl_96',['RTP_NO_H26X_SCL',['../util_8hh.html#af03a75996471fc531742cd640c7caf2dafd917713b62c18d5fa4106e42f3fbde8',1,'util.hh']]], - ['rtp_5fnot_5ffound_97',['RTP_NOT_FOUND',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba0a18f9856d2dd5890bb6ec25e4acf631',1,'util.hh']]], - ['rtp_5fnot_5finitialized_98',['RTP_NOT_INITIALIZED',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba32d67254c4da35568e7007ec3825f98a',1,'util.hh']]], - ['rtp_5fnot_5fsupported_99',['RTP_NOT_SUPPORTED',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba756d5cd372b045f069a493ed2f2cfa22',1,'util.hh']]], - ['rtp_5fok_100',['RTP_OK',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba0d701531b2bb1c027f5e5bcc64ed29e1',1,'util.hh']]], - ['rtp_5frecv_5ferror_101',['RTP_RECV_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387baa499befa487c22503360adffc590f33b',1,'util.hh']]], - ['rtp_5fsend_5ferror_102',['RTP_SEND_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba6c47e86944dbed4d33531236a6e28079',1,'util.hh']]], - ['rtp_5fsocket_5ferror_103',['RTP_SOCKET_ERROR',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387bab392a7774c551eed903855248760ad06',1,'util.hh']]], - ['rtp_5fssrc_5fcollision_104',['RTP_SSRC_COLLISION',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387ba80aa5b74c1e252c2ef49e0796d4183d3',1,'util.hh']]], - ['rtp_5ftimeout_105',['RTP_TIMEOUT',['../util_8hh.html#aa6dc3f3578923d1afc40045e4cbe387bacb40716d1ab0663c0cce56f6d03f0902',1,'util.hh']]], - ['rtp_5fts_106',['rtp_ts',['../structuvgrtp_1_1frame_1_1rtcp__sender__info.html#a2e9c3d1fe1b522a1d4c6fb4bc1fbdbdf',1,'uvgrtp::frame::rtcp_sender_info']]] + ['features_0',['Notable features',['../index.html#autotoc_md1',1,'']]], + ['fmt_1',['fmt',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a0ca5bbeb0619b824a07189220d27e3de',1,'uvgrtp::frame::rtcp_header']]] ]; diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js index b8fc87fe..cddedd33 100644 --- a/docs/html/search/all_c.js +++ b/docs/html/search/all_c.js @@ -1,9 +1,6 @@ var searchData= [ - ['send_5fapp_5fpacket_0',['send_app_packet',['../classuvgrtp_1_1rtcp.html#a0c092bca6edda19218a2cb84ed776c34',1,'uvgrtp::rtcp']]], - ['send_5fbye_5fpacket_1',['send_bye_packet',['../classuvgrtp_1_1rtcp.html#a2b831698320212e382e3d565e62d31c4',1,'uvgrtp::rtcp']]], - ['send_5fsdes_5fpacket_2',['send_sdes_packet',['../classuvgrtp_1_1rtcp.html#a65680d4ba308fc8cb92fd41f0d313c84',1,'uvgrtp::rtcp']]], - ['session_3',['session',['../classuvgrtp_1_1session.html',1,'uvgrtp']]], - ['set_5fts_5finfo_4',['set_ts_info',['../classuvgrtp_1_1rtcp.html#a5d0d06f9b4b7779d96d8d60938627316',1,'uvgrtp::rtcp']]], - ['start_5fzrtp_5',['start_zrtp',['../classuvgrtp_1_1media__stream.html#a9e22ebbe9f903abe0fcae267f98cafeb',1,'uvgrtp::media_stream']]] + ['get_5fconfiguration_5fvalue_0',['get_configuration_value',['../classuvgrtp_1_1media__stream.html#acee8dd45e8c6ebbb1af52bb54dd7c40d',1,'uvgrtp::media_stream']]], + ['get_5frtcp_1',['get_rtcp',['../classuvgrtp_1_1media__stream.html#ab339f15d5a852beacd901b7b78e887ea',1,'uvgrtp::media_stream']]], + ['get_5fssrc_2',['get_ssrc',['../classuvgrtp_1_1media__stream.html#a8796cb34e0e6c61af8cabd13dd6793b5',1,'uvgrtp::media_stream']]] ]; diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js index 4d0e5064..1404b8eb 100644 --- a/docs/html/search/all_d.js +++ b/docs/html/search/all_d.js @@ -1,5 +1,9 @@ var searchData= [ - ['util_2ehh_0',['util.hh',['../util_8hh.html',1,'']]], - ['uvgrtp_1',['uvgRTP',['../index.html',1,'']]] + ['install_5fapp_5fhook_0',['install_app_hook',['../classuvgrtp_1_1rtcp.html#a977c99cfaa1442553ab12d4c140bbb0f',1,'uvgrtp::rtcp::install_app_hook(void(*hook)(uvgrtp::frame::rtcp_app_packet *))'],['../classuvgrtp_1_1rtcp.html#a76cb98093acfb54050b50ff82106ca94',1,'uvgrtp::rtcp::install_app_hook(std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_app_packet >)> app_handler)']]], + ['install_5freceive_5fhook_1',['install_receive_hook',['../classuvgrtp_1_1media__stream.html#a74a558b23866976e52c5903996544a27',1,'uvgrtp::media_stream']]], + ['install_5freceiver_5fhook_2',['install_receiver_hook',['../classuvgrtp_1_1rtcp.html#a04c887fe95173d55294f57d639a1f602',1,'uvgrtp::rtcp::install_receiver_hook(void(*hook)(uvgrtp::frame::rtcp_receiver_report *))'],['../classuvgrtp_1_1rtcp.html#a2140c6bc5160b4b2bfdf54a91af45422',1,'uvgrtp::rtcp::install_receiver_hook(std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_receiver_report >)> rr_handler)']]], + ['install_5fsdes_5fhook_3',['install_sdes_hook',['../classuvgrtp_1_1rtcp.html#ad694a3a869b1c28309e1f2db6d7c2e50',1,'uvgrtp::rtcp::install_sdes_hook(void(*hook)(uvgrtp::frame::rtcp_sdes_packet *))'],['../classuvgrtp_1_1rtcp.html#a35daabdb93e3bdd40b1ea51e6079bd40',1,'uvgrtp::rtcp::install_sdes_hook(std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_sdes_packet >)> sdes_handler)']]], + ['install_5fsend_5fapp_5fhook_4',['install_send_app_hook',['../classuvgrtp_1_1rtcp.html#ad62ad1cc01e3d0808ac8254ce30756a1',1,'uvgrtp::rtcp']]], + ['install_5fsender_5fhook_5',['install_sender_hook',['../classuvgrtp_1_1rtcp.html#a4a262a814ffa3093ac6829c90b0b3fd1',1,'uvgrtp::rtcp::install_sender_hook(void(*hook)(uvgrtp::frame::rtcp_sender_report *))'],['../classuvgrtp_1_1rtcp.html#a79a46d4dff360019a8a089112998b9eb',1,'uvgrtp::rtcp::install_sender_hook(std::function< void(std::unique_ptr< uvgrtp::frame::rtcp_sender_report >)> sr_handler)']]] ]; diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js index bd365c95..bb020cce 100644 --- a/docs/html/search/all_e.js +++ b/docs/html/search/all_e.js @@ -1,4 +1,4 @@ var searchData= [ - ['version_0',['version',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a096fae3005310de937f1dab442c3b9d7',1,'uvgrtp::frame::rtcp_header']]] + ['length_0',['length',['../structuvgrtp_1_1frame_1_1rtcp__header.html#a1ed1871349edce32d60c3b1a33049fd0',1,'uvgrtp::frame::rtcp_header']]] ]; diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js new file mode 100644 index 00000000..2d1f8771 --- /dev/null +++ b/docs/html/search/all_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['media_5fstream_0',['media_stream',['../classuvgrtp_1_1media__stream.html',1,'uvgrtp::media_stream'],['../index.html#autotoc_md5',1,'Step 3: Create media_stream']]], + ['media_5fstream_20optional_1',['Step 3.2: Configure media_stream (optional)',['../index.html#autotoc_md7',1,'']]] +]; diff --git a/docs/html/search/close.svg b/docs/html/search/close.svg index a933eea1..337d6cc1 100644 --- a/docs/html/search/close.svg +++ b/docs/html/search/close.svg @@ -1,27 +1,14 @@ + - - - - image/svg+xml - - - - - + - - - - image/svg+xml - - - - - + - - - - image/svg+xml - - - - - - + - - - - image/svg+xml - - - - - + > - + /> + /> diff --git a/docs/html/search/mag_seld.svg b/docs/html/search/mag_seld.svg index 6e720dcc..c906f84c 100644 --- a/docs/html/search/mag_seld.svg +++ b/docs/html/search/mag_seld.svg @@ -1,74 +1,31 @@ - + - - - - image/svg+xml - - - - - + > - + /> + /> diff --git a/docs/html/search/search.js b/docs/html/search/search.js index e103a262..666af01e 100644 --- a/docs/html/search/search.js +++ b/docs/html/search/search.js @@ -22,58 +22,9 @@ @licend The above is the entire license notice for the JavaScript code in this file */ -function convertToId(search) -{ - var result = ''; - for (i=0;i document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); // ------------ Event Handlers // Called when focus is added or removed from the search field. - this.OnSearchFieldFocus = function(isActive) - { + this.OnSearchFieldFocus = function(isActive) { this.Activate(isActive); } - this.OnSearchSelectShow = function() - { - var searchSelectWindow = this.DOMSearchSelectWindow(); - var searchField = this.DOMSearchSelect(); + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); - var left = getXPos(searchField); - var top = getYPos(searchField); - top += searchField.offsetHeight; + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; // show search selection popup searchSelectWindow.style.display='block'; @@ -146,55 +102,44 @@ function SearchBox(name, resultsPath, extension) searchSelectWindow.style.top = top + 'px'; // stop selection hide timer - if (this.hideTimeout) - { + if (this.hideTimeout) { clearTimeout(this.hideTimeout); this.hideTimeout=0; } return false; // to avoid "image drag" default event } - this.OnSearchSelectHide = function() - { - this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()", + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), this.closeSelectionTimeout); } // Called when the content of the search field is changed. - this.OnSearchFieldChange = function(evt) - { - if (this.keyTimeout) // kill running timer - { + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer clearTimeout(this.keyTimeout); this.keyTimeout = 0; } - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 || e.keyCode==13) - { - if (e.shiftKey==1) - { + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { this.OnSearchSelectShow(); - var win=this.DOMSearchSelectWindow(); - for (i=0;i do a search - { + const searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + if (searchValue!="" && this.searchActive) { // something was found -> do a search this.Search(); } } - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { + } else if (e.keyCode==38 && this.searchIndex>0) { // Up this.searchIndex--; this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); this.OnSelectItem(this.searchIndex); this.CloseSelectionWindow(); this.DOMSearchField().focus(); @@ -299,78 +239,75 @@ function SearchBox(name, resultsPath, extension) // --------- Actions // Closes the results window. - this.CloseResultsWindow = function() - { + this.CloseResultsWindow = function() { this.DOMPopupSearchResultsWindow().style.display = 'none'; this.DOMSearchClose().style.display = 'none'; this.Activate(false); } - this.CloseSelectionWindow = function() - { + this.CloseSelectionWindow = function() { this.DOMSearchSelectWindow().style.display = 'none'; } // Performs a search. - this.Search = function() - { + this.Search = function() { this.keyTimeout = 0; // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair idxChar = searchValue.substr(0, 2); } - var jsFile; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; } - var loadJS = function(url, impl, loc){ - var scriptTag = document.createElement('script'); + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); scriptTag.src = url; scriptTag.onload = impl; scriptTag.onreadystatechange = impl; loc.appendChild(scriptTag); } - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - var domSearchBox = this.DOMSearchBox(); - var domPopupSearchResults = this.DOMPopupSearchResults(); - var domSearchClose = this.DOMSearchClose(); - var resultsPath = this.resultsPath; + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; - var handleResults = function() { + const handleResults = function() { document.getElementById("Loading").style.display="none"; if (typeof searchData !== 'undefined') { createResults(resultsPath); document.getElementById("NoMatches").style.display="none"; } - - searchResults.Search(searchValue); - if (domPopupSearchResultsWindow.style.display!='block') - { + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { domSearchClose.style.display = 'inline-block'; - var left = getXPos(domSearchBox) + 150; - var top = getYPos(domSearchBox) + 20; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; domPopupSearchResultsWindow.style.display = 'block'; left -= domPopupSearchResults.offsetWidth; - var maxWidth = document.body.clientWidth; - var maxHeight = document.body.clientHeight; - var width = 300; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; if (left<10) left=10; if (width+left+8>maxWidth) width=maxWidth-left-8; - var height = 400; + let height = 400; if (height+top+8>maxHeight) height=maxHeight-top-8; domPopupSearchResultsWindow.style.top = top + 'px'; domPopupSearchResultsWindow.style.left = left + 'px'; @@ -392,17 +329,13 @@ function SearchBox(name, resultsPath, extension) // Activates or deactivates the search panel, resetting things to // their default values if necessary. - this.Activate = function(isActive) - { + this.Activate = function(isActive) { if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { this.DOMSearchBox().className = 'MSearchBoxActive'; this.searchActive = true; - } - else if (!isActive) // directly remove the panel - { + } else if (!isActive) { // directly remove the panel this.DOMSearchBox().className = 'MSearchBoxInactive'; this.searchActive = false; this.lastSearchValue = '' @@ -415,402 +348,347 @@ function SearchBox(name, resultsPath, extension) // ----------------------------------------------------------------------- // The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') - { - return element; - } +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; } - } - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; } - else - { - element.style.display = 'block'; + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; } } } + } - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; } + } - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; } - focusItem=null; - index++; } - return focusItem; + i++; } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; } - return focusItem; + focusItem=null; + index--; } + return focusItem; + } - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; } + return this.lastKey!=0; + } - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; } + n++; } } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - searchBox.CloseResultsWindow(); + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field document.getElementById("MSearchField").focus(); } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; } + return false; + } - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - searchBox.CloseResultsWindow(); - document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; } + return false; + } } -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} +function createResults(resultsPath) { -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } -function createResults(resultsPath) -{ - var results = document.getElementById("SRResults"); + const results = document.getElementById("SRResults"); results.innerHTML = ''; - for (var e=0; e { + const id = elem[0]; + const srResult = document.createElement('div'); srResult.setAttribute('id','SR_'+id); setClassAttr(srResult,'SRResult'); - var srEntry = document.createElement('div'); + const srEntry = document.createElement('div'); setClassAttr(srEntry,'SREntry'); - var srLink = document.createElement('a'); - srLink.setAttribute('id','Item'+e); - setKeyActions(srLink,'return searchResults.Nav(event,'+e+')'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); setClassAttr(srLink,'SRSymbol'); - srLink.innerHTML = searchData[e][1][0]; + srLink.innerHTML = elem[1][0]; srEntry.appendChild(srLink); - if (searchData[e][1].length==2) // single result - { - srLink.setAttribute('href',resultsPath+searchData[e][1][1][0]); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); - if (searchData[e][1][1][1]) - { + if (elem[1][1][1]) { srLink.setAttribute('target','_parent'); - } - else - { + } else { srLink.setAttribute('target','_blank'); } - var srScope = document.createElement('span'); + const srScope = document.createElement('span'); setClassAttr(srScope,'SRScope'); - srScope.innerHTML = searchData[e][1][1][2]; + srScope.innerHTML = elem[1][1][2]; srEntry.appendChild(srScope); - } - else // multiple results - { + } else { // multiple results srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); - var srChildren = document.createElement('div'); + const srChildren = document.createElement('div'); setClassAttr(srChildren,'SRChildren'); - for (var c=0; c - + uvgRTP: session.hh Source File + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + + +
session.hh
@@ -93,6 +108,7 @@
14 class zrtp;
15 class socketfactory;
16
+
27 class session {
28 public:
30 session(std::string cname, std::string addr, std::shared_ptr<uvgrtp::socketfactory> sfp);
@@ -129,11 +145,12 @@
126 std::string cname_;
127 std::shared_ptr<uvgrtp::socketfactory> sf_;
128 };
+
129}
130
131namespace uvg_rtp = uvgrtp;
-
The media_stream is an entity which represents one RTP stream.
Definition: media_stream.hh:53
-
Provides ZRTP synchronization and can be used to create uvgrtp::media_stream objects.
Definition: session.hh:27
+
The media_stream is an entity which represents one RTP stream.
+
Provides ZRTP synchronization and can be used to create uvgrtp::media_stream objects.
Definition session.hh:27
uvgrtp::media_stream * create_stream(uint16_t port, rtp_format_t fmt, int rce_flags)
Create a unidirectional media_stream for an RTP session.
uvgrtp::media_stream * create_stream(uint16_t src_port, uint16_t dst_port, rtp_format_t fmt, int rce_flags)
Create a uni- or bidirectional media stream.
rtp_error_t destroy_stream(uvgrtp::media_stream *stream)
Destroy a media stream.
@@ -141,7 +158,8 @@
+ diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__app__packet-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__app__packet-members.html index aa1641f3..d63fe356 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__app__packet-members.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__app__packet-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + + +
uvgrtp::frame::rtcp_app_packet Member List
@@ -88,7 +103,8 @@
+ diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__app__packet.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__app__packet.html index 3fa96a9e..4e0af95d 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__app__packet.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__app__packet.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::frame::rtcp_app_packet Struct Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + + +
Public Attributes | @@ -82,21 +97,21 @@

See RFC 3550 section 6.7 - More...

+ More...

#include <frame.hh>

- + - + - + - + - +

Public Attributes

struct rtcp_header header
struct rtcp_header header
 
uint32_t ssrc = 0
uint32_t ssrc = 0
 
uint8_t name [4] = {0}
uint8_t name [4] = {0}
 
uint8_t * payload = nullptr
uint8_t * payload = nullptr
 
size_t payload_len = 0
size_t payload_len = 0
 Size of the payload in bytes. Added by uvgRTP to help process the payload.
 
@@ -193,7 +208,8 @@

+

diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__fci-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__fci-members.html new file mode 100644 index 00000000..bedd55b5 --- /dev/null +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__fci-members.html @@ -0,0 +1,108 @@ + + + + + + + +uvgRTP: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
uvgRTP 3.1.3 +
+
An open-source library for RTP/SRTP media delivery
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
uvgrtp::frame::rtcp_fb_fci Member List
+
+
+ +

This is the complete list of members for uvgrtp::frame::rtcp_fb_fci, including all inherited members.

+ + + + +
fir (defined in uvgrtp::frame::rtcp_fb_fci)uvgrtp::frame::rtcp_fb_fci
rpsi (defined in uvgrtp::frame::rtcp_fb_fci)uvgrtp::frame::rtcp_fb_fci
sli (defined in uvgrtp::frame::rtcp_fb_fci)uvgrtp::frame::rtcp_fb_fci
+ + +
+ + diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__fci.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__fci.html new file mode 100644 index 00000000..327f1230 --- /dev/null +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__fci.html @@ -0,0 +1,181 @@ + + + + + + + +uvgRTP: uvgrtp::frame::rtcp_fb_fci Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
uvgRTP 3.1.3 +
+
An open-source library for RTP/SRTP media delivery
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
uvgrtp::frame::rtcp_fb_fci Struct Reference
+
+
+ +

RTCP Feedback Control Information, See RFC 4585 section 6.1. + More...

+ +

#include <frame.hh>

+ + + + + + + + + + + + +

+Public Attributes

+union { 
 
   rtcp_fir   fir 
 
   rtcp_sli   sli 
 
   rtcp_rpsi   rpsi 
 
};  
 
+

Detailed Description

+

RTCP Feedback Control Information, See RFC 4585 section 6.1.

+ +

Definition at line 196 of file frame.hh.

+

Member Data Documentation

+ +

◆ fir

+ +
+
+ + + + +
rtcp_fir uvgrtp::frame::rtcp_fb_fci::fir
+
+ +

Definition at line 199 of file frame.hh.

+ +
+
+ +

◆ rpsi

+ +
+
+ + + + +
rtcp_rpsi uvgrtp::frame::rtcp_fb_fci::rpsi
+
+ +

Definition at line 201 of file frame.hh.

+ +
+
+ +

◆ sli

+ +
+
+ + + + +
rtcp_sli uvgrtp::frame::rtcp_fb_fci::sli
+
+ +

Definition at line 200 of file frame.hh.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + +
+ + diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__packet-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__packet-members.html new file mode 100644 index 00000000..f5aa4b23 --- /dev/null +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__packet-members.html @@ -0,0 +1,110 @@ + + + + + + + +uvgRTP: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
uvgRTP 3.1.3 +
+
An open-source library for RTP/SRTP media delivery
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
uvgrtp::frame::rtcp_fb_packet Member List
+
+ + + +
+ + diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__packet.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__packet.html new file mode 100644 index 00000000..e6dad9bb --- /dev/null +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fb__packet.html @@ -0,0 +1,215 @@ + + + + + + + +uvgRTP: uvgrtp::frame::rtcp_fb_packet Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
uvgRTP 3.1.3 +
+
An open-source library for RTP/SRTP media delivery
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
uvgrtp::frame::rtcp_fb_packet Struct Reference
+
+
+ +

Feedback message. See RFC 4585 section 6.1. + More...

+ +

#include <frame.hh>

+ + + + + + + + + + + + + +

+Public Attributes

struct rtcp_header header
 
uint32_t sender_ssrc = 0
 
uint32_t media_ssrc = 0
 
std::vector< rtcp_fb_fciitems
 
size_t payload_len = 0
 Size of the payload in bytes. Added by uvgRTP to help process the payload.
 
+

Detailed Description

+

Feedback message. See RFC 4585 section 6.1.

+ +

Definition at line 206 of file frame.hh.

+

Member Data Documentation

+ +

◆ header

+ +
+
+ + + + +
struct rtcp_header uvgrtp::frame::rtcp_fb_packet::header
+
+ +

Definition at line 207 of file frame.hh.

+ +
+
+ +

◆ items

+ +
+
+ + + + +
std::vector<rtcp_fb_fci> uvgrtp::frame::rtcp_fb_packet::items
+
+ +

Definition at line 210 of file frame.hh.

+ +
+
+ +

◆ media_ssrc

+ +
+
+ + + + +
uint32_t uvgrtp::frame::rtcp_fb_packet::media_ssrc = 0
+
+ +

Definition at line 209 of file frame.hh.

+ +
+
+ +

◆ payload_len

+ +
+
+ + + + +
size_t uvgrtp::frame::rtcp_fb_packet::payload_len = 0
+
+ +

Size of the payload in bytes. Added by uvgRTP to help process the payload.

+ +

Definition at line 212 of file frame.hh.

+ +
+
+ +

◆ sender_ssrc

+ +
+
+ + + + +
uint32_t uvgrtp::frame::rtcp_fb_packet::sender_ssrc = 0
+
+ +

Definition at line 208 of file frame.hh.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + +
+ + diff --git a/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fir-members.html similarity index 56% rename from docs/html/dir_49e56c817e5e54854c35e136979f97ca.html rename to docs/html/structuvgrtp_1_1frame_1_1rtcp__fir-members.html index 5472324c..0f7ba7e7 100644 --- a/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fir-members.html @@ -3,12 +3,16 @@ - + -uvgRTP: docs Directory Reference +uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 2.1.0 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
-
docs Directory Reference
+
uvgrtp::frame::rtcp_fir Member List
-
+ +

This is the complete list of members for uvgrtp::frame::rtcp_fir, including all inherited members.

+ + + +
seq (defined in uvgrtp::frame::rtcp_fir)uvgrtp::frame::rtcp_fir
ssrc (defined in uvgrtp::frame::rtcp_fir)uvgrtp::frame::rtcp_fir
+
diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__fir.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fir.html new file mode 100644 index 00000000..a6990164 --- /dev/null +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__fir.html @@ -0,0 +1,158 @@ + + + + + + + +uvgRTP: uvgrtp::frame::rtcp_fir Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
uvgRTP 3.1.3 +
+
An open-source library for RTP/SRTP media delivery
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
uvgrtp::frame::rtcp_fir Struct Reference
+
+
+ +

Full Intra Request, See RFC 5104 section 4.3.1. + More...

+ +

#include <frame.hh>

+ + + + + + +

+Public Attributes

uint32_t ssrc = 0
 
uint8_t seq = 0
 
+

Detailed Description

+

Full Intra Request, See RFC 5104 section 4.3.1.

+ +

Definition at line 178 of file frame.hh.

+

Member Data Documentation

+ +

◆ seq

+ +
+
+ + + + +
uint8_t uvgrtp::frame::rtcp_fir::seq = 0
+
+ +

Definition at line 180 of file frame.hh.

+ +
+
+ +

◆ ssrc

+ +
+
+ + + + +
uint32_t uvgrtp::frame::rtcp_fir::ssrc = 0
+
+ +

Definition at line 179 of file frame.hh.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + +
+ + diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__header-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__header-members.html index 857c6b61..93470a49 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__header-members.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__header-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::frame::rtcp_header Member List
@@ -90,7 +105,8 @@
+ diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__header.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__header.html index efd780ba..4e8266d4 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__header.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__header.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::frame::rtcp_header Struct Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + + +
Public Attributes | @@ -82,36 +97,37 @@

Header of for all RTCP packets defined in RFC 3550 section 6 - More...

+ More...

#include <frame.hh>

- + - + - - - + + + + - - + + - - + + - + - + - +

Public Attributes

uint8_t version = 0
uint8_t version = 0
 This field identifies the version of RTP. The version defined by RFC 3550 is two (2).

 
uint8_t padding = 0
uint8_t padding = 0
 Does this packet contain padding at the end.
 
-union {
   uint8_t   count = 0
 Source count or report count. Alternative to pkt_subtype. More...
+union { 
 
   uint8_t   count = 0 
 Source count or report count. Alternative to pkt_subtype. More...
 
   uint8_t   pkt_subtype
 Subtype in APP packets. Alternative to count. More...
   uint8_t   pkt_subtype 
 Subtype in APP packets. Alternative to count. More...
 
   uint8_t   fmt
 Feedback message type (FMT), specified in RFC 5104 section 4.3. Alternative to count and pkt_subtype. More...
   uint8_t   fmt 
 Feedback message type (FMT), specified in RFC 5104 section 4.3. Alternative to count and pkt_subtype. More...
 
}; 
};  
 
uint8_t pkt_type = 0
uint8_t pkt_type = 0
 Identifies the RTCP packet type.
 
uint16_t length = 0
uint16_t length = 0
 Length of the whole message measured in 32-bit words.
 
@@ -253,7 +269,8 @@

+

diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__receiver__report-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__receiver__report-members.html index 4309b7c6..4b195d13 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__receiver__report-members.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__receiver__report-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::frame::rtcp_receiver_report Member List
@@ -86,7 +101,8 @@
+
diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__receiver__report.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__receiver__report.html index f750cb3f..affd6dcc 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__receiver__report.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__receiver__report.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::frame::rtcp_receiver_report Struct Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Public Attributes | @@ -82,17 +97,17 @@

See RFC 3550 section 6.4.2 - More...

+ More...

#include <frame.hh>

- + - + - +

Public Attributes

struct rtcp_header header
struct rtcp_header header
 
uint32_t ssrc = 0
uint32_t ssrc = 0
 
std::vector< rtcp_report_blockreport_blocks
std::vector< rtcp_report_blockreport_blocks
 

Detailed Description

@@ -154,7 +169,8 @@

+

diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__report__block-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__report__block-members.html index 10f110f4..bde4f4d2 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__report__block-members.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__report__block-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::frame::rtcp_report_block Member List
@@ -90,7 +105,8 @@
+
diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__report__block.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__report__block.html index 4e5dda28..81da8674 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__report__block.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__report__block.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::frame::rtcp_report_block Struct Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Public Attributes | @@ -82,25 +97,25 @@

See RFC 3550 section 6.4.1 - More...

+ More...

#include <frame.hh>

- + - + - + - + - + - + - +

Public Attributes

uint32_t ssrc = 0
uint32_t ssrc = 0
 
uint8_t fraction = 0
uint8_t fraction = 0
 
int32_t lost = 0
int32_t lost = 0
 
uint32_t last_seq = 0
uint32_t last_seq = 0
 
uint32_t jitter = 0
uint32_t jitter = 0
 
uint32_t lsr = 0
uint32_t lsr = 0
 
uint32_t dlsr = 0
uint32_t dlsr = 0
 

Detailed Description

@@ -226,7 +241,8 @@

+

diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__rpsi-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__rpsi-members.html new file mode 100644 index 00000000..1b9dd70b --- /dev/null +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__rpsi-members.html @@ -0,0 +1,108 @@ + + + + + + + +uvgRTP: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
uvgRTP 3.1.3 +
+
An open-source library for RTP/SRTP media delivery
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
uvgrtp::frame::rtcp_rpsi Member List
+
+
+ +

This is the complete list of members for uvgrtp::frame::rtcp_rpsi, including all inherited members.

+ + + + +
pb (defined in uvgrtp::frame::rtcp_rpsi)uvgrtp::frame::rtcp_rpsi
pt (defined in uvgrtp::frame::rtcp_rpsi)uvgrtp::frame::rtcp_rpsi
str (defined in uvgrtp::frame::rtcp_rpsi)uvgrtp::frame::rtcp_rpsi
+ + +
+ + diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__rpsi.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__rpsi.html new file mode 100644 index 00000000..93adeead --- /dev/null +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__rpsi.html @@ -0,0 +1,176 @@ + + + + + + + +uvgRTP: uvgrtp::frame::rtcp_rpsi Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
uvgRTP 3.1.3 +
+
An open-source library for RTP/SRTP media delivery
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
uvgrtp::frame::rtcp_rpsi Struct Reference
+
+
+ +

Reference Picture Selection Indication, See RFC 4585 section 6.3.3. + More...

+ +

#include <frame.hh>

+ + + + + + + + +

+Public Attributes

uint8_t pb = 0
 
uint8_t pt = 0
 
uint8_t * str = nullptr
 
+

Detailed Description

+

Reference Picture Selection Indication, See RFC 4585 section 6.3.3.

+ +

Definition at line 189 of file frame.hh.

+

Member Data Documentation

+ +

◆ pb

+ +
+
+ + + + +
uint8_t uvgrtp::frame::rtcp_rpsi::pb = 0
+
+ +

Definition at line 190 of file frame.hh.

+ +
+
+ +

◆ pt

+ +
+
+ + + + +
uint8_t uvgrtp::frame::rtcp_rpsi::pt = 0
+
+ +

Definition at line 191 of file frame.hh.

+ +
+
+ +

◆ str

+ +
+
+ + + + +
uint8_t* uvgrtp::frame::rtcp_rpsi::str = nullptr
+
+ +

Definition at line 192 of file frame.hh.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + +
+ + diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__chunk-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__chunk-members.html index a7d45547..d3801e99 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__chunk-members.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__chunk-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::frame::rtcp_sdes_chunk Member List
@@ -85,7 +100,8 @@
+
diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__chunk.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__chunk.html index 16b6bb1d..708aeaab 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__chunk.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__chunk.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::frame::rtcp_sdes_chunk Struct Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Public Attributes | @@ -82,15 +97,15 @@

See RFC 3550 section 6.5 - More...

+ More...

#include <frame.hh>

- + - +

Public Attributes

uint32_t ssrc = 0
uint32_t ssrc = 0
 
std::vector< rtcp_sdes_itemitems
std::vector< rtcp_sdes_itemitems
 

Detailed Description

@@ -136,7 +151,8 @@

+

diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__item-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__item-members.html index 68266643..83b6615b 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__item-members.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__item-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::frame::rtcp_sdes_item Member List
@@ -86,7 +101,8 @@
+
diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__item.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__item.html index b1633f61..a91d0987 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__item.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__item.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::frame::rtcp_sdes_item Struct Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Public Attributes | @@ -82,17 +97,17 @@

See RFC 3550 section 6.5 - More...

+ More...

#include <frame.hh>

- + - + - +

Public Attributes

uint8_t type = 0
uint8_t type = 0
 
uint8_t length = 0
uint8_t length = 0
 
uint8_t * data = nullptr
uint8_t * data = nullptr
 

Detailed Description

@@ -154,7 +169,8 @@

+

diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__packet-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__packet-members.html index c7dd245d..724a1c66 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__packet-members.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__packet-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::frame::rtcp_sdes_packet Member List
@@ -85,7 +100,8 @@
+
diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__packet.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__packet.html index f2a60e73..5baecc75 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__packet.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sdes__packet.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::frame::rtcp_sdes_packet Struct Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Public Attributes | @@ -82,15 +97,15 @@

See RFC 3550 section 6.5 - More...

+ More...

#include <frame.hh>

- + - +

Public Attributes

struct rtcp_header header
struct rtcp_header header
 
std::vector< rtcp_sdes_chunkchunks
std::vector< rtcp_sdes_chunkchunks
 

Detailed Description

@@ -136,7 +151,8 @@

+

diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__info-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__info-members.html index 3b5c6684..795dddb2 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__info-members.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__info-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::frame::rtcp_sender_info Member List
@@ -88,7 +103,8 @@
+
diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__info.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__info.html index c567561a..dee4683e 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__info.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__info.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::frame::rtcp_sender_info Struct Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Public Attributes | @@ -82,24 +97,24 @@

See RFC 3550 section 6.4.1 - More...

+ More...

#include <frame.hh>

- + - + - + - + - +

Public Attributes

uint32_t ntp_msw = 0
uint32_t ntp_msw = 0
 NTP timestamp, most significant word.
 
uint32_t ntp_lsw = 0
uint32_t ntp_lsw = 0
 NTP timestamp, least significant word.
 
uint32_t rtp_ts = 0
uint32_t rtp_ts = 0
 RTP timestamp corresponding to this NTP timestamp.
 
uint32_t pkt_cnt = 0
uint32_t pkt_cnt = 0
 
uint32_t byte_cnt = 0
uint32_t byte_cnt = 0
 Also known as octet count.
 
@@ -202,7 +217,8 @@

+

diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__report-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__report-members.html index 5eb7dc02..edab1d98 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__report-members.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__report-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::frame::rtcp_sender_report Member List
@@ -87,7 +102,8 @@
+
diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__report.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__report.html index 8a062b21..fefe38a7 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__report.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sender__report.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::frame::rtcp_sender_report Struct Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Public Attributes | @@ -82,19 +97,19 @@

See RFC 3550 section 6.4.1 - More...

+ More...

#include <frame.hh>

- + - + - + - +

Public Attributes

struct rtcp_header header
struct rtcp_header header
 
uint32_t ssrc = 0
uint32_t ssrc = 0
 
struct rtcp_sender_info sender_info
struct rtcp_sender_info sender_info
 
std::vector< rtcp_report_blockreport_blocks
std::vector< rtcp_report_blockreport_blocks
 

Detailed Description

@@ -172,7 +187,8 @@

+

diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sli-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sli-members.html new file mode 100644 index 00000000..db997399 --- /dev/null +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sli-members.html @@ -0,0 +1,108 @@ + + + + + + + +uvgRTP: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
uvgRTP 3.1.3 +
+
An open-source library for RTP/SRTP media delivery
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
uvgrtp::frame::rtcp_sli Member List
+
+
+ +

This is the complete list of members for uvgrtp::frame::rtcp_sli, including all inherited members.

+ + + + +
first (defined in uvgrtp::frame::rtcp_sli)uvgrtp::frame::rtcp_sli
num (defined in uvgrtp::frame::rtcp_sli)uvgrtp::frame::rtcp_sli
picture_id (defined in uvgrtp::frame::rtcp_sli)uvgrtp::frame::rtcp_sli
+ + +
+ + diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtcp__sli.html b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sli.html new file mode 100644 index 00000000..1fefe1b0 --- /dev/null +++ b/docs/html/structuvgrtp_1_1frame_1_1rtcp__sli.html @@ -0,0 +1,176 @@ + + + + + + + +uvgRTP: uvgrtp::frame::rtcp_sli Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
uvgRTP 3.1.3 +
+
An open-source library for RTP/SRTP media delivery
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
uvgrtp::frame::rtcp_sli Struct Reference
+
+
+ +

Slice Loss Indication, See RFC 4585 section 6.3.2. + More...

+ +

#include <frame.hh>

+ + + + + + + + +

+Public Attributes

uint16_t first = 0
 
uint16_t num = 0
 
uint8_t picture_id = 0
 
+

Detailed Description

+

Slice Loss Indication, See RFC 4585 section 6.3.2.

+ +

Definition at line 183 of file frame.hh.

+

Member Data Documentation

+ +

◆ first

+ +
+
+ + + + +
uint16_t uvgrtp::frame::rtcp_sli::first = 0
+
+ +

Definition at line 184 of file frame.hh.

+ +
+
+ +

◆ num

+ +
+
+ + + + +
uint16_t uvgrtp::frame::rtcp_sli::num = 0
+
+ +

Definition at line 185 of file frame.hh.

+ +
+
+ +

◆ picture_id

+ +
+
+ + + + +
uint8_t uvgrtp::frame::rtcp_sli::picture_id = 0
+
+ +

Definition at line 186 of file frame.hh.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + +
+ + diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtp__frame-members.html b/docs/html/structuvgrtp_1_1frame_1_1rtp__frame-members.html index a7b064bd..f668f77f 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtp__frame-members.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtp__frame-members.html @@ -3,12 +3,16 @@ - + uvgRTP: Member List + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
uvgrtp::frame::rtp_frame Member List
@@ -89,7 +104,8 @@
+
diff --git a/docs/html/structuvgrtp_1_1frame_1_1rtp__frame.html b/docs/html/structuvgrtp_1_1frame_1_1rtp__frame.html index b9ce1025..112b6441 100644 --- a/docs/html/structuvgrtp_1_1frame_1_1rtp__frame.html +++ b/docs/html/structuvgrtp_1_1frame_1_1rtp__frame.html @@ -3,12 +3,16 @@ - + uvgRTP: uvgrtp::frame::rtp_frame Struct Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Public Attributes | @@ -82,24 +97,24 @@

See RFC 3550 section 5 - More...

+ More...

#include <frame.hh>

- + - + - + - + - + - +

Public Attributes

struct rtp_header header
struct rtp_header header
 
uint32_t * csrc = nullptr
uint32_t * csrc = nullptr
 
struct ext_header * ext = nullptr
struct ext_header * ext = nullptr
 
size_t padding_len = 0
size_t padding_len = 0
 
size_t payload_len = 0
size_t payload_len = 0
 Length of the packet payload in bytes added by uvgRTP to help process the frame.
 
uint8_t * payload = nullptr
uint8_t * payload = nullptr
 

Detailed Description

@@ -212,7 +227,8 @@

+

diff --git a/docs/html/tabs.css b/docs/html/tabs.css index 71c8a470..7fa4268a 100644 --- a/docs/html/tabs.css +++ b/docs/html/tabs.css @@ -1 +1 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} diff --git a/docs/html/util_8hh.html b/docs/html/util_8hh.html index 6fc19d7f..a5381339 100644 --- a/docs/html/util_8hh.html +++ b/docs/html/util_8hh.html @@ -3,12 +3,16 @@ - + uvgRTP: util.hh File Reference + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
Typedefs | @@ -86,208 +101,210 @@ - + - + - +

Typedefs

-typedef enum RTP_ERROR rtp_error_t
+typedef enum RTP_ERROR rtp_error_t
 
-typedef enum RTP_FORMAT rtp_format_t
+typedef enum RTP_FORMAT rtp_format_t
 
-typedef enum RTP_FLAGS rtp_flags_t
+typedef enum RTP_FLAGS rtp_flags_t
 
- - + - - + - - + - - + - - +

Enumerations

enum  RTP_ERROR {
-  RTP_OK = 0 +
enum  RTP_ERROR {
+  RTP_OK = 0 ,
-  RTP_GENERIC_ERROR = -1 +  RTP_GENERIC_ERROR = -1 ,
-  RTP_SOCKET_ERROR = -2 +  RTP_SOCKET_ERROR = -2 ,
-  RTP_BIND_ERROR = -3 +  RTP_BIND_ERROR = -3 ,
-  RTP_INVALID_VALUE = -4 +  RTP_INVALID_VALUE = -4 ,
-  RTP_SEND_ERROR = -5 +  RTP_SEND_ERROR = -5 ,
-  RTP_MEMORY_ERROR = -6 +  RTP_MEMORY_ERROR = -6 ,
-  RTP_SSRC_COLLISION = -7 +  RTP_SSRC_COLLISION = -7 ,
-  RTP_INITIALIZED = -8 +  RTP_INITIALIZED = -8 ,
-  RTP_NOT_INITIALIZED = -9 +  RTP_NOT_INITIALIZED = -9 ,
-  RTP_NOT_SUPPORTED = -10 +  RTP_NOT_SUPPORTED = -10 ,
-  RTP_RECV_ERROR = -11 +  RTP_RECV_ERROR = -11 ,
-  RTP_TIMEOUT = -12 +  RTP_TIMEOUT = -12 ,
-  RTP_NOT_FOUND = -13 +  RTP_NOT_FOUND = -13 ,
-  RTP_AUTH_TAG_MISMATCH = -14 +  RTP_AUTH_TAG_MISMATCH = -14
}
 RTP error codes. More...
 RTP error codes. More...
 
enum  RTP_FORMAT {
-  RTP_FORMAT_GENERIC = 0 +
enum  RTP_FORMAT {
+  RTP_FORMAT_GENERIC = 0 ,
-  RTP_FORMAT_PCMU = 0 +  RTP_FORMAT_PCMU = 0 ,
-  RTP_FORMAT_GSM = 3 +  RTP_FORMAT_GSM = 3 ,
-  RTP_FORMAT_G723 = 4 +  RTP_FORMAT_G723 = 4 ,
-  RTP_FORMAT_DVI4_32 = 5 +  RTP_FORMAT_DVI4_32 = 5 ,
-  RTP_FORMAT_DVI4_64 = 6 +  RTP_FORMAT_DVI4_64 = 6 ,
-  RTP_FORMAT_LPC = 7 +  RTP_FORMAT_LPC = 7 ,
-  RTP_FORMAT_PCMA = 8 +  RTP_FORMAT_PCMA = 8 ,
-  RTP_FORMAT_G722 = 9 +  RTP_FORMAT_G722 = 9 ,
-  RTP_FORMAT_L16_STEREO = 10 +  RTP_FORMAT_L16_STEREO = 10 ,
-  RTP_FORMAT_L16_MONO = 11 +  RTP_FORMAT_L16_MONO = 11 ,
-  RTP_FORMAT_G728 = 15 +  RTP_FORMAT_G728 = 15 ,
-  RTP_FORMAT_DVI4_441 = 16 +  RTP_FORMAT_DVI4_441 = 16 ,
-  RTP_FORMAT_DVI4_882 = 17 +  RTP_FORMAT_DVI4_882 = 17 ,
-  RTP_FORMAT_G729 = 18 +  RTP_FORMAT_G729 = 18 ,
-  RTP_FORMAT_G726_40 = 96 +  RTP_FORMAT_G726_40 = 96 ,
-  RTP_FORMAT_G726_32 = 97 +  RTP_FORMAT_G726_32 = 97 ,
-  RTP_FORMAT_G726_24 = 98 +  RTP_FORMAT_G726_24 = 98 ,
-  RTP_FORMAT_G726_16 = 99 +  RTP_FORMAT_G726_16 = 99 ,
-  RTP_FORMAT_G729D = 100 +  RTP_FORMAT_G729D = 100 ,
-  RTP_FORMAT_G729E = 101 +  RTP_FORMAT_G729E = 101 ,
-  RTP_FORMAT_GSM_EFR = 102 +  RTP_FORMAT_GSM_EFR = 102 ,
-  RTP_FORMAT_L8 = 103 +  RTP_FORMAT_L8 = 103 ,
-  RTP_FORMAT_VDVI = 104 +  RTP_FORMAT_VDVI = 104 ,
-  RTP_FORMAT_OPUS = 105 +  RTP_FORMAT_OPUS = 105 ,
-  RTP_FORMAT_H264 = 106 +  RTP_FORMAT_H264 = 106 ,
-  RTP_FORMAT_H265 = 107 +  RTP_FORMAT_H265 = 107 ,
-  RTP_FORMAT_H266 = 108 +  RTP_FORMAT_H266 = 108 ,
-  RTP_FORMAT_ATLAS = 109 +  RTP_FORMAT_ATLAS = 109
}
 These flags are given to uvgrtp::session::create_stream() More...
 These flags are given to uvgrtp::session::create_stream() More...
 
enum  RTP_FLAGS {
-  RTP_NO_FLAGS = 0 +
enum  RTP_FLAGS {
+  RTP_NO_FLAGS = 0 ,
-  RTP_COPY = 1 << 1 +  RTP_COPY = 1 << 1 ,
-  RTP_NO_H26X_SCL = 1 << 2 +  RTP_NO_H26X_SCL = 1 << 2 ,
-  RTP_H26X_DO_NOT_AGGR = 1 << 3 +  RTP_H26X_DO_NOT_AGGR = 1 << 3
}
 These flags are given to uvgrtp::media_stream::push_frame() and they can be OR'ed together. More...
 These flags are given to uvgrtp::media_stream::push_frame() and they can be OR'ed together. More...
 
enum  RTP_CTX_ENABLE_FLAGS {
-  RCE_NO_FLAGS = 0 +
enum  RTP_CTX_ENABLE_FLAGS {
+  RCE_NO_FLAGS = 0 ,
-  RCE_SEND_ONLY = 1 << 1 +  RCE_SEND_ONLY = 1 << 1 ,
-  RCE_RECEIVE_ONLY = 1 << 2 +  RCE_RECEIVE_ONLY = 1 << 2 ,
-  RCE_SRTP = 1 << 3 +  RCE_SRTP = 1 << 3 ,
-  RCE_SRTP_KMNGMNT_ZRTP = 1 << 4 +  RCE_SRTP_KMNGMNT_ZRTP = 1 << 4 ,
-  RCE_SRTP_KMNGMNT_USER = 1 << 5 +  RCE_SRTP_KMNGMNT_USER = 1 << 5 ,
-  RCE_NO_H26X_PREPEND_SC = 1 << 6 +  RCE_NO_H26X_PREPEND_SC = 1 << 6 ,
-  RCE_H26X_DEPENDENCY_ENFORCEMENT = 1 << 7 +  RCE_H26X_DEPENDENCY_ENFORCEMENT = 1 << 7 ,
-  RCE_FRAGMENT_GENERIC = 1 << 8 +  RCE_FRAGMENT_GENERIC = 1 << 8 ,
-  RCE_SYSTEM_CALL_CLUSTERING = 1 << 9 +  RCE_SYSTEM_CALL_CLUSTERING = 1 << 9 ,
-  RCE_SRTP_NULL_CIPHER = 1 << 10 +  RCE_SRTP_NULL_CIPHER = 1 << 10 ,
-  RCE_SRTP_AUTHENTICATE_RTP = 1 << 11 +  RCE_SRTP_AUTHENTICATE_RTP = 1 << 11 ,
-  RCE_SRTP_REPLAY_PROTECTION = 1 << 12 +  RCE_SRTP_REPLAY_PROTECTION = 1 << 12 ,
-  RCE_RTCP = 1 << 13 +  RCE_RTCP = 1 << 13 ,
-  RCE_HOLEPUNCH_KEEPALIVE = 1 << 14 +  RCE_HOLEPUNCH_KEEPALIVE = 1 << 14 ,
-  RCE_SRTP_KEYSIZE_192 = 1 << 15 +  RCE_SRTP_KEYSIZE_192 = 1 << 15 ,
-  RCE_SRTP_KEYSIZE_256 = 1 << 16 +  RCE_SRTP_KEYSIZE_256 = 1 << 16 ,
-  RCE_ZRTP_DIFFIE_HELLMAN_MODE = 1 << 17 +  RCE_ZRTP_DIFFIE_HELLMAN_MODE = 1 << 17 ,
-  RCE_ZRTP_MULTISTREAM_MODE = 1 << 18 +  RCE_ZRTP_MULTISTREAM_MODE = 1 << 18 ,
-  RCE_FRAME_RATE = 1 << 19 +  RCE_FRAME_RATE = 1 << 19 ,
-  RCE_PACE_FRAGMENT_SENDING = 1 << 20 +  RCE_PACE_FRAGMENT_SENDING = 1 << 20 ,
-  RCE_RTCP_MUX = 1 << 21 +  RCE_RTCP_MUX = 1 << 21
}
 RTP context enable flags. More...
 RTP context enable flags. More...
 
enum  RTP_CTX_CONFIGURATION_FLAGS {
-  RCC_UDP_RCV_BUF_SIZE = 1 +
enum  RTP_CTX_CONFIGURATION_FLAGS {
+  RCC_UDP_RCV_BUF_SIZE = 1 ,
-  RCC_UDP_SND_BUF_SIZE = 2 +  RCC_UDP_SND_BUF_SIZE = 2 ,
-  RCC_RING_BUFFER_SIZE = 3 +  RCC_RING_BUFFER_SIZE = 3 ,
-  RCC_PKT_MAX_DELAY = 4 +  RCC_PKT_MAX_DELAY = 4 ,
-  RCC_DYN_PAYLOAD_TYPE = 5 +  RCC_DYN_PAYLOAD_TYPE = 5 ,
-  RCC_CLOCK_RATE = 6 +  RCC_CLOCK_RATE = 6 ,
-  RCC_MTU_SIZE = 7 +  RCC_MTU_SIZE = 7 ,
-  RCC_FPS_NUMERATOR = 8 +  RCC_FPS_NUMERATOR = 8 ,
-  RCC_FPS_DENOMINATOR = 9 +  RCC_FPS_DENOMINATOR = 9 ,
-  RCC_SSRC = 10 +  RCC_SSRC = 10 ,
-  RCC_REMOTE_SSRC = 11 +  RCC_REMOTE_SSRC = 11 ,
-  RCC_SESSION_BANDWIDTH = 12 +  RCC_SESSION_BANDWIDTH = 12 ,
-  RCC_POLL_TIMEOUT = 13 +  RCC_POLL_TIMEOUT = 13 +,
+  RCC_MULTICAST_TTL = 15
}
 RTP context configuration flags. More...
 RTP context configuration flags. More...
 
-

Variables

+
thread_local rtp_error_t rtp_errno
 
@@ -299,7 +316,7 @@

- +
enum RTP_CTX_CONFIGURATION_FLAGSenum RTP_CTX_CONFIGURATION_FLAGS

@@ -355,6 +372,9 @@

RCC_POLL_TIMEOUT 

Set the timeout value for socket polling

Default value is 100 ms. If you are experiencing packet loss when receiving, you can try lowering this value down to 0. This will, however cause increased CPU usage in the receiver, so use with caution.

+RCC_MULTICAST_TTL 

Set the sender packets IP TTL (Time to Live) for multicast

+

Must be in range [1, 255]. Keep the system default if not set.

+

Definition at line 284 of file util.hh.

@@ -368,7 +388,7 @@

- +
enum RTP_CTX_ENABLE_FLAGSenum RTP_CTX_ENABLE_FLAGS

@@ -594,7 +614,8 @@

+

diff --git a/docs/html/util_8hh_source.html b/docs/html/util_8hh_source.html index 0411c0e2..db95ec56 100644 --- a/docs/html/util_8hh_source.html +++ b/docs/html/util_8hh_source.html @@ -3,12 +3,16 @@ - + uvgRTP: util.hh Source File + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
util.hh
@@ -97,6 +112,7 @@
19#include <stdint.h>
20
22
+
30typedef enum RTP_ERROR {
32 RTP_MULTIPLE_PKTS_READY = 6,
33 RTP_PKT_READY = 5,
@@ -121,7 +137,9 @@
55} rtp_error_t;
+
56
+
62typedef enum RTP_FORMAT {
63 // See RFC 3551 for more details
64
@@ -190,14 +208,16 @@
127 RTP_FORMAT_ATLAS = 109
128
129} rtp_format_t;
+
130
+
137typedef enum RTP_FLAGS {
139
141
142 RTP_OBSOLETE = 1,
143 RTP_SLICE = 1, // used to do what RTP_NO_H26X_SCL does, may do something different in the future
-
145
+
145
147 RTP_COPY = 1 << 1,
148
@@ -205,7 +225,9 @@
157 RTP_H26X_DO_NOT_AGGR = 1 << 3
158
159} rtp_flags_t;
+
160
+
170
@@ -256,11 +278,13 @@
270
272 RCE_LAST = 1 << 22
274}; // maximum is 1 << 30 for int
+
275
276
+
286 RCC_NO_FLAGS = 0, // This flag has no purpose
-
288
+
288
296
@@ -287,102 +311,107 @@
383
391
-
393 RCC_LAST
-
395};
-
396
-
397extern thread_local rtp_error_t rtp_errno;
-
RTP_CTX_ENABLE_FLAGS
RTP context enable flags.
Definition: util.hh:168
-
@ RCE_H26X_DEPENDENCY_ENFORCEMENT
Definition: util.hh:210
-
@ RCE_SRTP_KEYSIZE_256
Definition: util.hh:254
-
@ RCE_RTCP_MUX
Definition: util.hh:269
-
@ RCE_SRTP_KMNGMNT_ZRTP
Definition: util.hh:190
-
@ RCE_SRTP_KMNGMNT_USER
Definition: util.hh:200
-
@ RCE_NO_FLAGS
Use this if you have no RCE flags.
Definition: util.hh:169
-
@ RCE_SRTP_NULL_CIPHER
Definition: util.hh:227
-
@ RCE_ZRTP_DIFFIE_HELLMAN_MODE
Definition: util.hh:257
-
@ RCE_FRAGMENT_GENERIC
Definition: util.hh:218
-
@ RCE_SEND_ONLY
address/port interpreted as remote, no binding to local socket
Definition: util.hh:176
-
@ RCE_SRTP_AUTHENTICATE_RTP
Definition: util.hh:235
-
@ RCE_PACE_FRAGMENT_SENDING
Definition: util.hh:266
-
@ RCE_NO_H26X_PREPEND_SC
Definition: util.hh:206
-
@ RCE_HOLEPUNCH_KEEPALIVE
Definition: util.hh:248
-
@ RCE_ZRTP_MULTISTREAM_MODE
Definition: util.hh:260
-
@ RCE_SYSTEM_CALL_CLUSTERING
Definition: util.hh:224
-
@ RCE_RTCP
Definition: util.hh:242
-
@ RCE_SRTP_REPLAY_PROTECTION
Definition: util.hh:238
-
@ RCE_FRAME_RATE
Definition: util.hh:263
-
@ RCE_SRTP_KEYSIZE_192
Definition: util.hh:251
-
@ RCE_SRTP
Definition: util.hh:180
-
@ RCE_RECEIVE_ONLY
address/port interpreted as local, sending not possible
Definition: util.hh:177
-
RTP_FORMAT
These flags are given to uvgrtp::session::create_stream()
Definition: util.hh:62
-
@ RTP_FORMAT_H266
H.266/VVC.
Definition: util.hh:126
-
@ RTP_FORMAT_G728
G728.
Definition: util.hh:82
-
@ RTP_FORMAT_PCMU
PCMU, ITU-T G.711.
Definition: util.hh:67
-
@ RTP_FORMAT_L16_STEREO
L16 Stereo.
Definition: util.hh:77
-
@ RTP_FORMAT_G722
G722.
Definition: util.hh:76
-
@ RTP_FORMAT_G726_32
G726, 32 kbit/s.
Definition: util.hh:113
-
@ RTP_FORMAT_L16_MONO
L16 Mono.
Definition: util.hh:78
-
@ RTP_FORMAT_GSM_EFR
GSM enhanced full rate speech transcoding.
Definition: util.hh:118
-
@ RTP_FORMAT_OPUS
Opus, see RFC 7587.
Definition: util.hh:122
-
@ RTP_FORMAT_H265
H.265/HEVC, see RFC 7798.
Definition: util.hh:125
-
@ RTP_FORMAT_PCMA
PCMA.
Definition: util.hh:75
-
@ RTP_FORMAT_LPC
LPC.
Definition: util.hh:74
-
@ RTP_FORMAT_G729
G729, 8 kbit/s.
Definition: util.hh:85
-
@ RTP_FORMAT_ATLAS
V3C.
Definition: util.hh:127
-
@ RTP_FORMAT_G726_24
G726, 24 kbit/s.
Definition: util.hh:114
-
@ RTP_FORMAT_VDVI
VDVI, variable-rate DVI4.
Definition: util.hh:121
-
@ RTP_FORMAT_DVI4_441
DVI 44.1 kbit/s.
Definition: util.hh:83
-
@ RTP_FORMAT_GSM
GSM (Group Speciale Mobile)
Definition: util.hh:70
-
@ RTP_FORMAT_G723
G723.
Definition: util.hh:71
-
@ RTP_FORMAT_DVI4_882
DVI 88.2 kbit/s.
Definition: util.hh:84
-
@ RTP_FORMAT_L8
L8, linear audio data samples.
Definition: util.hh:119
-
@ RTP_FORMAT_DVI4_32
DVI 32 kbit/s.
Definition: util.hh:72
-
@ RTP_FORMAT_GENERIC
Same as PCMU.
Definition: util.hh:66
-
@ RTP_FORMAT_H264
H.264/AVC, see RFC 6184.
Definition: util.hh:124
-
@ RTP_FORMAT_G729E
G729E, 11.8 kbit/s.
Definition: util.hh:117
-
@ RTP_FORMAT_DVI4_64
DVI 64 kbit/s.
Definition: util.hh:73
-
@ RTP_FORMAT_G726_16
G726, 16 kbit/s.
Definition: util.hh:115
-
@ RTP_FORMAT_G726_40
G726, 40 kbit/s.
Definition: util.hh:112
-
@ RTP_FORMAT_G729D
G729D, 6.4 kbit/s.
Definition: util.hh:116
-
RTP_ERROR
RTP error codes.
Definition: util.hh:30
-
@ RTP_BIND_ERROR
Failed to bind to interface.
Definition: util.hh:43
-
@ RTP_INITIALIZED
Object already initialized.
Definition: util.hh:48
-
@ RTP_NOT_FOUND
Object not found.
Definition: util.hh:53
-
@ RTP_OK
Success.
Definition: util.hh:40
-
@ RTP_NOT_INITIALIZED
Object has not been initialized.
Definition: util.hh:49
-
@ RTP_INVALID_VALUE
Invalid value.
Definition: util.hh:44
-
@ RTP_SEND_ERROR
System call send(2) or one of its derivatives failed.
Definition: util.hh:45
-
@ RTP_AUTH_TAG_MISMATCH
Authentication tag does not match the RTP packet contents.
Definition: util.hh:54
-
@ RTP_NOT_SUPPORTED
Method/version/extension not supported.
Definition: util.hh:50
-
@ RTP_SSRC_COLLISION
SSRC collision detected.
Definition: util.hh:47
-
@ RTP_RECV_ERROR
System call recv(2) or one of its derivatives failed.
Definition: util.hh:51
-
@ RTP_SOCKET_ERROR
Failed to create socket.
Definition: util.hh:42
-
@ RTP_MEMORY_ERROR
Memory allocation failed.
Definition: util.hh:46
-
@ RTP_TIMEOUT
Operation timed out.
Definition: util.hh:52
-
@ RTP_GENERIC_ERROR
Generic error condition.
Definition: util.hh:41
-
RTP_CTX_CONFIGURATION_FLAGS
RTP context configuration flags.
Definition: util.hh:284
-
@ RCC_REMOTE_SSRC
Definition: util.hh:368
-
@ RCC_FPS_NUMERATOR
Definition: util.hh:348
-
@ RCC_PKT_MAX_DELAY
Definition: util.hh:319
-
@ RCC_MTU_SIZE
Definition: util.hh:335
-
@ RCC_POLL_TIMEOUT
Definition: util.hh:390
-
@ RCC_SESSION_BANDWIDTH
Definition: util.hh:382
-
@ RCC_RING_BUFFER_SIZE
Definition: util.hh:311
-
@ RCC_FPS_DENOMINATOR
Definition: util.hh:356
-
@ RCC_UDP_RCV_BUF_SIZE
Definition: util.hh:295
-
@ RCC_DYN_PAYLOAD_TYPE
Definition: util.hh:322
-
@ RCC_UDP_SND_BUF_SIZE
Definition: util.hh:303
-
@ RCC_SSRC
Definition: util.hh:362
-
@ RCC_CLOCK_RATE
Definition: util.hh:325
-
RTP_FLAGS
These flags are given to uvgrtp::media_stream::push_frame() and they can be OR'ed together.
Definition: util.hh:137
-
@ RTP_H26X_DO_NOT_AGGR
Definition: util.hh:157
-
@ RTP_NO_FLAGS
Use this if you have no RTP flags.
Definition: util.hh:138
-
@ RTP_COPY
Definition: util.hh:147
-
@ RTP_NO_H26X_SCL
Definition: util.hh:154
+ +
397
+
399 RCC_LAST
+
401};
+
+
402
+
403extern thread_local rtp_error_t rtp_errno;
+
RTP_CTX_ENABLE_FLAGS
RTP context enable flags.
Definition util.hh:168
+
@ RCE_H26X_DEPENDENCY_ENFORCEMENT
Definition util.hh:210
+
@ RCE_SRTP_KEYSIZE_256
Definition util.hh:254
+
@ RCE_RTCP_MUX
Definition util.hh:269
+
@ RCE_SRTP_KMNGMNT_ZRTP
Definition util.hh:190
+
@ RCE_SRTP_KMNGMNT_USER
Definition util.hh:200
+
@ RCE_NO_FLAGS
Use this if you have no RCE flags.
Definition util.hh:169
+
@ RCE_SRTP_NULL_CIPHER
Definition util.hh:227
+
@ RCE_ZRTP_DIFFIE_HELLMAN_MODE
Definition util.hh:257
+
@ RCE_FRAGMENT_GENERIC
Definition util.hh:218
+
@ RCE_SEND_ONLY
address/port interpreted as remote, no binding to local socket
Definition util.hh:176
+
@ RCE_SRTP_AUTHENTICATE_RTP
Definition util.hh:235
+
@ RCE_PACE_FRAGMENT_SENDING
Definition util.hh:266
+
@ RCE_NO_H26X_PREPEND_SC
Definition util.hh:206
+
@ RCE_HOLEPUNCH_KEEPALIVE
Definition util.hh:248
+
@ RCE_ZRTP_MULTISTREAM_MODE
Definition util.hh:260
+
@ RCE_SYSTEM_CALL_CLUSTERING
Definition util.hh:224
+
@ RCE_RTCP
Definition util.hh:242
+
@ RCE_SRTP_REPLAY_PROTECTION
Definition util.hh:238
+
@ RCE_FRAME_RATE
Definition util.hh:263
+
@ RCE_SRTP_KEYSIZE_192
Definition util.hh:251
+
@ RCE_SRTP
Definition util.hh:180
+
@ RCE_RECEIVE_ONLY
address/port interpreted as local, sending not possible
Definition util.hh:177
+
RTP_FORMAT
These flags are given to uvgrtp::session::create_stream()
Definition util.hh:62
+
@ RTP_FORMAT_H266
H.266/VVC.
Definition util.hh:126
+
@ RTP_FORMAT_G728
G728.
Definition util.hh:82
+
@ RTP_FORMAT_PCMU
PCMU, ITU-T G.711.
Definition util.hh:67
+
@ RTP_FORMAT_L16_STEREO
L16 Stereo.
Definition util.hh:77
+
@ RTP_FORMAT_G722
G722.
Definition util.hh:76
+
@ RTP_FORMAT_G726_32
G726, 32 kbit/s.
Definition util.hh:113
+
@ RTP_FORMAT_L16_MONO
L16 Mono.
Definition util.hh:78
+
@ RTP_FORMAT_GSM_EFR
GSM enhanced full rate speech transcoding.
Definition util.hh:118
+
@ RTP_FORMAT_OPUS
Opus, see RFC 7587.
Definition util.hh:122
+
@ RTP_FORMAT_H265
H.265/HEVC, see RFC 7798.
Definition util.hh:125
+
@ RTP_FORMAT_PCMA
PCMA.
Definition util.hh:75
+
@ RTP_FORMAT_LPC
LPC.
Definition util.hh:74
+
@ RTP_FORMAT_G729
G729, 8 kbit/s.
Definition util.hh:85
+
@ RTP_FORMAT_ATLAS
V3C.
Definition util.hh:127
+
@ RTP_FORMAT_G726_24
G726, 24 kbit/s.
Definition util.hh:114
+
@ RTP_FORMAT_VDVI
VDVI, variable-rate DVI4.
Definition util.hh:121
+
@ RTP_FORMAT_DVI4_441
DVI 44.1 kbit/s.
Definition util.hh:83
+
@ RTP_FORMAT_GSM
GSM (Group Speciale Mobile)
Definition util.hh:70
+
@ RTP_FORMAT_G723
G723.
Definition util.hh:71
+
@ RTP_FORMAT_DVI4_882
DVI 88.2 kbit/s.
Definition util.hh:84
+
@ RTP_FORMAT_L8
L8, linear audio data samples.
Definition util.hh:119
+
@ RTP_FORMAT_DVI4_32
DVI 32 kbit/s.
Definition util.hh:72
+
@ RTP_FORMAT_GENERIC
Same as PCMU.
Definition util.hh:66
+
@ RTP_FORMAT_H264
H.264/AVC, see RFC 6184.
Definition util.hh:124
+
@ RTP_FORMAT_G729E
G729E, 11.8 kbit/s.
Definition util.hh:117
+
@ RTP_FORMAT_DVI4_64
DVI 64 kbit/s.
Definition util.hh:73
+
@ RTP_FORMAT_G726_16
G726, 16 kbit/s.
Definition util.hh:115
+
@ RTP_FORMAT_G726_40
G726, 40 kbit/s.
Definition util.hh:112
+
@ RTP_FORMAT_G729D
G729D, 6.4 kbit/s.
Definition util.hh:116
+
RTP_ERROR
RTP error codes.
Definition util.hh:30
+
@ RTP_BIND_ERROR
Failed to bind to interface.
Definition util.hh:43
+
@ RTP_INITIALIZED
Object already initialized.
Definition util.hh:48
+
@ RTP_NOT_FOUND
Object not found.
Definition util.hh:53
+
@ RTP_OK
Success.
Definition util.hh:40
+
@ RTP_NOT_INITIALIZED
Object has not been initialized.
Definition util.hh:49
+
@ RTP_INVALID_VALUE
Invalid value.
Definition util.hh:44
+
@ RTP_SEND_ERROR
System call send(2) or one of its derivatives failed.
Definition util.hh:45
+
@ RTP_AUTH_TAG_MISMATCH
Authentication tag does not match the RTP packet contents.
Definition util.hh:54
+
@ RTP_NOT_SUPPORTED
Method/version/extension not supported.
Definition util.hh:50
+
@ RTP_SSRC_COLLISION
SSRC collision detected.
Definition util.hh:47
+
@ RTP_RECV_ERROR
System call recv(2) or one of its derivatives failed.
Definition util.hh:51
+
@ RTP_SOCKET_ERROR
Failed to create socket.
Definition util.hh:42
+
@ RTP_MEMORY_ERROR
Memory allocation failed.
Definition util.hh:46
+
@ RTP_TIMEOUT
Operation timed out.
Definition util.hh:52
+
@ RTP_GENERIC_ERROR
Generic error condition.
Definition util.hh:41
+
RTP_CTX_CONFIGURATION_FLAGS
RTP context configuration flags.
Definition util.hh:284
+
@ RCC_REMOTE_SSRC
Definition util.hh:368
+
@ RCC_FPS_NUMERATOR
Definition util.hh:348
+
@ RCC_PKT_MAX_DELAY
Definition util.hh:319
+
@ RCC_MTU_SIZE
Definition util.hh:335
+
@ RCC_MULTICAST_TTL
Definition util.hh:396
+
@ RCC_POLL_TIMEOUT
Definition util.hh:390
+
@ RCC_SESSION_BANDWIDTH
Definition util.hh:382
+
@ RCC_RING_BUFFER_SIZE
Definition util.hh:311
+
@ RCC_FPS_DENOMINATOR
Definition util.hh:356
+
@ RCC_UDP_RCV_BUF_SIZE
Definition util.hh:295
+
@ RCC_DYN_PAYLOAD_TYPE
Definition util.hh:322
+
@ RCC_UDP_SND_BUF_SIZE
Definition util.hh:303
+
@ RCC_SSRC
Definition util.hh:362
+
@ RCC_CLOCK_RATE
Definition util.hh:325
+
RTP_FLAGS
These flags are given to uvgrtp::media_stream::push_frame() and they can be OR'ed together.
Definition util.hh:137
+
@ RTP_H26X_DO_NOT_AGGR
Definition util.hh:157
+
@ RTP_NO_FLAGS
Use this if you have no RTP flags.
Definition util.hh:138
+
@ RTP_COPY
Definition util.hh:147
+
@ RTP_NO_H26X_SCL
Definition util.hh:154
+
diff --git a/docs/html/version_8hh_source.html b/docs/html/version_8hh_source.html index 4fa068c0..11898b16 100644 --- a/docs/html/version_8hh_source.html +++ b/docs/html/version_8hh_source.html @@ -3,12 +3,16 @@ - + uvgRTP: version.hh Source File + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + +
+
version.hh
@@ -92,7 +107,8 @@
+ diff --git a/docs/html/wrapper__c_8hh_source.html b/docs/html/wrapper__c_8hh_source.html index 11668662..e87e3d72 100644 --- a/docs/html/wrapper__c_8hh_source.html +++ b/docs/html/wrapper__c_8hh_source.html @@ -3,12 +3,16 @@ - + uvgRTP: wrapper_c.hh Source File + + + + @@ -21,7 +25,7 @@ -
uvgRTP 3.1.2 +
uvgRTP 3.1.3
An open-source library for RTP/SRTP media delivery
@@ -30,23 +34,33 @@
- + + + +
wrapper_c.hh
@@ -107,7 +122,8 @@
+