157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber/*
257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * Copyright (C) 2010 The Android Open Source Project
357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber *
457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * you may not use this file except in compliance with the License.
657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * You may obtain a copy of the License at
757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber *
857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber *
1057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * Unless required by applicable law or agreed to in writing, software
1157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
1257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * See the License for the specific language governing permissions and
1457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * limitations under the License.
1557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber */
1657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
1757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber#ifndef A_RTP_SESSION_H_
1857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
1957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber#define A_RTP_SESSION_H_
2057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
2157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber#include <media/stagefright/foundation/AHandler.h>
2257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
2357648e4eec7dd2593af467877bc7cce4aa654759Andreas Hubernamespace android {
2457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
2557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberstruct APacketSource;
2657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberstruct ARTPConnection;
2757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberstruct ASessionDescription;
2857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberstruct MediaSource;
2957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
3057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberstruct ARTPSession : public AHandler {
3157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    ARTPSession();
3257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
3357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    status_t setup(const sp<ASessionDescription> &desc);
3457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
3557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    size_t countTracks();
3657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    sp<MediaSource> trackAt(size_t index);
3757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
3857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberprotected:
3957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    virtual void onMessageReceived(const sp<AMessage> &msg);
4057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
4157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    virtual ~ARTPSession();
4257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
4357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberprivate:
4457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    enum {
4557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber        kWhatAccessUnitComplete = 'accu'
4657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    };
4757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
4857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    struct TrackInfo {
4957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber        int mRTPSocket;
5057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber        int mRTCPSocket;
5157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
5257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber        sp<APacketSource> mPacketSource;
5357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    };
5457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
5557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    status_t mInitCheck;
5657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    sp<ASessionDescription> mDesc;
5757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    sp<ARTPConnection> mRTPConn;
5857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
5957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    Vector<TrackInfo> mTracks;
6057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
6157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    bool validateMediaFormat(size_t index, unsigned *port) const;
6257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    static int MakeUDPSocket(unsigned port);
6357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
6457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(ARTPSession);
6557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber};
6657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
6757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber}  // namespace android
6857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
6957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber#endif  // A_RTP_SESSION_H_
70