14456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber/*
24456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber * Copyright (C) 2010 The Android Open Source Project
34456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber *
44456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
54456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber * you may not use this file except in compliance with the License.
64456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber * You may obtain a copy of the License at
74456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber *
84456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
94456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber *
104456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber * Unless required by applicable law or agreed to in writing, software
114456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
124456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber * See the License for the specific language governing permissions and
144456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber * limitations under the License.
154456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber */
164456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
174456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber#ifndef XING_SEEKER_H_
184456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
194456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber#define XING_SEEKER_H_
204456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
214456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber#include "include/MP3Seeker.h"
224456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
234456da54bcd206ed1f518c69cc959ca65a179c83Andreas Hubernamespace android {
244456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
254456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huberstruct DataSource;
264456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
274456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huberstruct XINGSeeker : public MP3Seeker {
284456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber    static sp<XINGSeeker> CreateFromSource(
29c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong            const sp<DataSource> &source, off64_t first_frame_pos);
304456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
314456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber    virtual bool getDuration(int64_t *durationUs);
32c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong    virtual bool getOffsetForTime(int64_t *timeUs, off64_t *pos);
334456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
34b636abde14f2612ea236257846b9ab15d87d4623Marco Nelissen    virtual int32_t getEncoderDelay();
35b636abde14f2612ea236257846b9ab15d87d4623Marco Nelissen    virtual int32_t getEncoderPadding();
36b636abde14f2612ea236257846b9ab15d87d4623Marco Nelissen
374456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huberprivate:
384456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber    int64_t mFirstFramePos;
394456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber    int64_t mDurationUs;
404456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber    int32_t mSizeBytes;
41b636abde14f2612ea236257846b9ab15d87d4623Marco Nelissen    int32_t mEncoderDelay;
42b636abde14f2612ea236257846b9ab15d87d4623Marco Nelissen    int32_t mEncoderPadding;
434456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
444456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber    // TOC entries in XING header. Skip the first one since it's always 0.
455102400104ce1f0a6de7bf913381a91e4f18a22aMarco Nelissen    unsigned char mTOC[99];
465102400104ce1f0a6de7bf913381a91e4f18a22aMarco Nelissen    bool mTOCValid;
474456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
484456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber    XINGSeeker();
494456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
504456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(XINGSeeker);
514456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber};
524456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
534456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber}  // namespace android
544456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
554456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber#endif  // XING_SEEKER_H_
564456da54bcd206ed1f518c69cc959ca65a179c83Andreas Huber
57