blob: 7117b94d90c17b840e2c2e609acb791c41ffd6dc [file] [log] [blame]
Marco Nelissencb30d842018-01-26 15:29:02 -08001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Marco Nelissen2a3363a2018-09-13 13:15:30 -070017#include <mutex>
18
Marco Nelissen3d21ae32018-02-16 08:24:08 -080019#include <media/MediaTrack.h>
Marco Nelissencb30d842018-01-26 15:29:02 -080020
21namespace android {
22
Marco Nelissen3d21ae32018-02-16 08:24:08 -080023MediaTrack::MediaTrack() {}
Marco Nelissencb30d842018-01-26 15:29:02 -080024
Marco Nelissen3d21ae32018-02-16 08:24:08 -080025MediaTrack::~MediaTrack() {}
Marco Nelissencb30d842018-01-26 15:29:02 -080026
27////////////////////////////////////////////////////////////////////////////////
28
Marco Nelissen3d21ae32018-02-16 08:24:08 -080029MediaTrack::ReadOptions::ReadOptions() {
Marco Nelissencb30d842018-01-26 15:29:02 -080030 reset();
31}
32
Marco Nelissen3d21ae32018-02-16 08:24:08 -080033void MediaTrack::ReadOptions::reset() {
Marco Nelissencb30d842018-01-26 15:29:02 -080034 mOptions = 0;
35 mSeekTimeUs = 0;
36 mNonBlocking = false;
37}
38
Marco Nelissen3d21ae32018-02-16 08:24:08 -080039void MediaTrack::ReadOptions::setNonBlocking() {
Marco Nelissencb30d842018-01-26 15:29:02 -080040 mNonBlocking = true;
41}
42
Marco Nelissen3d21ae32018-02-16 08:24:08 -080043void MediaTrack::ReadOptions::clearNonBlocking() {
Marco Nelissencb30d842018-01-26 15:29:02 -080044 mNonBlocking = false;
45}
46
Marco Nelissen3d21ae32018-02-16 08:24:08 -080047bool MediaTrack::ReadOptions::getNonBlocking() const {
Marco Nelissencb30d842018-01-26 15:29:02 -080048 return mNonBlocking;
49}
50
Marco Nelissen3d21ae32018-02-16 08:24:08 -080051void MediaTrack::ReadOptions::setSeekTo(int64_t time_us, SeekMode mode) {
Marco Nelissencb30d842018-01-26 15:29:02 -080052 mOptions |= kSeekTo_Option;
53 mSeekTimeUs = time_us;
54 mSeekMode = mode;
55}
56
Marco Nelissen3d21ae32018-02-16 08:24:08 -080057void MediaTrack::ReadOptions::clearSeekTo() {
Marco Nelissencb30d842018-01-26 15:29:02 -080058 mOptions &= ~kSeekTo_Option;
59 mSeekTimeUs = 0;
60 mSeekMode = SEEK_CLOSEST_SYNC;
61}
62
Marco Nelissen3d21ae32018-02-16 08:24:08 -080063bool MediaTrack::ReadOptions::getSeekTo(
Marco Nelissencb30d842018-01-26 15:29:02 -080064 int64_t *time_us, SeekMode *mode) const {
65 *time_us = mSeekTimeUs;
66 *mode = mSeekMode;
67 return (mOptions & kSeekTo_Option) != 0;
68}
69
Marco Nelissen2a3363a2018-09-13 13:15:30 -070070MediaTrackCUnwrapper::MediaTrackCUnwrapper(CMediaTrack *cmediatrack) {
71 wrapper = cmediatrack;
72}
73
74MediaTrackCUnwrapper::~MediaTrackCUnwrapper() {
75 wrapper->free(wrapper->data);
76 free(wrapper);
77}
78
79status_t MediaTrackCUnwrapper::start(MetaDataBase *params) {
80 return wrapper->start(wrapper->data, params);
81}
82
83status_t MediaTrackCUnwrapper::stop() {
84 return wrapper->stop(wrapper->data);
85}
86
87status_t MediaTrackCUnwrapper::getFormat(MetaDataBase& format) {
88 return wrapper->getFormat(wrapper->data, format);
89}
90
91status_t MediaTrackCUnwrapper::read(MediaBufferBase **buffer, const ReadOptions *options) {
92
93 uint32_t opts = 0;
94
95 if (options->getNonBlocking()) {
96 opts |= CMediaTrackReadOptions::NONBLOCKING;
97 }
98
99 int64_t seekPosition = 0;
100 MediaTrack::ReadOptions::SeekMode seekMode;
101 if (options->getSeekTo(&seekPosition, &seekMode)) {
102 opts |= SEEK;
103 opts |= (uint32_t) seekMode;
104 }
105
106
107 return wrapper->read(wrapper->data, buffer, opts, seekPosition);
108}
109
110bool MediaTrackCUnwrapper::supportNonblockingRead() {
111 return wrapper->supportsNonBlockingRead(wrapper->data);
112}
113
Marco Nelissencb30d842018-01-26 15:29:02 -0800114} // namespace android