亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? playout.h

?? 傳真通信V27 V29 V17 T38解調與解碼
?? H
字號:
/* * SpanDSP - a series of DSP components for telephony * * playout.h * * Written by Steve Underwood <steveu@coppice.org> * * Copyright (C) 2005 Steve Underwood * * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: playout.h,v 1.9 2007/04/08 08:16:18 steveu Exp $ */#if !defined(_SPANDSP_PLAYOUT_H_)#define _SPANDSP_PLAYOUT_H_/*! \page playout_page Play-out (jitter buffering)\section playout_page_sec_1 What does it do?The play-out module provides a static or dynamic length buffer for received frames ofaudio or video data. It's goal is to maximise the receiver's tolerance of jitter in thetiming of the received frames.Dynamic buffers are generally good for speech, since they adapt to provide the smallest delayconsistent with a low rate of packets arriving too late to be used. For things like FoIP andMoIP, a static length of buffer is normally necessary. Any attempt to elastically change thebuffer length would wreck a modem's data flow.*//* Return codes */enum{    PLAYOUT_OK = 0,    PLAYOUT_ERROR,    PLAYOUT_EMPTY,    PLAYOUT_NOFRAME,    PLAYOUT_FILLIN,    PLAYOUT_DROP};/* Frame types */#define PLAYOUT_TYPE_CONTROL    0#define PLAYOUT_TYPE_SILENCE	1#define PLAYOUT_TYPE_SPEECH     2typedef int timestamp_t;typedef struct playout_frame_s{    /*! The actual frame data */    void *data;    /*! The type of frame */    int type;    /*! The timestamp assigned by the sending end */    timestamp_t sender_stamp;    /*! The timespan covered by the data in this frame */    timestamp_t sender_len;    /*! The timestamp assigned by the receiving end */    timestamp_t receiver_stamp;    /*! Pointer to the next earlier frame */    struct playout_frame_s *earlier;    /*! Pointer to the next later frame */    struct playout_frame_s *later;} playout_frame_t;/*!    Playout (jitter buffer) descriptor. This defines the working state    for a single instance of playout buffering.*/typedef struct{    /*! TRUE if the buffer is dynamically sized */    int dynamic;    /*! The minimum length (dynamic) or fixed length (static) of the buffer */    int min_length;    /*! The maximum length (dynamic) or fixed length (static) of the buffer */    int max_length;    /*! The target filter threshold for adjusting dynamic buffering. */    int dropable_threshold;    int start;    /*! The queued frame list */    playout_frame_t *first_frame;    playout_frame_t *last_frame;    /*! The free frame pool */    playout_frame_t *free_frames;    /*! The total frames input to the buffer, to date. */    int frames_in;    /*! The total frames output from the buffer, to date. */    int frames_out;    /*! The number of frames received out of sequence. */    int frames_oos;    /*! The number of frames which were discarded, due to late arrival. */    int frames_late;    /*! The number of frames which were never received. */    int frames_missing;    /*! The number of frames trimmed from the stream, due to buffer shrinkage. */    int frames_trimmed;    timestamp_t latest_expected;    /*! The present jitter adjustment */    timestamp_t current;    /*! The sender_stamp of the last speech frame */    timestamp_t last_speech_sender_stamp;    /*! The duration of the last speech frame */    timestamp_t last_speech_sender_len;    int not_first;    /*! The time since the target buffer length was last changed. */    timestamp_t since_last_step;    /*! Filter state for tracking the packets arriving just in time */    int32_t state_just_in_time;    /*! Filter state for tracking the packets arriving late */    int32_t state_late;    /*! The current target length of the buffer */    int target_buffer_length;    /*! The current actual length of the buffer, which may lag behind the target value */    int actual_buffer_length;} playout_state_t;#if defined(__cplusplus)extern "C"{#endif/*! Queue a frame    \param s The play-out context.    \param data The frame data.    \param sender_len Length of frame (for voice) in timestamp units.    \param sender_stamp Sending end's time stamp.    \param receiver_stamp Local time at which packet was received, in timestamp units.    \return One of        PLAYOUT_OK:  Frame queued OK.        PLAYOUT_ERROR: Some problem occured - e.g. out of memory. */int playout_put(playout_state_t *s, void *data, int type, timestamp_t sender_len, timestamp_t sender_stamp, timestamp_t receiver_stamp);/*! Get the next frame.    \param s The play-out context.    \param frame The frame.    \param sender_stamp The sender's timestamp.    \return One of        PLAYOUT_OK:  Suitable frame found.        PLAYOUT_DROP: A frame which should be dropped was found (e.g. it arrived too late).                      The caller should request the same time again when this occurs.        PLAYOUT_NOFRAME: There's no frame scheduled for this time.        PLAYOUT_FILLIN: Synthetic signal must be generated, as no real data is available for                        this time (either we need to grow, or there was a lost frame).        PLAYOUT_EMPTY: The buffer is empty. */int	playout_get(playout_state_t *s, playout_frame_t *frame, timestamp_t sender_stamp);/*! Unconditionally get the first buffered frame. This may be used to clear out the queue, and free    all its contents, before the context is freed.    \param s The play-out context.    \return The frame, or NULL is the queue is empty. */playout_frame_t *playout_get_unconditional(playout_state_t *s);/*! Find the current length of the buffer.    \param s The play-out context.    \return The length of the buffer. */timestamp_t playout_current_length(playout_state_t *s);/*! Find the time at which the next queued frame is due to play.    Note: This value may change backwards as freshly received out of order frames are          added to the buffer.    \param s The play-out context.    \return The next timestamp. */timestamp_t playout_next_due(playout_state_t *s);/*! Create a new instance of play-out buffering.    \param min_length Minimum length of the buffer, in samples.    \param max_length Maximum length of the buffer, in samples. If this equals min_length, static           length buffering is used.    \return The new context */playout_state_t *playout_new(int min_length, int max_length);/*! Destroy an instance of play-out buffering.    \param s The play-out context to be destroyed */void playout_free(playout_state_t *s);/*! Reset an instance of play-out buffering.    NOTE:  The buffer should be empty before you call this function, otherwise           you will leak queued frames, and some internal structures    \param s The play-out context.    \param min_length Minimum length of the buffer, in samples.    \param max_length Maximum length of the buffer, in samples. If this equals min_length, static           length buffering is used. */void playout_restart(playout_state_t *s, int min_length, int max_length);#if defined(__cplusplus)}#endif#endif/*- End of file ------------------------------------------------------------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩激情一区二区| 亚洲欧美日韩中文播放| 日本欧美肥老太交大片| 欧美猛男gaygay网站| 日韩国产欧美在线观看| 91精品蜜臀在线一区尤物| 蜜桃视频在线观看一区二区| 日韩欧美中文字幕公布| 国产麻豆成人传媒免费观看| 中国av一区二区三区| 色中色一区二区| 亚洲成人www| 精品国产一区二区三区久久久蜜月 | 图片区小说区国产精品视频| 欧美一区二区三区公司| 国产成人在线网站| 亚洲欧美一区二区不卡| 在线成人av网站| 国产在线国偷精品产拍免费yy| 国产日韩在线不卡| 欧美艳星brazzers| 国产一区欧美一区| 一区二区三区在线观看网站| 日韩精品中文字幕在线一区| 不卡av免费在线观看| 午夜影院久久久| 欧美国产激情一区二区三区蜜月| 色婷婷av一区二区三区软件 | 丝瓜av网站精品一区二区 | 国产精品丝袜一区| 精品视频全国免费看| 国产美女av一区二区三区| 玉米视频成人免费看| 欧美精品一区二区在线播放| 色综合中文字幕国产| 日韩精品亚洲专区| 国产精品久久久久一区| 日韩一区二区电影网| 色婷婷亚洲综合| 国产尤物一区二区在线| 午夜久久久影院| 中文字幕一区二区三区在线不卡| 91精品国产综合久久福利软件| 成人av电影在线播放| 日本欧美在线看| 一区二区三区中文免费| 日本一区二区三区电影| 日韩欧美亚洲国产另类| 91黄视频在线观看| 成人免费电影视频| 九色porny丨国产精品| 午夜一区二区三区视频| 亚洲女女做受ⅹxx高潮| 欧美国产亚洲另类动漫| 日韩欧美国产电影| 在线电影一区二区三区| 色婷婷精品大在线视频| 国产成人精品www牛牛影视| 另类综合日韩欧美亚洲| 日本最新不卡在线| 性做久久久久久免费观看| 亚洲欧美经典视频| 中文字幕一区二区日韩精品绯色 | 国产性天天综合网| 欧美成人aa大片| 欧美一区二区成人6969| 69久久夜色精品国产69蝌蚪网| 在线观看欧美黄色| 在线观看不卡视频| 色婷婷亚洲婷婷| 日本韩国欧美国产| 91久久精品一区二区| 欧美日韩一区二区在线视频| 国产精品天天摸av网| 欧美一二三区在线观看| 91精品午夜视频| 在线综合视频播放| 3d动漫精品啪啪一区二区竹菊 | 日韩高清不卡一区二区| 亚洲超碰精品一区二区| 亚洲超碰精品一区二区| 日韩成人一级片| 美女网站视频久久| 韩日精品视频一区| 国产成人免费视频网站 | 成人黄色777网| 白白色亚洲国产精品| 色天使色偷偷av一区二区 | 欧美日韩国产影片| 4438x成人网最大色成网站| 欧美一区二区精品在线| 精品久久久久久综合日本欧美| 久久日一线二线三线suv| 国产区在线观看成人精品| 国产精品久久久久影院亚瑟| 亚洲激情五月婷婷| 日韩av一级电影| 国产在线不卡一卡二卡三卡四卡| 国产成人免费9x9x人网站视频| a4yy欧美一区二区三区| 欧美日韩美少妇| 精品国产一二三区| 亚洲欧美怡红院| 天堂成人免费av电影一区| 激情六月婷婷久久| 99国产精品一区| 欧美精品少妇一区二区三区| 久久综合九色综合97_久久久| 国产精品卡一卡二卡三| 亚洲国产你懂的| 国产另类ts人妖一区二区| 91美女在线视频| 欧美成人精品高清在线播放| 国产精品国产三级国产专播品爱网| 亚洲影院在线观看| 韩国av一区二区三区四区 | 亚洲一区二区视频在线| 久久精品理论片| 99久久精品国产精品久久| 欧美精品 日韩| 国产欧美一区二区精品性色| 亚洲电影第三页| 高清国产一区二区| 欧美久久久影院| 中文字幕日本不卡| 久久精品99久久久| 91福利国产精品| 国产欧美日韩卡一| 日韩成人精品在线| 91色在线porny| 久久噜噜亚洲综合| 天天综合网 天天综合色| 99久久99久久精品免费看蜜桃| 日韩久久精品一区| 亚洲成人av福利| 91免费版pro下载短视频| 国产亚洲1区2区3区| 免费成人美女在线观看.| 91美女福利视频| 日本一区二区动态图| 毛片不卡一区二区| 欧美日韩精品系列| 亚洲精选在线视频| 成人精品视频一区二区三区尤物| 91精品国产免费久久综合| 亚洲精品菠萝久久久久久久| 成人aaaa免费全部观看| 精品剧情v国产在线观看在线| 五月婷婷色综合| 91精品福利视频| 亚洲日本护士毛茸茸| caoporm超碰国产精品| 国产午夜一区二区三区| 精品亚洲porn| 精品裸体舞一区二区三区| 免费成人小视频| 欧美一区二区三区的| 午夜激情综合网| 欧美片网站yy| 性做久久久久久久免费看| 精品视频在线看| 亚洲成a人v欧美综合天堂| 欧美在线高清视频| 亚洲一区二区欧美| 欧美午夜电影在线播放| 亚洲影视在线观看| 精品视频一区二区不卡| 亚洲一区免费在线观看| 日本精品一级二级| 亚洲高清中文字幕| 666欧美在线视频| 日本美女一区二区三区视频| 日韩一区二区免费在线观看| 日本特黄久久久高潮| 日韩欧美国产三级电影视频| 日本不卡不码高清免费观看| 欧美成人精品二区三区99精品| 激情成人综合网| 欧美激情在线一区二区| 99麻豆久久久国产精品免费 | 精品免费视频一区二区| 国产麻豆午夜三级精品| 中文成人av在线| 在线免费观看视频一区| 亚洲国产日产av| 欧美大尺度电影在线| 国产成人av电影在线| 亚洲色图欧美激情| 欧美精品三级在线观看| 激情久久五月天| 国产精品区一区二区三区| 日本道色综合久久| 天堂久久一区二区三区| 久久一夜天堂av一区二区三区 | 国产精品麻豆久久久| 在线视频一区二区免费| 蜜桃av噜噜一区| 国产精品免费丝袜| 欧美在线观看18| 国产在线精品免费av|