1c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen/*
2c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen * Copyright (C) 2012 The Android Open Source Project
3c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen *
4c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen * Licensed under the Apache License, Version 2.0 (the "License");
5c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen * you may not use this file except in compliance with the License.
6c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen * You may obtain a copy of the License at
7c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen *
8c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen *      http://www.apache.org/licenses/LICENSE-2.0
9c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen *
10c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen * Unless required by applicable law or agreed to in writing, software
11c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen * distributed under the License is distributed on an "AS IS" BASIS,
12c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen * See the License for the specific language governing permissions and
14c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen * limitations under the License.
15c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen */
16c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen
17c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen
18c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissenpackage android.media;
19c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen
20c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissenimport java.io.Closeable;
21c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen
22c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen/**
23c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen * An abstraction for a media data source, e.g. a file or an http stream
24c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen * {@hide}
25c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen */
26c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissenpublic interface DataSource extends Closeable {
27c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen    /**
28c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen     * Reads data from the data source at the requested position
29c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen     *
30c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen     * @param offset where in the source to read
31c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen     * @param buffer the buffer to read the data into
32c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen     * @param size how many bytes to read
33c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen     * @return the number of bytes read, or -1 if there was an error
34c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen     */
35c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen    public int readAt(long offset, byte[] buffer, int size);
36c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen
37c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen    /**
38c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen     * Gets the size of the data source.
39c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen     *
40c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen     * @return size of data source, or -1 if the length is unknown
41c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen     */
42c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen    public long getSize();
43c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen}
44