1871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi/* 2871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * Copyright (C) 2011 The Android Open Source Project 3871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * 4871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 5871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * you may not use this file except in compliance with the License. 6871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * You may obtain a copy of the License at 7871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * 8871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 9871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * 10871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 11871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 12871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * See the License for the specific language governing permissions and 14871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi * limitations under the License. 15871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi */ 16871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 17871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi/* StreamInformation implementation */ 18871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 19871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi#include "sles_allinclusive.h" 20871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 21871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivistatic XAresult IStreamInformation_QueryMediaContainerInformation( XAStreamInformationItf self, 22871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAMediaContainerInformation * info /* [out] */) 23871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi{ 24871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_ENTER_INTERFACE 25871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 26a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten if (NULL == info) { 27a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten result = XA_RESULT_PARAMETER_INVALID; 28a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten XA_LEAVE_INTERFACE 29a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten } 30a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten 31871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi#ifdef ANDROID 3250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IStreamInformation *thiz = (IStreamInformation *) self; 3350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 34fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // always storing container info at index 0, as per spec 35a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten *info = thiz->mStreamInfoTable.itemAt(0).containerInfo; 3650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 37871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi // even though the pointer to the media container info is returned, the values aren't set 38871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi // for the actual container in this version, they are simply initialized to defaults 39871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi // (see IStreamInformation_init) 40a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten result = XA_RESULT_SUCCESS; 41871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi#else 42871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi SL_LOGE("QueryMediaContainerInformation is unsupported"); 43a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten memset(info, 0, sizeof(XAMediaContainerInformation)); 44871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi result = XA_RESULT_CONTENT_UNSUPPORTED; 45871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi#endif 46871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 47871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_LEAVE_INTERFACE 48871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi} 49871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 50871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 51871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivistatic XAresult IStreamInformation_QueryStreamType( XAStreamInformationItf self, 52871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAuint32 streamIndex, /* [in] */ 53871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAuint32 *domain) /* [out] */ 54871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi{ 55871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_ENTER_INTERFACE 56871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 57871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi if (NULL == domain) { 58871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi result = XA_RESULT_PARAMETER_INVALID; 59871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_LEAVE_INTERFACE; 60871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi } 61871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 62871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi#ifndef ANDROID 63871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi *domain = XA_DOMAINTYPE_UNKNOWN; 64871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi#else 65871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi if (0 == streamIndex) { 66871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi // stream 0 is reserved for the container 67871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi result = XA_RESULT_PARAMETER_INVALID; 68a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten *domain = XA_DOMAINTYPE_UNKNOWN; 69871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi } else { 7050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IStreamInformation *thiz = (IStreamInformation *) self; 71871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 7250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 73fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 7450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten XAuint32 nbStreams = thiz->mStreamInfoTable.itemAt(0).containerInfo.numStreams; 75871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi // streams in the container are numbered 1..nbStreams 76871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi if (streamIndex <= nbStreams) { 77871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi result = XA_RESULT_SUCCESS; 7850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *domain = thiz->mStreamInfoTable.itemAt(streamIndex).domain; 79871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi } else { 801c17ec55f629fdab909ab16d94e014f098369110Glenn Kasten SL_LOGE("Querying stream type for stream %d, only %d streams available", 81871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi streamIndex, nbStreams); 82871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi result = XA_RESULT_PARAMETER_INVALID; 83871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi } 84fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 8550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 86871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi } 87871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi#endif 88871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 89871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_LEAVE_INTERFACE 90871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi} 91871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 92871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 93871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivistatic XAresult IStreamInformation_QueryStreamInformation( XAStreamInformationItf self, 94871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAuint32 streamIndex, /* [in] */ 95871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi void * info) /* [out] */ 96871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi{ 97871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_ENTER_INTERFACE 98871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 99fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi if (NULL == info) { 100fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi result = XA_RESULT_PARAMETER_INVALID; 101fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } else { 102fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 103fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi#ifndef ANDROID 104fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi result = XA_RESULT_FEATURE_UNSUPPORTED; 105fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi#else 106fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 107fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi IStreamInformation *thiz = (IStreamInformation *) self; 108fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 109fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi interface_lock_exclusive(thiz); 110fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 111fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi XAuint32 nbStreams = thiz->mStreamInfoTable.itemAt(0).containerInfo.numStreams; 112a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten // stream 0 is the container, and other streams in the container are numbered 1..nbStreams 113fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi if (streamIndex <= nbStreams) { 114fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi result = XA_RESULT_SUCCESS; 115fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi const StreamInfo& streamInfo = thiz->mStreamInfoTable.itemAt((size_t)streamIndex); 116fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 117fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi switch (streamInfo.domain) { 118fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi case XA_DOMAINTYPE_CONTAINER: 119fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi *(XAMediaContainerInformation *)info = streamInfo.containerInfo; 120fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi break; 121fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi case XA_DOMAINTYPE_AUDIO: 122fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi *(XAAudioStreamInformation *)info = streamInfo.audioInfo; 123fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi break; 124fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi case XA_DOMAINTYPE_VIDEO: 125fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi *(XAVideoStreamInformation *)info = streamInfo.videoInfo; 126fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi break; 127fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi case XA_DOMAINTYPE_IMAGE: 128fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi *(XAImageStreamInformation *)info = streamInfo.imageInfo; 129fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi break; 130fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi case XA_DOMAINTYPE_TIMEDTEXT: 131fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi *(XATimedTextStreamInformation *)info = streamInfo.textInfo; 132fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi break; 133fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi case XA_DOMAINTYPE_MIDI: 134fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi *(XAMIDIStreamInformation *)info = streamInfo.midiInfo; 135fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi break; 136fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi case XA_DOMAINTYPE_VENDOR: 137fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi *(XAVendorStreamInformation *)info = streamInfo.vendorInfo; 138fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi break; 139fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi default: 1401c17ec55f629fdab909ab16d94e014f098369110Glenn Kasten SL_LOGE("StreamInformation::QueryStreamInformation index %u has " 1411c17ec55f629fdab909ab16d94e014f098369110Glenn Kasten "unknown domain %u", streamIndex, streamInfo.domain); 142fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi result = XA_RESULT_INTERNAL_ERROR; 143fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi break; 144fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } 145fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 146fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } else { 1471c17ec55f629fdab909ab16d94e014f098369110Glenn Kasten SL_LOGE("Querying stream type for stream %d, only %d streams available", 148fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi streamIndex, nbStreams); 149fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi result = XA_RESULT_PARAMETER_INVALID; 150fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } 151fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 152fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi interface_unlock_exclusive(thiz); 153fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi#endif 154fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 155fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } 156871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 157871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_LEAVE_INTERFACE 158871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi} 159871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 160871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 161871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivistatic XAresult IStreamInformation_QueryStreamName( XAStreamInformationItf self, 162871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAuint32 streamIndex, /* [in] */ 163871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAuint16 * pNameSize, /* [in/out] */ 164871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAchar * pName) /* [out] */ 165871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi{ 166871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_ENTER_INTERFACE 167871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 168871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi SL_LOGE("unsupported XAStreamInformationItf function"); 169a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten result = XA_RESULT_FEATURE_UNSUPPORTED; 170871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 171871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_LEAVE_INTERFACE 172871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi} 173871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 174871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 175871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivistatic XAresult IStreamInformation_RegisterStreamChangeCallback( XAStreamInformationItf self, 176871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi xaStreamEventChangeCallback callback, /* [in] */ 177871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi void * pContext) /* [in] */ 178871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi{ 179871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_ENTER_INTERFACE 180871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 18150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IStreamInformation *thiz = (IStreamInformation *) self; 182871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 18350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 184871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 18550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mCallback = callback; 18650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mContext = pContext; 187a51725b1ff3abcd30c929a014e3961df2c0fb8a4Glenn Kasten result = SL_RESULT_SUCCESS; 188871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 18950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 190871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 191871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_LEAVE_INTERFACE 192871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi} 193871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 194871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 195871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivistatic XAresult IStreamInformation_QueryActiveStreams( XAStreamInformationItf self, 196871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAuint32 *numStreams, /* [in/out] */ 197871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAboolean *activeStreams) /* [out] */ 198871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi{ 199871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_ENTER_INTERFACE 200871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 201871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi if (NULL == numStreams) { 202871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi result = XA_RESULT_PARAMETER_INVALID; 203871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_LEAVE_INTERFACE; 204871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi } 205871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 206fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi IStreamInformation *thiz = (IStreamInformation *) self; 207fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 208fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi interface_lock_exclusive(thiz); 209fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 210fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi result = XA_RESULT_SUCCESS; 211fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi *numStreams = thiz->mStreamInfoTable.itemAt(0).containerInfo.numStreams; 212fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi activeStreams = thiz->mActiveStreams; 213fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 214fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi interface_unlock_exclusive(thiz); 215871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 216871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_LEAVE_INTERFACE 217871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi} 218871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 219871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 220871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivistatic XAresult IStreamInformation_SetActiveStream( XAStreamInformationItf self, 221871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAuint32 streamNum, /* [in] */ 222871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAboolean active, /* [in] */ 223871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XAboolean commitNow) /* [in] */ 224871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi{ 225871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_ENTER_INTERFACE 226871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 227871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi SL_LOGE("unsupported XAStreamInformationItf function"); 228871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi result = XA_RESULT_FEATURE_UNSUPPORTED; 229871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 230871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi XA_LEAVE_INTERFACE 231871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi} 232871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 233871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 234871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivistatic const struct XAStreamInformationItf_ IStreamInformation_Itf = { 235871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi IStreamInformation_QueryMediaContainerInformation, 236871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi IStreamInformation_QueryStreamType, 237871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi IStreamInformation_QueryStreamInformation, 238871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi IStreamInformation_QueryStreamName, 239871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi IStreamInformation_RegisterStreamChangeCallback, 240871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi IStreamInformation_QueryActiveStreams, 241871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi IStreamInformation_SetActiveStream 242871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi}; 243871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 244fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 245871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivivoid IStreamInformation_init(void *self) 246871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi{ 247fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi SL_LOGV("IStreamInformation_init\n"); 24850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IStreamInformation *thiz = (IStreamInformation *) self; 24950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mItf = &IStreamInformation_Itf; 250871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 25150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mCallback = NULL; 25250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mContext = NULL; 253871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi 254fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi for (int i=0 ; i < NB_SUPPORTED_STREAMS ; i++) { 255fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi thiz->mActiveStreams[i] = XA_BOOLEAN_FALSE; 256fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } 257fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 258871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi#ifdef ANDROID 259fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // placement new constructor for C++ field within C struct 2602e28af68bc8807958ba611c082a0a61691e76a2cGlenn Kasten (void) new (&thiz->mStreamInfoTable) android::Vector<StreamInfo>(); 261871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi // initialize container info 262871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi StreamInfo contInf; 263fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi contInf.domain = XA_DOMAINTYPE_CONTAINER; 264871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi contInf.containerInfo.containerType = XA_CONTAINERTYPE_UNSPECIFIED; 265871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi contInf.containerInfo.mediaDuration = XA_TIME_UNKNOWN; 266fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // FIXME shouldn't this be 1 ? 267871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi contInf.containerInfo.numStreams = 0; 268fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // always storing container info at index 0, as per spec: here, the table was still empty 26950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mStreamInfoTable.add(contInf); 270871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi#endif 271871ed9a3f3fff7ea1392c5da8f475144a6e431b3Jean-Michel Trivi} 272fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 273fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 274fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivivoid IStreamInformation_deinit(void *self) { 275fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi#ifdef ANDROID 276fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi IStreamInformation *thiz = (IStreamInformation *) self; 277fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // explicit destructor 2782e28af68bc8807958ba611c082a0a61691e76a2cGlenn Kasten thiz->mStreamInfoTable.~Vector<StreamInfo>(); 279fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi#endif 280fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi} 281