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