1e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber/*
2e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Copyright (C) 2009 The Android Open Source Project
3e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *
4e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * you may not use this file except in compliance with the License.
6e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * You may obtain a copy of the License at
7e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *
8e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *
10e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Unless required by applicable law or agreed to in writing, software
11e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * See the License for the specific language governing permissions and
14e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * limitations under the License.
15e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber */
16e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
17e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#ifndef SHOUTCAST_SOURCE_H_
18e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
19e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#define SHOUTCAST_SOURCE_H_
20e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
21e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <sys/types.h>
22e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
23e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <media/stagefright/MediaSource.h>
24e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
25e46b7be812d68e49710b34048662cbf18e2a6550Andreas Hubernamespace android {
26e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
27e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass HTTPStream;
28e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass MediaBufferGroup;
29e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
30e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass ShoutcastSource : public MediaSource {
31e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic:
32e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    // Assumes ownership of "http".
33e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    ShoutcastSource(HTTPStream *http);
34e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
35e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t start(MetaData *params = NULL);
36e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t stop();
37e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
38e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual sp<MetaData> getFormat();
39e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
40e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t read(
41e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            MediaBuffer **buffer, const ReadOptions *options = NULL);
42e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
439a12baf929ea803915d7ab626b200ffefb4fbac7Andreas Huberprotected:
449a12baf929ea803915d7ab626b200ffefb4fbac7Andreas Huber    virtual ~ShoutcastSource();
459a12baf929ea803915d7ab626b200ffefb4fbac7Andreas Huber
46e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberprivate:
47e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    HTTPStream *mHttp;
48e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    size_t mMetaDataOffset;
49e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    size_t mBytesUntilMetaData;
50e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
51e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    MediaBufferGroup *mGroup;
52e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    bool mStarted;
53e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
54e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    ShoutcastSource(const ShoutcastSource &);
55e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    ShoutcastSource &operator= (const ShoutcastSource &);
56e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber};
57e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
58e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}  // namespace android
59e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
60e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#endif  // SHOUTCAST_SOURCE_H_
61e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
62