11bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber/* 21bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * Copyright (C) 2010 The Android Open Source Project 31bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * 41bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 51bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * you may not use this file except in compliance with the License. 61bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * You may obtain a copy of the License at 71bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * 81bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 91bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * 101bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * Unless required by applicable law or agreed to in writing, software 111bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 121bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * See the License for the specific language governing permissions and 141bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber * limitations under the License. 151bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber */ 161bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 171bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber#ifndef XING_SEEKER_H_ 181bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 191bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber#define XING_SEEKER_H_ 201bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 211bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber#include "include/MP3Seeker.h" 221bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 231bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Hubernamespace android { 241bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 251bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huberstruct DataSource; 261bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 271bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huberstruct XINGSeeker : public MP3Seeker { 281bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber static sp<XINGSeeker> CreateFromSource( 29b1262a8b1dd23abad64465f9ffd25c44facdf4d2James Dong const sp<DataSource> &source, off64_t first_frame_pos); 301bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 311bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber virtual bool getDuration(int64_t *durationUs); 32b1262a8b1dd23abad64465f9ffd25c44facdf4d2James Dong virtual bool getOffsetForTime(int64_t *timeUs, off64_t *pos); 331bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 341bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huberprivate: 351bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber int64_t mFirstFramePos; 361bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber int64_t mDurationUs; 371bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber int32_t mSizeBytes; 381bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 391bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber // TOC entries in XING header. Skip the first one since it's always 0. 40c2e5ca3cac4f2b1e83f68a94eee50761783d5a63Gloria Wang unsigned char mTableOfContents[99]; 411bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 421bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber XINGSeeker(); 431bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 441bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(XINGSeeker); 451bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber}; 461bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 471bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber} // namespace android 481bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 491bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber#endif // XING_SEEKER_H_ 501bd9949815b93b5a741c0f2533bf50d32542dbe5Andreas Huber 51