139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber/*
239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * Copyright (C) 2010 The Android Open Source Project
339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber *
439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * you may not use this file except in compliance with the License.
639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * You may obtain a copy of the License at
739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber *
839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber *
1039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * Unless required by applicable law or agreed to in writing, software
1139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
1239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * See the License for the specific language governing permissions and
1439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * limitations under the License.
1539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber */
1639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
1739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber#ifndef A_RTP_SESSION_H_
1839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
1939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber#define A_RTP_SESSION_H_
2039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
2139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber#include <media/stagefright/foundation/AHandler.h>
2239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
2339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Hubernamespace android {
2439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
2539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberstruct APacketSource;
2639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberstruct ARTPConnection;
2739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberstruct ASessionDescription;
2839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberstruct MediaSource;
2939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
3039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberstruct ARTPSession : public AHandler {
3139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    ARTPSession();
3239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
3339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    status_t setup(const sp<ASessionDescription> &desc);
3439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
3539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    size_t countTracks();
3639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    sp<MediaSource> trackAt(size_t index);
3739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
3839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberprotected:
3939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    virtual void onMessageReceived(const sp<AMessage> &msg);
4039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
4139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    virtual ~ARTPSession();
4239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
4339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberprivate:
4439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    enum {
4539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber        kWhatAccessUnitComplete = 'accu'
4639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    };
4739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
4839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    struct TrackInfo {
4939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber        int mRTPSocket;
5039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber        int mRTCPSocket;
5139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
5239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber        sp<APacketSource> mPacketSource;
5339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    };
5439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
5539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    status_t mInitCheck;
5639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    sp<ASessionDescription> mDesc;
5739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    sp<ARTPConnection> mRTPConn;
5839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
5939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    Vector<TrackInfo> mTracks;
6039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
6139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    bool validateMediaFormat(size_t index, unsigned *port) const;
6239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    static int MakeUDPSocket(unsigned port);
6339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
6439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(ARTPSession);
6539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber};
6639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
6739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber}  // namespace android
6839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
6939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber#endif  // A_RTP_SESSION_H_
70