summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
Diffstat (limited to 'media')
-rw-r--r--media/java/android/drm/mobile1/DrmConstraintInfo.java96
-rw-r--r--media/java/android/drm/mobile1/DrmException.java34
-rw-r--r--media/java/android/drm/mobile1/DrmRawContent.java464
-rw-r--r--media/java/android/drm/mobile1/DrmRights.java136
-rw-r--r--media/java/android/drm/mobile1/DrmRightsManager.java255
-rw-r--r--media/java/android/drm/mobile1/package.html5
-rw-r--r--media/java/android/media/AmrInputStream.java141
-rw-r--r--media/java/android/media/AsyncPlayer.java235
-rw-r--r--media/java/android/media/AudioFormat.java51
-rw-r--r--media/java/android/media/AudioManager.java1086
-rw-r--r--media/java/android/media/AudioRecord.java778
-rw-r--r--media/java/android/media/AudioService.java1236
-rw-r--r--media/java/android/media/AudioSystem.java223
-rw-r--r--media/java/android/media/AudioTrack.java1027
-rw-r--r--media/java/android/media/FaceDetector.java201
-rw-r--r--media/java/android/media/IAudioService.aidl74
-rw-r--r--media/java/android/media/IMediaScannerListener.aidl33
-rw-r--r--media/java/android/media/IMediaScannerService.aidl44
-rw-r--r--media/java/android/media/JetPlayer.java416
-rw-r--r--media/java/android/media/MediaFile.java185
-rw-r--r--media/java/android/media/MediaMetadataRetriever.java248
-rw-r--r--media/java/android/media/MediaPlayer.java1203
-rw-r--r--media/java/android/media/MediaRecorder.java369
-rw-r--r--media/java/android/media/MediaScanner.java1352
-rw-r--r--media/java/android/media/MediaScannerClient.java37
-rw-r--r--media/java/android/media/MediaScannerConnection.java189
-rw-r--r--media/java/android/media/ResampleInputStream.java153
-rw-r--r--media/java/android/media/Ringtone.java232
-rw-r--r--media/java/android/media/RingtoneManager.java713
-rw-r--r--media/java/android/media/SoundPool.java122
-rw-r--r--media/java/android/media/ToneGenerator.java286
-rw-r--r--media/java/android/media/package.html13
-rw-r--r--media/jni/Android.mk42
-rw-r--r--media/jni/MODULE_LICENSE_APACHE20
-rw-r--r--media/jni/NOTICE190
-rw-r--r--media/jni/android_media_AmrInputStream.cpp184
-rw-r--r--media/jni/android_media_MediaMetadataRetriever.cpp327
-rw-r--r--media/jni/android_media_MediaPlayer.cpp573
-rw-r--r--media/jni/android_media_MediaRecorder.cpp327
-rw-r--r--media/jni/android_media_MediaScanner.cpp304
-rw-r--r--media/jni/android_media_ResampleInputStream.cpp143
-rw-r--r--media/jni/soundpool/Android.mk18
-rw-r--r--media/jni/soundpool/SoundPool.cpp764
-rw-r--r--media/jni/soundpool/SoundPool.h224
-rw-r--r--media/jni/soundpool/SoundPoolThread.cpp108
-rw-r--r--media/jni/soundpool/SoundPoolThread.h75
-rw-r--r--media/jni/soundpool/android_media_SoundPool.cpp270
-rw-r--r--media/libdrm/Android.mk1
-rw-r--r--media/libdrm/MODULE_LICENSE_APACHE20
-rw-r--r--media/libdrm/NOTICE190
-rw-r--r--media/libdrm/mobile1/Android.mk81
-rw-r--r--media/libdrm/mobile1/include/drm_common_types.h45
-rw-r--r--media/libdrm/mobile1/include/jni/drm1_jni.h242
-rw-r--r--media/libdrm/mobile1/include/objmng/drm_decoder.h55
-rw-r--r--media/libdrm/mobile1/include/objmng/drm_file.h296
-rw-r--r--media/libdrm/mobile1/include/objmng/drm_i18n.h107
-rw-r--r--media/libdrm/mobile1/include/objmng/drm_inner.h90
-rw-r--r--media/libdrm/mobile1/include/objmng/drm_rights_manager.h183
-rw-r--r--media/libdrm/mobile1/include/objmng/drm_time.h77
-rw-r--r--media/libdrm/mobile1/include/objmng/svc_drm.h376
-rw-r--r--media/libdrm/mobile1/include/parser/parser_dcf.h91
-rw-r--r--media/libdrm/mobile1/include/parser/parser_dm.h101
-rw-r--r--media/libdrm/mobile1/include/parser/parser_rel.h123
-rw-r--r--media/libdrm/mobile1/include/xml/wbxml_tinyparser.h52
-rw-r--r--media/libdrm/mobile1/include/xml/xml_tinyParser.h171
-rw-r--r--media/libdrm/mobile1/src/jni/drm1_jni.c1175
-rw-r--r--media/libdrm/mobile1/src/objmng/drm_api.c1944
-rw-r--r--media/libdrm/mobile1/src/objmng/drm_decoder.c96
-rw-r--r--media/libdrm/mobile1/src/objmng/drm_file.c694
-rw-r--r--media/libdrm/mobile1/src/objmng/drm_i18n.c444
-rw-r--r--media/libdrm/mobile1/src/objmng/drm_rights_manager.c688
-rw-r--r--media/libdrm/mobile1/src/objmng/drm_time.c52
-rw-r--r--media/libdrm/mobile1/src/parser/parser_dcf.c125
-rw-r--r--media/libdrm/mobile1/src/parser/parser_dm.c271
-rw-r--r--media/libdrm/mobile1/src/parser/parser_rel.c663
-rw-r--r--media/libdrm/mobile1/src/xml/xml_tinyparser.c834
-rw-r--r--media/libdrm/mobile2/Android.mk79
-rw-r--r--media/libdrm/mobile2/include/Drm2CommonTypes.h28
-rw-r--r--media/libdrm/mobile2/include/dcf/DrmDcfCommon.h192
-rw-r--r--media/libdrm/mobile2/include/dcf/DrmDcfContainer.h213
-rw-r--r--media/libdrm/mobile2/include/dcf/DrmIStream.h77
-rw-r--r--media/libdrm/mobile2/include/dcf/DrmRawContent.h74
-rw-r--r--media/libdrm/mobile2/include/drmmanager/DrmManager.h107
-rw-r--r--media/libdrm/mobile2/include/rights/Asset.h132
-rw-r--r--media/libdrm/mobile2/include/rights/Constraint.h190
-rw-r--r--media/libdrm/mobile2/include/rights/OperationPermission.h83
-rw-r--r--media/libdrm/mobile2/include/rights/Right.h83
-rw-r--r--media/libdrm/mobile2/include/rights/Ro.h214
-rw-r--r--media/libdrm/mobile2/include/rights/RoManager.h98
-rw-r--r--media/libdrm/mobile2/include/roap/Registration.h44
-rw-r--r--media/libdrm/mobile2/include/roap/RoapMessageHandler.h66
-rw-r--r--media/libdrm/mobile2/include/util/crypto/DrmCrypto.h211
-rw-r--r--media/libdrm/mobile2/include/util/domcore/CharacterDataImpl.h102
-rw-r--r--media/libdrm/mobile2/include/util/domcore/DOMException.h155
-rw-r--r--media/libdrm/mobile2/include/util/domcore/DOMString.h26
-rw-r--r--media/libdrm/mobile2/include/util/domcore/DocumentImpl.h104
-rw-r--r--media/libdrm/mobile2/include/util/domcore/ElementImpl.h147
-rw-r--r--media/libdrm/mobile2/include/util/domcore/NodeImpl.h266
-rw-r--r--media/libdrm/mobile2/include/util/domcore/NodeIterator.h74
-rw-r--r--media/libdrm/mobile2/include/util/domcore/NodeListImpl.h48
-rw-r--r--media/libdrm/mobile2/include/util/domcore/NodeType.h68
-rw-r--r--media/libdrm/mobile2/include/util/domcore/TextImpl.h40
-rw-r--r--media/libdrm/mobile2/include/util/domcore/Vector.h21
-rw-r--r--media/libdrm/mobile2/include/util/domcore/stack.h21
-rw-r--r--media/libdrm/mobile2/include/util/xml/DomExpatAgent.h104
-rw-r--r--media/libdrm/mobile2/include/util/xml/ExpatWrapper.h81
-rw-r--r--media/libdrm/mobile2/include/util/xml/XMLDocumentImpl.h52
-rw-r--r--media/libdrm/mobile2/include/util/xml/XMLElementImpl.h105
-rw-r--r--media/libdrm/mobile2/src/dcf/DrmDcfCommon.cpp206
-rw-r--r--media/libdrm/mobile2/src/dcf/DrmDcfContainer.cpp294
-rw-r--r--media/libdrm/mobile2/src/dcf/DrmIStream.cpp94
-rw-r--r--media/libdrm/mobile2/src/dcf/DrmRawContent.cpp164
-rw-r--r--media/libdrm/mobile2/src/drmmanager/DrmManager.cpp67
-rw-r--r--media/libdrm/mobile2/src/rights/Asset.cpp110
-rw-r--r--media/libdrm/mobile2/src/rights/Constraint.cpp210
-rw-r--r--media/libdrm/mobile2/src/rights/OperationPermission.cpp60
-rw-r--r--media/libdrm/mobile2/src/rights/Right.cpp79
-rw-r--r--media/libdrm/mobile2/src/rights/Ro.cpp831
-rw-r--r--media/libdrm/mobile2/src/rights/RoManager.cpp129
-rw-r--r--media/libdrm/mobile2/src/roap/Registration.cpp1
-rw-r--r--media/libdrm/mobile2/src/roap/RoapMessageHandler.cpp62
-rw-r--r--media/libdrm/mobile2/src/util/crypto/DrmCrypto.cpp235
-rw-r--r--media/libdrm/mobile2/src/util/domcore/CharacterDataImpl.cpp83
-rw-r--r--media/libdrm/mobile2/src/util/domcore/DOMException.cpp15
-rw-r--r--media/libdrm/mobile2/src/util/domcore/DocumentImpl.cpp78
-rw-r--r--media/libdrm/mobile2/src/util/domcore/ElementImpl.cpp98
-rw-r--r--media/libdrm/mobile2/src/util/domcore/NodeImpl.cpp239
-rw-r--r--media/libdrm/mobile2/src/util/domcore/NodeIterator.cpp101
-rw-r--r--media/libdrm/mobile2/src/util/domcore/NodeListImpl.cpp48
-rw-r--r--media/libdrm/mobile2/src/util/domcore/TextImpl.cpp41
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/bktrace.cpp160
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/bktrace.h55
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/bsconf.h173
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/cmemlink.cpp110
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/cmemlink.h101
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/config.h296
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/fstream.cpp282
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/fstream.h78
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/memblock.cpp216
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/memblock.h74
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/memlink.cpp66
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/memlink.h115
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/mistream.cpp242
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/mistream.h293
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/mostream.h260
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ofstream.cpp163
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ofstream.h82
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/simd.h465
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/sistream.cpp237
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/sistream.h133
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/sostream.cpp193
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/sostream.h158
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/strmsize.h135
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ualgo.h677
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ualgobase.cpp293
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ualgobase.h334
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uassert.h21
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ubitset.cpp38
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ubitset.h131
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uctralgo.h482
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uctrstrm.h177
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uexception.cpp305
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uexception.h194
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ufunction.h480
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uheap.h153
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uios.h107
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uiosfunc.h103
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uiterator.h268
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ulaalgo.h223
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ulimits.h108
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ulist.h78
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/umap.h165
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/umatrix.h80
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/umemory.h199
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/umultimap.h121
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/umultiset.h106
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/unew.cpp33
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/unew.h52
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/unumeric.h160
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/upair.h63
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/upredalgo.h597
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uqueue.h71
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uset.h97
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uspecial.h267
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ustack.h46
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ustdxept.cpp72
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ustdxept.h143
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ustl.tbff84
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ustring.cpp425
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/ustring.h263
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/utf8.h200
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/utuple.h247
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/utypes.h69
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uutility.h387
-rw-r--r--media/libdrm/mobile2/src/util/ustl-1.0/uvector.h277
-rw-r--r--media/libdrm/mobile2/src/util/xml/DomExpatAgent.cpp228
-rw-r--r--media/libdrm/mobile2/src/util/xml/ExpatWrapper.cpp77
-rw-r--r--media/libdrm/mobile2/src/util/xml/XMLDocumentImpl.cpp55
-rw-r--r--media/libdrm/mobile2/src/util/xml/XMLElementImpl.cpp136
-rw-r--r--media/libmedia/Android.mk39
-rw-r--r--media/libmedia/AudioRecord.cpp555
-rw-r--r--media/libmedia/AudioSystem.cpp383
-rw-r--r--media/libmedia/AudioTrack.cpp1011
-rw-r--r--media/libmedia/IAudioFlinger.cpp553
-rw-r--r--media/libmedia/IAudioFlingerClient.cpp77
-rw-r--r--media/libmedia/IAudioRecord.cpp100
-rw-r--r--media/libmedia/IAudioTrack.cpp140
-rw-r--r--media/libmedia/IMediaMetadataRetriever.cpp218
-rw-r--r--media/libmedia/IMediaPlayer.cpp275
-rw-r--r--media/libmedia/IMediaPlayerClient.cpp77
-rw-r--r--media/libmedia/IMediaPlayerService.cpp198
-rw-r--r--media/libmedia/IMediaRecorder.cpp397
-rw-r--r--media/libmedia/JetPlayer.cpp489
-rw-r--r--media/libmedia/MODULE_LICENSE_APACHE20
-rw-r--r--media/libmedia/NOTICE190
-rw-r--r--media/libmedia/ToneGenerator.cpp730
-rw-r--r--media/libmedia/mediametadataretriever.cpp188
-rw-r--r--media/libmedia/mediaplayer.cpp624
-rw-r--r--media/libmedia/mediarecorder.cpp542
-rw-r--r--media/libmediaplayerservice/Android.mk36
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.cpp1063
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.h238
-rw-r--r--media/libmediaplayerservice/MediaRecorderClient.cpp262
-rw-r--r--media/libmediaplayerservice/MediaRecorderClient.h65
-rw-r--r--media/libmediaplayerservice/MetadataRetrieverClient.cpp250
-rw-r--r--media/libmediaplayerservice/MetadataRetrieverClient.h71
-rw-r--r--media/libmediaplayerservice/MidiFile.cpp558
-rw-r--r--media/libmediaplayerservice/MidiFile.h77
-rw-r--r--media/libmediaplayerservice/VorbisPlayer.cpp529
-rw-r--r--media/libmediaplayerservice/VorbisPlayer.h91
-rw-r--r--media/mediaserver/Android.mk22
-rw-r--r--media/mediaserver/main_mediaserver.cpp45
-rw-r--r--media/sdutils/Android.mk15
-rw-r--r--media/sdutils/sdutil.cpp166
-rw-r--r--media/tests/MediaFrameworkTest/Android.mk12
-rw-r--r--media/tests/MediaFrameworkTest/AndroidManifest.xml51
-rw-r--r--media/tests/MediaFrameworkTest/res/drawable/icon.pngbin6094 -> 0 bytes
-rw-r--r--media/tests/MediaFrameworkTest/res/layout/movie_view.xml57
-rw-r--r--media/tests/MediaFrameworkTest/res/layout/surface_view.xml43
-rw-r--r--media/tests/MediaFrameworkTest/res/raw/shortmp3.mp3bin3736 -> 0 bytes
-rw-r--r--media/tests/MediaFrameworkTest/res/raw/testmidi.midbin38964 -> 0 bytes
-rw-r--r--media/tests/MediaFrameworkTest/res/raw/testmp3.mp3bin249241 -> 0 bytes
-rw-r--r--media/tests/MediaFrameworkTest/res/values/strings.xml5
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkPerfTestRunner.java51
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTest.java149
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java61
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkUnitTestRunner.java91
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java497
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java38
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java260
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java577
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java176
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaMetadataTest.java255
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java433
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java339
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/SimTonesTest.java73
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/TonesAutoTest.java180
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java159
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java198
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaMetadataRetrieverTest.java242
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetCurrentPositionStateUnitTest.java68
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetDurationStateUnitTest.java68
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetVideoHeightStateUnitTest.java68
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetVideoWidthStateUnitTest.java68
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerIsPlayingStateUnitTest.java68
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerMethodUnderTest.java27
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerPauseStateUnitTest.java68
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerResetStateUnitTest.java68
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSeekToStateUnitTest.java68
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetAudioStreamTypeStateUnitTest.java69
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetLoopingStateUnitTest.java65
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetVolumeStateUnitTest.java68
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStartStateUnitTest.java69
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStateErrors.java47
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStateUnitTestTemplate.java506
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStopStateUnitTest.java63
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderMethodUnderTest.java27
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderPrepareStateUnitTest.java71
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderResetStateUnitTest.java66
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetAudioEncoderStateUnitTest.java66
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetAudioSourceStateUnitTest.java66
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetOutputFileStateUnitTest.java63
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetOutputFormatStateUnitTest.java66
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStartStateUnitTest.java66
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStateErrors.java40
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStateUnitTestTemplate.java340
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStopStateUnitTest.java66
287 files changed, 0 insertions, 60598 deletions
diff --git a/media/java/android/drm/mobile1/DrmConstraintInfo.java b/media/java/android/drm/mobile1/DrmConstraintInfo.java
deleted file mode 100644
index 50ae8bd..0000000
--- a/media/java/android/drm/mobile1/DrmConstraintInfo.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.drm.mobile1;
-
-import java.util.Date;
-
-/**
- * This class provides interfaces to access the DRM constraint.
- */
-public class DrmConstraintInfo {
- /**
- * The constraint of count.
- */
- private int count;
-
- /**
- * The constraint of start date.
- */
- private long startDate;
-
- /**
- * The constraint of end date.
- */
- private long endDate;
-
- /**
- * The constraint of interval.
- */
- private long interval;
-
- /**
- * Construct the DrmConstraint.
- */
- DrmConstraintInfo() {
- count = -1;
- startDate = -1;
- endDate = -1;
- interval = -1;
- }
-
- /**
- * Get the count constraint.
- *
- * @return the count or -1 if no limit.
- */
- public int getCount() {
- return count;
- }
-
- /**
- * Get the start date constraint.
- *
- * @return the start date or null if no limit.
- */
- public Date getStartDate() {
- if (startDate == -1)
- return null;
-
- return new Date(startDate);
- }
-
- /**
- * Get the end date constraint.
- *
- * @return the end date or null if no limit.
- */
- public Date getEndDate() {
- if (endDate == -1)
- return null;
-
- return new Date(endDate);
- }
-
- /**
- * Get the Interval constraint.
- *
- * @return the interval or -1 if no limit.
- */
- public long getInterval() {
- return interval;
- }
-}
diff --git a/media/java/android/drm/mobile1/DrmException.java b/media/java/android/drm/mobile1/DrmException.java
deleted file mode 100644
index 7b06c92..0000000
--- a/media/java/android/drm/mobile1/DrmException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.drm.mobile1;
-
-import java.io.IOException;
-
-/**
- * A DrmException is thrown to report errors specific to handle DRM content and rights.
- */
-public class DrmException extends Exception
-{
- // TODO: add more specific DRM error codes.
-
- private DrmException() {
- }
-
- public DrmException(String message) {
- super(message);
- }
-}
diff --git a/media/java/android/drm/mobile1/DrmRawContent.java b/media/java/android/drm/mobile1/DrmRawContent.java
deleted file mode 100644
index 046b84a..0000000
--- a/media/java/android/drm/mobile1/DrmRawContent.java
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.drm.mobile1;
-
-import java.io.*;
-
-/**
- * This class provides interfaces to access the DRM raw content.
- */
-public class DrmRawContent {
- /**
- * The "application/vnd.oma.drm.message" mime type.
- */
- public static final String DRM_MIMETYPE_MESSAGE_STRING = "application/vnd.oma.drm.message";
-
- /**
- * The "application/vnd.oma.drm.content" mime type.
- */
- public static final String DRM_MIMETYPE_CONTENT_STRING = "application/vnd.oma.drm.content";
-
- /**
- * The DRM delivery type: Forward-Lock
- */
- public static final int DRM_FORWARD_LOCK = 1;
-
- /**
- * The DRM delivery type: Combined Delivery
- */
- public static final int DRM_COMBINED_DELIVERY = 2;
-
- /**
- * The DRM delivery type: Separate Delivery
- */
- public static final int DRM_SEPARATE_DELIVERY = 3;
-
- /**
- * The DRM delivery type: Separate Delivery in DRM message
- */
- public static final int DRM_SEPARATE_DELIVERY_DM = 4;
-
- /**
- * The DRM media content length is unknown currently
- */
- public static final int DRM_UNKNOWN_DATA_LEN = -1;
-
-
- /**
- * The id of "application/vnd.oma.drm.message" mime type.
- */
- private static final int DRM_MIMETYPE_MESSAGE = 1;
-
- /**
- * The id of "application/vnd.oma.drm.content" mime type.
- */
- private static final int DRM_MIMETYPE_CONTENT = 2;
-
- /**
- * Successful operation.
- */
- private static final int JNI_DRM_SUCCESS = 0;
-
- /**
- * General failure.
- */
- private static final int JNI_DRM_FAILURE = -1;
-
- /**
- * Indicates the end of the DRM content is reached.
- */
- private static final int JNI_DRM_EOF = -2;
-
- /**
- * The media content length is unknown from native method
- */
- private static final int JNI_DRM_UNKNOWN_DATA_LEN = -3;
-
- /**
- * The member to save the original InputStream data.
- */
- private BufferedInputStream inData;
-
- /**
- * The member to save the original InputStream data length.
- */
- private int inDataLen;
-
- /**
- * The unique id to this DRM content. It will be initialized
- * in constructor by native method. And it will not be changed
- * after initialization.
- */
- private int id;
-
- /**
- * The rights issuer address of this DRM object.
- */
- private String rightsIssuer;
-
- /**
- * The media content type of this DRM object.
- */
- private String mediaType;
-
- /**
- * The delivery method type of this DRM object.
- */
- private int rawType;
-
-
- /**
- * Construct a DrmRawContent object.
- *
- * @param inRawdata object of DRM raw data stream.
- * @param len the length of raw data can be read.
- * @param mimeTypeStr the mime type of the DRM content.
- */
- public DrmRawContent(InputStream inRawdata, int len, String mimeTypeStr) throws DrmException, IOException {
- int mimeType;
-
- id = -1;
- inData = new BufferedInputStream(inRawdata, 1024);
- inDataLen = len;
-
- if (DRM_MIMETYPE_MESSAGE_STRING.equals(mimeTypeStr))
- mimeType = DRM_MIMETYPE_MESSAGE;
- else if (DRM_MIMETYPE_CONTENT_STRING.equals(mimeTypeStr))
- mimeType = DRM_MIMETYPE_CONTENT;
- else
- throw new IllegalArgumentException("mimeType must be DRM_MIMETYPE_MESSAGE or DRM_MIMETYPE_CONTENT");
-
- if (len <= 0)
- throw new IllegalArgumentException("len must be > 0");
-
- /* call native method to initialize this DRM content */
- id = nativeConstructDrmContent(inData, inDataLen, mimeType);
-
- if (JNI_DRM_FAILURE == id)
- throw new DrmException("nativeConstructDrmContent() returned JNI_DRM_FAILURE");
-
- /* init the rights issuer field. */
- rightsIssuer = nativeGetRightsAddress();
-
- /* init the raw content type. */
- rawType = nativeGetDeliveryMethod();
- if (JNI_DRM_FAILURE == rawType)
- throw new DrmException("nativeGetDeliveryMethod() returned JNI_DRM_FAILURE");
-
- /* init the media content type. */
- mediaType = nativeGetContentType();
- if (null == mediaType)
- throw new DrmException("nativeGetContentType() returned null");
- }
-
- /**
- * Get rights address from raw Seperate Delivery content.
- *
- * @return the string of the rights issuer address,
- * or null if no rights issuer.
- */
- public String getRightsAddress() {
- return rightsIssuer;
- }
-
- /**
- * Get the type of the raw DRM content.
- *
- * @return one of the following delivery type of this DRM content:
- * #DRM_FORWARD_LOCK
- * #DRM_COMBINED_DELIVERY
- * #DRM_SEPARATE_DELIVERY
- * #DRM_SEPARATE_DELIVERY_DM
- */
- public int getRawType() {
- return rawType;
- }
-
- /**
- * Get one InputStream object to read decrypted content.
- *
- * @param rights the rights object contain decrypted key.
- *
- * @return the InputStream object of decrypted media content.
- */
- public InputStream getContentInputStream(DrmRights rights) {
- if (null == rights)
- throw new NullPointerException();
-
- return new DrmInputStream(rights);
- }
-
- /**
- * Get the type of the decrypted media content.
- *
- * @return the decrypted media content type of this DRM content.
- */
- public String getContentType() {
- return mediaType;
- }
-
- /**
- * Get the length of the decrypted media content.
- *
- * @param rights the rights object contain decrypted key.
- *
- * @return the length of the decrypted media content.
- * #DRM_UNKNOWN_DATA_LEN if the length is unknown currently.
- */
- public int getContentLength(DrmRights rights) throws DrmException {
- /**
- * Because currently the media object associate with rights object
- * has been handled in native logic, so here it is not need to deal
- * the rights. But for the apps, it is mandatory for user to get
- * the rights object before get the media content length.
- */
- if (null == rights)
- throw new NullPointerException();
-
- int mediaLen = nativeGetContentLength();
-
- if (JNI_DRM_FAILURE == mediaLen)
- throw new DrmException("nativeGetContentLength() returned JNI_DRM_FAILURE");
-
- if (JNI_DRM_UNKNOWN_DATA_LEN == mediaLen)
- return DRM_UNKNOWN_DATA_LEN;
-
- return mediaLen;
- }
-
- /**
- * This class provide a InputStream to the DRM media content.
- */
- class DrmInputStream extends InputStream
- {
- /**
- * The flag to indicate whether this stream is closed or not.
- */
- private boolean isClosed;
-
- /**
- * The offset of this DRM content to be reset.
- */
- private int offset;
-
- /**
- * A byte of data to be readed.
- */
- private byte[] b;
-
- /**
- * Construct a DrmInputStream instance.
- */
- public DrmInputStream(DrmRights rights) {
- /**
- * Because currently the media object associate with rights object
- * has been handled in native logic, so here it is not need to deal
- * the rights. But for the apps, it is mandatory for user to get
- * the rights object before get the media content data.
- */
-
- isClosed = false;
- offset = 0;
- b = new byte[1];
- }
-
- /* Non-javadoc
- * @see java.io.InputStream#available()
- */
- public int available() throws IOException {
- /* call native method to get this DRM decrypted media content length */
- int len = nativeGetContentLength();
-
- if (JNI_DRM_FAILURE == len)
- throw new IOException();
-
- /* if the length is unknown, just return 0 for available value */
- if (JNI_DRM_UNKNOWN_DATA_LEN == len)
- return 0;
-
- int availableLen = len - offset;
- if (availableLen < 0)
- throw new IOException();
-
- return availableLen;
- }
-
- /* Non-javadoc
- * @see java.io.InputStream#read()
- */
- public int read() throws IOException {
- int res;
-
- res = read(b, 0, 1);
-
- if (-1 == res)
- return -1;
-
- return b[0] & 0xff;
- }
-
- /* Non-javadoc
- * @see java.io.InputStream#read(byte)
- */
- public int read(byte[] b) throws IOException {
- return read(b, 0, b.length);
- }
-
- /* Non-javadoc
- * @see java.io.InputStream#read(byte, int, int)
- */
- public int read(byte[] b, int off, int len) throws IOException {
- if (null == b)
- throw new NullPointerException();
- if (off < 0 || len < 0 || off + len > b.length)
- throw new IndexOutOfBoundsException();
- if (true == isClosed)
- throw new IOException();
-
- if (0 == len)
- return 0;
-
- len = nativeReadContent(b, off, len, offset);
-
- if (JNI_DRM_FAILURE == len)
- throw new IOException();
- else if (JNI_DRM_EOF == len)
- return -1;
-
- offset += len;
-
- return len;
- }
-
- /* Non-javadoc
- * @see java.io.InputStream#markSupported()
- */
- public boolean markSupported() {
- return false;
- }
-
- /* Non-javadoc
- * @see java.io.InputStream#mark(int)
- */
- public void mark(int readlimit) {
- }
-
- /* Non-javadoc
- * @see java.io.InputStream#reset()
- */
- public void reset() throws IOException {
- throw new IOException();
- }
-
- /* Non-javadoc
- * @see java.io.InputStream#skip()
- */
- public long skip(long n) throws IOException {
- return 0;
- }
-
- /* Non-javadoc
- * @see java.io.InputStream#close()
- */
- public void close() {
- isClosed = true;
- }
- }
-
- /**
- * native method: construct a DRM content according the mime type.
- *
- * @param data input DRM content data to be parsed.
- * @param len the length of the data.
- * @param mimeType the mime type of this DRM content. the value of this field includes:
- * #DRM_MIMETYPE_MESSAGE
- * #DRM_MIMETYPE_CONTENT
- *
- * @return #the id of the DRM content if succeed.
- * #JNI_DRM_FAILURE if fail.
- */
- private native int nativeConstructDrmContent(InputStream data, int len, int mimeType);
-
- /**
- * native method: get this DRM content rights issuer.
- *
- * @return the address of rights issuer if in case of separate delivery.
- * null if not separete delivery, or otherwise.
- */
- private native String nativeGetRightsAddress();
-
- /**
- * native method: get this DRM content delivery type.
- *
- * @return the delivery method, the value may be one of the following:
- * #DRM_FORWARD_LOCK
- * #DRM_COMBINED_DELIVERY
- * #DRM_SEPARATE_DELIVERY
- * #DRM_SEPARATE_DELIVERY_DM
- * #JNI_DRM_FAILURE if fail.
- */
- private native int nativeGetDeliveryMethod();
-
- /**
- * native method: get a piece of media content data.
- *
- * @param buf the buffer to save DRM media content data.
- * @param bufOff the offset of the buffer to start to save data.
- * @param len the number of byte to read.
- * @param mediaOff the offset of the media content data to start to read.
- *
- * @return the length of the media content data has been read.
- * #JNI_DRM_EOF if reach to end of the media content.
- * #JNI_DRM_FAILURE if fail.
- */
- private native int nativeReadContent(byte[] buf, int bufOff, int len, int mediaOff);
-
- /**
- * native method: get this DRM content type.
- *
- * @return the decrypted media content type.
- * null if fail.
- */
- private native String nativeGetContentType();
-
- /**
- * native method: get this DRM decrypted media content length.
- *
- * @return the length of decrypted media content.
- * #JNI_DRM_FAILURE if fail.
- * #JNI_DRM_UNKNOWN_DATA_LEN if the length is unknown currently.
- */
- private native int nativeGetContentLength();
-
- /**
- * The finalizer of the DRMRawContent. Do some cleanup.
- */
- protected native void finalize();
-
-
- /**
- * Load the shared library to link the native methods.
- */
- static {
- try {
- System.loadLibrary("drm1_jni");
- }
- catch (UnsatisfiedLinkError ule) {
- System.err.println("WARNING: Could not load libdrm1_jni.so");
- }
- }
-}
diff --git a/media/java/android/drm/mobile1/DrmRights.java b/media/java/android/drm/mobile1/DrmRights.java
deleted file mode 100644
index bcccb6a..0000000
--- a/media/java/android/drm/mobile1/DrmRights.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.drm.mobile1;
-
-/**
- * This class provides interfaces to access the DRM rights.
- */
-public class DrmRights {
- /**
- * The DRM permission of play.
- */
- public static final int DRM_PERMISSION_PLAY = 1;
-
- /**
- * The DRM permission of display.
- */
- public static final int DRM_PERMISSION_DISPLAY = 2;
-
- /**
- * The DRM permission of execute.
- */
- public static final int DRM_PERMISSION_EXECUTE = 3;
-
- /**
- * The DRM permission of print.
- */
- public static final int DRM_PERMISSION_PRINT = 4;
-
- /**
- * Successful operation.
- */
- private static final int JNI_DRM_SUCCESS = 0;
-
- /**
- * General failure.
- */
- private static final int JNI_DRM_FAILURE = -1;
-
- /**
- * The uid of this rights object.
- */
- private String roId = "";
-
-
- /**
- * Construct the DrmRights.
- */
- public DrmRights() {
- }
-
- /**
- * Get the constraint of the given permission on this rights object.
- *
- * @param permission the given permission.
- *
- * @return a DrmConstraint instance.
- */
- public DrmConstraintInfo getConstraint(int permission) {
- DrmConstraintInfo c = new DrmConstraintInfo();
-
- /* call native method to get latest constraint information */
- int res = nativeGetConstraintInfo(permission, c);
-
- if (JNI_DRM_FAILURE == res)
- return null;
-
- return c;
- }
-
- /**
- * Consume the rights of the given permission.
- *
- * @param permission the given permission.
- *
- * @return true if consume success.
- * false if consume failure.
- */
- public boolean consumeRights(int permission) {
- /* call native method to consume and update rights */
- int res = nativeConsumeRights(permission);
-
- if (JNI_DRM_FAILURE == res)
- return false;
-
- return true;
- }
-
-
- /**
- * native method: get the constraint information of the given permission.
- *
- * @param permission the given permission.
- * @param constraint the instance of constraint.
- *
- * @return #JNI_DRM_SUCCESS if succeed.
- * #JNI_DRM_FAILURE if fail.
- */
- private native int nativeGetConstraintInfo(int permission, DrmConstraintInfo constraint);
-
- /**
- * native method: consume the rights of the given permission.
- *
- * @param permission the given permission.
- *
- * @return #JNI_DRM_SUCCESS if succeed.
- * #JNI_DRM_FAILURE if fail.
- */
- private native int nativeConsumeRights(int permission);
-
-
- /**
- * Load the shared library to link the native methods.
- */
- static {
- try {
- System.loadLibrary("drm1_jni");
- }
- catch (UnsatisfiedLinkError ule) {
- System.err.println("WARNING: Could not load libdrm1_jni.so");
- }
- }
-}
diff --git a/media/java/android/drm/mobile1/DrmRightsManager.java b/media/java/android/drm/mobile1/DrmRightsManager.java
deleted file mode 100644
index 1bc36ec..0000000
--- a/media/java/android/drm/mobile1/DrmRightsManager.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.drm.mobile1;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * This class provides interfaces to access the DRM right manager.
- */
-public class DrmRightsManager {
- /**
- * The "application/vnd.oma.drm.rights+xml" mime type.
- */
- public static final String DRM_MIMETYPE_RIGHTS_XML_STRING = "application/vnd.oma.drm.rights+xml";
-
- /**
- * The "application/vnd.oma.drm.rights+wbxml" mime type.
- */
- public static final String DRM_MIMETYPE_RIGHTS_WBXML_STRING = "application/vnd.oma.drm.rights+wbxml";
-
- /**
- * The id of "application/vnd.oma.drm.rights+xml" mime type.
- */
- private static final int DRM_MIMETYPE_RIGHTS_XML = 3;
-
- /**
- * The id of "application/vnd.oma.drm.rights+wbxml" mime type.
- */
- private static final int DRM_MIMETYPE_RIGHTS_WBXML = 4;
-
- /**
- * The id of "application/vnd.oma.drm.message" mime type.
- */
- private static final int DRM_MIMETYPE_MESSAGE = 1;
-
- /**
- * Successful operation.
- */
- private static final int JNI_DRM_SUCCESS = 0;
-
- /**
- * General failure.
- */
- private static final int JNI_DRM_FAILURE = -1;
-
- /**
- * The instance of the rights manager.
- */
- private static DrmRightsManager singleton = null;
-
-
- /**
- * Construct a DrmRightsManager
- */
- protected DrmRightsManager() {
- }
-
- /**
- * Get the DrmRightsManager instance.
- *
- * @return the instance of DrmRightsManager.
- */
- public static synchronized DrmRightsManager getInstance() {
- if (singleton == null) {
- singleton = new DrmRightsManager();
- }
-
- return singleton;
- }
-
- /**
- * Install one DRM rights and return one instance of DrmRights.
- *
- * @param rightsData raw rights data.
- * @param mimeTypeStr the mime type of the rights object.
- *
- * @return the instance of the installed DrmRights.
- */
- public synchronized DrmRights installRights(InputStream rightsData, int len, String mimeTypeStr) throws DrmException, IOException {
- int mimeType = 0;
-
- if (DRM_MIMETYPE_RIGHTS_XML_STRING.equals(mimeTypeStr))
- mimeType = DRM_MIMETYPE_RIGHTS_XML;
- else if (DRM_MIMETYPE_RIGHTS_WBXML_STRING.equals(mimeTypeStr))
- mimeType = DRM_MIMETYPE_RIGHTS_WBXML;
- else if (DrmRawContent.DRM_MIMETYPE_MESSAGE_STRING.equals(mimeTypeStr))
- mimeType = DRM_MIMETYPE_MESSAGE;
- else
- throw new IllegalArgumentException("mimeType must be DRM_MIMETYPE_RIGHTS_XML or DRM_MIMETYPE_RIGHTS_WBXML or DRM_MIMETYPE_MESSAGE");
-
- if (len <= 0)
- return null;
-
- DrmRights rights = new DrmRights();
-
- /* call native method to install this rights object. */
- int res = nativeInstallDrmRights(rightsData, len, mimeType, rights);
-
- if (JNI_DRM_FAILURE == res)
- throw new DrmException("nativeInstallDrmRights() returned JNI_DRM_FAILURE");
-
- return rights;
- }
-
- /**
- * Query DRM rights of specified DRM raw content.
- *
- * @param content raw content object.
- *
- * @return the instance of DrmRights, or null if there is no rights.
- */
- public synchronized DrmRights queryRights(DrmRawContent content) {
- DrmRights rights = new DrmRights();
-
- /* call native method to query the rights */
- int res = nativeQueryRights(content, rights);
-
- if (JNI_DRM_FAILURE == res)
- return null;
-
- return rights;
- }
-
- /**
- * Get the list of all DRM rights saved in local client.
- *
- * @return the list of all the rights object.
- */
- public synchronized List getRightsList() {
- List rightsList = new ArrayList();
-
- /* call native method to get how many rights object in current agent */
- int num = nativeGetNumOfRights();
-
- if (JNI_DRM_FAILURE == num)
- return null;
-
- if (num > 0) {
- DrmRights[] rightsArray = new DrmRights[num];
- int i;
-
- for (i = 0; i < num; i++)
- rightsArray[i] = new DrmRights();
-
- /* call native method to get all the rights information */
- num = nativeGetRightsList(rightsArray, num);
-
- if (JNI_DRM_FAILURE == num)
- return null;
-
- /* add all rights informations to ArrayList */
- for (i = 0; i < num; i++)
- rightsList.add(rightsArray[i]);
- }
-
- return rightsList;
- }
-
- /**
- * Delete the specified DRM rights object.
- *
- * @param rights the specified rights object to be deleted.
- */
- public synchronized void deleteRights(DrmRights rights) {
- /* call native method to delete the specified rights object */
- int res = nativeDeleteRights(rights);
-
- if (JNI_DRM_FAILURE == res)
- return;
- }
-
-
- /**
- * native method: install rights object to local client.
- *
- * @param data input DRM rights object data to be installed.
- * @param len the length of the data.
- * @param mimeType the mime type of this DRM rights object. the value of this field includes:
- * #DRM_MIMETYPE_RIGHTS_XML
- * #DRM_MIMETYPE_RIGHTS_WBXML
- * @parma rights the instance of DRMRights to be filled.
- *
- * @return #JNI_DRM_SUCCESS if succeed.
- * #JNI_DRM_FAILURE if fail.
- */
- private native int nativeInstallDrmRights(InputStream data, int len, int mimeType, DrmRights rights);
-
- /**
- * native method: query the given DRM content's rights object.
- *
- * @param content the given DRM content.
- * @param rights the instance of rights to set if have.
- *
- * @return #JNI_DRM_SUCCESS if succeed.
- * #JNI_DRM_FAILURE if fail.
- */
- private native int nativeQueryRights(DrmRawContent content, DrmRights rights);
-
- /**
- * native method: get how many rights object in current DRM agent.
- *
- * @return the number of the rights object.
- * #JNI_DRM_FAILURE if fail.
- */
- private native int nativeGetNumOfRights();
-
- /**
- * native method: get all the rights object in current local agent.
- *
- * @param rights the array instance of rights object.
- * @param numRights how many rights can be saved.
- *
- * @return the number of the rights object has been gotten.
- * #JNI_DRM_FAILURE if fail.
- */
- private native int nativeGetRightsList(DrmRights[] rights, int numRights);
-
- /**
- * native method: delete a specified rights object.
- *
- * @param rights the specified rights object to be deleted.
- *
- * @return #JNI_DRM_SUCCESS if succeed.
- * #JNI_DRM_FAILURE if fail.
- */
- private native int nativeDeleteRights(DrmRights rights);
-
-
- /**
- * Load the shared library to link the native methods.
- */
- static {
- try {
- System.loadLibrary("drm1_jni");
- }
- catch (UnsatisfiedLinkError ule) {
- System.err.println("WARNING: Could not load libdrm1_jni.so");
- }
- }
-}
diff --git a/media/java/android/drm/mobile1/package.html b/media/java/android/drm/mobile1/package.html
deleted file mode 100644
index 1c9bf9d..0000000
--- a/media/java/android/drm/mobile1/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-<body>
- {@hide}
-</body>
-</html>
diff --git a/media/java/android/media/AmrInputStream.java b/media/java/android/media/AmrInputStream.java
deleted file mode 100644
index d40ca5a..0000000
--- a/media/java/android/media/AmrInputStream.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.util.Config;
-import android.util.Log;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-
-/**
- * AmrInputStream
- * @hide
- */
-public final class AmrInputStream extends InputStream
-{
- static {
- System.loadLibrary("media_jni");
- }
-
- private final static String TAG = "AmrInputStream";
-
- // frame is 20 msec at 8.000 khz
- private final static int SAMPLES_PER_FRAME = 8000 * 20 / 1000;
-
- // pcm input stream
- private InputStream mInputStream;
-
- // native handle
- private int mGae;
-
- // result amr stream
- private byte[] mBuf = new byte[SAMPLES_PER_FRAME * 2];
- private int mBufIn = 0;
- private int mBufOut = 0;
-
- // helper for bytewise read()
- private byte[] mOneByte = new byte[1];
-
- /**
- * Create a new AmrInputStream, which converts 16 bit PCM to AMR
- * @param inputStream InputStream containing 16 bit PCM.
- */
- public AmrInputStream(InputStream inputStream) {
- mInputStream = inputStream;
- mGae = GsmAmrEncoderNew();
- GsmAmrEncoderInitialize(mGae);
- }
-
- @Override
- public int read() throws IOException {
- int rtn = read(mOneByte, 0, 1);
- return rtn == 1 ? (0xff & mOneByte[0]) : -1;
- }
-
- @Override
- public int read(byte[] b) throws IOException {
- return read(b, 0, b.length);
- }
-
- @Override
- public int read(byte[] b, int offset, int length) throws IOException {
- if (mGae == 0) throw new IllegalStateException("not open");
-
- // local buffer of amr encoded audio empty
- if (mBufOut >= mBufIn) {
- // reset the buffer
- mBufOut = 0;
- mBufIn = 0;
-
- // fetch a 20 msec frame of pcm
- for (int i = 0; i < SAMPLES_PER_FRAME * 2; ) {
- int n = mInputStream.read(mBuf, i, SAMPLES_PER_FRAME * 2 - i);
- if (n == -1) return -1;
- i += n;
- }
-
- // encode it
- mBufIn = GsmAmrEncoderEncode(mGae, mBuf, 0, mBuf, 0);
- }
-
- // return encoded audio to user
- if (length > mBufIn - mBufOut) length = mBufIn - mBufOut;
- System.arraycopy(mBuf, mBufOut, b, offset, length);
- mBufOut += length;
-
- return length;
- }
-
- @Override
- public void close() throws IOException {
- try {
- if (mInputStream != null) mInputStream.close();
- } finally {
- mInputStream = null;
- try {
- if (mGae != 0) GsmAmrEncoderCleanup(mGae);
- } finally {
- try {
- if (mGae != 0) GsmAmrEncoderDelete(mGae);
- } finally {
- mGae = 0;
- }
- }
- }
- }
-
- @Override
- protected void finalize() throws Throwable {
- if (mGae != 0) {
- close();
- throw new IllegalStateException("someone forgot to close AmrInputStream");
- }
- }
-
- //
- // AudioRecord JNI interface
- //
- private static native int GsmAmrEncoderNew();
- private static native void GsmAmrEncoderInitialize(int gae);
- private static native int GsmAmrEncoderEncode(int gae,
- byte[] pcm, int pcmOffset, byte[] amr, int amrOffset) throws IOException;
- private static native void GsmAmrEncoderCleanup(int gae);
- private static native void GsmAmrEncoderDelete(int gae);
-
-}
diff --git a/media/java/android/media/AsyncPlayer.java b/media/java/android/media/AsyncPlayer.java
deleted file mode 100644
index 35f0409..0000000
--- a/media/java/android/media/AsyncPlayer.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.content.Context;
-import android.net.Uri;
-import android.os.PowerManager;
-import android.util.Log;
-
-import java.io.IOException;
-import java.lang.IllegalStateException;
-
-/**
- * Plays a series of audio URIs, but does all the hard work on another thread
- * so that any slowness with preparing or loading doesn't block the calling thread.
- */
-public class AsyncPlayer {
- private static final int PLAY = 1;
- private static final int STOP = 2;
-
- private static final class Command {
- Command next;
- int code;
- Context context;
- Uri uri;
- boolean looping;
- int stream;
-
- public String toString() {
- return "{ code=" + code + " looping=" + looping + " stream=" + stream
- + " uri=" + uri + " }";
- }
- }
-
- private final class Thread extends java.lang.Thread {
- Thread() {
- super("AsyncPlayer-" + mTag);
- }
-
- public void run() {
- while (true) {
- Command cmd = null;
-
- synchronized (mLock) {
- if (mHead != null) {
- cmd = mHead;
- mHead = cmd.next;
- if (mTail == cmd) {
- mTail = null;
- }
- }
- }
-
- switch (cmd.code) {
- case PLAY:
- try {
- // Preparing can be slow, so if there is something else
- // is playing, let it continue until we're done, so there
- // is less of a glitch.
- MediaPlayer player = new MediaPlayer();
- player.setAudioStreamType(cmd.stream);
- player.setDataSource(cmd.context, cmd.uri);
- player.setLooping(cmd.looping);
- player.prepare();
- player.start();
- if (mPlayer != null) {
- mPlayer.release();
- }
- mPlayer = player;
- }
- catch (IOException e) {
- Log.w(mTag, "error loading sound for " + cmd.uri, e);
- } catch (IllegalStateException e) {
- Log.w(mTag, "IllegalStateException (content provider died?) " + cmd.uri, e);
- }
- break;
- case STOP:
- if (mPlayer != null) {
- mPlayer.stop();
- mPlayer.release();
- mPlayer = null;
- } else {
- Log.w(mTag, "STOP command without a player");
- }
- break;
- }
-
- synchronized (mLock) {
- if (mHead == null) {
- // nothing left to do, quit
- // doing this check after we're done prevents the case where they
- // added it during the operation from spawning two threads and
- // trying to do them in parallel.
- mThread = null;
- releaseWakeLock();
- return;
- }
- }
- }
- }
- }
-
- private String mTag;
- private Command mHead;
- private Command mTail;
- private Thread mThread;
- private MediaPlayer mPlayer;
- private Object mLock = new Object();
- private PowerManager.WakeLock mWakeLock;
-
- // The current state according to the caller. Reality lags behind
- // because of the asynchronous nature of this class.
- private int mState = STOP;
-
- /**
- * Construct an AsyncPlayer object.
- *
- * @param tag a string to use for debugging
- */
- public AsyncPlayer(String tag) {
- if (tag != null) {
- mTag = tag;
- } else {
- mTag = "AsyncPlayer";
- }
- }
-
- /**
- * Start playing the sound. It will actually start playing at some
- * point in the future. There are no guarantees about latency here.
- * Calling this before another audio file is done playing will stop
- * that one and start the new one.
- *
- * @param context Your application's context.
- * @param uri The URI to play. (see {@link MediaPlayer#setDataSource(Context, Uri)})
- * @param looping Whether the audio should loop forever.
- * (see {@link MediaPlayer#setLooping(boolean)})
- * @param stream the AudioStream to use.
- * (see {@link MediaPlayer#setAudioStreamType(int)})
- */
- public void play(Context context, Uri uri, boolean looping, int stream) {
- Command cmd = new Command();
- cmd.code = PLAY;
- cmd.context = context;
- cmd.uri = uri;
- cmd.looping = looping;
- cmd.stream = stream;
- synchronized (mLock) {
- enqueueLocked(cmd);
- mState = PLAY;
- }
- }
-
- /**
- * Stop a previously played sound. It can't be played again or unpaused
- * at this point. Calling this multiple times has no ill effects.
- */
- public void stop() {
- synchronized (mLock) {
- // This check allows stop to be called multiple times without starting
- // a thread that ends up doing nothing.
- if (mState != STOP) {
- Command cmd = new Command();
- cmd.code = STOP;
- enqueueLocked(cmd);
- mState = STOP;
- }
- }
- }
-
- private void enqueueLocked(Command cmd) {
- if (mTail == null) {
- mHead = cmd;
- } else {
- mTail.next = cmd;
- }
- mTail = cmd;
- if (mThread == null) {
- acquireWakeLock();
- mThread = new Thread();
- mThread.start();
- }
- }
-
- /**
- * We want to hold a wake lock while we do the prepare and play. The stop probably is
- * optional, but it won't hurt to have it too. The problem is that if you start a sound
- * while you're holding a wake lock (e.g. an alarm starting a notification), you want the
- * sound to play, but if the CPU turns off before mThread gets to work, it won't. The
- * simplest way to deal with this is to make it so there is a wake lock held while the
- * thread is starting or running. You're going to need the WAKE_LOCK permission if you're
- * going to call this.
- *
- * This must be called before the first time play is called.
- *
- * @hide
- */
- public void setUsesWakeLock(Context context) {
- if (mWakeLock != null || mThread != null) {
- // if either of these has happened, we've already played something.
- // and our releases will be out of sync.
- throw new RuntimeException("assertion failed mWakeLock=" + mWakeLock
- + " mThread=" + mThread);
- }
- PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
- mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, mTag);
- }
-
- private void acquireWakeLock() {
- if (mWakeLock != null) {
- mWakeLock.acquire();
- }
- }
-
- private void releaseWakeLock() {
- if (mWakeLock != null) {
- mWakeLock.release();
- }
- }
-}
-
diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java
deleted file mode 100644
index 0732b61..0000000
--- a/media/java/android/media/AudioFormat.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-/**
- * The AudioFormat class is used to access a number of audio format and
- * channel configuration constants. They are for instance used
- * in __link AudioTrack} and __link AudioRecord}.
- *
- */
-public class AudioFormat {
-
- //---------------------------------------------------------
- // Constants
- //--------------------
- /** Invalid audio data format */
- public static final int ENCODING_INVALID = 0;
- /** Default audio data format */
- public static final int ENCODING_DEFAULT = 1;
- /** Audio data format: PCM 16 bit per sample */
- public static final int ENCODING_PCM_16BIT = 2; // accessed by native code
- /** Audio data format: PCM 8 bit per sample */
- public static final int ENCODING_PCM_8BIT = 3; // accessed by native code
-
- /** Invalid audio channel configuration */
- public static final int CHANNEL_CONFIGURATION_INVALID = 0;
- /** Default audio channel configuration */
- public static final int CHANNEL_CONFIGURATION_DEFAULT = 1;
- /** Mono audio configuration */
- public static final int CHANNEL_CONFIGURATION_MONO = 2;
- /** Stereo (2 channel) audio configuration */
- public static final int CHANNEL_CONFIGURATION_STEREO = 3;
-
-}
-
-
-
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
deleted file mode 100644
index 077d016..0000000
--- a/media/java/android/media/AudioManager.java
+++ /dev/null
@@ -1,1086 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.annotation.SdkConstant;
-import android.annotation.SdkConstant.SdkConstantType;
-import android.content.Context;
-import android.database.ContentObserver;
-import android.os.Binder;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.provider.Settings;
-import android.util.Log;
-
-/**
- * AudioManager provides access to volume and ringer mode control.
- * <p>
- * Use <code>Context.getSystemService(Context.AUDIO_SERVICE)</code> to get
- * an instance of this class.
- */
-public class AudioManager {
-
- private final Context mContext;
- private final Handler mHandler;
-
- // used to listen for updates to the sound effects settings so we don't
- // poll it for every UI sound
- private ContentObserver mContentObserver;
-
-
- private static String TAG = "AudioManager";
- private static boolean DEBUG = false;
- private static boolean localLOGV = DEBUG || android.util.Config.LOGV;
-
- /**
- * Broadcast intent, a hint for applications that audio is about to become
- * 'noisy' due to a change in audio outputs. For example, this intent may
- * be sent when a wired headset is unplugged, or when an A2DP audio
- * sink is disconnected, and the audio system is about to automatically
- * switch audio route to the speaker. Applications that are controlling
- * audio streams may consider pausing, reducing volume or some other action
- * on receipt of this intent so as not to surprise the user with audio
- * from the speaker.
- */
- @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
- public static final String ACTION_AUDIO_BECOMING_NOISY = "android.media.AUDIO_BECOMING_NOISY";
-
- /**
- * Sticky broadcast intent action indicating that the ringer mode has
- * changed. Includes the new ringer mode.
- *
- * @see #EXTRA_RINGER_MODE
- */
- @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
- public static final String RINGER_MODE_CHANGED_ACTION = "android.media.RINGER_MODE_CHANGED";
-
- /**
- * The new ringer mode.
- *
- * @see #RINGER_MODE_CHANGED_ACTION
- * @see #RINGER_MODE_NORMAL
- * @see #RINGER_MODE_SILENT
- * @see #RINGER_MODE_VIBRATE
- */
- public static final String EXTRA_RINGER_MODE = "android.media.EXTRA_RINGER_MODE";
-
- /**
- * Broadcast intent action indicating that the vibrate setting has
- * changed. Includes the vibrate type and its new setting.
- *
- * @see #EXTRA_VIBRATE_TYPE
- * @see #EXTRA_VIBRATE_SETTING
- */
- @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
- public static final String VIBRATE_SETTING_CHANGED_ACTION = "android.media.VIBRATE_SETTING_CHANGED";
-
- /**
- * @hide Broadcast intent when the volume for a particular stream type changes.
- * Includes the stream and the new volume
- *
- * @see #EXTRA_VOLUME_STREAM_TYPE
- * @see #EXTRA_VOLUME_STREAM_VALUE
- */
- @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
- public static final String VOLUME_CHANGED_ACTION = "android.media.VOLUME_CHANGED_ACTION";
-
- /**
- * The new vibrate setting for a particular type.
- *
- * @see #VIBRATE_SETTING_CHANGED_ACTION
- * @see #EXTRA_VIBRATE_TYPE
- * @see #VIBRATE_SETTING_ON
- * @see #VIBRATE_SETTING_OFF
- * @see #VIBRATE_SETTING_ONLY_SILENT
- */
- public static final String EXTRA_VIBRATE_SETTING = "android.media.EXTRA_VIBRATE_SETTING";
-
- /**
- * The vibrate type whose setting has changed.
- *
- * @see #VIBRATE_SETTING_CHANGED_ACTION
- * @see #VIBRATE_TYPE_NOTIFICATION
- * @see #VIBRATE_TYPE_RINGER
- */
- public static final String EXTRA_VIBRATE_TYPE = "android.media.EXTRA_VIBRATE_TYPE";
-
- /**
- * @hide The stream type for the volume changed intent.
- */
- public static final String EXTRA_VOLUME_STREAM_TYPE = "android.media.EXTRA_VOLUME_STREAM_TYPE";
-
- /**
- * @hide The volume associated with the stream for the volume changed intent.
- */
- public static final String EXTRA_VOLUME_STREAM_VALUE =
- "android.media.EXTRA_VOLUME_STREAM_VALUE";
-
- /** The audio stream for phone calls */
- public static final int STREAM_VOICE_CALL = AudioSystem.STREAM_VOICE_CALL;
- /** The audio stream for system sounds */
- public static final int STREAM_SYSTEM = AudioSystem.STREAM_SYSTEM;
- /** The audio stream for the phone ring */
- public static final int STREAM_RING = AudioSystem.STREAM_RING;
- /** The audio stream for music playback */
- public static final int STREAM_MUSIC = AudioSystem.STREAM_MUSIC;
- /** The audio stream for alarms */
- public static final int STREAM_ALARM = AudioSystem.STREAM_ALARM;
- /** The audio stream for notifications */
- public static final int STREAM_NOTIFICATION = AudioSystem.STREAM_NOTIFICATION;
- /** @hide The audio stream for phone calls when connected to bluetooth */
- public static final int STREAM_BLUETOOTH_SCO = AudioSystem.STREAM_BLUETOOTH_SCO;
- /** Number of audio streams */
- /**
- * @deprecated Use AudioSystem.getNumStreamTypes() instead
- */
- public static final int NUM_STREAMS = AudioSystem.NUM_STREAMS;
-
-
- /** @hide Maximum volume index values for audio streams */
- public static final int[] MAX_STREAM_VOLUME = new int[] {
- 6, // STREAM_VOICE_CALL
- 8, // STREAM_SYSTEM
- 8, // STREAM_RING
- 16, // STREAM_MUSIC
- 8, // STREAM_ALARM
- 8, // STREAM_NOTIFICATION
- 15, // STREAM_BLUETOOTH_SCO
- };
-
- /** @hide Default volume index values for audio streams */
- public static final int[] DEFAULT_STREAM_VOLUME = new int[] {
- 4, // STREAM_VOICE_CALL
- 5, // STREAM_SYSTEM
- 5, // STREAM_RING
- 11, // STREAM_MUSIC
- 6, // STREAM_ALARM
- 5, // STREAM_NOTIFICATION
- 7 // STREAM_BLUETOOTH_SCO
- };
-
- /**
- * Increase the ringer volume.
- *
- * @see #adjustVolume(int, int)
- * @see #adjustStreamVolume(int, int, int)
- */
- public static final int ADJUST_RAISE = 1;
-
- /**
- * Decrease the ringer volume.
- *
- * @see #adjustVolume(int, int)
- * @see #adjustStreamVolume(int, int, int)
- */
- public static final int ADJUST_LOWER = -1;
-
- /**
- * Maintain the previous ringer volume. This may be useful when needing to
- * show the volume toast without actually modifying the volume.
- *
- * @see #adjustVolume(int, int)
- * @see #adjustStreamVolume(int, int, int)
- */
- public static final int ADJUST_SAME = 0;
-
- // Flags should be powers of 2!
-
- /**
- * Show a toast containing the current volume.
- *
- * @see #adjustStreamVolume(int, int, int)
- * @see #adjustVolume(int, int)
- * @see #setStreamVolume(int, int, int)
- * @see #setRingerMode(int)
- */
- public static final int FLAG_SHOW_UI = 1 << 0;
-
- /**
- * Whether to include ringer modes as possible options when changing volume.
- * For example, if true and volume level is 0 and the volume is adjusted
- * with {@link #ADJUST_LOWER}, then the ringer mode may switch the silent or
- * vibrate mode.
- * <p>
- * By default this is on for the ring stream. If this flag is included,
- * this behavior will be present regardless of the stream type being
- * affected by the ringer mode.
- *
- * @see #adjustVolume(int, int)
- * @see #adjustStreamVolume(int, int, int)
- */
- public static final int FLAG_ALLOW_RINGER_MODES = 1 << 1;
-
- /**
- * Whether to play a sound when changing the volume.
- * <p>
- * If this is given to {@link #adjustVolume(int, int)} or
- * {@link #adjustSuggestedStreamVolume(int, int, int)}, it may be ignored
- * in some cases (for example, the decided stream type is not
- * {@link AudioManager#STREAM_RING}, or the volume is being adjusted
- * downward).
- *
- * @see #adjustStreamVolume(int, int, int)
- * @see #adjustVolume(int, int)
- * @see #setStreamVolume(int, int, int)
- */
- public static final int FLAG_PLAY_SOUND = 1 << 2;
-
- /**
- * Removes any sounds/vibrate that may be in the queue, or are playing (related to
- * changing volume).
- */
- public static final int FLAG_REMOVE_SOUND_AND_VIBRATE = 1 << 3;
-
- /**
- * Whether to vibrate if going into the vibrate ringer mode.
- */
- public static final int FLAG_VIBRATE = 1 << 4;
-
- /**
- * Ringer mode that will be silent and will not vibrate. (This overrides the
- * vibrate setting.)
- *
- * @see #setRingerMode(int)
- * @see #getRingerMode()
- */
- public static final int RINGER_MODE_SILENT = 0;
-
- /**
- * Ringer mode that will be silent and will vibrate. (This will cause the
- * phone ringer to always vibrate, but the notification vibrate to only
- * vibrate if set.)
- *
- * @see #setRingerMode(int)
- * @see #getRingerMode()
- */
- public static final int RINGER_MODE_VIBRATE = 1;
-
- /**
- * Ringer mode that may be audible and may vibrate. It will be audible if
- * the volume before changing out of this mode was audible. It will vibrate
- * if the vibrate setting is on.
- *
- * @see #setRingerMode(int)
- * @see #getRingerMode()
- */
- public static final int RINGER_MODE_NORMAL = 2;
-
- /**
- * Vibrate type that corresponds to the ringer.
- *
- * @see #setVibrateSetting(int, int)
- * @see #getVibrateSetting(int)
- * @see #shouldVibrate(int)
- */
- public static final int VIBRATE_TYPE_RINGER = 0;
-
- /**
- * Vibrate type that corresponds to notifications.
- *
- * @see #setVibrateSetting(int, int)
- * @see #getVibrateSetting(int)
- * @see #shouldVibrate(int)
- */
- public static final int VIBRATE_TYPE_NOTIFICATION = 1;
-
- /**
- * Vibrate setting that suggests to never vibrate.
- *
- * @see #setVibrateSetting(int, int)
- * @see #getVibrateSetting(int)
- */
- public static final int VIBRATE_SETTING_OFF = 0;
-
- /**
- * Vibrate setting that suggests to vibrate when possible.
- *
- * @see #setVibrateSetting(int, int)
- * @see #getVibrateSetting(int)
- */
- public static final int VIBRATE_SETTING_ON = 1;
-
- /**
- * Vibrate setting that suggests to only vibrate when in the vibrate ringer
- * mode.
- *
- * @see #setVibrateSetting(int, int)
- * @see #getVibrateSetting(int)
- */
- public static final int VIBRATE_SETTING_ONLY_SILENT = 2;
-
- /**
- * Suggests using the default stream type. This may not be used in all
- * places a stream type is needed.
- */
- public static final int USE_DEFAULT_STREAM_TYPE = Integer.MIN_VALUE;
-
- private static IAudioService sService;
-
- /**
- * @hide
- */
- public AudioManager(Context context) {
- mContext = context;
- mHandler = new Handler(context.getMainLooper());
- }
-
- private static IAudioService getService()
- {
- if (sService != null) {
- return sService;
- }
- IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE);
- sService = IAudioService.Stub.asInterface(b);
- return sService;
- }
-
- /**
- * Adjusts the volume of a particular stream by one step in a direction.
- *
- * @param streamType The stream type to adjust. One of {@link #STREAM_VOICE_CALL},
- * {@link #STREAM_SYSTEM}, {@link #STREAM_RING}, {@link #STREAM_MUSIC} or
- * {@link #STREAM_ALARM}
- * @param direction The direction to adjust the volume. One of
- * {@link #ADJUST_LOWER}, {@link #ADJUST_RAISE}, or
- * {@link #ADJUST_SAME}.
- * @param flags One or more flags.
- * @see #adjustVolume(int, int)
- * @see #setStreamVolume(int, int, int)
- */
- public void adjustStreamVolume(int streamType, int direction, int flags) {
- IAudioService service = getService();
- try {
- service.adjustStreamVolume(streamType, direction, flags);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in adjustStreamVolume", e);
- }
- }
-
- /**
- * Adjusts the volume of the most relevant stream. For example, if a call is
- * active, it will have the highest priority regardless of if the in-call
- * screen is showing. Another example, if music is playing in the background
- * and a call is not active, the music stream will be adjusted.
- *
- * @param direction The direction to adjust the volume. One of
- * {@link #ADJUST_LOWER}, {@link #ADJUST_RAISE}, or
- * {@link #ADJUST_SAME}.
- * @param flags One or more flags.
- * @see #adjustSuggestedStreamVolume(int, int, int)
- * @see #adjustStreamVolume(int, int, int)
- * @see #setStreamVolume(int, int, int)
- */
- public void adjustVolume(int direction, int flags) {
- IAudioService service = getService();
- try {
- service.adjustVolume(direction, flags);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in adjustVolume", e);
- }
- }
-
- /**
- * Adjusts the volume of the most relevant stream, or the given fallback
- * stream.
- *
- * @param direction The direction to adjust the volume. One of
- * {@link #ADJUST_LOWER}, {@link #ADJUST_RAISE}, or
- * {@link #ADJUST_SAME}.
- * @param suggestedStreamType The stream type that will be used if there
- * isn't a relevant stream. {@link #USE_DEFAULT_STREAM_TYPE} is valid here.
- * @param flags One or more flags.
- * @see #adjustVolume(int, int)
- * @see #adjustStreamVolume(int, int, int)
- * @see #setStreamVolume(int, int, int)
- */
- public void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags) {
- IAudioService service = getService();
- try {
- service.adjustSuggestedStreamVolume(direction, suggestedStreamType, flags);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in adjustVolume", e);
- }
- }
-
- /**
- * Returns the current ringtone mode.
- *
- * @return The current ringtone mode, one of {@link #RINGER_MODE_NORMAL},
- * {@link #RINGER_MODE_SILENT}, or {@link #RINGER_MODE_VIBRATE}.
- * @see #setRingerMode(int)
- */
- public int getRingerMode() {
- IAudioService service = getService();
- try {
- return service.getRingerMode();
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in getRingerMode", e);
- return RINGER_MODE_NORMAL;
- }
- }
-
- /**
- * Returns the maximum volume index for a particular stream.
- *
- * @param streamType The stream type whose maximum volume index is returned.
- * @return The maximum valid volume index for the stream.
- * @see #getStreamVolume(int)
- */
- public int getStreamMaxVolume(int streamType) {
- IAudioService service = getService();
- try {
- return service.getStreamMaxVolume(streamType);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in getStreamMaxVolume", e);
- return 0;
- }
- }
-
- /**
- * Returns the current volume index for a particular stream.
- *
- * @param streamType The stream type whose volume index is returned.
- * @return The current volume index for the stream.
- * @see #getStreamMaxVolume(int)
- * @see #setStreamVolume(int, int, int)
- */
- public int getStreamVolume(int streamType) {
- IAudioService service = getService();
- try {
- return service.getStreamVolume(streamType);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in getStreamVolume", e);
- return 0;
- }
- }
-
- /**
- * Sets the ringer mode.
- * <p>
- * Silent mode will mute the volume and will not vibrate. Vibrate mode will
- * mute the volume and vibrate. Normal mode will be audible and may vibrate
- * according to user settings.
- *
- * @param ringerMode The ringer mode, one of {@link #RINGER_MODE_NORMAL},
- * {@link #RINGER_MODE_SILENT}, or {@link #RINGER_MODE_VIBRATE}.
- * @see #getRingerMode()
- */
- public void setRingerMode(int ringerMode) {
- IAudioService service = getService();
- try {
- service.setRingerMode(ringerMode);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in setRingerMode", e);
- }
- }
-
- /**
- * Sets the volume index for a particular stream.
- *
- * @param streamType The stream whose volume index should be set.
- * @param index The volume index to set. See
- * {@link #getStreamMaxVolume(int)} for the largest valid value.
- * @param flags One or more flags.
- * @see #getStreamMaxVolume(int)
- * @see #getStreamVolume(int)
- */
- public void setStreamVolume(int streamType, int index, int flags) {
- IAudioService service = getService();
- try {
- service.setStreamVolume(streamType, index, flags);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in setStreamVolume", e);
- }
- }
-
- /**
- * Solo or unsolo a particular stream. All other streams are muted.
- * <p>
- * The solo command is protected against client process death: if a process
- * with an active solo request on a stream dies, all streams that were muted
- * because of this request will be unmuted automatically.
- * <p>
- * The solo requests for a given stream are cumulative: the AudioManager
- * can receive several solo requests from one or more clients and the stream
- * will be unsoloed only when the same number of unsolo requests are received.
- * <p>
- * For a better user experience, applications MUST unsolo a soloed stream
- * in onPause() and solo is again in onResume() if appropriate.
- *
- * @param streamType The stream to be soloed/unsoloed.
- * @param state The required solo state: true for solo ON, false for solo OFF
- */
- public void setStreamSolo(int streamType, boolean state) {
- IAudioService service = getService();
- try {
- service.setStreamSolo(streamType, state, mICallBack);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in setStreamSolo", e);
- }
- }
-
- /**
- * Mute or unmute an audio stream.
- * <p>
- * The mute command is protected against client process death: if a process
- * with an active mute request on a stream dies, this stream will be unmuted
- * automatically.
- * <p>
- * The mute requests for a given stream are cumulative: the AudioManager
- * can receive several mute requests from one or more clients and the stream
- * will be unmuted only when the same number of unmute requests are received.
- * <p>
- * For a better user experience, applications MUST unmute a muted stream
- * in onPause() and mute is again in onResume() if appropriate.
- *
- * @param streamType The stream to be muted/unmuted.
- * @param state The required mute state: true for mute ON, false for mute OFF
- */
- public void setStreamMute(int streamType, boolean state) {
- IAudioService service = getService();
- try {
- service.setStreamMute(streamType, state, mICallBack);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in setStreamMute", e);
- }
- }
-
- /**
- * Returns whether a particular type should vibrate according to user
- * settings and the current ringer mode.
- * <p>
- * This shouldn't be needed by most clients that use notifications to
- * vibrate. The notification manager will not vibrate if the policy doesn't
- * allow it, so the client should always set a vibrate pattern and let the
- * notification manager control whether or not to actually vibrate.
- *
- * @param vibrateType The type of vibrate. One of
- * {@link #VIBRATE_TYPE_NOTIFICATION} or
- * {@link #VIBRATE_TYPE_RINGER}.
- * @return Whether the type should vibrate at the instant this method is
- * called.
- * @see #setVibrateSetting(int, int)
- * @see #getVibrateSetting(int)
- */
- public boolean shouldVibrate(int vibrateType) {
- IAudioService service = getService();
- try {
- return service.shouldVibrate(vibrateType);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in shouldVibrate", e);
- return false;
- }
- }
-
- /**
- * Returns whether the user's vibrate setting for a vibrate type.
- * <p>
- * This shouldn't be needed by most clients that want to vibrate, instead
- * see {@link #shouldVibrate(int)}.
- *
- * @param vibrateType The type of vibrate. One of
- * {@link #VIBRATE_TYPE_NOTIFICATION} or
- * {@link #VIBRATE_TYPE_RINGER}.
- * @return The vibrate setting, one of {@link #VIBRATE_SETTING_ON},
- * {@link #VIBRATE_SETTING_OFF}, or
- * {@link #VIBRATE_SETTING_ONLY_SILENT}.
- * @see #setVibrateSetting(int, int)
- * @see #shouldVibrate(int)
- */
- public int getVibrateSetting(int vibrateType) {
- IAudioService service = getService();
- try {
- return service.getVibrateSetting(vibrateType);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in getVibrateSetting", e);
- return VIBRATE_SETTING_OFF;
- }
- }
-
- /**
- * Sets the setting for when the vibrate type should vibrate.
- *
- * @param vibrateType The type of vibrate. One of
- * {@link #VIBRATE_TYPE_NOTIFICATION} or
- * {@link #VIBRATE_TYPE_RINGER}.
- * @param vibrateSetting The vibrate setting, one of
- * {@link #VIBRATE_SETTING_ON},
- * {@link #VIBRATE_SETTING_OFF}, or
- * {@link #VIBRATE_SETTING_ONLY_SILENT}.
- * @see #getVibrateSetting(int)
- * @see #shouldVibrate(int)
- */
- public void setVibrateSetting(int vibrateType, int vibrateSetting) {
- IAudioService service = getService();
- try {
- service.setVibrateSetting(vibrateType, vibrateSetting);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in setVibrateSetting", e);
- }
- }
-
- /**
- * Sets the speakerphone on or off.
- *
- * @param on set <var>true</var> to turn on speakerphone;
- * <var>false</var> to turn it off
- */
- public void setSpeakerphoneOn(boolean on){
- setRouting(MODE_IN_CALL, on ? ROUTE_SPEAKER : ROUTE_EARPIECE, ROUTE_ALL);
- }
-
- /**
- * Checks whether the speakerphone is on or off.
- *
- * @return true if speakerphone is on, false if it's off
- */
- public boolean isSpeakerphoneOn() {
- return (getRouting(MODE_IN_CALL) & ROUTE_SPEAKER) == 0 ? false : true;
- }
-
- /**
- * Sets audio routing to the Bluetooth headset on or off.
- *
- * @param on set <var>true</var> to route SCO (voice) audio to/from Bluetooth
- * headset; <var>false</var> to route audio to/from phone earpiece
- */
- public void setBluetoothScoOn(boolean on){
- // Don't disable A2DP when turning off SCO.
- // A2DP does not affect in-call routing.
- setRouting(MODE_RINGTONE,
- on ? ROUTE_BLUETOOTH_SCO: ROUTE_SPEAKER, ROUTE_ALL & ~ROUTE_BLUETOOTH_A2DP);
- setRouting(MODE_NORMAL,
- on ? ROUTE_BLUETOOTH_SCO: ROUTE_SPEAKER, ROUTE_ALL & ~ROUTE_BLUETOOTH_A2DP);
- setRouting(MODE_IN_CALL,
- on ? ROUTE_BLUETOOTH_SCO: ROUTE_EARPIECE, ROUTE_ALL);
- }
-
- /**
- * Checks whether audio routing to the Bluetooth headset is on or off.
- *
- * @return true if SCO audio is being routed to/from Bluetooth headset;
- * false if otherwise
- */
- public boolean isBluetoothScoOn() {
- return (getRouting(MODE_IN_CALL) & ROUTE_BLUETOOTH_SCO) == 0 ? false : true;
- }
-
- /**
- * Sets A2DP audio routing to the Bluetooth headset on or off.
- *
- * @param on set <var>true</var> to route A2DP audio to/from Bluetooth
- * headset; <var>false</var> disable A2DP audio
- */
- public void setBluetoothA2dpOn(boolean on){
- // the audio flinger chooses A2DP as a higher priority,
- // so there is no need to disable other routes.
- setRouting(MODE_RINGTONE,
- on ? ROUTE_BLUETOOTH_A2DP: 0, ROUTE_BLUETOOTH_A2DP);
- setRouting(MODE_NORMAL,
- on ? ROUTE_BLUETOOTH_A2DP: 0, ROUTE_BLUETOOTH_A2DP);
- }
-
- /**
- * Checks whether A2DP audio routing to the Bluetooth headset is on or off.
- *
- * @return true if A2DP audio is being routed to/from Bluetooth headset;
- * false if otherwise
- */
- public boolean isBluetoothA2dpOn() {
- return (getRouting(MODE_NORMAL) & ROUTE_BLUETOOTH_A2DP) == 0 ? false : true;
- }
-
- /**
- * Sets audio routing to the wired headset on or off.
- *
- * @param on set <var>true</var> to route audio to/from wired
- * headset; <var>false</var> disable wired headset audio
- * @hide
- */
- public void setWiredHeadsetOn(boolean on){
- // A2DP has higher priority than wired headset, so headset connect/disconnect events
- // should not affect A2DP routing
- setRouting(MODE_NORMAL,
- on ? ROUTE_HEADSET : ROUTE_SPEAKER, ROUTE_ALL & ~ROUTE_BLUETOOTH_A2DP);
- setRouting(MODE_RINGTONE,
- on ? ROUTE_HEADSET | ROUTE_SPEAKER : ROUTE_SPEAKER, ROUTE_ALL & ~ROUTE_BLUETOOTH_A2DP);
- setRouting(MODE_IN_CALL,
- on ? ROUTE_HEADSET : ROUTE_EARPIECE, ROUTE_ALL);
- }
-
- /**
- * Checks whether audio routing to the wired headset is on or off.
- *
- * @return true if audio is being routed to/from wired headset;
- * false if otherwise
- * @hide
- */
- public boolean isWiredHeadsetOn() {
- return (getRouting(MODE_NORMAL) & ROUTE_HEADSET) == 0 ? false : true;
- }
-
- /**
- * Sets the microphone mute on or off.
- *
- * @param on set <var>true</var> to mute the microphone;
- * <var>false</var> to turn mute off
- */
- public void setMicrophoneMute(boolean on){
- IAudioService service = getService();
- try {
- service.setMicrophoneMute(on);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in setMicrophoneMute", e);
- }
- }
-
- /**
- * Checks whether the microphone mute is on or off.
- *
- * @return true if microphone is muted, false if it's not
- */
- public boolean isMicrophoneMute() {
- IAudioService service = getService();
- try {
- return service.isMicrophoneMute();
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in isMicrophoneMute", e);
- return false;
- }
- }
-
- /**
- * Sets the audio mode.
- *
- * @param mode the requested audio mode (NORMAL, RINGTONE, or IN_CALL).
- * Informs the HAL about the current audio state so that
- * it can route the audio appropriately.
- */
- public void setMode(int mode) {
- IAudioService service = getService();
- try {
- service.setMode(mode);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in setMode", e);
- }
- }
-
- /**
- * Returns the current audio mode.
- *
- * @return the current audio mode (NORMAL, RINGTONE, or IN_CALL).
- * Returns the current current audio state from the HAL.
- */
- public int getMode() {
- IAudioService service = getService();
- try {
- return service.getMode();
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in getMode", e);
- return MODE_INVALID;
- }
- }
-
- /* modes for setMode/getMode/setRoute/getRoute */
- /**
- * Audio harware modes.
- */
- /**
- * Invalid audio mode.
- */
- public static final int MODE_INVALID = AudioSystem.MODE_INVALID;
- /**
- * Current audio mode. Used to apply audio routing to current mode.
- */
- public static final int MODE_CURRENT = AudioSystem.MODE_CURRENT;
- /**
- * Normal audio mode: not ringing and no call established.
- */
- public static final int MODE_NORMAL = AudioSystem.MODE_NORMAL;
- /**
- * Ringing audio mode. An incoming is being signaled.
- */
- public static final int MODE_RINGTONE = AudioSystem.MODE_RINGTONE;
- /**
- * In call audio mode. A call is established.
- */
- public static final int MODE_IN_CALL = AudioSystem.MODE_IN_CALL;
-
- /* Routing bits for setRouting/getRouting API */
- /**
- * Routing audio output to earpiece
- */
- public static final int ROUTE_EARPIECE = AudioSystem.ROUTE_EARPIECE;
- /**
- * Routing audio output to spaker
- */
- public static final int ROUTE_SPEAKER = AudioSystem.ROUTE_SPEAKER;
- /**
- * @deprecated use {@link #ROUTE_BLUETOOTH_SCO}
- */
- @Deprecated public static final int ROUTE_BLUETOOTH = AudioSystem.ROUTE_BLUETOOTH_SCO;
- /**
- * Routing audio output to bluetooth SCO
- */
- public static final int ROUTE_BLUETOOTH_SCO = AudioSystem.ROUTE_BLUETOOTH_SCO;
- /**
- * Routing audio output to headset
- */
- public static final int ROUTE_HEADSET = AudioSystem.ROUTE_HEADSET;
- /**
- * Routing audio output to bluetooth A2DP
- */
- public static final int ROUTE_BLUETOOTH_A2DP = AudioSystem.ROUTE_BLUETOOTH_A2DP;
- /**
- * Used for mask parameter of {@link #setRouting(int,int,int)}.
- */
- public static final int ROUTE_ALL = AudioSystem.ROUTE_ALL;
-
- /**
- * Sets the audio routing for a specified mode
- *
- * @param mode audio mode to change route. E.g., MODE_RINGTONE.
- * @param routes bit vector of routes requested, created from one or
- * more of ROUTE_xxx types. Set bits indicate that route should be on
- * @param mask bit vector of routes to change, created from one or more of
- * ROUTE_xxx types. Unset bits indicate the route should be left unchanged
- */
- public void setRouting(int mode, int routes, int mask) {
- IAudioService service = getService();
- try {
- service.setRouting(mode, routes, mask);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in setRouting", e);
- }
- }
-
- /**
- * Returns the current audio routing bit vector for a specified mode.
- *
- * @param mode audio mode to get route (e.g., MODE_RINGTONE)
- * @return an audio route bit vector that can be compared with ROUTE_xxx
- * bits
- */
- public int getRouting(int mode) {
- IAudioService service = getService();
- try {
- return service.getRouting(mode);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in getRouting", e);
- return -1;
- }
- }
-
- /**
- * Checks whether any music is active.
- *
- * @return true if any music tracks are active.
- */
- public boolean isMusicActive() {
- IAudioService service = getService();
- try {
- return service.isMusicActive();
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in isMusicActive", e);
- return false;
- }
- }
-
- /*
- * Sets a generic audio configuration parameter. The use of these parameters
- * are platform dependant, see libaudio
- *
- * ** Temporary interface - DO NOT USE
- *
- * TODO: Replace with a more generic key:value get/set mechanism
- *
- * param key name of parameter to set. Must not be null.
- * param value value of parameter. Must not be null.
- */
- /**
- * @hide
- */
- public void setParameter(String key, String value) {
- IAudioService service = getService();
- try {
- service.setParameter(key, value);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in setParameter", e);
- }
- }
-
- /* Sound effect identifiers */
- /**
- * Keyboard and direction pad click sound
- * @see #playSoundEffect(int)
- */
- public static final int FX_KEY_CLICK = 0;
- /**
- * Focus has moved up
- * @see #playSoundEffect(int)
- */
- public static final int FX_FOCUS_NAVIGATION_UP = 1;
- /**
- * Focus has moved down
- * @see #playSoundEffect(int)
- */
- public static final int FX_FOCUS_NAVIGATION_DOWN = 2;
- /**
- * Focus has moved left
- * @see #playSoundEffect(int)
- */
- public static final int FX_FOCUS_NAVIGATION_LEFT = 3;
- /**
- * Focus has moved right
- * @see #playSoundEffect(int)
- */
- public static final int FX_FOCUS_NAVIGATION_RIGHT = 4;
- /**
- * IME standard keypress sound
- * @see #playSoundEffect(int)
- * @hide FIXME: Unhide before release
- */
- public static final int FX_KEYPRESS_STANDARD = 5;
- /**
- * IME spacebar keypress sound
- * @see #playSoundEffect(int)
- * @hide FIXME: Unhide before release
- */
- public static final int FX_KEYPRESS_SPACEBAR = 6;
- /**
- * IME delete keypress sound
- * @see #playSoundEffect(int)
- * @hide FIXME: Unhide before release
- */
- public static final int FX_KEYPRESS_DELETE = 7;
- /**
- * IME return_keypress sound
- * @see #playSoundEffect(int)
- * @hide FIXME: Unhide before release
- */
- public static final int FX_KEYPRESS_RETURN = 8;
- /**
- * @hide Number of sound effects
- */
- public static final int NUM_SOUND_EFFECTS = 9;
-
- /**
- * Plays a sound effect (Key clicks, lid open/close...)
- * @param effectType The type of sound effect. One of
- * {@link #FX_KEY_CLICK},
- * {@link #FX_FOCUS_NAVIGATION_UP},
- * {@link #FX_FOCUS_NAVIGATION_DOWN},
- * {@link #FX_FOCUS_NAVIGATION_LEFT},
- * {@link #FX_FOCUS_NAVIGATION_RIGHT},
- * FIXME: include links before release
- * {link #FX_KEYPRESS_STANDARD},
- * {link #FX_KEYPRESS_SPACEBAR},
- * {link #FX_KEYPRESS_DELETE},
- * {link #FX_KEYPRESS_RETURN},
- * NOTE: This version uses the UI settings to determine
- * whether sounds are heard or not.
- */
- public void playSoundEffect(int effectType) {
- if (effectType < 0 || effectType >= NUM_SOUND_EFFECTS) {
- return;
- }
-
- if (!querySoundEffectsEnabled()) {
- return;
- }
-
- IAudioService service = getService();
- try {
- service.playSoundEffect(effectType);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in playSoundEffect"+e);
- }
- }
-
- /**
- * Plays a sound effect (Key clicks, lid open/close...)
- * @param effectType The type of sound effect. One of
- * {@link #FX_KEY_CLICK},
- * {@link #FX_FOCUS_NAVIGATION_UP},
- * {@link #FX_FOCUS_NAVIGATION_DOWN},
- * {@link #FX_FOCUS_NAVIGATION_LEFT},
- * {@link #FX_FOCUS_NAVIGATION_RIGHT},
- * FIXME: include links before release
- * {link #FX_KEYPRESS_STANDARD},
- * {link #FX_KEYPRESS_SPACEBAR},
- * {link #FX_KEYPRESS_DELETE},
- * {link #FX_KEYPRESS_RETURN},
- * @param volume Sound effect volume
- * NOTE: This version is for applications that have their own
- * settings panel for enabling and controlling volume.
- * @hide FIXME: Unhide before release
- */
- public void playSoundEffect(int effectType, float volume) {
- if (effectType < 0 || effectType >= NUM_SOUND_EFFECTS) {
- return;
- }
-
- IAudioService service = getService();
- try {
- service.playSoundEffectVolume(effectType, volume);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in playSoundEffect"+e);
- }
- }
-
- /**
- * Settings has an in memory cache, so this is fast.
- */
- private boolean querySoundEffectsEnabled() {
- return Settings.System.getInt(mContext.getContentResolver(), Settings.System.SOUND_EFFECTS_ENABLED, 0) != 0;
- }
-
-
- /**
- * Load Sound effects.
- * This method must be called when sound effects are enabled.
- */
- public void loadSoundEffects() {
- IAudioService service = getService();
- try {
- service.loadSoundEffects();
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in loadSoundEffects"+e);
- }
- }
-
- /**
- * Unload Sound effects.
- * This method can be called to free some memory when
- * sound effects are disabled.
- */
- public void unloadSoundEffects() {
- IAudioService service = getService();
- try {
- service.unloadSoundEffects();
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in unloadSoundEffects"+e);
- }
- }
-
- /**
- * {@hide}
- */
- private IBinder mICallBack = new Binder();
-}
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
deleted file mode 100644
index fd990fe..0000000
--- a/media/java/android/media/AudioRecord.java
+++ /dev/null
@@ -1,778 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import java.lang.ref.WeakReference;
-import java.io.OutputStream;
-import java.io.IOException;
-import java.lang.IllegalArgumentException;
-import java.lang.IllegalStateException;
-import java.lang.Thread;
-import java.nio.ByteBuffer;
-
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.util.Log;
-
-/**
- * The AudioRecord class manages the audio resources for Java applications
- * to record audio from the audio input hardware of the platform. This is
- * achieved by "pulling" (reading) the data from the AudioRecord object. The
- * application is responsible for polling the AudioRecord object in time using one of
- * the following three methods: {@link #read(byte[],int, int)}, {@link #read(short[], int, int)}
- * or {@link #read(ByteBuffer, int)}. The choice of which method to use will be based
- * on the audio data storage format that is the most convenient for the user of AudioRecord.
- * <p>Upon creation, an AudioRecord object initializes its associated audio buffer that it will
- * fill with the new audio data. The size of this buffer, specified during the construction,
- * determines how long an AudioRecord can record before "over-running" data that has not
- * been read yet. Data should be from the audio hardware in chunks of sizes inferior to
- * the total recording buffer size.
- */
-public class AudioRecord
-{
- //---------------------------------------------------------
- // Constants
- //--------------------
- /**
- * State of an AudioRecord that was not successfully initialized upon creation
- */
- public static final int STATE_UNINITIALIZED = 0;
- /**
- * State of an AudioRecord that is ready to be used
- */
- public static final int STATE_INITIALIZED = 1;
-
- /**
- * State of an AudioRecord this is not recording
- */
- public static final int RECORDSTATE_STOPPED = 1; // matches SL_RECORDSTATE_STOPPED
- /**
- * State of an AudioRecord this is recording
- */
- public static final int RECORDSTATE_RECORDING = 3;// matches SL_RECORDSTATE_RECORDING
-
- // Error codes:
- // to keep in sync with frameworks/base/core/jni/android_media_AudioRecord.cpp
- /**
- * Denotes a successful operation.
- */
- public static final int SUCCESS = 0;
- /**
- * Denotes a generic operation failure.
- */
- public static final int ERROR = -1;
- /**
- * Denotes a failure due to the use of an invalid value.
- */
- public static final int ERROR_BAD_VALUE = -2;
- /**
- * Denotes a failure due to the improper use of a method.
- */
- public static final int ERROR_INVALID_OPERATION = -3;
-
- private static final int AUDIORECORD_ERROR_SETUP_ZEROFRAMECOUNT = -16;
- private static final int AUDIORECORD_ERROR_SETUP_INVALIDCHANNELCOUNT = -17;
- private static final int AUDIORECORD_ERROR_SETUP_INVALIDFORMAT = -18;
- private static final int AUDIORECORD_ERROR_SETUP_INVALIDSTREAMTYPE = -19;
- private static final int AUDIORECORD_ERROR_SETUP_NATIVEINITFAILED = -20;
-
- // Events:
- // to keep in sync with frameworks/base/include/media/AudioRecord.h
- /**
- * Event id for when the recording head has reached a previously set marker.
- */
- private static final int NATIVE_EVENT_MARKER = 2;
- /**
- * Event id for when the previously set update period has passed during recording.
- */
- private static final int NATIVE_EVENT_NEW_POS = 3;
-
- private final static String TAG = "AudioRecord-Java";
-
-
- //---------------------------------------------------------
- // Used exclusively by native code
- //--------------------
- /**
- * Accessed by native methods: provides access to C++ AudioRecord object
- */
- @SuppressWarnings("unused")
- private int mNativeRecorderInJavaObj;
- /**
- * Accessed by native methods: provides access to record source constants
- */
- @SuppressWarnings("unused")
- private final static int SOURCE_DEFAULT = MediaRecorder.AudioSource.DEFAULT;
- @SuppressWarnings("unused")
- private final static int SOURCE_MIC = MediaRecorder.AudioSource.MIC;
- /**
- * Accessed by native methods: provides access to the callback data.
- */
- @SuppressWarnings("unused")
- private int mNativeCallbackCookie;
-
-
- //---------------------------------------------------------
- // Member variables
- //--------------------
- /**
- * The audio data sampling rate in Hz.
- */
- private int mSampleRate = 22050;
- /**
- * The number of input audio channels (1 is mono, 2 is stereo)
- */
- private int mChannelCount = 1;
- /**
- * The current audio channel configuration
- */
- private int mChannelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- /**
- * The encoding of the audio samples.
- * @see AudioFormat#ENCODING_PCM_8BIT
- * @see AudioFormat#ENCODING_PCM_16BIT
- */
- private int mAudioFormat = AudioFormat.ENCODING_PCM_16BIT;
- /**
- * Where the audio data is recorded from.
- */
- private int mRecordSource = MediaRecorder.AudioSource.DEFAULT;
- /**
- * Indicates the state of the AudioRecord instance.
- */
- private int mState = STATE_UNINITIALIZED;
- /**
- * Indicates the recording state of the AudioRecord instance.
- */
- private int mRecordingState = RECORDSTATE_STOPPED;
- /**
- * Lock to make sure mRecordingState updates are reflecting the actual state of the object.
- */
- private Object mRecordingStateLock = new Object();
- /**
- * The listener the AudioRecord notifies when a previously set marker is reached.
- * @see #setMarkerReachedListener(OnMarkerReachedListener)
- */
- private OnMarkerReachedListener mMarkerListener = null;
- /**
- * Lock to protect marker listener updates against event notifications
- */
- private final Object mMarkerListenerLock = new Object();
- /**
- * The listener the AudioRecord notifies periodically during recording.
- * @see #setPeriodicNotificationListener(OnPeriodicNotificationListener)
- */
- private OnPeriodicNotificationListener mPeriodicListener = null;
- /**
- * Lock to protect periodic listener updates against event notifications
- */
- private final Object mPeriodicListenerLock = new Object();
- /**
- * Handler for events coming from the native code
- */
- private NativeEventHandler mNativeEventHandler = null;
- /**
- * Size of the native audio buffer.
- */
- private int mNativeBufferSizeInBytes = 0;
-
-
- //---------------------------------------------------------
- // Constructor, Finalize
- //--------------------
- /**
- * Class constructor.
- * @param audioSource the recording source. See {@link MediaRecorder.AudioSource} for
- * recording source definitions.
- * @param sampleRateInHz the sample rate expressed in Hertz. Examples of rates are (but
- * not limited to) 44100, 22050 and 11025.
- * @param channelConfig describes the configuration of the audio channels.
- * See {@link AudioFormat#CHANNEL_CONFIGURATION_MONO} and
- * {@link AudioFormat#CHANNEL_CONFIGURATION_STEREO}
- * @param audioFormat the format in which the audio data is represented.
- * See {@link AudioFormat#ENCODING_PCM_16BIT} and
- * {@link AudioFormat#ENCODING_PCM_8BIT}
- * @param bufferSizeInBytes the total size (in bytes) of the buffer where audio data is written
- * to during the recording. New audio data can be read from this buffer in smaller chunks
- * than this size.
- * @throws java.lang.IllegalArgumentException
- */
- public AudioRecord(int audioSource, int sampleRateInHz, int channelConfig, int audioFormat,
- int bufferSizeInBytes)
- throws IllegalArgumentException {
- mState = STATE_UNINITIALIZED;
- mRecordingState = RECORDSTATE_STOPPED;
-
- audioParamCheck(audioSource, sampleRateInHz, channelConfig, audioFormat);
-
- audioBuffSizeCheck(bufferSizeInBytes);
-
- // native initialization
- //TODO: update native initialization when information about hardware init failure
- // due to capture device already open is available.
- int initResult = native_setup( new WeakReference<AudioRecord>(this),
- mRecordSource, mSampleRate, mChannelCount, mAudioFormat, mNativeBufferSizeInBytes);
- if (initResult != SUCCESS) {
- loge("Error code "+initResult+" when initializing native AudioRecord object.");
- return; // with mState == STATE_UNINITIALIZED
- }
-
- mState = STATE_INITIALIZED;
- }
-
-
- // Convenience method for the constructor's parameter checks.
- // This is where constructor IllegalArgumentException-s are thrown
- // postconditions:
- // mRecordSource is valid
- // mChannelCount is valid
- // mAudioFormat is valid
- // mSampleRate is valid
- private void audioParamCheck(int audioSource, int sampleRateInHz,
- int channelConfig, int audioFormat) {
-
- //--------------
- // audio source
- if ( (audioSource != MediaRecorder.AudioSource.DEFAULT)
- && (audioSource != MediaRecorder.AudioSource.MIC) ) {
- throw (new IllegalArgumentException("Invalid audio source."));
- } else {
- mRecordSource = audioSource;
- }
-
- //--------------
- // sample rate
- if ( (sampleRateInHz < 4000) || (sampleRateInHz > 48000) ) {
- throw (new IllegalArgumentException(sampleRateInHz
- + "Hz is not a supported sample rate."));
- } else {
- mSampleRate = sampleRateInHz;
- }
-
- //--------------
- // channel config
- switch (channelConfig) {
- case AudioFormat.CHANNEL_CONFIGURATION_DEFAULT:
- case AudioFormat.CHANNEL_CONFIGURATION_MONO:
- mChannelCount = 1;
- mChannelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- break;
- case AudioFormat.CHANNEL_CONFIGURATION_STEREO:
- mChannelCount = 2;
- mChannelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- break;
- default:
- mChannelCount = 0;
- mChannelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_INVALID;
- throw (new IllegalArgumentException("Unsupported channel configuration."));
- }
-
- //--------------
- // audio format
- switch (audioFormat) {
- case AudioFormat.ENCODING_DEFAULT:
- mAudioFormat = AudioFormat.ENCODING_PCM_16BIT;
- break;
- case AudioFormat.ENCODING_PCM_16BIT:
- case AudioFormat.ENCODING_PCM_8BIT:
- mAudioFormat = audioFormat;
- break;
- default:
- mAudioFormat = AudioFormat.ENCODING_INVALID;
- throw (new IllegalArgumentException("Unsupported sample encoding."
- + " Should be ENCODING_PCM_8BIT or ENCODING_PCM_16BIT."));
- }
- }
-
-
- // Convenience method for the contructor's audio buffer size check.
- // preconditions:
- // mChannelCount is valid
- // mAudioFormat is AudioFormat.ENCODING_PCM_8BIT OR AudioFormat.ENCODING_PCM_16BIT
- // postcondition:
- // mNativeBufferSizeInBytes is valid (multiple of frame size, positive)
- private void audioBuffSizeCheck(int audioBufferSize) {
- // NB: this section is only valid with PCM data.
- // To update when supporting compressed formats
- int frameSizeInBytes = mChannelCount
- * (mAudioFormat == AudioFormat.ENCODING_PCM_8BIT ? 1 : 2);
- if ((audioBufferSize % frameSizeInBytes != 0) || (audioBufferSize < 1)) {
- throw (new IllegalArgumentException("Invalid audio buffer size."));
- }
-
- mNativeBufferSizeInBytes = audioBufferSize;
- }
-
-
- // Convenience method for the creation of the native event handler
- // It is called only when a non-null event listener is set.
- // precondition:
- // mNativeEventHandler is null
- private void createNativeEventHandler() {
- Looper looper;
- if ((looper = Looper.myLooper()) != null) {
- mNativeEventHandler = new NativeEventHandler(this, looper);
- } else if ((looper = Looper.getMainLooper()) != null) {
- mNativeEventHandler = new NativeEventHandler(this, looper);
- } else {
- mNativeEventHandler = null;
- }
- }
-
-
- /**
- * Releases the native AudioRecord resources.
- */
- public void release() {
- try {
- stop();
- } catch(IllegalStateException ise) {
- // don't raise an exception, we're releasing the resources.
- }
- native_release();
- mState = STATE_UNINITIALIZED;
- }
-
-
- @Override
- protected void finalize() {
- native_finalize();
- }
-
-
- //--------------------------------------------------------------------------
- // Getters
- //--------------------
- /**
- * Returns the configured audio data sample rate in Hz
- */
- public int getSampleRate() {
- return mSampleRate;
- }
-
- /**
- * Returns the audio recording source.
- * @see MediaRecorder.AudioSource
- */
- public int getAudioSource() {
- return mRecordSource;
- }
-
- /**
- * Returns the configured audio data format. See {@link AudioFormat#ENCODING_PCM_16BIT}
- * and {@link AudioFormat#ENCODING_PCM_8BIT}.
- */
- public int getAudioFormat() {
- return mAudioFormat;
- }
-
- /**
- * Returns the configured channel configuration.
- * See {@link AudioFormat#CHANNEL_CONFIGURATION_MONO}
- * and {@link AudioFormat#CHANNEL_CONFIGURATION_STEREO}.
- */
- public int getChannelConfiguration() {
- return mChannelConfiguration;
- }
-
- /**
- * Returns the configured number of channels.
- */
- public int getChannelCount() {
- return mChannelCount;
- }
-
- /**
- * Returns the state of the AudioRecord instance. This is useful after the
- * AudioRecord instance has been created to check if it was initialized
- * properly. This ensures that the appropriate hardware resources have been
- * acquired.
- * @see AudioRecord#STATE_INITIALIZED
- * @see AudioRecord#STATE_UNINITIALIZED
- */
- public int getState() {
- return mState;
- }
-
- /**
- * Returns the recording state of the AudioRecord instance.
- * @see AudioRecord#RECORDSTATE_STOPPED
- * @see AudioRecord#RECORDSTATE_RECORDING
- */
- public int getRecordingState() {
- return mRecordingState;
- }
-
- /**
- * @return marker position in frames
- */
- public int getNotificationMarkerPosition() {
- return native_get_marker_pos();
- }
-
- /**
- * @return update period in frames
- */
- public int getPositionNotificationPeriod() {
- return native_get_pos_update_period();
- }
-
- /**
- * {@hide}
- * Returns the minimum buffer size required for the successful creation of an AudioRecord
- * object.
- * @param sampleRateInHz the sample rate expressed in Hertz.
- * @param channelConfig describes the configuration of the audio channels.
- * See {@link AudioFormat#CHANNEL_CONFIGURATION_MONO} and
- * {@link AudioFormat#CHANNEL_CONFIGURATION_STEREO}
- * @param audioFormat the format in which the audio data is represented.
- * See {@link AudioFormat#ENCODING_PCM_16BIT}.
- * @return {@link #ERROR_BAD_VALUE} if the recording parameters are not supported by the
- * hardware, or an invalid parameter was passed,
- * or {@link #ERROR} if the implementation was unable to query the hardware for its
- * output properties,
- * or the minimum buffer size expressed in of bytes.
- */
- static public int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat) {
- int channelCount = 0;
- switch(channelConfig) {
- case AudioFormat.CHANNEL_CONFIGURATION_DEFAULT:
- case AudioFormat.CHANNEL_CONFIGURATION_MONO:
- channelCount = 1;
- break;
- case AudioFormat.CHANNEL_CONFIGURATION_STEREO:
- channelCount = 2;
- break;
- case AudioFormat.CHANNEL_CONFIGURATION_INVALID:
- default:
- loge("getMinBufferSize(): Invalid channel configuration.");
- return AudioRecord.ERROR_BAD_VALUE;
- }
-
- // PCM_8BIT is not supported at the moment
- if (audioFormat != AudioFormat.ENCODING_PCM_16BIT) {
- loge("getMinBufferSize(): Invalid audio format.");
- return AudioRecord.ERROR_BAD_VALUE;
- }
-
- int size = native_get_min_buff_size(sampleRateInHz, channelCount, audioFormat);
- if (size == 0) {
- return AudioRecord.ERROR_BAD_VALUE;
- }
- else if (size == -1) {
- return AudioRecord.ERROR;
- }
- else {
- return size;
- }
- }
-
-
- //---------------------------------------------------------
- // Transport control methods
- //--------------------
- /**
- * Starts recording from the AudioRecord instance.
- * @throws IllegalStateException
- */
- public void startRecording()
- throws IllegalStateException {
- if (mState != STATE_INITIALIZED) {
- throw(new IllegalStateException("startRecording() called on an "
- +"uninitialized AudioRecord."));
- }
-
- // start recording
- synchronized(mRecordingStateLock) {
- native_start();
- mRecordingState = RECORDSTATE_RECORDING;
- }
- }
-
-
-
- /**
- * Stops recording.
- * @throws IllegalStateException
- */
- public void stop()
- throws IllegalStateException {
- if (mState != STATE_INITIALIZED) {
- throw(new IllegalStateException("stop() called on an uninitialized AudioRecord."));
- }
-
- // stop recording
- synchronized(mRecordingStateLock) {
- native_stop();
- mRecordingState = RECORDSTATE_STOPPED;
- }
- }
-
-
- //---------------------------------------------------------
- // Audio data supply
- //--------------------
- /**
- * Reads audio data from the audio hardware for recording into a buffer.
- * @param audioData the array to which the recorded audio data is written.
- * @param offsetInBytes index in audioData from which the data is written.
- * @param sizeInBytes the number of requested bytes.
- * @return the number of bytes that were read or -1 if the object wasn't properly
- * initialized. The number of bytes will not exceed sizeInBytes.
- */
- public int read(byte[] audioData, int offsetInBytes, int sizeInBytes) {
- if (mState != STATE_INITIALIZED) {
- return -1;
- }
-
- return native_read_in_byte_array(audioData, offsetInBytes, sizeInBytes);
- }
-
-
- /**
- * Reads audio data from the audio hardware for recording into a buffer.
- * @param audioData the array to which the recorded audio data is written.
- * @param offsetInShorts index in audioData from which the data is written.
- * @param sizeInShorts the number of requested shorts.
- * @return the number of shorts that were read. or -1 if the object wasn't properly
- * initialized. The number of shorts will not exceed sizeInShorts
- */
- public int read(short[] audioData, int offsetInShorts, int sizeInShorts) {
- if (mState != STATE_INITIALIZED) {
- return -1;
- }
-
- return native_read_in_short_array(audioData, offsetInShorts, sizeInShorts);
- }
-
-
- /**
- * Reads audio data from the audio hardware for recording into a direct buffer. If this buffer
- * is not a direct buffer, this method will always return 0.
- * @param audioBuffer the direct buffer to which the recorded audio data is written.
- * @param sizeInBytes the number of requested bytes.
- * @return the number of bytes that were read or -1 if the object wasn't properly
- * initialized. The number of bytes will not exceed sizeInBytes.
- */
- public int read(ByteBuffer audioBuffer, int sizeInBytes) {
- if (mState != STATE_INITIALIZED) {
- return -1;
- }
-
- return native_read_in_direct_buffer(audioBuffer, sizeInBytes);
- }
-
-
- //--------------------------------------------------------------------------
- // Initialization / configuration
- //--------------------
- /**
- * Sets the listener the AudioRecord notifies when a previously set marker is reached.
- * @param listener
- */
- public void setMarkerReachedListener(OnMarkerReachedListener listener) {
- synchronized (mMarkerListenerLock) {
- mMarkerListener = listener;
- }
- if ((listener != null) && (mNativeEventHandler == null)) {
- createNativeEventHandler();
- }
- }
-
-
- /**
- * Sets the listener the AudioRecord notifies periodically during recording.
- * @param listener
- */
- public void setPeriodicNotificationListener(OnPeriodicNotificationListener listener) {
- synchronized (mPeriodicListenerLock) {
- mPeriodicListener = listener;
- }
- if ((listener != null) && (mNativeEventHandler == null)) {
- createNativeEventHandler();
- }
- }
-
-
- /**
- * Sets the marker position at which the listener, if set with
- * {@link #setMarkerReachedListener(OnMarkerReachedListener)}, is called.
- * @param markerInFrames marker position expressed in frames
- * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE},
- * {@link #ERROR_INVALID_OPERATION}
- */
- public int setNotificationMarkerPosition(int markerInFrames) {
- return native_set_marker_pos(markerInFrames);
- }
-
-
- /**
- * Sets the period at which the listener, if set with
- * {@link #setPositionNotificationPeriod(int)}, is called.
- * @param periodInFrames update period expressed in frames
- * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_INVALID_OPERATION}
- */
- public int setPositionNotificationPeriod(int periodInFrames) {
- return native_set_pos_update_period(periodInFrames);
- }
-
-
- //---------------------------------------------------------
- // Interface definitions
- //--------------------
- /**
- * Interface definition for a callback to be invoked when an AudioRecord has
- * reached a notification marker set by setNotificationMarkerPosition().
- */
- public interface OnMarkerReachedListener {
- /**
- * Called on the listener to notify it that the previously set marker has been reached
- * by the recording head.
- */
- void onMarkerReached(AudioRecord recorder);
- }
-
-
- /**
- * Interface definition for a callback to be invoked for each periodic AudioRecord
- * update during recording. The update interval is set by setPositionNotificationPeriod().
- */
- public interface OnPeriodicNotificationListener {
- /**
- * Called on the listener to periodically notify it that the recording head has reached
- * a multiple of the notification period.
- */
- void onPeriodicNotification(AudioRecord recorder);
- }
-
-
- //---------------------------------------------------------
- // Inner classes
- //--------------------
- /**
- * Helper class to handle the forwarding of native events to the appropriate listeners
- */
- private class NativeEventHandler extends Handler
- {
- private AudioRecord mAudioRecord;
-
- public NativeEventHandler(AudioRecord ar, Looper looper) {
- super(looper);
- mAudioRecord = ar;
- }
-
- @Override
- public void handleMessage(Message msg) {
- if (mAudioRecord == null) {
- return;
- }
- switch(msg.what) {
- case NATIVE_EVENT_MARKER:
- synchronized (mMarkerListenerLock) {
- if (mAudioRecord.mMarkerListener != null) {
- mAudioRecord.mMarkerListener.onMarkerReached(mAudioRecord);
- }
- }
- break;
- case NATIVE_EVENT_NEW_POS:
- synchronized (mPeriodicListenerLock) {
- if (mAudioRecord.mPeriodicListener != null) {
- mAudioRecord.mPeriodicListener.onPeriodicNotification(mAudioRecord);
- }
- }
- break;
- default:
- Log.e(TAG, "[ android.media.AudioRecord.NativeEventHandler ] " +
- "Unknown event type: " + msg.what);
- break;
- }
- }
- }
-
-
- //---------------------------------------------------------
- // Java methods called from the native side
- //--------------------
- @SuppressWarnings("unused")
- private static void postEventFromNative(Object audiorecord_ref,
- int what, int arg1, int arg2, Object obj) {
- //logd("Event posted from the native side: event="+ what + " args="+ arg1+" "+arg2);
- AudioRecord recorder = (AudioRecord)((WeakReference)audiorecord_ref).get();
- if (recorder == null) {
- return;
- }
-
- if (recorder.mNativeEventHandler != null) {
- Message m = recorder.mNativeEventHandler.obtainMessage(what, arg1, arg2, obj);
- recorder.mNativeEventHandler.sendMessage(m);
- }
-
- }
-
-
- //---------------------------------------------------------
- // Native methods called from the Java side
- //--------------------
-
- private native final int native_setup(Object audiorecord_this,
- int recordSource, int sampleRate, int nbChannels, int audioFormat, int buffSizeInBytes);
-
- private native final void native_finalize();
-
- private native final void native_release();
-
- private native final void native_start();
-
- private native final void native_stop();
-
- private native final int native_read_in_byte_array(byte[] audioData,
- int offsetInBytes, int sizeInBytes);
-
- private native final int native_read_in_short_array(short[] audioData,
- int offsetInShorts, int sizeInShorts);
-
- private native final int native_read_in_direct_buffer(Object jBuffer, int sizeInBytes);
-
- private native final int native_set_marker_pos(int marker);
- private native final int native_get_marker_pos();
-
- private native final int native_set_pos_update_period(int updatePeriod);
- private native final int native_get_pos_update_period();
-
- static private native final int native_get_min_buff_size(
- int sampleRateInHz, int channelCount, int audioFormat);
-
-
- //---------------------------------------------------------
- // Utility methods
- //------------------
-
- private static void logd(String msg) {
- Log.d(TAG, "[ android.media.AudioRecord ] " + msg);
- }
-
- private static void loge(String msg) {
- Log.e(TAG, "[ android.media.AudioRecord ] " + msg);
- }
-
-}
-
-
-
-
-
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
deleted file mode 100644
index 83ede0d..0000000
--- a/media/java/android/media/AudioService.java
+++ /dev/null
@@ -1,1236 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.app.ActivityManagerNative;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.media.MediaPlayer.OnCompletionListener;
-import android.media.MediaPlayer.OnErrorListener;
-import android.os.Binder;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.provider.Settings;
-import android.provider.Settings.System;
-import android.util.Log;
-import android.view.VolumePanel;
-
-import com.android.internal.telephony.ITelephony;
-
-import java.io.IOException;
-import java.util.ArrayList;
-
-
-/**
- * The implementation of the volume manager service.
- * <p>
- * This implementation focuses on delivering a responsive UI. Most methods are
- * asynchronous to external calls. For example, the task of setting a volume
- * will update our internal state, but in a separate thread will set the system
- * volume and later persist to the database. Similarly, setting the ringer mode
- * will update the state and broadcast a change and in a separate thread later
- * persist the ringer mode.
- *
- * @hide
- */
-public class AudioService extends IAudioService.Stub {
-
- private static final String TAG = "AudioService";
-
- /** How long to delay before persisting a change in volume/ringer mode. */
- private static final int PERSIST_DELAY = 3000;
-
- private Context mContext;
- private ContentResolver mContentResolver;
-
- /** The UI */
- private VolumePanel mVolumePanel;
-
- // sendMsg() flags
- /** Used when a message should be shared across all stream types. */
- private static final int SHARED_MSG = -1;
- /** If the msg is already queued, replace it with this one. */
- private static final int SENDMSG_REPLACE = 0;
- /** If the msg is already queued, ignore this one and leave the old. */
- private static final int SENDMSG_NOOP = 1;
- /** If the msg is already queued, queue this one and leave the old. */
- private static final int SENDMSG_QUEUE = 2;
-
- // AudioHandler message.whats
- private static final int MSG_SET_SYSTEM_VOLUME = 0;
- private static final int MSG_PERSIST_VOLUME = 1;
- private static final int MSG_PERSIST_RINGER_MODE = 3;
- private static final int MSG_PERSIST_VIBRATE_SETTING = 4;
- private static final int MSG_MEDIA_SERVER_DIED = 5;
- private static final int MSG_MEDIA_SERVER_STARTED = 6;
- private static final int MSG_PLAY_SOUND_EFFECT = 7;
-
- /** @see AudioSystemThread */
- private AudioSystemThread mAudioSystemThread;
- /** @see AudioHandler */
- private AudioHandler mAudioHandler;
- /** @see VolumeStreamState */
- private VolumeStreamState[] mStreamStates;
-
- private boolean mMicMute;
- private int mMode;
- private int[] mRoutes = new int[AudioSystem.NUM_MODES];
- private Object mSettingsLock = new Object();
- private boolean mMediaServerOk;
-
- private SoundPool mSoundPool;
- private Object mSoundEffectsLock = new Object();
- private static final int NUM_SOUNDPOOL_CHANNELS = 4;
- private static final int SOUND_EFFECT_VOLUME = 1000;
-
- /* Sound effect file names */
- private static final String SOUND_EFFECTS_PATH = "/media/audio/ui/";
- private static final String[] SOUND_EFFECT_FILES = new String[] {
- "Effect_Tick.ogg",
- "KeypressStandard.ogg",
- "KeypressSpacebar.ogg",
- "KeypressDelete.ogg",
- "KeypressReturn.ogg"
- };
-
- /* Sound effect file name mapping sound effect id (AudioManager.FX_xxx) to
- * file index in SOUND_EFFECT_FILES[] (first column) and indicating if effect
- * uses soundpool (second column) */
- private int[][] SOUND_EFFECT_FILES_MAP = new int[][] {
- {0, -1}, // FX_KEY_CLICK
- {0, -1}, // FX_FOCUS_NAVIGATION_UP
- {0, -1}, // FX_FOCUS_NAVIGATION_DOWN
- {0, -1}, // FX_FOCUS_NAVIGATION_LEFT
- {0, -1}, // FX_FOCUS_NAVIGATION_RIGHT
- {1, -1}, // FX_KEYPRESS_STANDARD
- {2, -1}, // FX_KEYPRESS_SPACEBAR
- {3, -1}, // FX_FOCUS_DELETE
- {4, -1} // FX_FOCUS_RETURN
- };
-
- private AudioSystem.ErrorCallback mAudioSystemCallback = new AudioSystem.ErrorCallback() {
- public void onError(int error) {
- switch (error) {
- case AudioSystem.AUDIO_STATUS_SERVER_DIED:
- if (mMediaServerOk) {
- sendMsg(mAudioHandler, MSG_MEDIA_SERVER_DIED, SHARED_MSG, SENDMSG_NOOP, 0, 0,
- null, 1500);
- }
- break;
- case AudioSystem.AUDIO_STATUS_OK:
- if (!mMediaServerOk) {
- sendMsg(mAudioHandler, MSG_MEDIA_SERVER_STARTED, SHARED_MSG, SENDMSG_NOOP, 0, 0,
- null, 0);
- }
- break;
- default:
- break;
- }
- }
- };
-
- /**
- * Current ringer mode from one of {@link AudioManager#RINGER_MODE_NORMAL},
- * {@link AudioManager#RINGER_MODE_SILENT}, or
- * {@link AudioManager#RINGER_MODE_VIBRATE}.
- */
- private int mRingerMode;
-
- /** @see System#MODE_RINGER_STREAMS_AFFECTED */
- private int mRingerModeAffectedStreams;
-
- /** @see System#MUTE_STREAMS_AFFECTED */
- private int mMuteAffectedStreams;
-
- /**
- * Has multiple bits per vibrate type to indicate the type's vibrate
- * setting. See {@link #setVibrateSetting(int, int)}.
- * <p>
- * NOTE: This is not the final decision of whether vibrate is on/off for the
- * type since it depends on the ringer mode. See {@link #shouldVibrate(int)}.
- */
- private int mVibrateSetting;
-
- ///////////////////////////////////////////////////////////////////////////
- // Construction
- ///////////////////////////////////////////////////////////////////////////
-
- /** @hide */
- public AudioService(Context context) {
- mContext = context;
- mContentResolver = context.getContentResolver();
- mVolumePanel = new VolumePanel(context, this);
-
- createAudioSystemThread();
- createStreamStates();
- readPersistedSettings();
- readAudioSettings();
- mMediaServerOk = true;
- AudioSystem.setErrorCallback(mAudioSystemCallback);
- loadSoundEffects();
- }
-
- private void createAudioSystemThread() {
- mAudioSystemThread = new AudioSystemThread();
- mAudioSystemThread.start();
- waitForAudioHandlerCreation();
- }
-
- /** Waits for the volume handler to be created by the other thread. */
- private void waitForAudioHandlerCreation() {
- synchronized(this) {
- while (mAudioHandler == null) {
- try {
- // Wait for mAudioHandler to be set by the other thread
- wait();
- } catch (InterruptedException e) {
- Log.e(TAG, "Interrupted while waiting on volume handler.");
- }
- }
- }
- }
-
- private void createStreamStates() {
- final int[] volumeLevelsPhone =
- createVolumeLevels(0, AudioManager.MAX_STREAM_VOLUME[AudioManager.STREAM_VOICE_CALL]);
- final int[] volumeLevelsCoarse =
- createVolumeLevels(0, AudioManager.MAX_STREAM_VOLUME[AudioManager.STREAM_SYSTEM]);
- final int[] volumeLevelsFine =
- createVolumeLevels(0, AudioManager.MAX_STREAM_VOLUME[AudioManager.STREAM_MUSIC]);
- final int[] volumeLevelsBtPhone =
- createVolumeLevels(0,
- AudioManager.MAX_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]);
-
- int numStreamTypes = AudioSystem.getNumStreamTypes();
- VolumeStreamState[] streams = mStreamStates = new VolumeStreamState[numStreamTypes];
-
- for (int i = 0; i < numStreamTypes; i++) {
- final int[] levels;
-
- switch (i) {
-
- case AudioSystem.STREAM_MUSIC:
- levels = volumeLevelsFine;
- break;
-
- case AudioSystem.STREAM_VOICE_CALL:
- levels = volumeLevelsPhone;
- break;
-
- case AudioSystem.STREAM_BLUETOOTH_SCO:
- levels = volumeLevelsBtPhone;
- break;
-
- default:
- levels = volumeLevelsCoarse;
- break;
- }
-
- if (i == AudioSystem.STREAM_BLUETOOTH_SCO) {
- streams[i] = new VolumeStreamState(AudioManager.DEFAULT_STREAM_VOLUME[i], i,levels);
- } else {
- streams[i] = new VolumeStreamState(System.VOLUME_SETTINGS[i], i, levels);
- }
- }
- }
-
- private static int[] createVolumeLevels(int offset, int numlevels) {
- double curve = 1.0f; // 1.4f
- int [] volumes = new int[numlevels + offset];
- for (int i = 0; i < offset; i++) {
- volumes[i] = 0;
- }
-
- double val = 0;
- double max = Math.pow(numlevels - 1, curve);
- for (int i = 0; i < numlevels; i++) {
- val = Math.pow(i, curve) / max;
- volumes[offset + i] = (int) (val * 100.0f);
- }
- return volumes;
- }
-
- private void readPersistedSettings() {
- final ContentResolver cr = mContentResolver;
-
- mRingerMode = System.getInt(cr, System.MODE_RINGER, AudioManager.RINGER_MODE_NORMAL);
- mRingerModeAffectedStreams = System.getInt(mContentResolver,
- System.MODE_RINGER_STREAMS_AFFECTED, 1 << AudioSystem.STREAM_RING);
-
- mVibrateSetting = System.getInt(cr, System.VIBRATE_ON, 0);
-
- mMuteAffectedStreams = System.getInt(cr,
- System.MUTE_STREAMS_AFFECTED,
- ((1 << AudioSystem.STREAM_MUSIC)|(1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_SYSTEM)));
-
- // Each stream will read its own persisted settings
-
- // Broadcast the sticky intent
- broadcastRingerMode();
-
- // Broadcast vibrate settings
- broadcastVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER);
- broadcastVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION);
- }
-
- private void readAudioSettings() {
- synchronized (mSettingsLock) {
- mMicMute = AudioSystem.isMicrophoneMuted();
- mMode = AudioSystem.getMode();
- for (int mode = 0; mode < AudioSystem.NUM_MODES; mode++) {
- mRoutes[mode] = AudioSystem.getRouting(mode);
- }
- }
- }
-
- private void applyAudioSettings() {
- synchronized (mSettingsLock) {
- AudioSystem.muteMicrophone(mMicMute);
- AudioSystem.setMode(mMode);
- for (int mode = 0; mode < AudioSystem.NUM_MODES; mode++) {
- AudioSystem.setRouting(mode, mRoutes[mode], AudioSystem.ROUTE_ALL);
- }
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // IPC methods
- ///////////////////////////////////////////////////////////////////////////
-
- /** @see AudioManager#adjustVolume(int, int) */
- public void adjustVolume(int direction, int flags) {
- adjustSuggestedStreamVolume(direction, AudioManager.USE_DEFAULT_STREAM_TYPE, flags);
- }
-
- /** @see AudioManager#adjustVolume(int, int, int) */
- public void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags) {
-
- int streamType = getActiveStreamType(suggestedStreamType);
-
- // Don't play sound on other streams
- if (streamType != AudioSystem.STREAM_RING && (flags & AudioManager.FLAG_PLAY_SOUND) != 0) {
- flags &= ~AudioManager.FLAG_PLAY_SOUND;
- }
-
- adjustStreamVolume(streamType, direction, flags);
- }
-
- /** @see AudioManager#adjustStreamVolume(int, int, int) */
- public void adjustStreamVolume(int streamType, int direction, int flags) {
- ensureValidDirection(direction);
- ensureValidStreamType(streamType);
-
- boolean notificationsUseRingVolume = Settings.System.getInt(mContentResolver,
- Settings.System.NOTIFICATIONS_USE_RING_VOLUME, 1) == 1;
- if (notificationsUseRingVolume && streamType == AudioManager.STREAM_NOTIFICATION) {
- // Redirect the volume change to the ring stream
- streamType = AudioManager.STREAM_RING;
- }
-
- VolumeStreamState streamState = mStreamStates[streamType];
- final int oldIndex = streamState.mIndex;
- boolean adjustVolume = true;
-
- // If either the client forces allowing ringer modes for this adjustment,
- // or the stream type is one that is affected by ringer modes
- if ((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0
- || streamType == AudioManager.STREAM_RING) {
- // Check if the ringer mode changes with this volume adjustment. If
- // it does, it will handle adjusting the volume, so we won't below
- adjustVolume = checkForRingerModeChange(oldIndex, direction);
- }
-
- if (adjustVolume && streamState.adjustIndex(direction)) {
-
- boolean alsoUpdateNotificationVolume = notificationsUseRingVolume &&
- streamType == AudioManager.STREAM_RING;
- if (alsoUpdateNotificationVolume) {
- mStreamStates[AudioManager.STREAM_NOTIFICATION].adjustIndex(direction);
- }
-
- // Post message to set system volume (it in turn will post a message
- // to persist). Do not change volume if stream is muted.
- if (streamState.muteCount() == 0) {
- sendMsg(mAudioHandler, MSG_SET_SYSTEM_VOLUME, streamType, SENDMSG_NOOP, 0, 0,
- streamState, 0);
-
- if (alsoUpdateNotificationVolume) {
- sendMsg(mAudioHandler, MSG_SET_SYSTEM_VOLUME, AudioManager.STREAM_NOTIFICATION,
- SENDMSG_NOOP, 0, 0, mStreamStates[AudioManager.STREAM_NOTIFICATION], 0);
- }
- }
- }
-
- // UI
- mVolumePanel.postVolumeChanged(streamType, flags);
- // Broadcast Intent
- sendVolumeUpdate(streamType);
- }
-
- /** @see AudioManager#setStreamVolume(int, int, int) */
- public void setStreamVolume(int streamType, int index, int flags) {
- ensureValidStreamType(streamType);
- syncRingerAndNotificationStreamVolume(streamType, index, false);
-
- setStreamVolumeInt(streamType, index, false);
-
- // UI, etc.
- mVolumePanel.postVolumeChanged(streamType, flags);
- // Broadcast Intent
- sendVolumeUpdate(streamType);
- }
-
- private void sendVolumeUpdate(int streamType) {
- Intent intent = new Intent(AudioManager.VOLUME_CHANGED_ACTION);
- intent.putExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, streamType);
- intent.putExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, getStreamVolume(streamType));
-
- // Currently, sending the intent only when the stream is BLUETOOTH_SCO
- if (streamType == AudioManager.STREAM_BLUETOOTH_SCO) {
- mContext.sendBroadcast(intent);
- }
- }
-
- /**
- * Sync the STREAM_RING and STREAM_NOTIFICATION volumes if mandated by the
- * value in Settings.
- *
- * @param streamType Type of the stream
- * @param index Volume index for the stream
- * @param force If true, set the volume even if the current and desired
- * volume as same
- */
- private void syncRingerAndNotificationStreamVolume(int streamType, int index, boolean force) {
- boolean notificationsUseRingVolume = Settings.System.getInt(mContentResolver,
- Settings.System.NOTIFICATIONS_USE_RING_VOLUME, 1) == 1;
- if (notificationsUseRingVolume) {
- if (streamType == AudioManager.STREAM_NOTIFICATION) {
- // Redirect the volume change to the ring stream
- streamType = AudioManager.STREAM_RING;
- }
- if (streamType == AudioManager.STREAM_RING) {
- // One-off to sync notification volume to ringer volume
- setStreamVolumeInt(AudioManager.STREAM_NOTIFICATION, index, force);
- }
- }
- }
-
-
- /**
- * Sets the stream state's index, and posts a message to set system volume.
- * This will not call out to the UI. Assumes a valid stream type.
- *
- * @param streamType Type of the stream
- * @param index Desired volume index of the stream
- * @param force If true, set the volume even if the desired volume is same
- * as the current volume.
- */
- private void setStreamVolumeInt(int streamType, int index, boolean force) {
- VolumeStreamState streamState = mStreamStates[streamType];
- if (streamState.setIndex(index) || force) {
- // Post message to set system volume (it in turn will post a message
- // to persist). Do not change volume if stream is muted.
- if (streamState.muteCount() == 0) {
- sendMsg(mAudioHandler, MSG_SET_SYSTEM_VOLUME, streamType, SENDMSG_NOOP, 0, 0,
- streamState, 0);
- }
- }
- }
-
- /** @see AudioManager#setStreamSolo(int, boolean) */
- public void setStreamSolo(int streamType, boolean state, IBinder cb) {
- for (int stream = 0; stream < mStreamStates.length; stream++) {
- if (!isStreamAffectedByMute(stream) || stream == streamType) continue;
- // Bring back last audible volume
- mStreamStates[stream].mute(cb, state);
- }
- }
-
- /** @see AudioManager#setStreamMute(int, boolean) */
- public void setStreamMute(int streamType, boolean state, IBinder cb) {
- if (isStreamAffectedByMute(streamType)) {
- mStreamStates[streamType].mute(cb, state);
- }
- }
-
- /** @see AudioManager#getStreamVolume(int) */
- public int getStreamVolume(int streamType) {
- ensureValidStreamType(streamType);
- return mStreamStates[streamType].mIndex;
- }
-
- /** @see AudioManager#getStreamMaxVolume(int) */
- public int getStreamMaxVolume(int streamType) {
- ensureValidStreamType(streamType);
- return mStreamStates[streamType].getMaxIndex();
- }
-
- /** @see AudioManager#getRingerMode() */
- public int getRingerMode() {
- return mRingerMode;
- }
-
- /** @see AudioManager#setRingerMode(int) */
- public void setRingerMode(int ringerMode) {
- if (ringerMode != mRingerMode) {
- mRingerMode = ringerMode;
-
- // Adjust volumes via posting message
- int numStreamTypes = AudioSystem.getNumStreamTypes();
- if (mRingerMode == AudioManager.RINGER_MODE_NORMAL) {
- for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
- if (!isStreamAffectedByRingerMode(streamType)) continue;
- // Bring back last audible volume
- setStreamVolumeInt(streamType, mStreamStates[streamType].mLastAudibleIndex,
- false);
- }
- } else {
- for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
- if (!isStreamAffectedByRingerMode(streamType)) continue;
- // Either silent or vibrate, either way volume is 0
- setStreamVolumeInt(streamType, 0, false);
- }
- }
-
- // Send sticky broadcast
- broadcastRingerMode();
-
- // Post a persist ringer mode msg
- sendMsg(mAudioHandler, MSG_PERSIST_RINGER_MODE, SHARED_MSG,
- SENDMSG_REPLACE, 0, 0, null, PERSIST_DELAY);
- }
- }
-
- /** @see AudioManager#shouldVibrate(int) */
- public boolean shouldVibrate(int vibrateType) {
-
- switch (getVibrateSetting(vibrateType)) {
-
- case AudioManager.VIBRATE_SETTING_ON:
- return mRingerMode != AudioManager.RINGER_MODE_SILENT;
-
- case AudioManager.VIBRATE_SETTING_ONLY_SILENT:
- return mRingerMode == AudioManager.RINGER_MODE_VIBRATE;
-
- case AudioManager.VIBRATE_SETTING_OFF:
- // Phone ringer should always vibrate in vibrate mode
- if (vibrateType == AudioManager.VIBRATE_TYPE_RINGER) {
- return mRingerMode == AudioManager.RINGER_MODE_VIBRATE;
- }
-
- default:
- return false;
- }
- }
-
- /** @see AudioManager#getVibrateSetting(int) */
- public int getVibrateSetting(int vibrateType) {
- return (mVibrateSetting >> (vibrateType * 2)) & 3;
- }
-
- /** @see AudioManager#setVibrateSetting(int, int) */
- public void setVibrateSetting(int vibrateType, int vibrateSetting) {
-
- mVibrateSetting = getValueForVibrateSetting(mVibrateSetting, vibrateType, vibrateSetting);
-
- // Broadcast change
- broadcastVibrateSetting(vibrateType);
-
- // Post message to set ringer mode (it in turn will post a message
- // to persist)
- sendMsg(mAudioHandler, MSG_PERSIST_VIBRATE_SETTING, SHARED_MSG, SENDMSG_NOOP, 0, 0,
- null, 0);
- }
-
- /**
- * @see #setVibrateSetting(int, int)
- * @hide
- */
- public static int getValueForVibrateSetting(int existingValue, int vibrateType,
- int vibrateSetting) {
-
- // First clear the existing setting. Each vibrate type has two bits in
- // the value. Note '3' is '11' in binary.
- existingValue &= ~(3 << (vibrateType * 2));
-
- // Set into the old value
- existingValue |= (vibrateSetting & 3) << (vibrateType * 2);
-
- return existingValue;
- }
-
- /** @see AudioManager#setMicrophoneMute(boolean) */
- public void setMicrophoneMute(boolean on) {
- if (!checkAudioSettingsPermission("setMicrophoneMute()")) {
- return;
- }
- synchronized (mSettingsLock) {
- if (on != mMicMute) {
- AudioSystem.muteMicrophone(on);
- mMicMute = on;
- }
- }
- }
-
- /** @see AudioManager#isMicrophoneMute() */
- public boolean isMicrophoneMute() {
- return mMicMute;
- }
-
- /** @see AudioManager#setMode(int) */
- public void setMode(int mode) {
- if (!checkAudioSettingsPermission("setMode()")) {
- return;
- }
- synchronized (mSettingsLock) {
- if (mode != mMode) {
- AudioSystem.setMode(mode);
- mMode = mode;
- }
- int streamType = getActiveStreamType(AudioManager.USE_DEFAULT_STREAM_TYPE);
- int index = mStreamStates[streamType].mIndex;
- syncRingerAndNotificationStreamVolume(streamType, index, true);
- setStreamVolumeInt(streamType, index, true);
- }
- }
-
- /** @see AudioManager#getMode() */
- public int getMode() {
- return mMode;
- }
-
- /** @see AudioManager#setRouting(int, int, int) */
- public void setRouting(int mode, int routes, int mask) {
- if (!checkAudioSettingsPermission("setRouting()")) {
- return;
- }
- synchronized (mSettingsLock) {
- if ((mRoutes[mode] & mask) != (routes & mask)) {
- AudioSystem.setRouting(mode, routes, mask);
- mRoutes[mode] = (mRoutes[mode] & ~mask) | (routes & mask);
- }
- int streamType = getActiveStreamType(AudioManager.USE_DEFAULT_STREAM_TYPE);
- int index = mStreamStates[streamType].mIndex;
- syncRingerAndNotificationStreamVolume(streamType, index, true);
- setStreamVolumeInt(streamType, index, true);
- }
- }
-
- /** @see AudioManager#getRouting(int) */
- public int getRouting(int mode) {
- return mRoutes[mode];
- }
-
- /** @see AudioManager#isMusicActive() */
- public boolean isMusicActive() {
- return AudioSystem.isMusicActive();
- }
-
- /** @see AudioManager#setParameter(String, String) */
- public void setParameter(String key, String value) {
- AudioSystem.setParameter(key, value);
- }
-
- /** @see AudioManager#playSoundEffect(int) */
- public void playSoundEffect(int effectType) {
- sendMsg(mAudioHandler, MSG_PLAY_SOUND_EFFECT, SHARED_MSG, SENDMSG_NOOP,
- effectType, SOUND_EFFECT_VOLUME, null, 0);
- }
-
- /** @see AudioManager#playSoundEffect(int, float) */
- /* @hide FIXME: unhide before release */
- public void playSoundEffectVolume(int effectType, float volume) {
- sendMsg(mAudioHandler, MSG_PLAY_SOUND_EFFECT, SHARED_MSG, SENDMSG_NOOP,
- effectType, (int) (volume * 1000), null, 0);
- }
-
- /**
- * Loads samples into the soundpool.
- * This method must be called at when sound effects are enabled
- */
- public boolean loadSoundEffects() {
- synchronized (mSoundEffectsLock) {
- mSoundPool = new SoundPool(NUM_SOUNDPOOL_CHANNELS, AudioSystem.STREAM_SYSTEM, 0);
- if (mSoundPool == null) {
- return false;
- }
- /*
- * poolId table: The value -1 in this table indicates that corresponding
- * file (same index in SOUND_EFFECT_FILES[] has not been loaded.
- * Once loaded, the value in poolId is the sample ID and the same
- * sample can be reused for another effect using the same file.
- */
- int[] poolId = new int[SOUND_EFFECT_FILES.length];
- for (int fileIdx = 0; fileIdx < SOUND_EFFECT_FILES.length; fileIdx++) {
- poolId[fileIdx] = -1;
- }
- /*
- * Effects whose value in SOUND_EFFECT_FILES_MAP[effect][1] is -1 must be loaded.
- * If load succeeds, value in SOUND_EFFECT_FILES_MAP[effect][1] is > 0:
- * this indicates we have a valid sample loaded for this effect.
- */
- for (int effect = 0; effect < AudioManager.NUM_SOUND_EFFECTS; effect++) {
- // Do not load sample if this effect uses the MediaPlayer
- if (SOUND_EFFECT_FILES_MAP[effect][1] == 0) {
- continue;
- }
- if (poolId[SOUND_EFFECT_FILES_MAP[effect][0]] == -1) {
- String filePath = Environment.getRootDirectory() + SOUND_EFFECTS_PATH + SOUND_EFFECT_FILES[SOUND_EFFECT_FILES_MAP[effect][0]];
- int sampleId = mSoundPool.load(filePath, 0);
- SOUND_EFFECT_FILES_MAP[effect][1] = sampleId;
- poolId[SOUND_EFFECT_FILES_MAP[effect][0]] = sampleId;
- if (sampleId <= 0) {
- Log.w(TAG, "Soundpool could not load file: "+filePath);
- }
- } else {
- SOUND_EFFECT_FILES_MAP[effect][1] = poolId[SOUND_EFFECT_FILES_MAP[effect][0]];
- }
- }
- }
-
- return true;
- }
-
- /**
- * Unloads samples from the sound pool.
- * This method can be called to free some memory when
- * sound effects are disabled.
- */
- public void unloadSoundEffects() {
- synchronized (mSoundEffectsLock) {
- if (mSoundPool == null) {
- return;
- }
- int[] poolId = new int[SOUND_EFFECT_FILES.length];
- for (int fileIdx = 0; fileIdx < SOUND_EFFECT_FILES.length; fileIdx++) {
- poolId[fileIdx] = 0;
- }
-
- for (int effect = 0; effect < AudioManager.NUM_SOUND_EFFECTS; effect++) {
- if (SOUND_EFFECT_FILES_MAP[effect][1] <= 0) {
- continue;
- }
- if (poolId[SOUND_EFFECT_FILES_MAP[effect][0]] == 0) {
- mSoundPool.unload(SOUND_EFFECT_FILES_MAP[effect][1]);
- SOUND_EFFECT_FILES_MAP[effect][1] = -1;
- poolId[SOUND_EFFECT_FILES_MAP[effect][0]] = -1;
- }
- }
- mSoundPool = null;
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // Internal methods
- ///////////////////////////////////////////////////////////////////////////
-
- /**
- * Checks if the adjustment should change ringer mode instead of just
- * adjusting volume. If so, this will set the proper ringer mode and volume
- * indices on the stream states.
- */
- private boolean checkForRingerModeChange(int oldIndex, int direction) {
- boolean adjustVolumeIndex = true;
- int newRingerMode = mRingerMode;
-
- if (mRingerMode == AudioManager.RINGER_MODE_NORMAL && oldIndex == 1
- && direction == AudioManager.ADJUST_LOWER) {
- newRingerMode = AudioManager.RINGER_MODE_VIBRATE;
- } else if (mRingerMode == AudioManager.RINGER_MODE_VIBRATE) {
- if (direction == AudioManager.ADJUST_RAISE) {
- newRingerMode = AudioManager.RINGER_MODE_NORMAL;
- } else if (direction == AudioManager.ADJUST_LOWER) {
- newRingerMode = AudioManager.RINGER_MODE_SILENT;
- }
- } else if (direction == AudioManager.ADJUST_RAISE
- && mRingerMode == AudioManager.RINGER_MODE_SILENT) {
- newRingerMode = AudioManager.RINGER_MODE_VIBRATE;
- }
-
- if (newRingerMode != mRingerMode) {
- setRingerMode(newRingerMode);
-
- /*
- * If we are changing ringer modes, do not increment/decrement the
- * volume index. Instead, the handler for the message above will
- * take care of changing the index.
- */
- adjustVolumeIndex = false;
- }
-
- return adjustVolumeIndex;
- }
-
- public boolean isStreamAffectedByRingerMode(int streamType) {
- return (mRingerModeAffectedStreams & (1 << streamType)) != 0;
- }
-
- public boolean isStreamAffectedByMute(int streamType) {
- return (mMuteAffectedStreams & (1 << streamType)) != 0;
- }
-
- private void ensureValidDirection(int direction) {
- if (direction < AudioManager.ADJUST_LOWER || direction > AudioManager.ADJUST_RAISE) {
- throw new IllegalArgumentException("Bad direction " + direction);
- }
- }
-
- private void ensureValidStreamType(int streamType) {
- if (streamType < 0 || streamType >= mStreamStates.length) {
- throw new IllegalArgumentException("Bad stream type " + streamType);
- }
- }
-
- private int getActiveStreamType(int suggestedStreamType) {
- boolean isOffhook = false;
- try {
- ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
- if (phone != null) isOffhook = phone.isOffhook();
- } catch (RemoteException e) {
- Log.w(TAG, "Couldn't connect to phone service", e);
- }
-
- if ((getRouting(AudioSystem.MODE_IN_CALL) & AudioSystem.ROUTE_BLUETOOTH_SCO) != 0) {
- // Log.v(TAG, "getActiveStreamType: Forcing STREAM_BLUETOOTH_SCO...");
- return AudioSystem.STREAM_BLUETOOTH_SCO;
- } else if (isOffhook) {
- // Log.v(TAG, "getActiveStreamType: Forcing STREAM_VOICE_CALL...");
- return AudioSystem.STREAM_VOICE_CALL;
- } else if (AudioSystem.isMusicActive()) {
- // Log.v(TAG, "getActiveStreamType: Forcing STREAM_MUSIC...");
- return AudioSystem.STREAM_MUSIC;
- } else if (suggestedStreamType == AudioManager.USE_DEFAULT_STREAM_TYPE) {
- // Log.v(TAG, "getActiveStreamType: Forcing STREAM_RING...");
- return AudioSystem.STREAM_RING;
- } else {
- // Log.v(TAG, "getActiveStreamType: Returning suggested type " + suggestedStreamType);
- return suggestedStreamType;
- }
- }
-
- private void broadcastRingerMode() {
- // Send sticky broadcast
- if (ActivityManagerNative.isSystemReady()) {
- Intent broadcast = new Intent(AudioManager.RINGER_MODE_CHANGED_ACTION);
- broadcast.putExtra(AudioManager.EXTRA_RINGER_MODE, mRingerMode);
- long origCallerIdentityToken = Binder.clearCallingIdentity();
- mContext.sendStickyBroadcast(broadcast);
- Binder.restoreCallingIdentity(origCallerIdentityToken);
- }
- }
-
- private void broadcastVibrateSetting(int vibrateType) {
- // Send broadcast
- if (ActivityManagerNative.isSystemReady()) {
- Intent broadcast = new Intent(AudioManager.VIBRATE_SETTING_CHANGED_ACTION);
- broadcast.putExtra(AudioManager.EXTRA_VIBRATE_TYPE, vibrateType);
- broadcast.putExtra(AudioManager.EXTRA_VIBRATE_SETTING, getVibrateSetting(vibrateType));
- mContext.sendBroadcast(broadcast);
- }
- }
-
- // Message helper methods
- private static int getMsg(int baseMsg, int streamType) {
- return (baseMsg & 0xffff) | streamType << 16;
- }
-
- private static int getMsgBase(int msg) {
- return msg & 0xffff;
- }
-
- private static void sendMsg(Handler handler, int baseMsg, int streamType,
- int existingMsgPolicy, int arg1, int arg2, Object obj, int delay) {
- int msg = (streamType == SHARED_MSG) ? baseMsg : getMsg(baseMsg, streamType);
-
- if (existingMsgPolicy == SENDMSG_REPLACE) {
- handler.removeMessages(msg);
- } else if (existingMsgPolicy == SENDMSG_NOOP && handler.hasMessages(msg)) {
- return;
- }
-
- handler
- .sendMessageDelayed(handler.obtainMessage(msg, arg1, arg2, obj), delay);
- }
-
- boolean checkAudioSettingsPermission(String method) {
- if (mContext.checkCallingOrSelfPermission("android.permission.MODIFY_AUDIO_SETTINGS")
- == PackageManager.PERMISSION_GRANTED) {
- return true;
- }
- String msg = "Audio Settings Permission Denial: " + method + " from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid();
- Log.w(TAG, msg);
- return false;
- }
-
-
- ///////////////////////////////////////////////////////////////////////////
- // Inner classes
- ///////////////////////////////////////////////////////////////////////////
-
- public class VolumeStreamState {
- private final String mVolumeIndexSettingName;
- private final String mLastAudibleVolumeIndexSettingName;
- private final int mStreamType;
-
- private final int[] mVolumes;
- private int mIndex;
- private int mLastAudibleIndex;
- private ArrayList<VolumeDeathHandler> mDeathHandlers; //handles mute/solo requests client death
-
- private VolumeStreamState(String settingName, int streamType, int[] volumes) {
-
- mVolumeIndexSettingName = settingName;
- mLastAudibleVolumeIndexSettingName = settingName + System.APPEND_FOR_LAST_AUDIBLE;
-
- mStreamType = streamType;
- mVolumes = volumes;
-
- final ContentResolver cr = mContentResolver;
- mIndex = getValidIndex(Settings.System.getInt(cr, mVolumeIndexSettingName, AudioManager.DEFAULT_STREAM_VOLUME[streamType]));
- mLastAudibleIndex = getValidIndex(Settings.System.getInt(cr,
- mLastAudibleVolumeIndexSettingName, mIndex > 0 ? mIndex : AudioManager.DEFAULT_STREAM_VOLUME[streamType]));
-
- AudioSystem.setVolume(streamType, volumes[mIndex]);
- mDeathHandlers = new ArrayList<VolumeDeathHandler>();
- }
-
- /**
- * Constructor to be used when there is no setting associated with the VolumeStreamState.
- *
- * @param defaultVolume Default volume of the stream to use.
- * @param streamType Type of the stream.
- * @param volumes Volumes levels associated with this stream.
- */
- private VolumeStreamState(int defaultVolume, int streamType, int[] volumes) {
- mVolumeIndexSettingName = null;
- mLastAudibleVolumeIndexSettingName = null;
- mIndex = mLastAudibleIndex = defaultVolume;
- mStreamType = streamType;
- mVolumes = volumes;
- AudioSystem.setVolume(mStreamType, defaultVolume);
- mDeathHandlers = new ArrayList<VolumeDeathHandler>();
- }
-
- public boolean adjustIndex(int deltaIndex) {
- return setIndex(mIndex + deltaIndex);
- }
-
- public boolean setIndex(int index) {
- int oldIndex = mIndex;
- mIndex = getValidIndex(index);
-
- if (oldIndex != mIndex) {
- if (mIndex > 0) {
- mLastAudibleIndex = mIndex;
- }
- return true;
- } else {
- return false;
- }
- }
-
- public int getMaxIndex() {
- return mVolumes.length - 1;
- }
-
- public void mute(IBinder cb, boolean state) {
- VolumeDeathHandler handler = getDeathHandler(cb, state);
- if (handler == null) {
- Log.e(TAG, "Could not get client death handler for stream: "+mStreamType);
- return;
- }
- handler.mute(state);
- }
-
- private int getValidIndex(int index) {
- if (index < 0) {
- return 0;
- } else if (index >= mVolumes.length) {
- return mVolumes.length - 1;
- }
-
- return index;
- }
-
- private class VolumeDeathHandler implements IBinder.DeathRecipient {
- private IBinder mICallback; // To be notified of client's death
- private int mMuteCount; // Number of active mutes for this client
-
- VolumeDeathHandler(IBinder cb) {
- mICallback = cb;
- }
-
- public void mute(boolean state) {
- synchronized(mDeathHandlers) {
- if (state) {
- if (mMuteCount == 0) {
- // Register for client death notification
- try {
- mICallback.linkToDeath(this, 0);
- mDeathHandlers.add(this);
- // If the stream is not yet muted by any client, set lvel to 0
- if (muteCount() == 0) {
- setIndex(0);
- sendMsg(mAudioHandler, MSG_SET_SYSTEM_VOLUME, mStreamType, SENDMSG_NOOP, 0, 0,
- VolumeStreamState.this, 0);
- }
- } catch (RemoteException e) {
- // Client has died!
- binderDied();
- mDeathHandlers.notify();
- return;
- }
- } else {
- Log.w(TAG, "stream: "+mStreamType+" was already muted by this client");
- }
- mMuteCount++;
- } else {
- if (mMuteCount == 0) {
- Log.e(TAG, "unexpected unmute for stream: "+mStreamType);
- } else {
- mMuteCount--;
- if (mMuteCount == 0) {
- // Unregistr from client death notification
- mDeathHandlers.remove(this);
- mICallback.unlinkToDeath(this, 0);
- if (muteCount() == 0) {
- // If the stream is not mut any more, restore it's volume if
- // ringer mode allows it
- if (!isStreamAffectedByRingerMode(mStreamType) || mRingerMode == AudioManager.RINGER_MODE_NORMAL) {
- setIndex(mLastAudibleIndex);
- sendMsg(mAudioHandler, MSG_SET_SYSTEM_VOLUME, mStreamType, SENDMSG_NOOP, 0, 0,
- VolumeStreamState.this, 0);
- }
- }
- }
- }
- }
- mDeathHandlers.notify();
- }
- }
-
- public void binderDied() {
- Log.w(TAG, "Volume service client died for stream: "+mStreamType);
- if (mMuteCount != 0) {
- // Reset all active mute requests from this client.
- mMuteCount = 1;
- mute(false);
- }
- }
- }
-
- private int muteCount() {
- int count = 0;
- int size = mDeathHandlers.size();
- for (int i = 0; i < size; i++) {
- count += mDeathHandlers.get(i).mMuteCount;
- }
- return count;
- }
-
- private VolumeDeathHandler getDeathHandler(IBinder cb, boolean state) {
- synchronized(mDeathHandlers) {
- VolumeDeathHandler handler;
- int size = mDeathHandlers.size();
- for (int i = 0; i < size; i++) {
- handler = mDeathHandlers.get(i);
- if (cb.equals(handler.mICallback)) {
- return handler;
- }
- }
- // If this is the first mute request for this client, create a new
- // client death handler. Otherwise, it is an out of sequence unmute request.
- if (state) {
- handler = new VolumeDeathHandler(cb);
- } else {
- Log.w(TAG, "stream was not muted by this client");
- handler = null;
- }
- return handler;
- }
- }
- }
-
- /** Thread that handles native AudioSystem control. */
- private class AudioSystemThread extends Thread {
- AudioSystemThread() {
- super("AudioService");
- }
-
- @Override
- public void run() {
- // Set this thread up so the handler will work on it
- Looper.prepare();
-
- synchronized(AudioService.this) {
- mAudioHandler = new AudioHandler();
-
- // Notify that the handler has been created
- AudioService.this.notify();
- }
-
- // Listen for volume change requests that are set by VolumePanel
- Looper.loop();
- }
- }
-
- /** Handles internal volume messages in separate volume thread. */
- private class AudioHandler extends Handler {
-
- private void setSystemVolume(VolumeStreamState streamState) {
-
- // Adjust volume
- AudioSystem
- .setVolume(streamState.mStreamType, streamState.mVolumes[streamState.mIndex]);
-
- // Post a persist volume msg
- sendMsg(mAudioHandler, MSG_PERSIST_VOLUME, streamState.mStreamType,
- SENDMSG_REPLACE, 0, 0, streamState, PERSIST_DELAY);
- }
-
- private void persistVolume(VolumeStreamState streamState) {
- System.putInt(mContentResolver, streamState.mVolumeIndexSettingName,
- streamState.mIndex);
- System.putInt(mContentResolver, streamState.mLastAudibleVolumeIndexSettingName,
- streamState.mLastAudibleIndex);
- }
-
- private void persistRingerMode() {
- System.putInt(mContentResolver, System.MODE_RINGER, mRingerMode);
- }
-
- private void persistVibrateSetting() {
- System.putInt(mContentResolver, System.VIBRATE_ON, mVibrateSetting);
- }
-
- private void playSoundEffect(int effectType, int volume) {
- synchronized (mSoundEffectsLock) {
- if (mSoundPool == null) {
- return;
- }
-
- if (SOUND_EFFECT_FILES_MAP[effectType][1] > 0) {
- float v = (float) volume / 1000.0f;
- mSoundPool.play(SOUND_EFFECT_FILES_MAP[effectType][1], v, v, 0, 0, 1.0f);
- } else {
- MediaPlayer mediaPlayer = new MediaPlayer();
- if (mediaPlayer != null) {
- try {
- String filePath = Environment.getRootDirectory() + SOUND_EFFECTS_PATH + SOUND_EFFECT_FILES[SOUND_EFFECT_FILES_MAP[effectType][0]];
- mediaPlayer.setDataSource(filePath);
- mediaPlayer.setAudioStreamType(AudioSystem.STREAM_SYSTEM);
- mediaPlayer.prepare();
- mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
- public void onCompletion(MediaPlayer mp) {
- cleanupPlayer(mp);
- }
- });
- mediaPlayer.setOnErrorListener(new OnErrorListener() {
- public boolean onError(MediaPlayer mp, int what, int extra) {
- cleanupPlayer(mp);
- return true;
- }
- });
- mediaPlayer.start();
- } catch (IOException ex) {
- Log.w(TAG, "MediaPlayer IOException: "+ex);
- } catch (IllegalArgumentException ex) {
- Log.w(TAG, "MediaPlayer IllegalArgumentException: "+ex);
- } catch (IllegalStateException ex) {
- Log.w(TAG, "MediaPlayer IllegalStateException: "+ex);
- }
- }
- }
- }
- }
-
- private void cleanupPlayer(MediaPlayer mp) {
- if (mp != null) {
- try {
- mp.stop();
- mp.release();
- } catch (IllegalStateException ex) {
- Log.w(TAG, "MediaPlayer IllegalStateException: "+ex);
- }
- }
- }
-
- @Override
- public void handleMessage(Message msg) {
- int baseMsgWhat = getMsgBase(msg.what);
-
- switch (baseMsgWhat) {
-
- case MSG_SET_SYSTEM_VOLUME:
- setSystemVolume((VolumeStreamState) msg.obj);
- break;
-
- case MSG_PERSIST_VOLUME:
- persistVolume((VolumeStreamState) msg.obj);
- break;
-
- case MSG_PERSIST_RINGER_MODE:
- persistRingerMode();
- break;
-
- case MSG_PERSIST_VIBRATE_SETTING:
- persistVibrateSetting();
- break;
-
- case MSG_MEDIA_SERVER_DIED:
- Log.e(TAG, "Media server died.");
- // Force creation of new IAudioflinger interface
- mMediaServerOk = false;
- AudioSystem.getMode();
- break;
-
- case MSG_MEDIA_SERVER_STARTED:
- Log.e(TAG, "Media server started.");
- // Restore audio routing and stream volumes
- applyAudioSettings();
- int numStreamTypes = AudioSystem.getNumStreamTypes();
- for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
- int volume;
- VolumeStreamState streamState = mStreamStates[streamType];
- if (streamState.muteCount() == 0) {
- volume = streamState.mVolumes[streamState.mIndex];
- } else {
- volume = streamState.mVolumes[0];
- }
- AudioSystem.setVolume(streamType, volume);
- }
- setRingerMode(mRingerMode);
- mMediaServerOk = true;
- break;
-
- case MSG_PLAY_SOUND_EFFECT:
- playSoundEffect(msg.arg1, msg.arg2);
- break;
- }
- }
- }
-
-}
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
deleted file mode 100644
index d0fa795..0000000
--- a/media/java/android/media/AudioSystem.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-
-/* IF YOU CHANGE ANY OF THE CONSTANTS IN THIS FILE, DO NOT FORGET
- * TO UPDATE THE CORRESPONDING NATIVE GLUE. THANK YOU FOR YOUR COOPERATION
- */
-
-/**
- * @hide
- */
-public class AudioSystem
-{
- /* FIXME: Need to finalize this and correlate with native layer */
- /*
- * If these are modified, please also update Settings.System.VOLUME_SETTINGS
- * and attrs.xml
- */
- /* The audio stream for phone calls */
- public static final int STREAM_VOICE_CALL = 0;
- /* The audio stream for system sounds */
- public static final int STREAM_SYSTEM = 1;
- /* The audio stream for the phone ring and message alerts */
- public static final int STREAM_RING = 2;
- /* The audio stream for music playback */
- public static final int STREAM_MUSIC = 3;
- /* The audio stream for alarms */
- public static final int STREAM_ALARM = 4;
- /* The audio stream for notifications */
- public static final int STREAM_NOTIFICATION = 5;
- /* @hide The audio stream for phone calls when connected on bluetooth */
- public static final int STREAM_BLUETOOTH_SCO = 6;
- /**
- * @deprecated Use {@link #numStreamTypes() instead}
- */
- public static final int NUM_STREAMS = 5;
-
- // Expose only the getter method publicly so we can change it in the future
- private static final int NUM_STREAM_TYPES = 7;
- public static final int getNumStreamTypes() { return NUM_STREAM_TYPES; }
-
- /* max and min volume levels */
- /* Maximum volume setting, for use with setVolume(int,int) */
- public static final int MAX_VOLUME = 100;
- /* Minimum volume setting, for use with setVolume(int,int) */
- public static final int MIN_VOLUME = 0;
-
- /*
- * Sets the volume of a specified audio stream.
- *
- * param type the stream type to set the volume of (e.g. STREAM_MUSIC)
- * param volume the volume level to set (0-100)
- * return command completion status see AUDIO_STATUS_OK, see AUDIO_STATUS_ERROR
- */
- public static native int setVolume(int type, int volume);
-
- /*
- * Returns the volume of a specified audio stream.
- *
- * param type the stream type to get the volume of (e.g. STREAM_MUSIC)
- * return the current volume (0-100)
- */
- public static native int getVolume(int type);
-
- /*
- * Sets the microphone mute on or off.
- *
- * param on set <var>true</var> to mute the microphone;
- * <var>false</var> to turn mute off
- * return command completion status see AUDIO_STATUS_OK, see AUDIO_STATUS_ERROR
- */
- public static native int muteMicrophone(boolean on);
-
- /*
- * Checks whether the microphone mute is on or off.
- *
- * return true if microphone is muted, false if it's not
- */
- public static native boolean isMicrophoneMuted();
-
- /*
- * Sets the audio mode.
- *
- * param mode the requested audio mode (NORMAL, RINGTONE, or IN_CALL).
- * Informs the HAL about the current audio state so that
- * it can route the audio appropriately.
- * return command completion status see AUDIO_STATUS_OK, see AUDIO_STATUS_ERROR
- */
- public static native int setMode(int mode);
-
- /*
- * Returns the current audio mode.
- *
- * return the current audio mode (NORMAL, RINGTONE, or IN_CALL).
- * Returns the current current audio state from the HAL.
- */
- public static native int getMode();
-
- /* modes for setMode/getMode/setRoute/getRoute */
- public static final int MODE_INVALID = -2;
- public static final int MODE_CURRENT = -1;
- public static final int MODE_NORMAL = 0;
- public static final int MODE_RINGTONE = 1;
- public static final int MODE_IN_CALL = 2;
- public static final int NUM_MODES = 3;
-
-
- /* Routing bits for setRouting/getRouting API */
- public static final int ROUTE_EARPIECE = (1 << 0);
- public static final int ROUTE_SPEAKER = (1 << 1);
-
- /** @deprecated use {@link #ROUTE_BLUETOOTH_SCO} */
- @Deprecated public static final int ROUTE_BLUETOOTH = (1 << 2);
- public static final int ROUTE_BLUETOOTH_SCO = (1 << 2);
- public static final int ROUTE_HEADSET = (1 << 3);
- public static final int ROUTE_BLUETOOTH_A2DP = (1 << 4);
- public static final int ROUTE_ALL = 0xFFFFFFFF;
-
- /*
- * Sets the audio routing for a specified mode
- *
- * param mode audio mode to change route. E.g., MODE_RINGTONE.
- * param routes bit vector of routes requested, created from one or
- * more of ROUTE_xxx types. Set bits indicate that route should be on
- * param mask bit vector of routes to change, created from one or more of
- * ROUTE_xxx types. Unset bits indicate the route should be left unchanged
- * return command completion status see AUDIO_STATUS_OK, see AUDIO_STATUS_ERROR
- */
- public static native int setRouting(int mode, int routes, int mask);
-
- /*
- * Returns the current audio routing bit vector for a specified mode.
- *
- * param mode audio mode to change route (e.g., MODE_RINGTONE)
- * return an audio route bit vector that can be compared with ROUTE_xxx
- * bits
- */
- public static native int getRouting(int mode);
-
- /*
- * Checks whether any music is active.
- *
- * return true if any music tracks are active.
- */
- public static native boolean isMusicActive();
-
- /*
- * Sets a generic audio configuration parameter. The use of these parameters
- * are platform dependant, see libaudio
- *
- * ** Temporary interface - DO NOT USE
- *
- * TODO: Replace with a more generic key:value get/set mechanism
- *
- * param key name of parameter to set. Must not be null.
- * param value value of parameter. Must not be null.
- */
- public static native void setParameter(String key, String value);
-
- /*
- private final static String TAG = "audio";
-
- private void log(String msg) {
- Log.d(TAG, "[AudioSystem] " + msg);
- }
- */
-
- // These match the enum in libs/android_runtime/android_media_AudioSystem.cpp
- /* Command sucessful or Media server restarted. see ErrorCallback */
- public static final int AUDIO_STATUS_OK = 0;
- /* Command failed or unspecified audio error. see ErrorCallback */
- public static final int AUDIO_STATUS_ERROR = 1;
- /* Media server died. see ErrorCallback */
- public static final int AUDIO_STATUS_SERVER_DIED = 100;
-
- private static ErrorCallback mErrorCallback;
-
- /*
- * Handles the audio error callback.
- */
- public interface ErrorCallback
- {
- /*
- * Callback for audio server errors.
- * param error error code:
- * - AUDIO_STATUS_OK
- * - AUDIO_STATUS_SERVER_DIED
- * - UDIO_STATUS_ERROR
- */
- void onError(int error);
- };
-
- /*
- * Registers a callback to be invoked when an error occurs.
- * param cb the callback to run
- */
- public static void setErrorCallback(ErrorCallback cb)
- {
- mErrorCallback = cb;
- }
-
- private static void errorCallbackFromNative(int error)
- {
- if (mErrorCallback != null) {
- mErrorCallback.onError(error);
- }
- }
-}
diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java
deleted file mode 100644
index e32835c..0000000
--- a/media/java/android/media/AudioTrack.java
+++ /dev/null
@@ -1,1027 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import java.lang.ref.WeakReference;
-import java.lang.IllegalArgumentException;
-import java.lang.IllegalStateException;
-
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.media.AudioManager;
-import android.util.Log;
-
-
-/**
- * The AudioTrack class manages and plays a single audio resource for Java applications.
- * It allows to stream PCM audio buffers to the audio hardware for playback. This is
- * achieved by "pushing" the data to the AudioTrack object using one of the
- * {@link #write(byte[], int, int)} and {@link #write(short[], int, int)} methods.
- * <p>An AudioTrack instance can operate under two modes: static of streaming.<br>
- * The Streaming mode consists in continuously writing data to the AudioTrack, using one
- * of the write() methods. These are blocking and return when the data has been transferred
- * from the Java layer to the native layer, and is queued for playback. The streaming mode
- * is most useful when playing blocks of audio data that for instance are:
- * <ul>
- * <li>too big to fit in memory because of the duration of the sound to play,</li>
- * <li>too big to fit in memory because of the characteristics of the audio data
- * (high sampling rate, bits per sample ...)</li>
- * <li>chosen, received or generated as the audio keeps playing.</li>
- * </ul>
- * The static mode is to be chosen when dealing with short sounds that fit in memory and
- * that need to be played with the smallest latency possible. Static mode AudioTrack instances can
- * play the sound without the need to transfer the audio data from Java to the audio hardware
- * each time the sound is to be played. The static mode will therefore be preferred for UI and
- * game sounds that are played often, and with the smallest overhead possible.
- * <p>Upon creation, an AudioTrack object initializes its associated audio buffer.
- * The size of this buffer, specified during the construction, determines how long an AudioTrack
- * can play before running out of data.<br>
- * For an AudioTrack using the static mode, this size is the maximum size of the sound that can
- * be played from it.<br>
- * For the streaming mode, data will be written to the hardware in chunks of
- * sizes inferior to the total buffer size.
- */
-public class AudioTrack
-{
- //---------------------------------------------------------
- // Constants
- //--------------------
- /** Minimum value for a channel volume */
- private static final float VOLUME_MIN = 0.0f;
- /** Maximum value for a channel volume */
- private static final float VOLUME_MAX = 1.0f;
-
- /** state of an AudioTrack this is stopped */
- public static final int PLAYSTATE_STOPPED = 1; // matches SL_PLAYSTATE_STOPPED
- /** state of an AudioTrack this is paused */
- public static final int PLAYSTATE_PAUSED = 2; // matches SL_PLAYSTATE_PAUSED
- /** state of an AudioTrack this is playing */
- public static final int PLAYSTATE_PLAYING = 3; // matches SL_PLAYSTATE_PLAYING
-
- /**
- * Creation mode where audio data is transferred from Java to the native layer
- * only once before the audio starts playing.
- */
- public static final int MODE_STATIC = 0;
- /**
- * Creation mode where audio data is streamed from Java to the native layer
- * as the audio is playing.
- */
- public static final int MODE_STREAM = 1;
-
- /**
- * State of an AudioTrack that was not successfully initialized upon creation
- */
- public static final int STATE_UNINITIALIZED = 0;
- /**
- * State of an AudioTrack that is ready to be used.
- */
- public static final int STATE_INITIALIZED = 1;
- /**
- * State of a successfully initialized AudioTrack that uses static data,
- * but that hasn't received that data yet.
- */
- public static final int STATE_NO_STATIC_DATA = 2;
-
- // Error codes:
- // to keep in sync with frameworks/base/core/jni/android_media_AudioTrack.cpp
- /**
- * Denotes a successful operation.
- */
- public static final int SUCCESS = 0;
- /**
- * Denotes a generic operation failure.
- */
- public static final int ERROR = -1;
- /**
- * Denotes a failure due to the use of an invalid value.
- */
- public static final int ERROR_BAD_VALUE = -2;
- /**
- * Denotes a failure due to the improper use of a method.
- */
- public static final int ERROR_INVALID_OPERATION = -3;
-
- private static final int ERROR_NATIVESETUP_AUDIOSYSTEM = -16;
- private static final int ERROR_NATIVESETUP_INVALIDCHANNELCOUNT = -17;
- private static final int ERROR_NATIVESETUP_INVALIDFORMAT = -18;
- private static final int ERROR_NATIVESETUP_INVALIDSTREAMTYPE = -19;
- private static final int ERROR_NATIVESETUP_NATIVEINITFAILED = -20;
-
- // Events:
- // to keep in sync with frameworks/base/include/media/AudioTrack.h
- /**
- * Event id for when the playback head has reached a previously set marker.
- */
- private static final int NATIVE_EVENT_MARKER = 3;
- /**
- * Event id for when the previously set update period has passed during playback.
- */
- private static final int NATIVE_EVENT_NEW_POS = 4;
-
- private final static String TAG = "AudioTrack-Java";
-
-
- //--------------------------------------------------------------------------
- // Member variables
- //--------------------
- /**
- * Indicates the state of the AudioTrack instance
- */
- private int mState = STATE_UNINITIALIZED;
- /**
- * Indicates the play state of the AudioTrack instance
- */
- private int mPlayState = PLAYSTATE_STOPPED;
- /**
- * Lock to make sure mPlayState updates are reflecting the actual state of the object.
- */
- private final Object mPlayStateLock = new Object();
- /**
- * The listener the AudioTrack notifies previously set marker is reached.
- * @see #setMarkerReachedListener(OnMarkerReachedListener)
- */
- private OnMarkerReachedListener mMarkerListener = null;
- /**
- * Lock to protect marker listener updates against event notifications
- */
- private final Object mMarkerListenerLock = new Object();
- /**
- * The listener the AudioTrack notifies periodically during playback.
- * @see #setPeriodicNotificationListener(OnPeriodicNotificationListener)
- */
- private OnPeriodicNotificationListener mPeriodicListener = null;
- /**
- * Lock to protect periodic listener updates against event notifications
- */
- private final Object mPeriodicListenerLock = new Object();
- /**
- * Size of the native audio buffer.
- */
- private int mNativeBufferSizeInBytes = 0;
- /**
- * Handler for events coming from the native code
- */
- private NativeEventHandler mNativeEventHandler = null;
- /**
- * The audio data sampling rate in Hz.
- */
- private int mSampleRate = 22050;
- /**
- * The number of input audio channels (1 is mono, 2 is stereo)
- */
- private int mChannelCount = 1;
- /**
- * The type of the audio stream to play. See
- * {@link AudioManager#STREAM_VOICE_CALL}, {@link AudioManager#STREAM_SYSTEM},
- * {@link AudioManager#STREAM_RING}, {@link AudioManager#STREAM_MUSIC} and
- * {@link AudioManager#STREAM_ALARM}
- */
- private int mStreamType = AudioManager.STREAM_MUSIC;
- /**
- * The way audio is consumed by the hardware, streaming or static.
- */
- private int mDataLoadMode = MODE_STREAM;
- /**
- * The current audio channel configuration
- */
- private int mChannelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- /**
- * The encoding of the audio samples.
- * @see AudioFormat#ENCODING_PCM_8BIT
- * @see AudioFormat#ENCODING_PCM_16BIT
- */
- private int mAudioFormat = AudioFormat.ENCODING_PCM_16BIT;
-
-
- //--------------------------------
- // Used exclusively by native code
- //--------------------
- /**
- * Accessed by native methods: provides access to C++ AudioTrack object
- */
- @SuppressWarnings("unused")
- private int mNativeTrackInJavaObj;
- /**
- * Accessed by native methods: provides access to the JNI data (i.e. resources used by
- * the native AudioTrack object, but not stored in it).
- */
- @SuppressWarnings("unused")
- private int mJniData;
-
-
- //--------------------------------------------------------------------------
- // Constructor, Finalize
- //--------------------
- /**
- * Class constructor.
- * @param streamType the type of the audio stream. See
-
- * {@link AudioManager#STREAM_VOICE_CALL}, {@link AudioManager#STREAM_SYSTEM},
- * {@link AudioManager#STREAM_RING}, {@link AudioManager#STREAM_MUSIC} and
- * {@link AudioManager#STREAM_ALARM}
- * @param sampleRateInHz the sample rate expressed in Hertz. Examples of rates are (but
- * not limited to) 44100, 22050 and 11025.
- * @param channelConfig describes the configuration of the audio channels.
-
- * See {@link AudioFormat#CHANNEL_CONFIGURATION_MONO} and
- * {@link AudioFormat#CHANNEL_CONFIGURATION_STEREO}
-
- * @param audioFormat the format in which the audio data is represented.
- * See {@link AudioFormat#ENCODING_PCM_16BIT} and
- * {@link AudioFormat#ENCODING_PCM_8BIT}
- * @param bufferSizeInBytes the total size (in bytes) of the buffer where audio data is read
- * from for playback. If using the AudioTrack in streaming mode, you can write data into
- * this buffer in smaller chunks than this size. If using the AudioTrack in static mode,
- * this is the maximum size of the sound that will be played for this instance.
- * @param mode streaming or static buffer. See {@link #MODE_STATIC} and {@link #MODE_STREAM}
- * @throws java.lang.IllegalArgumentException
- */
- public AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat,
- int bufferSizeInBytes, int mode)
- throws IllegalArgumentException {
- mState = STATE_UNINITIALIZED;
-
- audioParamCheck(streamType, sampleRateInHz, channelConfig, audioFormat, mode);
-
- audioBuffSizeCheck(bufferSizeInBytes);
-
- // native initialization
- int initResult = native_setup(new WeakReference<AudioTrack>(this),
- mStreamType, mSampleRate, mChannelCount, mAudioFormat,
- mNativeBufferSizeInBytes, mDataLoadMode);
- if (initResult != SUCCESS) {
- loge("Error code "+initResult+" when initializing AudioTrack.");
- return; // with mState == STATE_UNINITIALIZED
- }
-
- if (mDataLoadMode == MODE_STATIC) {
- mState = STATE_NO_STATIC_DATA;
- } else {
- mState = STATE_INITIALIZED;
- }
- }
-
-
- // Convenience method for the constructor's parameter checks.
- // This is where constructor IllegalArgumentException-s are thrown
- // postconditions:
- // mStreamType is valid
- // mChannelCount is valid
- // mAudioFormat is valid
- // mSampleRate is valid
- // mDataLoadMode is valid
- private void audioParamCheck(int streamType, int sampleRateInHz,
- int channelConfig, int audioFormat, int mode) {
-
- //--------------
- // stream type
- if( (streamType != AudioManager.STREAM_ALARM) && (streamType != AudioManager.STREAM_MUSIC)
- && (streamType != AudioManager.STREAM_RING) && (streamType != AudioManager.STREAM_SYSTEM)
- && (streamType != AudioManager.STREAM_VOICE_CALL)
- && (streamType != AudioManager.STREAM_NOTIFICATION)
- && (streamType != AudioManager.STREAM_BLUETOOTH_SCO)) {
- throw (new IllegalArgumentException("Invalid stream type."));
- } else {
- mStreamType = streamType;
- }
-
- //--------------
- // sample rate
- if ( (sampleRateInHz < 4000) || (sampleRateInHz > 48000) ) {
- throw (new IllegalArgumentException(sampleRateInHz
- + "Hz is not a supported sample rate."));
- } else {
- mSampleRate = sampleRateInHz;
- }
-
- //--------------
- // channel config
- switch (channelConfig) {
- case AudioFormat.CHANNEL_CONFIGURATION_DEFAULT:
- case AudioFormat.CHANNEL_CONFIGURATION_MONO:
- mChannelCount = 1;
- mChannelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- break;
- case AudioFormat.CHANNEL_CONFIGURATION_STEREO:
- mChannelCount = 2;
- mChannelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- break;
- default:
- mChannelCount = 0;
- mChannelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_INVALID;
- throw(new IllegalArgumentException("Unsupported channel configuration."));
- }
-
- //--------------
- // audio format
- switch (audioFormat) {
- case AudioFormat.ENCODING_DEFAULT:
- mAudioFormat = AudioFormat.ENCODING_PCM_16BIT;
- break;
- case AudioFormat.ENCODING_PCM_16BIT:
- case AudioFormat.ENCODING_PCM_8BIT:
- mAudioFormat = audioFormat;
- break;
- default:
- mAudioFormat = AudioFormat.ENCODING_INVALID;
- throw(new IllegalArgumentException("Unsupported sample encoding."
- + " Should be ENCODING_PCM_8BIT or ENCODING_PCM_16BIT."));
- }
-
- //--------------
- // audio load mode
- if ( (mode != MODE_STREAM) && (mode != MODE_STATIC) ) {
- throw(new IllegalArgumentException("Invalid mode."));
- } else {
- mDataLoadMode = mode;
- }
- }
-
-
- // Convenience method for the contructor's audio buffer size check.
- // preconditions:
- // mChannelCount is valid
- // mAudioFormat is valid
- // postcondition:
- // mNativeBufferSizeInBytes is valid (multiple of frame size, positive)
- private void audioBuffSizeCheck(int audioBufferSize) {
- // NB: this section is only valid with PCM data.
- // To update when supporting compressed formats
- int frameSizeInBytes = mChannelCount
- * (mAudioFormat == AudioFormat.ENCODING_PCM_8BIT ? 1 : 2);
- if ((audioBufferSize % frameSizeInBytes != 0) || (audioBufferSize < 1)) {
- throw (new IllegalArgumentException("Invalid audio buffer size."));
- }
-
- mNativeBufferSizeInBytes = audioBufferSize;
- }
-
-
- // Convenience method for the creation of the native event handler
- // It is called only when a non-null event listener is set.
- // precondition:
- // mNativeEventHandler is null
- private void createNativeEventHandler() {
- Looper looper;
- if ((looper = Looper.myLooper()) != null) {
- mNativeEventHandler = new NativeEventHandler(this, looper);
- } else if ((looper = Looper.getMainLooper()) != null) {
- mNativeEventHandler = new NativeEventHandler(this, looper);
- } else {
- mNativeEventHandler = null;
- }
- }
-
-
- /**
- * Releases the native AudioTrack resources.
- */
- public void release() {
- // even though native_release() stops the native AudioTrack, we need to stop
- // AudioTrack subclasses too.
- try {
- stop();
- } catch(IllegalStateException ise) {
- // don't raise an exception, we're releasing the resources.
- }
- native_release();
- mState = STATE_UNINITIALIZED;
- }
-
- @Override
- protected void finalize() {
- native_finalize();
- }
-
- //--------------------------------------------------------------------------
- // Getters
- //--------------------
- /**
- * Returns the minimum valid volume value. Volume values set under this one will
- * be clamped at this value.
- * @return the minimum volume expressed as a linear attenuation.
- */
- static public float getMinVolume() {
- return AudioTrack.VOLUME_MIN;
- }
-
- /**
- * Returns the maximum valid volume value. Volume values set above this one will
- * be clamped at this value.
- * @return the maximum volume expressed as a linear attenuation.
- */
- static public float getMaxVolume() {
- return AudioTrack.VOLUME_MAX;
- }
-
- /**
- * Returns the configured audio data sample rate in Hz
- */
- public int getSampleRate() {
- return mSampleRate;
- }
-
- /**
- * Returns the configured audio data format. See {@link AudioFormat#ENCODING_PCM_16BIT}
- * and {@link AudioFormat#ENCODING_PCM_8BIT}.
- */
- public int getAudioFormat() {
- return mAudioFormat;
- }
-
- /**
- * Returns the type of audio stream this AudioTrack is configured for.
- * Compare the result against {@link AudioManager#STREAM_VOICE_CALL},
- * {@link AudioManager#STREAM_SYSTEM}, {@link AudioManager#STREAM_RING},
- * {@link AudioManager#STREAM_MUSIC} or {@link AudioManager#STREAM_ALARM}
- */
- public int getStreamType() {
- return mStreamType;
- }
-
- /**
- * Returns the configured channel configuration.
-
- * See {@link AudioFormat#CHANNEL_CONFIGURATION_MONO}
- * and {@link AudioFormat#CHANNEL_CONFIGURATION_STEREO}.
- */
- public int getChannelConfiguration() {
- return mChannelConfiguration;
- }
-
- /**
- * Returns the configured number of channels.
- */
- public int getChannelCount() {
- return mChannelCount;
- }
-
- /**
- * Returns the state of the AudioTrack instance. This is useful after the
- * AudioTrack instance has been created to check if it was initialized
- * properly. This ensures that the appropriate hardware resources have been
- * acquired.
- */
- public int getState() {
- return mState;
- }
-
- /**
- * Returns the playback state of the AudioTrack instance.
- * @see #PLAYSTATE_STOPPED
- * @see #PLAYSTATE_PAUSED
- * @see #PLAYSTATE_PLAYING
- */
- public int getPlayState() {
- return mPlayState;
- }
-
- /**
- * Returns the native frame count used by the hardware
- */
- protected int getNativeFrameCount() {
- return native_get_native_frame_count();
- }
-
- /**
- * @return marker position in frames
- */
- public int getNotificationMarkerPosition() {
- return native_get_marker_pos();
- }
-
- /**
- * @return update period in frames
- */
- public int getPositionNotificationPeriod() {
- return native_get_pos_update_period();
- }
-
- /**
- * @return playback head position in frames
- */
- public int getPlaybackHeadPosition() {
- return native_get_position();
- }
-
- /**
- * Returns the hardware output sample rate
- */
- static public int getNativeOutputSampleRate() {
- return native_get_output_sample_rate();
- }
-
- /**
- * {@hide}
- * Returns the minimum buffer size required for the successful creation of an AudioTrack
- * object to be created in the {@link #MODE_STREAM} mode.
- * @param sampleRateInHz the sample rate expressed in Hertz.
- * @param channelConfig describes the configuration of the audio channels.
- * See {@link AudioFormat#CHANNEL_CONFIGURATION_MONO} and
- * {@link AudioFormat#CHANNEL_CONFIGURATION_STEREO}
- * @param audioFormat the format in which the audio data is represented.
- * See {@link AudioFormat#ENCODING_PCM_16BIT} and
- * {@link AudioFormat#ENCODING_PCM_8BIT}
- * @return {@link #ERROR_BAD_VALUE} if an invalid parameter was passed,
- * or {@link #ERROR} if the implementation was unable to query the hardware for its output
- * properties,
- * or the minimum buffer size expressed in number of bytes.
- */
- static public int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat) {
- int channelCount = 0;
- switch(channelConfig) {
- case AudioFormat.CHANNEL_CONFIGURATION_MONO:
- channelCount = 1;
- break;
- case AudioFormat.CHANNEL_CONFIGURATION_STEREO:
- channelCount = 2;
- break;
- default:
- loge("getMinBufferSize(): Invalid channel configuration.");
- return AudioTrack.ERROR_BAD_VALUE;
- }
-
- if ((audioFormat != AudioFormat.ENCODING_PCM_16BIT)
- && (audioFormat != AudioFormat.ENCODING_PCM_8BIT)) {
- loge("getMinBufferSize(): Invalid audio format.");
- return AudioTrack.ERROR_BAD_VALUE;
- }
-
- if ( (sampleRateInHz < 4000) || (sampleRateInHz > 48000) ) {
- loge("getMinBufferSize(): " + sampleRateInHz +"Hz is not a supported sample rate.");
- return AudioTrack.ERROR_BAD_VALUE;
- }
-
- int size = native_get_min_buff_size(sampleRateInHz, channelCount, audioFormat);
- if ((size == -1) || (size == 0)) {
- loge("getMinBufferSize(): error querying hardware");
- return AudioTrack.ERROR;
- }
- else {
- return size;
- }
- }
-
-
- //--------------------------------------------------------------------------
- // Initialization / configuration
- //--------------------
- /**
- * Sets the listener the AudioTrack notifies when a previously set marker is reached.
- * @param listener
- */
- public void setMarkerReachedListener(OnMarkerReachedListener listener) {
- synchronized (mMarkerListenerLock) {
- mMarkerListener = listener;
- }
- if ((listener != null) && (mNativeEventHandler == null)) {
- createNativeEventHandler();
- }
- }
-
-
- /**
- * Sets the listener the AudioTrack notifies periodically during playback.
- * @param listener
- */
- public void setPeriodicNotificationListener(OnPeriodicNotificationListener listener) {
- synchronized (mPeriodicListenerLock) {
- mPeriodicListener = listener;
- }
- if ((listener != null) && (mNativeEventHandler == null)) {
- createNativeEventHandler();
- }
- }
-
-
- /**
- * Sets the specified left/right output volume values on the AudioTrack. Values are clamped
- * to the ({@link #getMinVolume()}, {@link #getMaxVolume()}) interval if outside this range.
- * @param leftVolume output attenuation for the left channel. A value of 0.0f is silence,
- * a value of 1.0f is no attenuation.
- * @param rightVolume output attenuation for the right channel
- * @return error code or success, see {@link #SUCCESS},
- * {@link #ERROR_INVALID_OPERATION}
- */
- public int setStereoVolume(float leftVolume, float rightVolume) {
- if (mState != STATE_INITIALIZED) {
- return ERROR_INVALID_OPERATION;
- }
-
- // clamp the volumes
- if (leftVolume < getMinVolume()) {
- leftVolume = getMinVolume();
- }
- if (leftVolume > getMaxVolume()) {
- leftVolume = getMaxVolume();
- }
- if (rightVolume < getMinVolume()) {
- rightVolume = getMinVolume();
- }
- if (rightVolume > getMaxVolume()) {
- rightVolume = getMaxVolume();
- }
-
- native_setVolume(leftVolume, rightVolume);
-
- return SUCCESS;
- }
-
-
- /**
- * Sets the playback sample rate for this track. This sets the sampling rate at which
- * the audio data will be consumed and played back, not the original sampling rate of the
- * content. Setting it to half the sample rate of the content will cause the playback to
- * last twice as long, but will also result result in a negative pitch shift.
- * The current implementation supports a maximum sample rate of twice the hardware output
- * sample rate (see {@link #getNativeOutputSampleRate()}). Use {@link #getSampleRate()} to
- * check the rate actually used in hardware after potential clamping.
- * @param sampleRateInHz
- * @return error code or success, see {@link #SUCCESS},
- * {@link #ERROR_INVALID_OPERATION}
- */
- public int setPlaybackRate(int sampleRateInHz) {
- if (mState != STATE_INITIALIZED) {
- return ERROR_INVALID_OPERATION;
- }
- native_set_playback_rate(sampleRateInHz);
- return SUCCESS;
- }
-
-
- /**
- *
- * @param markerInFrames marker in frames
- * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE},
- * {@link #ERROR_INVALID_OPERATION}
- */
- public int setNotificationMarkerPosition(int markerInFrames) {
- if (mState != STATE_INITIALIZED) {
- return ERROR_INVALID_OPERATION;
- }
- return native_set_marker_pos(markerInFrames);
- }
-
-
- /**
- * @param periodInFrames update period in frames
- * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_INVALID_OPERATION}
- */
- public int setPositionNotificationPeriod(int periodInFrames) {
- if (mState != STATE_INITIALIZED) {
- return ERROR_INVALID_OPERATION;
- }
- return native_set_pos_update_period(periodInFrames);
- }
-
-
- /**
- * Sets the playback head position. The track must be stopped for the position to be changed.
- * @param positionInFrames playback head position in frames
- * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE},
- * {@link #ERROR_INVALID_OPERATION}
- */
- public int setPlaybackHeadPosition(int positionInFrames) {
- synchronized(mPlayStateLock) {
- if(mPlayState == PLAYSTATE_STOPPED) {
- return native_set_position(positionInFrames);
- } else {
- return ERROR_INVALID_OPERATION;
- }
- }
- }
-
- /**
- * Sets the loop points and the loop count. The loop can be infinite.
- * @param startInFrames loop start marker in frames
- * @param endInFrames loop end marker in frames
- * @param loopCount the number of times the loop is looped.
- * A value of -1 means infinite looping.
- * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE},
- * {@link #ERROR_INVALID_OPERATION}
- */
- public int setLoopPoints(int startInFrames, int endInFrames, int loopCount) {
- return native_set_loop(startInFrames, endInFrames, loopCount);
- }
-
- /**
- * Sets the initialization state of the instance. To be used in an AudioTrack subclass
- * constructor to set a subclass-specific post-initialization state.
- * @param state the state of the AudioTrack instance
- */
- protected void setState(int state) {
- mState = state;
- }
-
-
- //---------------------------------------------------------
- // Transport control methods
- //--------------------
- /**
- * Starts playing an AudioTrack.
- * @throws IllegalStateException
- */
- public void play()
- throws IllegalStateException {
- if (mState != STATE_INITIALIZED) {
- throw(new IllegalStateException("play() called on uninitialized AudioTrack."));
- }
-
- synchronized(mPlayStateLock) {
- native_start();
- mPlayState = PLAYSTATE_PLAYING;
- }
- }
-
- /**
- * Stops playing the audio data.
- * @throws IllegalStateException
- */
- public void stop()
- throws IllegalStateException {
- if (mState != STATE_INITIALIZED) {
- throw(new IllegalStateException("stop() called on uninitialized AudioTrack."));
- }
-
- // stop playing
- synchronized(mPlayStateLock) {
- native_stop();
- mPlayState = PLAYSTATE_STOPPED;
- }
- }
-
- /**
- * Pauses the playback of the audio data.
- * @throws IllegalStateException
- */
- public void pause()
- throws IllegalStateException {
- if (mState != STATE_INITIALIZED) {
- throw(new IllegalStateException("pause() called on uninitialized AudioTrack."));
- }
- //logd("pause()");
-
- // pause playback
- synchronized(mPlayStateLock) {
- native_pause();
- mPlayState = PLAYSTATE_PAUSED;
- }
- }
-
-
- //---------------------------------------------------------
- // Audio data supply
- //--------------------
-
- /**
- * Flushes the audio data currently queued for playback.
- */
-
- public void flush() {
- if (mState == STATE_INITIALIZED) {
- // flush the data in native layer
- native_flush();
- }
-
- }
-
- /**
- * Writes the audio data to the audio hardware for playback.
- * @param audioData the array that holds the data to play.
- * @param offsetInBytes the offset in audioData where the data to play starts.
- * @param sizeInBytes the number of bytes to read in audioData after the offset.
- * @return the number of bytes that were written or -1 if the object wasn't properly
- * initialized.
- */
-
- public int write(byte[] audioData,int offsetInBytes, int sizeInBytes) {
- if ((mDataLoadMode == MODE_STATIC)
- && (mState == STATE_NO_STATIC_DATA)
- && (sizeInBytes > 0)) {
- mState = STATE_INITIALIZED;
- }
- //TODO check if future writes should be forbidden for static tracks
- // or: how to update data for static tracks?
-
- if (mState != STATE_INITIALIZED) {
- return -1;
- }
-
- return native_write_byte(audioData, offsetInBytes, sizeInBytes, mAudioFormat);
- }
-
-
- /**
- * Writes the audio data to the audio hardware for playback.
- * @param audioData the array that holds the data to play.
- * @param offsetInShorts the offset in audioData where the data to play starts.
- * @param sizeInShorts the number of bytes to read in audioData after the offset.
- * @return the number of shorts that were written or -1 if the object wasn't properly
- * initialized.
- */
-
- public int write(short[] audioData, int offsetInShorts, int sizeInShorts) {
- if ((mDataLoadMode == MODE_STATIC)
- && (mState == STATE_NO_STATIC_DATA)
- && (sizeInShorts > 0)) {
- mState = STATE_INITIALIZED;
- }
- //TODO check if future writes should be forbidden for static tracks
- // or: how to update data for static tracks?
-
- if (mState != STATE_INITIALIZED) {
- return -1;
- }
-
- return native_write_short(audioData, offsetInShorts, sizeInShorts, mAudioFormat);
- }
-
-
- /**
- * Notifies the native resource to reuse the audio data already loaded in the native
- * layer. This call is only valid with AudioTrack instances that don't use the streaming
- * model.
- * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE},
- * {@link #ERROR_INVALID_OPERATION}
- */
- public int reloadStaticData() {
- if (mDataLoadMode == MODE_STREAM) {
- return ERROR_INVALID_OPERATION;
- }
- return native_reload_static();
- }
-
-
- //---------------------------------------------------------
- // Interface definitions
- //--------------------
- /**
- * Interface definition for a callback to be invoked when an AudioTrack has
- * reached a notification marker set by setNotificationMarkerPosition().
- */
- public interface OnMarkerReachedListener {
- /**
- * Called on the listener to notify it that the previously set marker has been reached
- * by the playback head.
- */
- void onMarkerReached(AudioTrack track);
- }
-
-
- /**
- * Interface definition for a callback to be invoked for each periodic AudioTrack
- * update during playback. The update interval is set by setPositionNotificationPeriod().
- */
- public interface OnPeriodicNotificationListener {
- /**
- * Called on the listener to periodically notify it that the playback head has reached
- * a multiple of the notification period.
- */
- void onPeriodicNotification(AudioTrack track);
- }
-
-
- //---------------------------------------------------------
- // Inner classes
- //--------------------
- /**
- * Helper class to handle the forwarding of native events to the appropriate listeners
- */
- private class NativeEventHandler extends Handler
- {
- private AudioTrack mAudioTrack;
-
- public NativeEventHandler(AudioTrack mp, Looper looper) {
- super(looper);
- mAudioTrack = mp;
- }
-
- @Override
- public void handleMessage(Message msg) {
- if (mAudioTrack == null) {
- return;
- }
- switch(msg.what) {
- case NATIVE_EVENT_MARKER:
- synchronized (mMarkerListenerLock) {
- if (mAudioTrack.mMarkerListener != null) {
- mAudioTrack.mMarkerListener.onMarkerReached(mAudioTrack);
- }
- }
- break;
- case NATIVE_EVENT_NEW_POS:
- synchronized (mPeriodicListenerLock) {
- if (mAudioTrack.mPeriodicListener != null) {
- mAudioTrack.mPeriodicListener.onPeriodicNotification(mAudioTrack);
- }
- }
- break;
- default:
- Log.e(TAG, "[ android.media.AudioTrack.NativeEventHandler ] " +
- "Unknown event type: " + msg.what);
- break;
- }
- }
- }
-
-
- //---------------------------------------------------------
- // Java methods called from the native side
- //--------------------
- @SuppressWarnings("unused")
- private static void postEventFromNative(Object audiotrack_ref,
- int what, int arg1, int arg2, Object obj) {
- //logd("Event posted from the native side: event="+ what + " args="+ arg1+" "+arg2);
- AudioTrack track = (AudioTrack)((WeakReference)audiotrack_ref).get();
- if (track == null) {
- return;
- }
-
- if (track.mNativeEventHandler != null) {
- Message m = track.mNativeEventHandler.obtainMessage(what, arg1, arg2, obj);
- track.mNativeEventHandler.sendMessage(m);
- }
-
- }
-
-
- //---------------------------------------------------------
- // Native methods called from the Java side
- //--------------------
-
- private native final int native_setup(Object audiotrack_this,
- int streamType, int sampleRate, int nbChannels, int audioFormat,
- int buffSizeInBytes, int mode);
-
- private native final void native_finalize();
-
- private native final void native_release();
-
- private native final void native_start();
-
- private native final void native_stop();
-
- private native final void native_pause();
-
- private native final void native_flush();
-
- private native final int native_write_byte(byte[] audioData,
- int offsetInBytes, int sizeInBytes, int format);
-
- private native final int native_write_short(short[] audioData,
- int offsetInShorts, int sizeInShorts, int format);
-
- private native final int native_reload_static();
-
- private native final int native_get_native_frame_count();
-
- private native final void native_setVolume(float leftVolume, float rightVolume);
-
- private native final void native_set_playback_rate(int sampleRateInHz);
- private native final int native_get_playback_rate();
-
- private native final int native_set_marker_pos(int marker);
- private native final int native_get_marker_pos();
-
- private native final int native_set_pos_update_period(int updatePeriod);
- private native final int native_get_pos_update_period();
-
- private native final int native_set_position(int position);
- private native final int native_get_position();
-
- private native final int native_set_loop(int start, int end, int loopCount);
-
- static private native final int native_get_output_sample_rate();
- static private native final int native_get_min_buff_size(
- int sampleRateInHz, int channelConfig, int audioFormat);
-
-
- //---------------------------------------------------------
- // Utility methods
- //------------------
-
- private static void logd(String msg) {
- Log.d(TAG, "[ android.media.AudioTrack ] " + msg);
- }
-
- private static void loge(String msg) {
- Log.e(TAG, "[ android.media.AudioTrack ] " + msg);
- }
-
-}
diff --git a/media/java/android/media/FaceDetector.java b/media/java/android/media/FaceDetector.java
deleted file mode 100644
index 3b41cf8..0000000
--- a/media/java/android/media/FaceDetector.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.graphics.Bitmap;
-import android.graphics.PointF;
-import android.util.Log;
-
-import java.lang.IllegalArgumentException;
-
-/**
- * Identifies the faces of people in a
- * {@link android.graphics.Bitmap} graphic object.
- */
-public class FaceDetector {
-
- /**
- * A Face contains all the information identifying the location
- * of a face in a bitmap.
- */
- public class Face {
- /** The minimum confidence factor of good face recognition */
- public static final float CONFIDENCE_THRESHOLD = 0.4f;
- /** The x-axis Euler angle of a face. */
- public static final int EULER_X = 0;
- /** The y-axis Euler angle of a face. */
- public static final int EULER_Y = 1;
- /** The z-axis Euler angle of a face. */
- public static final int EULER_Z = 2;
-
- /**
- * Returns a confidence factor between 0 and 1. This indicates how
- * certain what has been found is actually a face. A confidence
- * factor above 0.3 is usually good enough.
- */
- public float confidence() {
- return mConfidence;
- }
- /**
- * Sets the position of the mid-point between the eyes.
- * @param point the PointF coordinates (float values) of the
- * face's mid-point
- */
- public void getMidPoint(PointF point) {
- // don't return a PointF to avoid allocations
- point.set(mMidPointX, mMidPointY);
- }
- /**
- * Returns the distance between the eyes.
- */
- public float eyesDistance() {
- return mEyesDist;
- }
- /**
- * Returns the face's pose. That is, the rotations around either
- * the X, Y or Z axis (the positions in 3-dimensional Euclidean space).
- *
- * @param euler the Euler axis to retrieve an angle from
- * (<var>EULER_X</var>, <var>EULER_Y</var> or
- * <var>EULER_Z</var>)
- * @return the Euler angle of the of the face, for the given axis
- */
- public float pose(int euler) {
- // don't use an array to avoid allocations
- if (euler == EULER_X)
- return mPoseEulerX;
- else if (euler == EULER_Y)
- return mPoseEulerY;
- else if (euler == EULER_Z)
- return mPoseEulerZ;
- throw new IllegalArgumentException();
- }
-
- // private ctor, user not supposed to build this object
- private Face() {
- }
- private float mConfidence;
- private float mMidPointX;
- private float mMidPointY;
- private float mEyesDist;
- private float mPoseEulerX;
- private float mPoseEulerY;
- private float mPoseEulerZ;
- }
-
-
- /**
- * Creates a FaceDetector, configured with the size of the images to
- * be analysed and the maximum number of faces that can be detected.
- * These parameters cannot be changed once the object is constructed.
- *
- * @param width the width of the image
- * @param height the height of the image
- * @param maxFaces the maximum number of faces to identify
- *
- */
- public FaceDetector(int width, int height, int maxFaces)
- {
- if (!sInitialized) {
- return;
- }
- fft_initialize(width, height, maxFaces);
- mWidth = width;
- mHeight = height;
- mMaxFaces = maxFaces;
- mBWBuffer = new byte[width * height];
- }
-
- /**
- * Finds all the faces found in a given {@link android.graphics.Bitmap}.
- * The supplied array is populated with {@link FaceDetector.Face}s for each
- * face found. The bitmap must be in 565 format (for now).
- *
- * @param bitmap the {@link android.graphics.Bitmap} graphic to be analyzed
- * @param faces an array in which to place all found
- * {@link FaceDetector.Face}s. The array must be sized equal
- * to the <var>maxFaces</var> value set at initialization
- * @return the number of faces found
- * @throws IllegalArgumentException if the Bitmap dimensions don't match
- * the dimensions defined at initialization or the given array
- * is not sized equal to the <var>maxFaces</var> value defined
- * at initialization
- */
- public int findFaces(Bitmap bitmap, Face[] faces)
- {
- if (!sInitialized) {
- return 0;
- }
- if (bitmap.getWidth() != mWidth || bitmap.getHeight() != mHeight) {
- throw new IllegalArgumentException(
- "bitmap size doesn't match initialization");
- }
- if (faces.length < mMaxFaces) {
- throw new IllegalArgumentException(
- "faces[] smaller than maxFaces");
- }
-
- int numFaces = fft_detect(bitmap);
- if (numFaces >= mMaxFaces)
- numFaces = mMaxFaces;
- for (int i=0 ; i<numFaces ; i++) {
- if (faces[i] == null)
- faces[i] = new Face();
- fft_get_face(faces[i], i);
- }
- return numFaces;
- }
-
-
- /* no user serviceable parts here ... */
- @Override
- protected void finalize() throws Throwable {
- fft_destroy();
- }
-
- /*
- * We use a class initializer to allow the native code to cache some
- * field offsets.
- */
- private static boolean sInitialized;
- native private static void nativeClassInit();
-
- static {
- sInitialized = false;
- try {
- System.loadLibrary("FFTEm");
- nativeClassInit();
- sInitialized = true;
- } catch (UnsatisfiedLinkError e) {
- Log.d("FFTEm", "face detection library not found!");
- }
- }
-
- native private int fft_initialize(int width, int height, int maxFaces);
- native private int fft_detect(Bitmap bitmap);
- native private void fft_get_face(Face face, int i);
- native private void fft_destroy();
-
- private int mFD;
- private int mSDK;
- private int mDCR;
- private int mWidth;
- private int mHeight;
- private int mMaxFaces;
- private byte mBWBuffer[];
-}
-
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
deleted file mode 100644
index f5e242d..0000000
--- a/media/java/android/media/IAudioService.aidl
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-/**
- * {@hide}
- */
-interface IAudioService {
-
- void adjustVolume(int direction, int flags);
-
- void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags);
-
- void adjustStreamVolume(int streamType, int direction, int flags);
-
- void setStreamVolume(int streamType, int index, int flags);
-
- void setStreamSolo(int streamType, boolean state, IBinder cb);
-
- void setStreamMute(int streamType, boolean state, IBinder cb);
-
- int getStreamVolume(int streamType);
-
- int getStreamMaxVolume(int streamType);
-
- void setRingerMode(int ringerMode);
-
- int getRingerMode();
-
- void setVibrateSetting(int vibrateType, int vibrateSetting);
-
- int getVibrateSetting(int vibrateType);
-
- boolean shouldVibrate(int vibrateType);
-
- void setMicrophoneMute(boolean on);
-
- boolean isMicrophoneMute();
-
- void setMode(int mode);
-
- int getMode();
-
- void setRouting(int mode, int routes, int mask);
-
- int getRouting(int mode);
-
- boolean isMusicActive();
-
- void setParameter(String key, String value);
-
- oneway void playSoundEffect(int effectType);
-
- oneway void playSoundEffectVolume(int effectType, float volume);
-
- boolean loadSoundEffects();
-
- oneway void unloadSoundEffects();
-
-}
diff --git a/media/java/android/media/IMediaScannerListener.aidl b/media/java/android/media/IMediaScannerListener.aidl
deleted file mode 100644
index 4e85563..0000000
--- a/media/java/android/media/IMediaScannerListener.aidl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.net.Uri;
-
-/**
- * {@hide}
- */
-oneway interface IMediaScannerListener
-{
- /**
- * Called when a IMediaScannerService.scanFile() call has completed.
- * @param path the path to the file that has been scanned.
- * @param uri the Uri for the file if the scanning operation succeeded
- * and the file was added to the media database, or null if scanning failed.
- */
- void scanCompleted(String path, in Uri uri);
-}
diff --git a/media/java/android/media/IMediaScannerService.aidl b/media/java/android/media/IMediaScannerService.aidl
deleted file mode 100644
index c531646..0000000
--- a/media/java/android/media/IMediaScannerService.aidl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.media.IMediaScannerListener;
-
-/**
- * {@hide}
- */
-interface IMediaScannerService
-{
- /**
- * Requests the media scanner to scan a file.
- * @param path the path to the file to be scanned.
- * @param mimeType an optional mimeType for the file.
- * If mimeType is null, then the mimeType will be inferred from the file extension.
- * @param listener an optional IMediaScannerListener.
- * If specified, the caller will be notified when scanning is complete via the listener.
- */
- void requestScanFile(String path, String mimeType, in IMediaScannerListener listener);
-
- /**
- * Older API, left in for backward compatibility.
- * Requests the media scanner to scan a file.
- * @param path the path to the file to be scanned.
- * @param mimeType an optional mimeType for the file.
- * If mimeType is null, then the mimeType will be inferred from the file extension.
- */
- void scanFile(String path, String mimeType);
-}
diff --git a/media/java/android/media/JetPlayer.java b/media/java/android/media/JetPlayer.java
deleted file mode 100644
index bfa2f80..0000000
--- a/media/java/android/media/JetPlayer.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-
-import java.io.FileDescriptor;
-import java.lang.ref.WeakReference;
-import java.lang.CloneNotSupportedException;
-
-import android.content.res.AssetFileDescriptor;
-import android.os.Looper;
-import android.os.Handler;
-import android.os.Message;
-import android.util.Log;
-
-/**
- * JetPlayer provides access to JET content playback and control.
- * <p>
- * Use <code>JetPlayer.getJetPlayer()</code> to get an instance of this class.
- *
- */
-public class JetPlayer
-{
- //--------------------------------------------
- // Constants
- //------------------------
- /**
- * The maximum number of simultaneous tracks. Use __link #getMaxTracks()} to
- * access this value.
- */
- private static int MAXTRACKS = 32;
-
- // to keep in sync with the JetPlayer class constants
- // defined in frameworks/base/include/media/JetPlayer.h
- private static final int JET_EVENT = 1;
- private static final int JET_USERID_UPDATE = 2;
- private static final int JET_NUMQUEUEDSEGMENT_UPDATE = 3;
- private static final int JET_PAUSE_UPDATE = 4;
-
- // to keep in sync with external/sonivox/arm-wt-22k/lib_src/jet_data.h
- // Encoding of event information on 32 bits
- private static final int JET_EVENT_VAL_MASK = 0x0000007f; // mask for value
- private static final int JET_EVENT_CTRL_MASK = 0x00003f80; // mask for controller
- private static final int JET_EVENT_CHAN_MASK = 0x0003c000; // mask for channel
- private static final int JET_EVENT_TRACK_MASK = 0x00fc0000; // mask for track number
- private static final int JET_EVENT_SEG_MASK = 0xff000000; // mask for segment ID
- private static final int JET_EVENT_CTRL_SHIFT = 7; // shift to get controller number to bit 0
- private static final int JET_EVENT_CHAN_SHIFT = 14; // shift to get MIDI channel to bit 0
- private static final int JET_EVENT_TRACK_SHIFT = 18; // shift to get track ID to bit 0
- private static final int JET_EVENT_SEG_SHIFT = 24; // shift to get segment ID to bit 0
-
-
- //--------------------------------------------
- // Member variables
- //------------------------
- private EventHandler mNativeEventHandler = null;
-
- /**
- * Lock to protect status listener updates against status change notifications
- */
- private final Object mStatusListenerLock = new Object();
-
- /**
- * Lock to protect the event listener updates against event notifications
- */
- private final Object mEventListenerLock = new Object();
-
- private JetStatusUpdateListener mJetStatusUpdateListener = null;
-
- private JetEventListener mJetEventListener = null;
-
- private static JetPlayer singletonRef;
-
-
- //--------------------------------
- // Used exclusively by native code
- //--------------------
- /**
- * Accessed by native methods: provides access to C++ JetPlayer object
- */
- @SuppressWarnings("unused")
- private int mNativePlayerInJavaObj;
-
-
- //--------------------------------------------
- // Constructor, finalize
- //------------------------
- public static JetPlayer getJetPlayer() {
- if (singletonRef == null)
- singletonRef = new JetPlayer();
- return singletonRef;
- }
-
-
- public Object clone() throws CloneNotSupportedException {
- // JetPlayer is a singleton class,
- // so you can't clone a JetPlayer instance
- throw new CloneNotSupportedException();
- }
-
-
- private JetPlayer() {
-
- native_setup(new WeakReference<JetPlayer>(this),
- JetPlayer.getMaxTracks(),
- 1200); //TODO parametrize this (?)
- }
-
-
- protected void finalize() {
- native_finalize();
- }
-
-
- public void release() {
- native_release();
- }
-
-
- private void createNativeEventHandler() {
- Looper looper;
- if ((looper = Looper.myLooper()) != null) {
- mNativeEventHandler = new EventHandler(this, looper);
- } else if ((looper = Looper.getMainLooper()) != null) {
- mNativeEventHandler = new EventHandler(this, looper);
- } else {
- mNativeEventHandler = null;
- }
- }
-
-
- //--------------------------------------------
- // Getters
- //------------------------
- /**
- * Returns the maximum number of simultaneous MIDI tracks supported by the Jet player
- */
- public static int getMaxTracks() {
- return JetPlayer.MAXTRACKS;
- }
-
-
- //--------------------------------------------
- // Jet functionality
- //------------------------
- public boolean loadJetFile(String path) {
- return native_loadJetFromFile(path);
- }
-
-
- public boolean loadJetFile(AssetFileDescriptor afd) {
- return native_loadJetFromFileD(
- afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
- }
-
-
- public boolean closeJetFile() {
- return native_closeJetFile();
- }
-
-
- public boolean play() {
- return native_playJet();
- }
-
-
- public boolean pause() {
- return native_pauseJet();
- }
-
-
- public boolean queueJetSegment(int segmentNum, int libNum, int repeatCount,
- int transpose, int muteFlags, byte userID) {
- return native_queueJetSegment(segmentNum, libNum, repeatCount,
- transpose, muteFlags, userID);
- }
-
-
- public boolean queueJetSegmentMuteArray(int segmentNum, int libNum, int repeatCount,
- int transpose, boolean[] muteArray, byte userID) {
- if (muteArray.length != JetPlayer.getMaxTracks()) {
- return false;
- }
- return native_queueJetSegmentMuteArray(segmentNum, libNum, repeatCount,
- transpose, muteArray, userID);
- }
-
-
- public boolean setMuteFlags(int muteFlags, boolean sync) {
- return native_setMuteFlags(muteFlags, sync);
- }
-
-
- public boolean setMuteArray(boolean[] muteArray, boolean sync) {
- if(muteArray.length != JetPlayer.getMaxTracks())
- return false;
- return native_setMuteArray(muteArray, sync);
- }
-
-
- public boolean setMuteFlag(int trackId, boolean muteFlag, boolean sync) {
- return native_setMuteFlag(trackId, muteFlag, sync);
- }
-
-
- public boolean triggerClip(int clipId) {
- return native_triggerClip(clipId);
- }
-
-
- public boolean clearQueue() {
- return native_clearQueue();
- }
-
-
- //---------------------------------------------------------
- // Internal class to handle events posted from native code
- //------------------------
- private class EventHandler extends Handler
- {
- private JetPlayer mJet;
-
- public EventHandler(JetPlayer jet, Looper looper) {
- super(looper);
- mJet = jet;
- }
-
- @Override
- public void handleMessage(Message msg) {
- switch(msg.what) {
- case JET_EVENT:
- synchronized (mEventListenerLock) {
- if (mJetEventListener != null) {
- // call the appropriate listener after decoding the event parameters
- // encoded in msg.arg1
- mJetEventListener.onJetEvent(
- mJet,
- (short)((msg.arg1 & JET_EVENT_SEG_MASK) >> JET_EVENT_SEG_SHIFT),
- (byte) ((msg.arg1 & JET_EVENT_TRACK_MASK) >> JET_EVENT_TRACK_SHIFT),
- (byte) ((msg.arg1 & JET_EVENT_CHAN_MASK) >> JET_EVENT_CHAN_SHIFT),
- (byte) ((msg.arg1 & JET_EVENT_CTRL_MASK) >> JET_EVENT_CTRL_SHIFT),
- (byte) (msg.arg1 & JET_EVENT_VAL_MASK) );
- }
- }
- return;
- case JET_USERID_UPDATE:
- synchronized (mStatusListenerLock) {
- if (mJetStatusUpdateListener != null) {
- mJetStatusUpdateListener.onJetUserIdUpdate(mJet, msg.arg1, msg.arg2);
- }
- }
- return;
- case JET_NUMQUEUEDSEGMENT_UPDATE:
- synchronized (mStatusListenerLock) {
- if (mJetStatusUpdateListener != null) {
- mJetStatusUpdateListener.onJetNumQueuedSegmentUpdate(mJet, msg.arg1);
- }
- }
- return;
- case JET_PAUSE_UPDATE:
- synchronized (mStatusListenerLock) {
- if (mJetStatusUpdateListener != null)
- mJetStatusUpdateListener.onJetPauseUpdate(mJet, msg.arg1);
- }
- return;
-
- default:
- loge("Unknown message type " + msg.what);
- return;
- }
- }
- }
-
-
- //--------------------------------------------
- // Jet status update listener
- //------------------------
- public void setStatusUpdateListener(JetStatusUpdateListener listener) {
- synchronized(mStatusListenerLock) {
- mJetStatusUpdateListener = listener;
- }
-
- if ((listener != null) && (mNativeEventHandler == null)) {
- createNativeEventHandler();
- }
- }
-
- /**
- * Handles the notification when the JET status is updated.
- */
- public interface JetStatusUpdateListener {
- /**
- * Callback for when JET's currently playing segment userID is updated.
- *
- * @param player the JET player the status update is coming from
- * @param userId the ID of the currently playing segment
- * @param repeatCount the repetition count for the segment (0 means it plays once)
- */
- void onJetUserIdUpdate(JetPlayer player, int userId, int repeatCount);
-
- /**
- * Callback for when JET's number of queued segments is updated.
- *
- * @param player the JET player the status update is coming from
- * @param nbSegments the number of segments in the JET queue
- */
- void onJetNumQueuedSegmentUpdate(JetPlayer player, int nbSegments);
-
- /**
- * Callback for when JET pause state is updated.
- *
- * @param player the JET player the status update is coming from
- * @param paused indicates whether JET is paused or not
- */
- void onJetPauseUpdate(JetPlayer player, int paused);
- }
-
-
- //--------------------------------------------
- // Jet event listener
- //------------------------
- public void setEventListener(JetEventListener listener) {
- synchronized(mEventListenerLock) {
- mJetEventListener = listener;
- }
-
- if ((listener != null) && (mNativeEventHandler == null)) {
- createNativeEventHandler();
- }
- }
-
- /**
- * Handles the notification when the JET engine generates an event.
- */
- public interface JetEventListener {
- /**
- * Callback for when the JET engine generates a new event.
- *
- * @param player the JET player the event is coming from
- * @param segment 8 bit unsigned value
- * @param track 6 bit unsigned value
- * @param channel 4 bit unsigned value
- * @param controller 7 bit unsigned value
- * @param value 7 bit unsigned value
- */
- void onJetEvent(JetPlayer player,
- short segment, byte track, byte channel, byte controller, byte value);
- }
-
-
- //--------------------------------------------
- // Native methods
- //------------------------
- private native final boolean native_setup(Object Jet_this,
- int maxTracks, int trackBufferSize);
- private native final void native_finalize();
- private native final void native_release();
- private native final boolean native_loadJetFromFile(String pathToJetFile);
- private native final boolean native_loadJetFromFileD(FileDescriptor fd, long offset, long len);
- private native final boolean native_closeJetFile();
- private native final boolean native_playJet();
- private native final boolean native_pauseJet();
- private native final boolean native_queueJetSegment(int segmentNum, int libNum,
- int repeatCount, int transpose, int muteFlags, byte userID);
- private native final boolean native_queueJetSegmentMuteArray(int segmentNum, int libNum,
- int repeatCount, int transpose, boolean[] muteArray, byte userID);
- private native final boolean native_setMuteFlags(int muteFlags, boolean sync);
- private native final boolean native_setMuteArray(boolean[]muteArray, boolean sync);
- private native final boolean native_setMuteFlag(int trackId, boolean muteFlag, boolean sync);
- private native final boolean native_triggerClip(int clipId);
- private native final boolean native_clearQueue();
-
- //---------------------------------------------------------
- // Called exclusively by native code
- //--------------------
- @SuppressWarnings("unused")
- private static void postEventFromNative(Object jetplayer_ref,
- int what, int arg1, int arg2) {
-
- JetPlayer jet = (JetPlayer)((WeakReference)jetplayer_ref).get();
-
- if( (jet!=null) && (jet.mNativeEventHandler!=null) ){
- Message m = jet.mNativeEventHandler.obtainMessage(what, arg1, arg2, null);
- jet.mNativeEventHandler.sendMessage(m);
- }
- }
-
-
- //---------------------------------------------------------
- // Utils
- //--------------------
- private final static String TAG = "JetPlayer-J";
-
- private static void logd(String msg) {
- Log.d(TAG, "[ android.media.JetPlayer ] " + msg);
- }
-
- private static void loge(String msg) {
- Log.e(TAG, "[ android.media.JetPlayer ] " + msg);
- }
-
-}
diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java
deleted file mode 100644
index f05842d..0000000
--- a/media/java/android/media/MediaFile.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.content.ContentValues;
-import android.provider.MediaStore.Audio;
-import android.provider.MediaStore.Images;
-import android.provider.MediaStore.Video;
-
-import java.util.HashMap;
-import java.util.Iterator;
-
-/**
- * MediaScanner helper class.
- *
- * {@hide}
- */
-public class MediaFile {
- // comma separated list of all file extensions supported by the media scanner
- public static String sFileExtensions;
-
- // Audio file types
- public static final int FILE_TYPE_MP3 = 1;
- public static final int FILE_TYPE_M4A = 2;
- public static final int FILE_TYPE_WAV = 3;
- public static final int FILE_TYPE_AMR = 4;
- public static final int FILE_TYPE_AWB = 5;
- public static final int FILE_TYPE_WMA = 6;
- public static final int FILE_TYPE_OGG = 7;
- private static final int FIRST_AUDIO_FILE_TYPE = FILE_TYPE_MP3;
- private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_OGG;
-
- // MIDI file types
- public static final int FILE_TYPE_MID = 11;
- public static final int FILE_TYPE_SMF = 12;
- public static final int FILE_TYPE_IMY = 13;
- private static final int FIRST_MIDI_FILE_TYPE = FILE_TYPE_MID;
- private static final int LAST_MIDI_FILE_TYPE = FILE_TYPE_IMY;
-
- // Video file types
- public static final int FILE_TYPE_MP4 = 21;
- public static final int FILE_TYPE_M4V = 22;
- public static final int FILE_TYPE_3GPP = 23;
- public static final int FILE_TYPE_3GPP2 = 24;
- public static final int FILE_TYPE_WMV = 25;
- private static final int FIRST_VIDEO_FILE_TYPE = FILE_TYPE_MP4;
- private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_WMV;
-
- // Image file types
- public static final int FILE_TYPE_JPEG = 31;
- public static final int FILE_TYPE_GIF = 32;
- public static final int FILE_TYPE_PNG = 33;
- public static final int FILE_TYPE_BMP = 34;
- public static final int FILE_TYPE_WBMP = 35;
- private static final int FIRST_IMAGE_FILE_TYPE = FILE_TYPE_JPEG;
- private static final int LAST_IMAGE_FILE_TYPE = FILE_TYPE_WBMP;
-
- // Playlist file types
- public static final int FILE_TYPE_M3U = 41;
- public static final int FILE_TYPE_PLS = 42;
- public static final int FILE_TYPE_WPL = 43;
- private static final int FIRST_PLAYLIST_FILE_TYPE = FILE_TYPE_M3U;
- private static final int LAST_PLAYLIST_FILE_TYPE = FILE_TYPE_WPL;
-
- static class MediaFileType {
-
- int fileType;
- String mimeType;
-
- MediaFileType(int fileType, String mimeType) {
- this.fileType = fileType;
- this.mimeType = mimeType;
- }
- }
-
- private static HashMap<String, MediaFileType> sFileTypeMap
- = new HashMap<String, MediaFileType>();
- private static HashMap<String, Integer> sMimeTypeMap
- = new HashMap<String, Integer>();
- static void addFileType(String extension, int fileType, String mimeType) {
- sFileTypeMap.put(extension, new MediaFileType(fileType, mimeType));
- sMimeTypeMap.put(mimeType, new Integer(fileType));
- }
- static {
- addFileType("MP3", FILE_TYPE_MP3, "audio/mpeg");
- addFileType("M4A", FILE_TYPE_M4A, "audio/mp4");
- addFileType("WAV", FILE_TYPE_WAV, "audio/x-wav");
- addFileType("AMR", FILE_TYPE_AMR, "audio/amr");
- addFileType("AWB", FILE_TYPE_AWB, "audio/amr-wb");
- addFileType("WMA", FILE_TYPE_WMA, "audio/x-ms-wma");
- addFileType("OGG", FILE_TYPE_OGG, "application/ogg");
- addFileType("OGA", FILE_TYPE_OGG, "application/ogg");
-
- addFileType("MID", FILE_TYPE_MID, "audio/midi");
- addFileType("MIDI", FILE_TYPE_MID, "audio/midi");
- addFileType("XMF", FILE_TYPE_MID, "audio/midi");
- addFileType("RTTTL", FILE_TYPE_MID, "audio/midi");
- addFileType("SMF", FILE_TYPE_SMF, "audio/sp-midi");
- addFileType("IMY", FILE_TYPE_IMY, "audio/imelody");
- addFileType("RTX", FILE_TYPE_MID, "audio/midi");
- addFileType("OTA", FILE_TYPE_MID, "audio/midi");
-
- addFileType("MP4", FILE_TYPE_MP4, "video/mp4");
- addFileType("M4V", FILE_TYPE_M4V, "video/mp4");
- addFileType("3GP", FILE_TYPE_3GPP, "video/3gpp");
- addFileType("3GPP", FILE_TYPE_3GPP, "video/3gpp");
- addFileType("3G2", FILE_TYPE_3GPP2, "video/3gpp2");
- addFileType("3GPP2", FILE_TYPE_3GPP2, "video/3gpp2");
- addFileType("WMV", FILE_TYPE_WMV, "video/x-ms-wmv");
-
- addFileType("JPG", FILE_TYPE_JPEG, "image/jpeg");
- addFileType("JPEG", FILE_TYPE_JPEG, "image/jpeg");
- addFileType("GIF", FILE_TYPE_GIF, "image/gif");
- addFileType("PNG", FILE_TYPE_PNG, "image/png");
- addFileType("BMP", FILE_TYPE_BMP, "image/x-ms-bmp");
- addFileType("WBMP", FILE_TYPE_WBMP, "image/vnd.wap.wbmp");
-
- addFileType("M3U", FILE_TYPE_M3U, "audio/x-mpegurl");
- addFileType("PLS", FILE_TYPE_PLS, "audio/x-scpls");
- addFileType("WPL", FILE_TYPE_WPL, "application/vnd.ms-wpl");
-
- // compute file extensions list for native Media Scanner
- StringBuilder builder = new StringBuilder();
- Iterator<String> iterator = sFileTypeMap.keySet().iterator();
-
- while (iterator.hasNext()) {
- if (builder.length() > 0) {
- builder.append(',');
- }
- builder.append(iterator.next());
- }
- sFileExtensions = builder.toString();
- }
-
- public static final String UNKNOWN_STRING = "<unknown>";
-
- public static boolean isAudioFileType(int fileType) {
- return ((fileType >= FIRST_AUDIO_FILE_TYPE &&
- fileType <= LAST_AUDIO_FILE_TYPE) ||
- (fileType >= FIRST_MIDI_FILE_TYPE &&
- fileType <= LAST_MIDI_FILE_TYPE));
- }
-
- public static boolean isVideoFileType(int fileType) {
- return (fileType >= FIRST_VIDEO_FILE_TYPE &&
- fileType <= LAST_VIDEO_FILE_TYPE);
- }
-
- public static boolean isImageFileType(int fileType) {
- return (fileType >= FIRST_IMAGE_FILE_TYPE &&
- fileType <= LAST_IMAGE_FILE_TYPE);
- }
-
- public static boolean isPlayListFileType(int fileType) {
- return (fileType >= FIRST_PLAYLIST_FILE_TYPE &&
- fileType <= LAST_PLAYLIST_FILE_TYPE);
- }
-
- public static MediaFileType getFileType(String path) {
- int lastDot = path.lastIndexOf(".");
- if (lastDot < 0)
- return null;
- return sFileTypeMap.get(path.substring(lastDot + 1).toUpperCase());
- }
-
- public static int getFileTypeForMimeType(String mimeType) {
- Integer value = sMimeTypeMap.get(mimeType);
- return (value == null ? 0 : value.intValue());
- }
-
-}
diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java
deleted file mode 100644
index c1a0c21..0000000
--- a/media/java/android/media/MediaMetadataRetriever.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.os.ParcelFileDescriptor;
-import java.io.FileDescriptor;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-
-/**
- * MediaMetadataRetriever class provides a unified interface for retrieving
- * frame and meta data from an input media file.
- * {@hide}
- */
-public class MediaMetadataRetriever
-{
- static {
- System.loadLibrary("media_jni");
- }
-
- // The field below is accessed by native methods
- @SuppressWarnings("unused")
- private int mNativeContext;
-
- public MediaMetadataRetriever() {
- native_setup();
- }
-
- /**
- * Call this method before setDataSource() so that the mode becomes
- * effective for subsequent operations. This method can be called only once
- * at the beginning if the intended mode of operation for a
- * MediaMetadataRetriever object remains the same for its whole lifetime,
- * and thus it is unnecessary to call this method each time setDataSource()
- * is called. If this is not never called (which is allowed), by default the
- * intended mode of operation is to both capture frame and retrieve meta
- * data (i.e., MODE_GET_METADATA_ONLY | MODE_CAPTURE_FRAME_ONLY).
- * Often, this may not be what one wants, since doing this has negative
- * performance impact on execution time of a call to setDataSource(), since
- * both types of operations may be time consuming.
- *
- * @param mode The intended mode of operation. Can be any combination of
- * MODE_GET_METADATA_ONLY and MODE_CAPTURE_FRAME_ONLY:
- * 1. MODE_GET_METADATA_ONLY & MODE_CAPTURE_FRAME_ONLY:
- * For neither frame capture nor meta data retrieval
- * 2. MODE_GET_METADATA_ONLY: For meta data retrieval only
- * 3. MODE_CAPTURE_FRAME_ONLY: For frame capture only
- * 4. MODE_GET_METADATA_ONLY | MODE_CAPTURE_FRAME_ONLY:
- * For both frame capture and meta data retrieval
- */
- public native void setMode(int mode);
-
- /**
- * @return the current mode of operation. A negative return value indicates
- * some runtime error has occurred.
- */
- public native int getMode();
-
- /**
- * Sets the data source (file pathname) to use. Call this
- * method before the rest of the methods in this class. This method may be
- * time-consuming.
- *
- * @param path The path of the input media file.
- * @throws IllegalArgumentException If the path is invalid.
- */
- public native void setDataSource(String path) throws IllegalArgumentException;
-
- /**
- * Sets the data source (FileDescriptor) to use. It is the caller's
- * responsibility to close the file descriptor. It is safe to do so as soon
- * as this call returns. Call this method before the rest of the methods in
- * this class. This method may be time-consuming.
- *
- * @param fd the FileDescriptor for the file you want to play
- * @param offset the offset into the file where the data to be played starts,
- * in bytes. It must be non-negative
- * @param length the length in bytes of the data to be played. It must be
- * non-negative.
- * @throws IllegalArgumentException if the arguments are invalid
- */
- public native void setDataSource(FileDescriptor fd, long offset, long length)
- throws IllegalArgumentException;
-
- /**
- * Sets the data source (FileDescriptor) to use. It is the caller's
- * responsibility to close the file descriptor. It is safe to do so as soon
- * as this call returns. Call this method before the rest of the methods in
- * this class. This method may be time-consuming.
- *
- * @param fd the FileDescriptor for the file you want to play
- * @throws IllegalArgumentException if the FileDescriptor is invalid
- */
- public void setDataSource(FileDescriptor fd)
- throws IllegalArgumentException {
- // intentionally less than LONG_MAX
- setDataSource(fd, 0, 0x7ffffffffffffffL);
- }
-
- /**
- * Sets the data source as a content Uri. Call this method before
- * the rest of the methods in this class. This method may be time-consuming.
- *
- * @param context the Context to use when resolving the Uri
- * @param uri the Content URI of the data you want to play
- * @throws IllegalArgumentException if the Uri is invalid
- * @throws SecurityException if the Uri cannot be used due to lack of
- * permission.
- */
- public void setDataSource(Context context, Uri uri)
- throws IllegalArgumentException, SecurityException {
- if (uri == null) {
- throw new IllegalArgumentException();
- }
-
- String scheme = uri.getScheme();
- if(scheme == null || scheme.equals("file")) {
- setDataSource(uri.getPath());
- return;
- }
-
- ParcelFileDescriptor fd = null;
- try {
- ContentResolver resolver = context.getContentResolver();
- try {
- fd = resolver.openFileDescriptor(uri, "r");
- } catch(FileNotFoundException e) {
- throw new IllegalArgumentException();
- }
- if (fd == null) {
- throw new IllegalArgumentException();
- }
- FileDescriptor descriptor = fd.getFileDescriptor();
- if (!descriptor.valid()) {
- throw new IllegalArgumentException();
- }
- setDataSource(descriptor);
- return;
- } catch (SecurityException ex) {
- } finally {
- try {
- if (fd != null) {
- fd.close();
- }
- } catch(IOException ioEx) {
- }
- }
- setDataSource(uri.toString());
- }
-
- /**
- * Call this method after setDataSource(). This method retrieves the
- * meta data value associated with the keyCode.
- *
- * The keyCode currently supported is listed below as METADATA_XXX
- * constants. With any other value, it returns a null pointer.
- *
- * @param keyCode One of the constants listed below at the end of the class.
- * @return The meta data value associate with the given keyCode on success;
- * null on failure.
- */
- public native String extractMetadata(int keyCode);
-
- /**
- * Call this method after setDataSource(). This method finds a
- * representative frame if successful and returns it as a bitmap. This is
- * useful for generating a thumbnail for an input media source.
- *
- * @return A Bitmap containing a representative video frame, which
- * can be null, if such a frame cannot be retrieved.
- */
- public native Bitmap captureFrame();
-
- /**
- * Call this method after setDataSource(). This method finds the optional
- * graphic or album art associated (embedded or external url linked) the
- * related data source.
- *
- * @return null if no such graphic is found.
- */
- public native byte[] extractAlbumArt();
-
- /**
- * Call it when one is done with the object. This method releases the memory
- * allocated internally.
- */
- public native void release();
- private native void native_setup();
-
- private native final void native_finalize();
-
- @Override
- protected void finalize() throws Throwable {
- try {
- native_finalize();
- } finally {
- super.finalize();
- }
- }
-
- public static final int MODE_GET_METADATA_ONLY = 0x01;
- public static final int MODE_CAPTURE_FRAME_ONLY = 0x02;
-
- /*
- * Do not change these values without updating their counterparts
- * in include/media/mediametadataretriever.h!
- */
- public static final int METADATA_KEY_CD_TRACK_NUMBER = 0;
- public static final int METADATA_KEY_ALBUM = 1;
- public static final int METADATA_KEY_ARTIST = 2;
- public static final int METADATA_KEY_AUTHOR = 3;
- public static final int METADATA_KEY_COMPOSER = 4;
- public static final int METADATA_KEY_DATE = 5;
- public static final int METADATA_KEY_GENRE = 6;
- public static final int METADATA_KEY_TITLE = 7;
- public static final int METADATA_KEY_YEAR = 8;
- public static final int METADATA_KEY_DURATION = 9;
- public static final int METADATA_KEY_NUM_TRACKS = 10;
- public static final int METADATA_KEY_IS_DRM_CRIPPLED = 11;
- public static final int METADATA_KEY_CODEC = 12;
- public static final int METADATA_KEY_RATING = 13;
- public static final int METADATA_KEY_COMMENT = 14;
- public static final int METADATA_KEY_COPYRIGHT = 15;
- public static final int METADATA_KEY_BIT_RATE = 16;
- public static final int METADATA_KEY_FRAME_RATE = 17;
- public static final int METADATA_KEY_VIDEO_FORMAT = 18;
- public static final int METADATA_KEY_VIDEO_HEIGHT = 19;
- public static final int METADATA_KEY_VIDEO_WIDTH = 20;
- // Add more here...
-}
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
deleted file mode 100644
index 601557d..0000000
--- a/media/java/android/media/MediaPlayer.java
+++ /dev/null
@@ -1,1203 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.res.AssetFileDescriptor;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.ParcelFileDescriptor;
-import android.os.PowerManager;
-import android.util.Log;
-import android.view.Surface;
-import android.view.SurfaceHolder;
-import android.graphics.Bitmap;
-import android.media.AudioManager;
-
-import java.io.FileDescriptor;
-import java.io.IOException;
-
-import java.lang.ref.WeakReference;
-
-/**
- * MediaPlayer class can be used to control playback
- * of audio/video files and streams. An example on how to use the methods in
- * this class can be found in {@link android.widget.VideoView}.
- * Please see <a href="{@docRoot}guide/topics/media/index.html">Audio and Video</a>
- * for additional help using MediaPlayer.
- *
- * <p>Topics covered here are:
- * <ol>
- * <li><a href="#StateDiagram">State Diagram</a>
- * <li><a href="#Valid_and_Invalid_States">Valid and Invalid States</a>
- * <li><a href="#Permissions">Permissions</a>
- * </ol>
- *
- * <a name="StateDiagram"></a>
- * <h3>State Diagram</h3>
- *
- * <p>Playback control of audio/video files and streams is managed as a state
- * machine. The following diagram shows the life cycle and the states of a
- * MediaPlayer object driven by the supported playback control operations.
- * The ovals represent the states a MediaPlayer object may reside
- * in. The arcs represent the playback control operations that drive the object
- * state transition. There are two types of arcs. The arcs with a single arrow
- * head represent synchronous method calls, while those with
- * a double arrow head represent asynchronous method calls.</p>
- *
- * <p><img src="../../../images/mediaplayer_state_diagram.gif"
- * alt="MediaPlayer State diagram"
- * border="0" /></p>
- *
- * <p>From this state diagram, one can see that a MediaPlayer object has the
- * following states:</p>
- * <ul>
- * <li>When a MediaPlayer object is just created using <code>new</code> or
- * after {@link #reset()} is called, it is in the <em>Idle</em> state; and after
- * {@link #release()} is called, it is in the <em>End</em> state. Between these
- * two states is the life cycle of the MediaPlayer object.
- * <ul>
- * <li>There is a subtle but important difference between a newly constructed
- * MediaPlayer object and the MediaPlayer object after {@link #reset()}
- * is called. It is a programming error to invoke methods such
- * as {@link #getCurrentPosition()},
- * {@link #getDuration()}, {@link #getVideoHeight()},
- * {@link #getVideoWidth()}, {@link #setAudioStreamType(int)},
- * {@link #setLooping(boolean)},
- * {@link #setVolume(float, float)}, {@link #pause()}, {@link #start()},
- * {@link #stop()}, {@link #seekTo(int)}, {@link #prepare()} or
- * {@link #prepareAsync()} in the <em>Idle</em> state for both cases. If any of these
- * methods is called right after a MediaPlayer object is constructed,
- * the user supplied callback method OnErrorListener.onError() won't be
- * called by the internal player engine and the object state remains
- * unchanged; but if these methods are called right after {@link #reset()},
- * the user supplied callback method OnErrorListener.onError() will be
- * invoked by the internal player engine and the object will be
- * transfered to the <em>Error</em> state. </li>
- * <li>It is also recommended that once
- * a MediaPlayer object is no longer being used, call {@link #release()} immediately
- * so that resources used by the internal player engine associated with the
- * MediaPlayer object can be released immediately. Resource may include
- * singleton resources such as hardware acceleration components and
- * failure to call {@link #release()} may cause subsequent instances of
- * MediaPlayer objects to fallback to software implementations or fail
- * altogether. Once the MediaPlayer
- * object is in the <em>End</em> state, it can no longer be used and
- * there is no way to bring it back to any other state. </li>
- * <li>Furthermore,
- * the MediaPlayer objects created using <code>new</code> is in the
- * <em>Idle</em> state, while those created with one
- * of the overloaded convenient <code>create</code> methods are <em>NOT</em>
- * in the <em>Idle</em> state. In fact, the objects are in the <em>Prepared</em>
- * state if the creation using <code>create</code> method is successful.
- * </li>
- * </ul>
- * </li>
- * <li>In general, some playback control operation may fail due to various
- * reasons, such as unsupported audio/video format, poorly interleaved
- * audio/video, resolution too high, streaming timeout, and the like.
- * Thus, error reporting and recovery is an important concern under
- * these circumstances. Sometimes, due to programming errors, invoking a playback
- * control operation in an invalid state may also occur. Under all these
- * error conditions, the internal player engine invokes a user supplied
- * OnErrorListener.onError() method if an OnErrorListener has been
- * registered beforehand via
- * {@link #setOnErrorListener(android.media.MediaPlayer.OnErrorListener)}.
- * <ul>
- * <li>It is important to note that once an error occurs, the
- * MediaPlayer object enters the <em>Error</em> state (except as noted
- * above), even if an error listener has not been registered by the application.</li>
- * <li>In order to reuse a MediaPlayer object that is in the <em>
- * Error</em> state and recover from the error,
- * {@link #reset()} can be called to restore the object to its <em>Idle</em>
- * state.</li>
- * <li>It is good programming practice to have your application
- * register a OnErrorListener to look out for error notifications from
- * the internal player engine.</li>
- * <li>IlleglStateException is
- * thrown to prevent programming errors such as calling {@link #prepare()},
- * {@link #prepareAsync()}, or one of the overloaded <code>setDataSource
- * </code> methods in an invalid state. </li>
- * </ul>
- * </li>
- * <li>Calling
- * {@link #setDataSource(FileDescriptor)}, or
- * {@link #setDataSource(String)}, or
- * {@link #setDataSource(Context, Uri)}, or
- * {@link #setDataSource(FileDescriptor, long, long)} transfers a
- * MediaPlayer object in the <em>Idle</em> state to the
- * <em>Initialized</em> state.
- * <ul>
- * <li>An IllegalStateException is thrown if
- * setDataSource() is called in any other state.</li>
- * <li>It is good programming
- * practice to always look out for <code>IllegalArgumentException</code>
- * and <code>IOException</code> that may be thrown from the overloaded
- * <code>setDataSource</code> methods.</li>
- * </ul>
- * </li>
- * <li>A MediaPlayer object must first enter the <em>Prepared</em> state
- * before playback can be started.
- * <ul>
- * <li>There are two ways (synchronous vs.
- * asynchronous) that the <em>Prepared</em> state can be reached:
- * either a call to {@link #prepare()} (synchronous) which
- * transfers the object to the <em>Prepared</em> state once the method call
- * returns, or a call to {@link #prepareAsync()} (asynchronous) which
- * first transfers the object to the <em>Preparing</em> state after the
- * call returns (which occurs almost right way) while the internal
- * player engine continues working on the rest of preparation work
- * until the preparation work completes. When the preparation completes or when {@link #prepare()} call returns,
- * the internal player engine then calls a user supplied callback method,
- * onPrepared() of the OnPreparedListener interface, if an
- * OnPreparedListener is registered beforehand via {@link
- * #setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)}.</li>
- * <li>It is important to note that
- * the <em>Preparing</em> state is a transient state, and the behavior
- * of calling any method with side effect while a MediaPlayer object is
- * in the <em>Preparing</em> state is undefined.</li>
- * <li>An IllegalStateException is
- * thrown if {@link #prepare()} or {@link #prepareAsync()} is called in
- * any other state.</li>
- * <li>While in the <em>Prepared</em> state, properties
- * such as audio/sound volume, screenOnWhilePlaying, looping can be
- * adjusted by invoking the corresponding set methods.</li>
- * </ul>
- * </li>
- * <li>To start the playback, {@link #start()} must be called. After
- * {@link #start()} returns successfully, the MediaPlayer object is in the
- * <em>Started</em> state. {@link #isPlaying()} can be called to test
- * whether the MediaPlayer object is in the <em>Started</em> state.
- * <ul>
- * <li>While in the <em>Started</em> state, the internal player engine calls
- * a user supplied OnBufferingUpdateListener.onBufferingUpdate() callback
- * method if a OnBufferingUpdateListener has been registered beforehand
- * via {@link #setOnBufferingUpdateListener(OnBufferingUpdateListener)}.
- * This callback allows applications to keep track of the buffering status
- * while streaming audio/video.</li>
- * <li>Calling {@link #start()} has not effect
- * on a MediaPlayer object that is already in the <em>Started</em> state.</li>
- * </ul>
- * </li>
- * <li>Playback can be paused and stopped, and the current playback position
- * can be adjusted. Playback can be paused via {@link #pause()}. When the call to
- * {@link #pause()} returns, the MediaPlayer object enters the
- * <em>Paused</em> state. Note that the transition from the <em>Started</em>
- * state to the <em>Paused</em> state and vice versa happens
- * asynchronously in the player engine. It may take some time before
- * the state is updated in calls to {@link #isPlaying()}, and it can be
- * a number of seconds in the case of streamed content.
- * <ul>
- * <li>Calling {@link #start()} to resume playback for a paused
- * MediaPlayer object, and the resumed playback
- * position is the same as where it was paused. When the call to
- * {@link #start()} returns, the paused MediaPlayer object goes back to
- * the <em>Started</em> state.</li>
- * <li>Calling {@link #pause()} has no effect on
- * a MediaPlayer object that is already in the <em>Paused</em> state.</li>
- * </ul>
- * </li>
- * <li>Calling {@link #stop()} stops playback and causes a
- * MediaPlayer in the <em>Started</em>, <em>Paused</em>, <em>Prepared
- * </em> or <em>PlaybackCompleted</em> state to enter the
- * <em>Stopped</em> state.
- * <ul>
- * <li>Once in the <em>Stopped</em> state, playback cannot be started
- * until {@link #prepare()} or {@link #prepareAsync()} are called to set
- * the MediaPlayer object to the <em>Prepared</em> state again.</li>
- * <li>Calling {@link #stop()} has no effect on a MediaPlayer
- * object that is already in the <em>Stopped</em> state.</li>
- * </ul>
- * </li>
- * <li>The playback position can be adjusted with a call to
- * {@link #seekTo(int)}.
- * <ul>
- * <li>Although the asynchronuous {@link #seekTo(int)}
- * call returns right way, the actual seek operation may take a while to
- * finish, especially for audio/video being streamed. When the actual
- * seek operation completes, the internal player engine calls a user
- * supplied OnSeekComplete.onSeekComplete() if an OnSeekCompleteListener
- * has been registered beforehand via
- * {@link #setOnSeekCompleteListener(OnSeekCompleteListener)}.</li>
- * <li>Please
- * note that {@link #seekTo(int)} can also be called in the other states,
- * such as <em>Prepared</em>, <em>Paused</em> and <em>PlaybackCompleted
- * </em> state.</li>
- * <li>Furthermore, the actual current playback position
- * can be retrieved with a call to {@link #getCurrentPosition()}, which
- * is helpful for applications such as a Music player that need to keep
- * track of the playback progress.</li>
- * </ul>
- * </li>
- * <li>When the playback reaches the end of stream, the playback completes.
- * <ul>
- * <li>If the looping mode was being set to <var>true</var>with
- * {@link #setLooping(boolean)}, the MediaPlayer object shall remain in
- * the <em>Started</em> state.</li>
- * <li>If the looping mode was set to <var>false
- * </var>, the player engine calls a user supplied callback method,
- * OnCompletion.onCompletion(), if a OnCompletionListener is registered
- * beforehand via {@link #setOnCompletionListener(OnCompletionListener)}.
- * The invoke of the callback signals that the object is now in the <em>
- * PlaybackCompleted</em> state.</li>
- * <li>While in the <em>PlaybackCompleted</em>
- * state, calling {@link #start()} can restart the playback from the
- * beginning of the audio/video source.</li>
- * </ul>
- *
- *
- * <a name="Valid_and_Invalid_States"></a>
- * <h3>Valid and invalid states</h3>
- *
- * <table border="0" cellspacing="0" cellpadding="0">
- * <tr><td>Method Name </p></td>
- * <td>Valid Sates </p></td>
- * <td>Invalid States </p></td>
- * <td>Comments </p></td></tr>
- * <tr><td>getCurrentPosition </p></td>
- * <td>{Idle, Initialized, Prepared, Started, Paused, Stopped,
- * PlaybackCompleted} </p></td>
- * <td>{Error}</p></td>
- * <td>Successful invoke of this method in a valid state does not change the
- * state. Calling this method in an invalid state transfers the object
- * to the <em>Error</em> state. </p></td></tr>
- * <tr><td>getDuration </p></td>
- * <td>{Prepared, Started, Paused, Stopped, PlaybackCompleted} </p></td>
- * <td>{Idle, Initialized, Error} </p></td>
- * <td>Successful invoke of this method in a valid state does not change the
- * state. Calling this method in an invalid state transfers the object
- * to the <em>Error</em> state. </p></td></tr>
- * <tr><td>getVideoHeight </p></td>
- * <td>{Idle, Initialized, Prepared, Started, Paused, Stopped,
- * PlaybackCompleted}</p></td>
- * <td>{Error}</p></td>
- * <td>Successful invoke of this method in a valid state does not change the
- * state. Calling this method in an invalid state transfers the object
- * to the <em>Error</em> state. </p></td></tr>
- * <tr><td>getVideoWidth </p></td>
- * <td>{Idle, Initialized, Prepared, Started, Paused, Stopped,
- * PlaybackCompleted}</p></td>
- * <td>{Error}</p></td>
- * <td>Successful invoke of this method in a valid state does not change
- * the state. Calling this method in an invalid state transfers the
- * object to the <em>Error</em> state. </p></td></tr>
- * <tr><td>isPlaying </p></td>
- * <td>{Idle, Initialized, Prepared, Started, Paused, Stopped,
- * PlaybackCompleted}</p></td>
- * <td>{Error}</p></td>
- * <td>Successful invoke of this method in a valid state does not change
- * the state. Calling this method in an invalid state transfers the
- * object to the <em>Error</em> state. </p></td></tr>
- * <tr><td>pause </p></td>
- * <td>{Started, Paused}</p></td>
- * <td>{Idle, Initialized, Prepared, Stopped, PlaybackCompleted, Error}</p></td>
- * <td>Successful invoke of this method in a valid state transfers the
- * object to the <em>Paused</em> state. Calling this method in an
- * invalid state transfers the object to the <em>Error</em> state.</p></td></tr>
- * <tr><td>prepare </p></td>
- * <td>{Initialized, Stopped} </p></td>
- * <td>{Idle, Prepared, Started, Paused, PlaybackCompleted, Error} </p></td>
- * <td>Successful invoke of this method in a valid state transfers the
- * object to the <em>Prepared</em> state. Calling this method in an
- * invalid state throws an IllegalStateException.</p></td></tr>
- * <tr><td>prepareAsync </p></td>
- * <td>{Initialized, Stopped} </p></td>
- * <td>{Idle, Prepared, Started, Paused, PlaybackCompleted, Error} </p></td>
- * <td>Successful invoke of this method in a valid state transfers the
- * object to the <em>Preparing</em> state. Calling this method in an
- * invalid state throws an IllegalStateException.</p></td></tr>
- * <tr><td>release </p></td>
- * <td>any </p></td>
- * <td>{} </p></td>
- * <td>After {@link #release()}, the object is no longer available. </p></td></tr>
- * <tr><td>reset </p></td>
- * <td>{Idle, Initialized, Prepared, Started, Paused, Stopped,
- * PlaybackCompleted, Error}</p></td>
- * <td>{}</p></td>
- * <td>After {@link #reset()}, the object is like being just created.</p></td></tr>
- * <tr><td>seekTo </p></td>
- * <td>{Prepared, Started, Paused, PlaybackCompleted} </p></td>
- * <td>{Idle, Initialized, Stopped, Error}</p></td>
- * <td>Successful invoke of this method in a valid state does not change
- * the state. Calling this method in an invalid state transfers the
- * object to the <em>Error</em> state. </p></td></tr>
- * <tr><td>setAudioStreamType </p></td>
- * <td>{Idle, Initialized, Stopped, Prepared, Started, Paused,
- * PlaybackCompleted}</p></td>
- * <td>{Error}</p></td>
- * <td>Successful invoke of this method does not change the state.</p></td></tr>
- * <tr><td>setDataSource </p></td>
- * <td>{Idle} </p></td>
- * <td>{Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted,
- * Error} </p></td>
- * <td>Successful invoke of this method in a valid state transfers the
- * object to the <em>Initialized</em> state. Calling this method in an
- * invalid state throws an IllegalStateException.</p></td></tr>
- * <tr><td>setDisplay </p></td>
- * <td>any </p></td>
- * <td>{} </p></td>
- * <td>This method can be called in any state and calling it does not change
- * the object state. </p></td></tr>
- * <tr><td>setLooping </p></td>
- * <td>{Idle, Initialized, Stopped, Prepared, Started, Paused,
- * PlaybackCompleted}</p></td>
- * <td>{Error}</p></td>
- * <td>Successful invoke of this method in a valid state does not change
- * the state. Calling this method in an
- * invalid state transfers the object to the <em>Error</em> state.</p></td></tr>
- * <tr><td>isLooping </p></td>
- * <td>any </p></td>
- * <td>{} </p></td>
- * <td>This method can be called in any state and calling it does not change
- * the object state. </p></td></tr>
- * <tr><td>setOnBufferingUpdateListener </p></td>
- * <td>any </p></td>
- * <td>{} </p></td>
- * <td>This method can be called in any state and calling it does not change
- * the object state. </p></td></tr>
- * <tr><td>setOnCompletionListener </p></td>
- * <td>any </p></td>
- * <td>{} </p></td>
- * <td>This method can be called in any state and calling it does not change
- * the object state. </p></td></tr>
- * <tr><td>setOnErrorListener </p></td>
- * <td>any </p></td>
- * <td>{} </p></td>
- * <td>This method can be called in any state and calling it does not change
- * the object state. </p></td></tr>
- * <tr><td>setOnPreparedListener </p></td>
- * <td>any </p></td>
- * <td>{} </p></td>
- * <td>This method can be called in any state and calling it does not change
- * the object state. </p></td></tr>
- * <tr><td>setOnSeekCompleteListener </p></td>
- * <td>any </p></td>
- * <td>{} </p></td>
- * <td>This method can be called in any state and calling it does not change
- * the object state. </p></td></tr>
- * <tr><td>setScreenOnWhilePlaying</></td>
- * <td>any </p></td>
- * <td>{} </p></td>
- * <td>This method can be called in any state and calling it does not change
- * the object state. </p></td></tr>
- * <tr><td>setVolume </p></td>
- * <td>{Idle, Initialized, Stopped, Prepared, Started, Paused,
- * PlaybackCompleted}</p></td>
- * <td>{Error}</p></td>
- * <td>Successful invoke of this method does not change the state.
- * <tr><td>setWakeMode </p></td>
- * <td>any </p></td>
- * <td>{} </p></td>
- * <td>This method can be called in any state and calling it does not change
- * the object state.</p></td></tr>
- * <tr><td>start </p></td>
- * <td>{Prepared, Started, Paused, PlaybackCompleted}</p></td>
- * <td>{Idle, Initialized, Stopped, Error}</p></td>
- * <td>Successful invoke of this method in a valid state transfers the
- * object to the <em>Started</em> state. Calling this method in an
- * invalid state transfers the object to the <em>Error</em> state.</p></td></tr>
- * <tr><td>stop </p></td>
- * <td>{Prepared, Started, Stopped, Paused, PlaybackCompleted}</p></td>
- * <td>{Idle, Initialized, Error}</p></td>
- * <td>Successful invoke of this method in a valid state transfers the
- * object to the <em>Stopped</em> state. Calling this method in an
- * invalid state transfers the object to the <em>Error</em> state.</p></td></tr>
- * </table>
- *
- * <a name="Permissions"></a>
- * <h3>Permissions</h3>
- * <p>One may need to declare a corresponding WAKE_LOCK permission {@link
- * android.R.styleable#AndroidManifestUsesPermission &lt;uses-permission&gt;}
- * element.
- *
- */
-public class MediaPlayer
-{
- static {
- System.loadLibrary("media_jni");
- }
-
- private final static String TAG = "MediaPlayer";
-
- private int mNativeContext; // accessed by native methods
- private int mListenerContext; // accessed by native methods
- private Surface mSurface; // accessed by native methods
- private SurfaceHolder mSurfaceHolder;
- private EventHandler mEventHandler;
- private PowerManager.WakeLock mWakeLock = null;
- private boolean mScreenOnWhilePlaying;
- private boolean mStayAwake;
-
- /**
- * Default constructor. Consider using one of the create() methods for
- * synchronously instantiating a MediaPlayer from a Uri or resource.
- * <p>When done with the MediaPlayer, you should call {@link #release()},
- * to free the resources. If not released, too many MediaPlayer instances may
- * result in an exception.</p>
- */
- public MediaPlayer() {
-
- Looper looper;
- if ((looper = Looper.myLooper()) != null) {
- mEventHandler = new EventHandler(this, looper);
- } else if ((looper = Looper.getMainLooper()) != null) {
- mEventHandler = new EventHandler(this, looper);
- } else {
- mEventHandler = null;
- }
-
- /* Native setup requires a weak reference to our object.
- * It's easier to create it here than in C++.
- */
- native_setup(new WeakReference<MediaPlayer>(this));
- }
-
- /**
- * Sets the SurfaceHolder to use for displaying the video portion of the media.
- * This call is optional. Not calling it when playing back a video will
- * result in only the audio track being played.
- *
- * @param sh the SurfaceHolder to use for video display
- */
- public void setDisplay(SurfaceHolder sh) {
- mSurfaceHolder = sh;
- mSurface = sh.getSurface();
- updateSurfaceScreenOn();
- }
-
- /**
- * Convenience method to create a MediaPlayer for a given Uri.
- * On success, {@link #prepare()} will already have been called and must not be called again.
- * <p>When done with the MediaPlayer, you should call {@link #release()},
- * to free the resources. If not released, too many MediaPlayer instances will
- * result in an exception.</p>
- *
- * @param context the Context to use
- * @param uri the Uri from which to get the datasource
- * @return a MediaPlayer object, or null if creation failed
- */
- public static MediaPlayer create(Context context, Uri uri) {
- return create (context, uri, null);
- }
-
- /**
- * Convenience method to create a MediaPlayer for a given Uri.
- * On success, {@link #prepare()} will already have been called and must not be called again.
- * <p>When done with the MediaPlayer, you should call {@link #release()},
- * to free the resources. If not released, too many MediaPlayer instances will
- * result in an exception.</p>
- *
- * @param context the Context to use
- * @param uri the Uri from which to get the datasource
- * @param holder the SurfaceHolder to use for displaying the video
- * @return a MediaPlayer object, or null if creation failed
- */
- public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder) {
-
- try {
- MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(context, uri);
- if (holder != null) {
- mp.setDisplay(holder);
- }
- mp.prepare();
- return mp;
- } catch (IOException ex) {
- Log.d(TAG, "create failed:", ex);
- // fall through
- } catch (IllegalArgumentException ex) {
- Log.d(TAG, "create failed:", ex);
- // fall through
- } catch (SecurityException ex) {
- Log.d(TAG, "create failed:", ex);
- // fall through
- }
-
- return null;
- }
-
- /**
- * Convenience method to create a MediaPlayer for a given resource id.
- * On success, {@link #prepare()} will already have been called and must not be called again.
- * <p>When done with the MediaPlayer, you should call {@link #release()},
- * to free the resources. If not released, too many MediaPlayer instances will
- * result in an exception.</p>
- *
- * @param context the Context to use
- * @param resid the raw resource id (<var>R.raw.&lt;something></var>) for
- * the resource to use as the datasource
- * @return a MediaPlayer object, or null if creation failed
- */
- public static MediaPlayer create(Context context, int resid) {
- try {
- AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
- if (afd == null) return null;
-
- MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
- afd.close();
- mp.prepare();
- return mp;
- } catch (IOException ex) {
- Log.d(TAG, "create failed:", ex);
- // fall through
- } catch (IllegalArgumentException ex) {
- Log.d(TAG, "create failed:", ex);
- // fall through
- } catch (SecurityException ex) {
- Log.d(TAG, "create failed:", ex);
- // fall through
- }
- return null;
- }
-
- /**
- * Sets the data source as a content Uri.
- *
- * @param context the Context to use when resolving the Uri
- * @param uri the Content URI of the data you want to play
- * @throws IllegalStateException if it is called in an invalid state
- */
- public void setDataSource(Context context, Uri uri)
- throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
-
- String scheme = uri.getScheme();
- if(scheme == null || scheme.equals("file")) {
- setDataSource(uri.getPath());
- return;
- }
-
- ParcelFileDescriptor fd = null;
- try {
- ContentResolver resolver = context.getContentResolver();
- fd = resolver.openFileDescriptor(uri, "r");
- if (fd == null) {
- return;
- }
- setDataSource(fd.getFileDescriptor());
- return;
- } catch (SecurityException ex) {
- } catch (IOException ex) {
- } finally {
- if (fd != null) {
- fd.close();
- }
- }
- setDataSource(uri.toString());
- return;
- }
-
- /**
- * Sets the data source (file-path or http/rtsp URL) to use.
- *
- * @param path the path of the file, or the http/rtsp URL of the stream you want to play
- * @throws IllegalStateException if it is called in an invalid state
- */
- public native void setDataSource(String path) throws IOException, IllegalArgumentException, IllegalStateException;
-
- /**
- * Sets the data source (FileDescriptor) to use. It is the caller's responsibility
- * to close the file descriptor. It is safe to do so as soon as this call returns.
- *
- * @param fd the FileDescriptor for the file you want to play
- * @throws IllegalStateException if it is called in an invalid state
- */
- public void setDataSource(FileDescriptor fd)
- throws IOException, IllegalArgumentException, IllegalStateException {
- // intentionally less than LONG_MAX
- setDataSource(fd, 0, 0x7ffffffffffffffL);
- }
-
- /**
- * Sets the data source (FileDescriptor) to use. It is the caller's responsibility
- * to close the file descriptor. It is safe to do so as soon as this call returns.
- *
- * @param fd the FileDescriptor for the file you want to play
- * @param offset the offset into the file where the data to be played starts, in bytes
- * @param length the length in bytes of the data to be played
- * @throws IllegalStateException if it is called in an invalid state
- */
- public native void setDataSource(FileDescriptor fd, long offset, long length)
- throws IOException, IllegalArgumentException, IllegalStateException;
-
- /**
- * Prepares the player for playback, synchronously.
- *
- * After setting the datasource and the display surface, you need to either
- * call prepare() or prepareAsync(). For files, it is OK to call prepare(),
- * which blocks until MediaPlayer is ready for playback.
- *
- * @throws IllegalStateException if it is called in an invalid state
- */
- public native void prepare() throws IOException, IllegalStateException;
-
- /**
- * Prepares the player for playback, asynchronously.
- *
- * After setting the datasource and the display surface, you need to either
- * call prepare() or prepareAsync(). For streams, you should call prepareAsync(),
- * which returns immediately, rather than blocking until enough data has been
- * buffered.
- *
- * @throws IllegalStateException if it is called in an invalid state
- */
- public native void prepareAsync() throws IllegalStateException;
-
- /**
- * Starts or resumes playback. If playback had previously been paused,
- * playback will continue from where it was paused. If playback had
- * been stopped, or never started before, playback will start at the
- * beginning.
- *
- * @throws IllegalStateException if it is called in an invalid state
- */
- public void start() throws IllegalStateException {
- stayAwake(true);
- _start();
- }
-
- private native void _start() throws IllegalStateException;
-
- /**
- * Stops playback after playback has been stopped or paused.
- *
- * @throws IllegalStateException if the internal player engine has not been
- * initialized.
- */
- public void stop() throws IllegalStateException {
- stayAwake(false);
- _stop();
- }
-
- private native void _stop() throws IllegalStateException;
-
- /**
- * Pauses playback. Call start() to resume.
- *
- * @throws IllegalStateException if the internal player engine has not been
- * initialized.
- */
- public void pause() throws IllegalStateException {
- stayAwake(false);
- _pause();
- }
-
- private native void _pause() throws IllegalStateException;
-
- /**
- * Set the low-level power management behavior for this MediaPlayer. This
- * can be used when the MediaPlayer is not playing through a SurfaceHolder
- * set with {@link #setDisplay(SurfaceHolder)} and thus can use the
- * high-level {@link #setScreenOnWhilePlaying(boolean)} feature.
- *
- * <p>This function has the MediaPlayer access the low-level power manager
- * service to control the device's power usage while playing is occurring.
- * The parameter is a combination of {@link android.os.PowerManager} wake flags.
- * Use of this method requires {@link android.Manifest.permission#WAKE_LOCK}
- * permission.
- * By default, no attempt is made to keep the device awake during playback.
- *
- * @param context the Context to use
- * @param mode the power/wake mode to set
- * @see android.os.PowerManager
- */
- public void setWakeMode(Context context, int mode) {
- boolean washeld = false;
- if (mWakeLock != null) {
- if (mWakeLock.isHeld()) {
- washeld = true;
- mWakeLock.release();
- }
- mWakeLock = null;
- }
-
- PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
- mWakeLock = pm.newWakeLock(mode|PowerManager.ON_AFTER_RELEASE, MediaPlayer.class.getName());
- mWakeLock.setReferenceCounted(false);
- if (washeld) {
- mWakeLock.acquire();
- }
- }
-
- /**
- * Control whether we should use the attached SurfaceHolder to keep the
- * screen on while video playback is occurring. This is the preferred
- * method over {@link #setWakeMode} where possible, since it doesn't
- * require that the application have permission for low-level wake lock
- * access.
- *
- * @param screenOn Supply true to keep the screen on, false to allow it
- * to turn off.
- */
- public void setScreenOnWhilePlaying(boolean screenOn) {
- if (mScreenOnWhilePlaying != screenOn) {
- mScreenOnWhilePlaying = screenOn;
- updateSurfaceScreenOn();
- }
- }
-
- private void stayAwake(boolean awake) {
- if (mWakeLock != null) {
- if (awake && !mWakeLock.isHeld()) {
- mWakeLock.acquire();
- } else if (!awake && mWakeLock.isHeld()) {
- mWakeLock.release();
- }
- }
- mStayAwake = awake;
- updateSurfaceScreenOn();
- }
-
- private void updateSurfaceScreenOn() {
- if (mSurfaceHolder != null) {
- mSurfaceHolder.setKeepScreenOn(mScreenOnWhilePlaying && mStayAwake);
- }
- }
-
- /**
- * Returns the width of the video.
- *
- * @return the width of the video, or 0 if there is no video,
- * no display surface was set, or prepare()/prepareAsync()
- * have not completed yet
- */
- public native int getVideoWidth();
-
- /**
- * Returns the height of the video.
- *
- * @return the height of the video, or 0 if there is no video,
- * no display surface was set, or prepare()/prepareAsync()
- * have not completed yet
- */
- public native int getVideoHeight();
-
- /**
- * Checks whether the MediaPlayer is playing.
- *
- * @return true if currently playing, false otherwise
- */
- public native boolean isPlaying();
-
- /**
- * Seeks to specified time position.
- *
- * @param msec the offset in milliseconds from the start to seek to
- * @throws IllegalStateException if the internal player engine has not been
- * initialized
- */
- public native void seekTo(int msec) throws IllegalStateException;
-
- /**
- * Gets the current playback position.
- *
- * @return the current position in milliseconds
- */
- public native int getCurrentPosition();
-
- /**
- * Gets the duration of the file.
- *
- * @return the duration in milliseconds
- */
- public native int getDuration();
-
- /**
- * Releases resources associated with this MediaPlayer object.
- * It is considered good practice to call this method when you're
- * done using the MediaPlayer.
- */
- public void release() {
- if (mWakeLock != null) mWakeLock.release();
- updateSurfaceScreenOn();
- mOnPreparedListener = null;
- mOnBufferingUpdateListener = null;
- mOnCompletionListener = null;
- mOnSeekCompleteListener = null;
- mOnErrorListener = null;
- mOnVideoSizeChangedListener = null;
- _release();
- }
-
- private native void _release();
-
- /**
- * Resets the MediaPlayer to its uninitialized state. After calling
- * this method, you will have to initialize it again by setting the
- * data source and calling prepare().
- */
- public void reset() {
- _reset();
- // make sure none of the listeners get called anymore
- mEventHandler.removeCallbacksAndMessages(null);
- }
-
- private native void _reset();
-
- /**
- * Sets the audio stream type for this MediaPlayer. See {@link AudioManager}
- * for a list of stream types.
- *
- * @param streamtype the audio stream type
- * @see android.media.AudioManager
- */
- public native void setAudioStreamType(int streamtype);
-
- /**
- * Sets the player to be looping or non-looping.
- *
- * @param looping whether to loop or not
- */
- public native void setLooping(boolean looping);
-
- /**
- * Checks whether the MediaPlayer is looping or non-looping.
- *
- * @return true if the MediaPlayer is currently looping, false otherwise
- */
- public native boolean isLooping();
-
- /**
- * Sets the volume on this player.
- * This API is recommended for balancing the output of audio streams
- * within an application. Unless you are writing an application to
- * control user settings, this API should be used in preference to
- * {@link AudioManager#setStreamVolume(int, int, int)} which sets the volume of ALL streams of
- * a particular type. Note that the passed volume values are raw scalars.
- * UI controls should be scaled logarithmically.
- *
- * @param leftVolume left volume scalar
- * @param rightVolume right volume scalar
- */
- public native void setVolume(float leftVolume, float rightVolume);
-
- /**
- * Currently not implemented, returns null.
- * @deprecated
- * @hide
- */
- public native Bitmap getFrameAt(int msec) throws IllegalStateException;
-
- private native final void native_setup(Object mediaplayer_this);
- private native final void native_finalize();
- @Override
- protected void finalize() { native_finalize(); }
-
- /* Do not change these values without updating their counterparts
- * in include/media/mediaplayer.h!
- */
- private static final int MEDIA_NOP = 0; // interface test message
- private static final int MEDIA_PREPARED = 1;
- private static final int MEDIA_PLAYBACK_COMPLETE = 2;
- private static final int MEDIA_BUFFERING_UPDATE = 3;
- private static final int MEDIA_SEEK_COMPLETE = 4;
- private static final int MEDIA_SET_VIDEO_SIZE = 5;
- private static final int MEDIA_ERROR = 100;
-
- // error codes from framework that indicate content issues
- // contained in arg1 of error message
-
- // Seek not supported - live stream
- private static final int ERROR_SEEK_NOT_SUPPORTED = 42;
-
- // A/V interleave exceeds the progressive streaming buffer
- private static final int ERROR_CONTENT_IS_POORLY_INTERLEAVED = 43;
-
- // video decoder is falling behind - content is too complex
- private static final int ERROR_VIDEO_TRACK_IS_FALLING_BEHIND = 44;
-
- private class EventHandler extends Handler
- {
- private MediaPlayer mMediaPlayer;
-
- public EventHandler(MediaPlayer mp, Looper looper) {
- super(looper);
- mMediaPlayer = mp;
- }
-
- @Override
- public void handleMessage(Message msg) {
- if (mMediaPlayer.mNativeContext == 0) {
- Log.w(TAG, "mediaplayer went away with unhandled events");
- return;
- }
- switch(msg.what) {
- case MEDIA_PREPARED:
- if (mOnPreparedListener != null)
- mOnPreparedListener.onPrepared(mMediaPlayer);
- return;
-
- case MEDIA_PLAYBACK_COMPLETE:
- if (mOnCompletionListener != null)
- mOnCompletionListener.onCompletion(mMediaPlayer);
- stayAwake(false);
- return;
-
- case MEDIA_BUFFERING_UPDATE:
- if (mOnBufferingUpdateListener != null)
- mOnBufferingUpdateListener.onBufferingUpdate(mMediaPlayer, msg.arg1);
- return;
-
- case MEDIA_SEEK_COMPLETE:
- if (mOnSeekCompleteListener != null)
- mOnSeekCompleteListener.onSeekComplete(mMediaPlayer);
- return;
-
- case MEDIA_SET_VIDEO_SIZE:
- if (mOnVideoSizeChangedListener != null)
- mOnVideoSizeChangedListener.onVideoSizeChanged(mMediaPlayer, msg.arg1, msg.arg2);
- return;
-
- case MEDIA_ERROR:
- Log.e(TAG, "Error (" + msg.arg1 + "," + msg.arg2 + ")");
- boolean error_was_handled = false;
- if (mOnErrorListener != null) {
- error_was_handled = mOnErrorListener.onError(mMediaPlayer, msg.arg1, msg.arg2);
- }
- if (mOnCompletionListener != null && ! error_was_handled) {
- mOnCompletionListener.onCompletion(mMediaPlayer);
- }
- stayAwake(false);
- return;
- case MEDIA_NOP: // interface test message - ignore
- break;
-
- default:
- Log.e(TAG, "Unknown message type " + msg.what);
- return;
- }
- }
- }
-
- /**
- * Called from native code when an interesting event happens. This method
- * just uses the EventHandler system to post the event back to the main app thread.
- * We use a weak reference to the original MediaPlayer object so that the native
- * code is safe from the object disappearing from underneath it. (This is
- * the cookie passed to native_setup().)
- */
- private static void postEventFromNative(Object mediaplayer_ref,
- int what, int arg1, int arg2, Object obj)
- {
- MediaPlayer mp = (MediaPlayer)((WeakReference)mediaplayer_ref).get();
- if (mp == null) {
- return;
- }
-
- if (mp.mEventHandler != null) {
- Message m = mp.mEventHandler.obtainMessage(what, arg1, arg2, obj);
- mp.mEventHandler.sendMessage(m);
- }
- }
-
- /**
- * Interface definition for a callback to be invoked when the media
- * source is ready for playback.
- */
- public interface OnPreparedListener
- {
- /**
- * Called when the media file is ready for playback.
- *
- * @param mp the MediaPlayer that is ready for playback
- */
- void onPrepared(MediaPlayer mp);
- }
-
- /**
- * Register a callback to be invoked when the media source is ready
- * for playback.
- *
- * @param l the callback that will be run
- */
- public void setOnPreparedListener(OnPreparedListener l)
- {
- mOnPreparedListener = l;
- }
-
- private OnPreparedListener mOnPreparedListener;
-
- /**
- * Interface definition for a callback to be invoked when playback of
- * a media source has completed.
- */
- public interface OnCompletionListener
- {
- /**
- * Called when the end of a media source is reached during playback.
- *
- * @param mp the MediaPlayer that reached the end of the file
- */
- void onCompletion(MediaPlayer mp);
- }
-
- /**
- * Register a callback to be invoked when the end of a media source
- * has been reached during playback.
- *
- * @param l the callback that will be run
- */
- public void setOnCompletionListener(OnCompletionListener l)
- {
- mOnCompletionListener = l;
- }
-
- private OnCompletionListener mOnCompletionListener;
-
- /**
- * Interface definition of a callback to be invoked indicating buffering
- * status of a media resource being streamed over the network.
- */
- public interface OnBufferingUpdateListener
- {
- /**
- * Called to update status in buffering a media stream.
- *
- * @param mp the MediaPlayer the update pertains to
- * @param percent the percentage (0-100) of the buffer
- * that has been filled thus far
- */
- void onBufferingUpdate(MediaPlayer mp, int percent);
- }
-
- /**
- * Register a callback to be invoked when the status of a network
- * stream's buffer has changed.
- *
- * @param l the callback that will be run
- */
- public void setOnBufferingUpdateListener(OnBufferingUpdateListener l)
- {
- mOnBufferingUpdateListener = l;
- }
-
- private OnBufferingUpdateListener mOnBufferingUpdateListener;
-
- /**
- * Interface definition of a callback to be invoked indicating
- * the completion of a seek operation.
- */
- public interface OnSeekCompleteListener
- {
- /**
- * Called to indicate the completion of a seek operation.
- *
- * @param mp the MediaPlayer that issued the seek operation
- */
- public void onSeekComplete(MediaPlayer mp);
- }
-
- /**
- * Register a callback to be invoked when a seek operation has been
- * completed.
- *
- * @param l the callback that will be run
- */
- public void setOnSeekCompleteListener(OnSeekCompleteListener l)
- {
- mOnSeekCompleteListener = l;
- }
-
- private OnSeekCompleteListener mOnSeekCompleteListener;
-
- /**
- * Interface definition of a callback to be invoked when the
- * video size is first known or updated
- * FIXME: Unhide this API after approval
- * @hide
- */
- public interface OnVideoSizeChangedListener
- {
- /**
- * Called to indicate the video size
- *
- * @param mp the MediaPlayer associated with this callback
- * @param width the width of the video
- * @param height the height of the video
- * @hide
- */
- public void onVideoSizeChanged(MediaPlayer mp, int width, int height);
- }
-
- /**
- * Register a callback to be invoked when the video size is
- * known or updated.
- *
- * @param l the callback that will be run
- * @hide
- */
- public void setOnVideoSizeChangedListener(OnVideoSizeChangedListener l)
- {
- mOnVideoSizeChangedListener = l;
- }
-
- private OnVideoSizeChangedListener mOnVideoSizeChangedListener;
-
- /* Do not change these values without updating their counterparts
- * in include/media/mediaplayer.h!
- */
- /** Unspecified media player error.
- * @see android.media.MediaPlayer.OnErrorListener
- */
- public static final int MEDIA_ERROR_UNKNOWN = 1;
- /** Media server died. In this case, the application must release the
- * MediaPlayer object and instantiate a new one.
- * @see android.media.MediaPlayer.OnErrorListener
- */
- public static final int MEDIA_ERROR_SERVER_DIED = 100;
-
-
- /**
- * Interface definition of a callback to be invoked when there
- * has been an error during an asynchronous operation (other errors
- * will throw exceptions at method call time).
- */
- public interface OnErrorListener
- {
- /**
- * Called to indicate an error.
- *
- * @param mp the MediaPlayer the error pertains to
- * @param what the type of error that has occurred:
- * <ul>
- * <li>{@link #MEDIA_ERROR_UNKNOWN}
- * <li>{@link #MEDIA_ERROR_SERVER_DIED}
- * </ul>
- * @param extra an extra code, specific to the error type
- * @return True if the method handled the error, false if it didn't.
- * Returning false, or not having an OnErrorListener at all, will
- * cause the OnCompletionListener to be called.
- */
- boolean onError(MediaPlayer mp, int what, int extra);
- }
-
- /**
- * Register a callback to be invoked when an error has happened
- * during an asynchronous operation.
- *
- * @param l the callback that will be run
- */
- public void setOnErrorListener(OnErrorListener l)
- {
- mOnErrorListener = l;
- }
-
- private OnErrorListener mOnErrorListener;
-}
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
deleted file mode 100644
index 3609826..0000000
--- a/media/java/android/media/MediaRecorder.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.view.Surface;
-import android.hardware.Camera;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileDescriptor;
-import android.util.Log;
-
-/**
- * Used to record audio and video. The recording control is based on a
- * simple state machine (see below).
- *
- * <p><img src="{@docRoot}images/mediarecorder_state_diagram.gif" border="0" />
- * </p>
- *
- * <p>A common case of using MediaRecorder to record audio works as follows:
- *
- * <pre>MediaRecorder recorder = new MediaRecorder();
- * recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- * recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- * recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
- * recorder.setOutputFile(PATH_NAME);
- * recorder.prepare();
- * recorder.start(); // Recording is now started
- * ...
- * recorder.stop();
- * recorder.reset(); // You can reuse the object by going back to setAudioSource() step
- * recorder.release(); // Now the object cannot be reused
- * </pre>
- *
- * <p>See the <a href="{@docRoot}guide/topics/media/index.html">Audio and Video</a>
- * documentation for additional help with using MediaRecorder.
- */
-public class MediaRecorder
-{
- static {
- System.loadLibrary("media_jni");
- }
- private final static String TAG = "MediaRecorder";
-
- // The two fields below are accessed by native methods
- @SuppressWarnings("unused")
- private int mNativeContext;
-
- @SuppressWarnings("unused")
- private Surface mSurface;
-
- private String mPath;
- private FileDescriptor mFd;
-
- /**
- * Default constructor.
- */
- public MediaRecorder() {
- native_setup();
- }
-
- /**
- * Sets a Camera to use for recording. Use this function to switch
- * quickly between preview and capture mode without a teardown of
- * the camera object. Must call before prepare().
- *
- * @param c the Camera to use for recording
- */
- public native void setCamera(Camera c);
-
- /**
- * Sets a Surface to show a preview of recorded media (video). Calls this
- * before prepare() to make sure that the desirable preview display is
- * set.
- *
- * @param sv the Surface to use for the preview
- */
- public void setPreviewDisplay(Surface sv) {
- mSurface = sv;
- }
-
- /**
- * Defines the audio source. These constants are used with
- * {@link MediaRecorder#setAudioSource(int)}.
- */
- public final class AudioSource {
- /* Do not change these values without updating their counterparts
- * in include/media/mediarecorder.h!
- */
- private AudioSource() {}
- public static final int DEFAULT = 0;
- /** Microphone audio source */
- public static final int MIC = 1;
- }
-
- /**
- * Defines the video source. These constants are used with
- * {@link MediaRecorder#setVideoSource(int)}.
- */
- public final class VideoSource {
- /* Do not change these values without updating their counterparts
- * in include/media/mediarecorder.h!
- */
- private VideoSource() {}
- public static final int DEFAULT = 0;
- /** Camera video source */
- public static final int CAMERA = 1;
- }
-
- /**
- * Defines the output format. These constants are used with
- * {@link MediaRecorder#setOutputFormat(int)}.
- */
- public final class OutputFormat {
- /* Do not change these values without updating their counterparts
- * in include/media/mediarecorder.h!
- */
- private OutputFormat() {}
- public static final int DEFAULT = 0;
- /** 3GPP media file format*/
- public static final int THREE_GPP = 1;
- /** MPEG4 media file format*/
- public static final int MPEG_4 = 2;
- /** Raw AMR file format */
- public static final int RAW_AMR = 3;
- };
-
- /**
- * Defines the audio encoding. These constants are used with
- * {@link MediaRecorder#setAudioEncoder(int)}.
- */
- public final class AudioEncoder {
- /* Do not change these values without updating their counterparts
- * in include/media/mediarecorder.h!
- */
- private AudioEncoder() {}
- public static final int DEFAULT = 0;
- /** AMR (Narrowband) audio codec */
- public static final int AMR_NB = 1;
- //public static final AAC = 2; currently unsupported
- }
-
- /**
- * Defines the video encoding. These constants are used with
- * {@link MediaRecorder#setVideoEncoder(int)}.
- */
- public final class VideoEncoder {
- /* Do not change these values without updating their counterparts
- * in include/media/mediarecorder.h!
- */
- private VideoEncoder() {}
- public static final int DEFAULT = 0;
- public static final int H263 = 1;
- public static final int H264 = 2;
- public static final int MPEG_4_SP = 3;
- }
-
- /**
- * Sets the audio source to be used for recording. If this method is not
- * called, the output file will not contain an audio track. The source needs
- * to be specified before setting recording-parameters or encoders. Call
- * this only before setOutputFormat().
- *
- * @param audio_source the audio source to use
- * @throws IllegalStateException if it is called after setOutputFormat()
- * @see android.media.MediaRecorder.AudioSource
- */
- public native void setAudioSource(int audio_source)
- throws IllegalStateException;
-
- /**
- * Sets the video source to be used for recording. If this method is not
- * called, the output file will not contain an video track. The source needs
- * to be specified before setting recording-parameters or encoders. Call
- * this only before setOutputFormat().
- *
- * @param video_source the video source to use
- * @throws IllegalStateException if it is called after setOutputFormat()
- * @see android.media.MediaRecorder.VideoSource
- */
- public native void setVideoSource(int video_source)
- throws IllegalStateException;
-
- /**
- * Sets the format of the output file produced during recording. Call this
- * after setAudioSource()/setVideoSource() but before prepare().
- *
- * @param output_format the output format to use. The output format
- * needs to be specified before setting recording-parameters or encoders.
- * @throws IllegalStateException if it is called after prepare() or before
- * setAudioSource()/setVideoSource().
- * @see android.media.MediaRecorder.OutputFormat
- */
- public native void setOutputFormat(int output_format)
- throws IllegalStateException;
-
- /**
- * Sets the width and height of the video to be captured. Must be called
- * after setVideoSource(). Call this after setOutFormat() but before
- * prepare().
- *
- * @param width the width of the video to be captured
- * @param height the height of the video to be captured
- * @throws IllegalStateException if it is called after
- * prepare() or before setOutputFormat()
- */
- public native void setVideoSize(int width, int height)
- throws IllegalStateException;
-
- /**
- * Sets the frame rate of the video to be captured. Must be called
- * after setVideoSource(). Call this after setOutFormat() but before
- * prepare().
- *
- * @param rate the number of frames per second of video to capture
- * @throws IllegalStateException if it is called after
- * prepare() or before setOutputFormat().
- *
- * NOTE: On some devices that have auto-frame rate, this sets the
- * maximum frame rate, not a constant frame rate. Actual frame rate
- * will vary according to lighting conditions.
- */
- public native void setVideoFrameRate(int rate) throws IllegalStateException;
-
- /**
- * Sets the audio encoder to be used for recording. If this method is not
- * called, the output file will not contain an audio track. Call this after
- * setOutputFormat() but before prepare().
- *
- * @param audio_encoder the audio encoder to use.
- * @throws IllegalStateException if it is called before
- * setOutputFormat() or after prepare().
- * @see android.media.MediaRecorder.AudioEncoder
- */
- public native void setAudioEncoder(int audio_encoder)
- throws IllegalStateException;
-
- /**
- * Sets the video encoder to be used for recording. If this method is not
- * called, the output file will not contain an video track. Call this after
- * setOutputFormat() and before prepare().
- *
- * @param video_encoder the video encoder to use.
- * @throws IllegalStateException if it is called before
- * setOutputFormat() or after prepare()
- * @see android.media.MediaRecorder.VideoEncoder
- */
- public native void setVideoEncoder(int video_encoder)
- throws IllegalStateException;
-
- /**
- * Pass in the file descriptor of the file to be written. Call this after
- * setOutputFormat() but before prepare().
- *
- * @param fd an open file descriptor to be written into.
- * @throws IllegalStateException if it is called before
- * setOutputFormat() or after prepare()
- */
- public void setOutputFile(FileDescriptor fd) throws IllegalStateException
- {
- mPath = null;
- mFd = fd;
- }
-
- /**
- * Sets the path of the output file to be produced. Call this after
- * setOutputFormat() but before prepare().
- *
- * @param path The pathname to use.
- * @throws IllegalStateException if it is called before
- * setOutputFormat() or after prepare()
- */
- public void setOutputFile(String path) throws IllegalStateException
- {
- mFd = null;
- mPath = path;
- }
-
- // native implementation
- private native void _setOutputFile(FileDescriptor fd, long offset, long length)
- throws IllegalStateException, IOException;
- private native void _prepare() throws IllegalStateException, IOException;
-
- /**
- * Prepares the recorder to begin capturing and encoding data. This method
- * must be called after setting up the desired audio and video sources,
- * encoders, file format, etc., but before start().
- *
- * @throws IllegalStateException if it is called after
- * start() or before setOutputFormat().
- * @throws IOException if prepare fails otherwise.
- */
- public void prepare() throws IllegalStateException, IOException
- {
- if (mPath != null) {
- FileOutputStream f = new FileOutputStream(mPath);
- _setOutputFile(f.getFD(), 0, 0);
- } else if (mFd != null) {
- _setOutputFile(mFd, 0, 0);
- } else {
- throw new IOException("No valid output file");
- }
- _prepare();
- }
-
- /**
- * Begins capturing and encoding data to the file specified with
- * setOutputFile(). Call this after prepare().
- *
- * @throws IllegalStateException if it is called before
- * prepare().
- */
- public native void start() throws IllegalStateException;
-
- /**
- * Stops recording. Call this after start(). Once recording is stopped,
- * you will have to configure it again as if it has just been constructed.
- *
- * @throws IllegalStateException if it is called before start()
- */
- public native void stop() throws IllegalStateException;
-
- /**
- * Restarts the MediaRecorder to its idle state. After calling
- * this method, you will have to configure it again as if it had just been
- * constructed.
- */
- public native void reset();
-
- /**
- * Returns the maximum absolute amplitude that was sampled since the last
- * call to this method. Call this only after the setAudioSource().
- *
- * @return the maximum absolute amplitude measured since the last call, or
- * 0 when called for the first time
- * @throws IllegalStateException if it is called before
- * the audio source has been set.
- */
- public native int getMaxAmplitude() throws IllegalStateException;
-
-
- /**
- * Releases resources associated with this MediaRecorder object.
- * It is good practice to call this method when you're done
- * using the MediaRecorder.
- */
- public native void release();
-
- private native final void native_setup() throws IllegalStateException;
-
- private native final void native_finalize();
-
- @Override
- protected void finalize() { native_finalize(); }
-}
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
deleted file mode 100644
index fc8476d..0000000
--- a/media/java/android/media/MediaScanner.java
+++ /dev/null
@@ -1,1352 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.IContentProvider;
-import android.content.ContentUris;
-import android.database.Cursor;
-import android.database.SQLException;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.os.Process;
-import android.os.RemoteException;
-import android.os.SystemProperties;
-import android.provider.MediaStore;
-import android.provider.Settings;
-import android.provider.MediaStore.Audio;
-import android.provider.MediaStore.Images;
-import android.provider.MediaStore.Video;
-import android.provider.MediaStore.Audio.Genres;
-import android.provider.MediaStore.Audio.Playlists;
-import android.sax.Element;
-import android.sax.ElementListener;
-import android.sax.RootElement;
-import android.text.TextUtils;
-import android.util.Config;
-import android.util.Log;
-import android.util.Xml;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-
-/**
- * Internal service that no-one should use directly.
- *
- * {@hide}
- */
-public class MediaScanner
-{
- static {
- System.loadLibrary("media_jni");
- }
-
- private final static String TAG = "MediaScanner";
-
- private static final String[] AUDIO_PROJECTION = new String[] {
- Audio.Media._ID, // 0
- Audio.Media.DATA, // 1
- Audio.Media.DATE_MODIFIED, // 2
- };
-
- private static final int ID_AUDIO_COLUMN_INDEX = 0;
- private static final int PATH_AUDIO_COLUMN_INDEX = 1;
- private static final int DATE_MODIFIED_AUDIO_COLUMN_INDEX = 2;
-
- private static final String[] VIDEO_PROJECTION = new String[] {
- Video.Media._ID, // 0
- Video.Media.DATA, // 1
- Video.Media.DATE_MODIFIED, // 2
- };
-
- private static final int ID_VIDEO_COLUMN_INDEX = 0;
- private static final int PATH_VIDEO_COLUMN_INDEX = 1;
- private static final int DATE_MODIFIED_VIDEO_COLUMN_INDEX = 2;
-
- private static final String[] IMAGES_PROJECTION = new String[] {
- Images.Media._ID, // 0
- Images.Media.DATA, // 1
- Images.Media.DATE_MODIFIED, // 2
- };
-
- private static final int ID_IMAGES_COLUMN_INDEX = 0;
- private static final int PATH_IMAGES_COLUMN_INDEX = 1;
- private static final int DATE_MODIFIED_IMAGES_COLUMN_INDEX = 2;
-
- private static final String[] PLAYLISTS_PROJECTION = new String[] {
- Audio.Playlists._ID, // 0
- Audio.Playlists.DATA, // 1
- Audio.Playlists.DATE_MODIFIED, // 2
- };
-
- private static final String[] PLAYLIST_MEMBERS_PROJECTION = new String[] {
- Audio.Playlists.Members.PLAYLIST_ID, // 0
- };
-
- private static final int ID_PLAYLISTS_COLUMN_INDEX = 0;
- private static final int PATH_PLAYLISTS_COLUMN_INDEX = 1;
- private static final int DATE_MODIFIED_PLAYLISTS_COLUMN_INDEX = 2;
-
- private static final String[] GENRE_LOOKUP_PROJECTION = new String[] {
- Audio.Genres._ID, // 0
- Audio.Genres.NAME, // 1
- };
-
- private static final String RINGTONES_DIR = "/ringtones/";
- private static final String NOTIFICATIONS_DIR = "/notifications/";
- private static final String ALARMS_DIR = "/alarms/";
- private static final String MUSIC_DIR = "/music/";
- private static final String PODCAST_DIR = "/podcasts/";
-
- private static final String[] ID3_GENRES = {
- // ID3v1 Genres
- "Blues",
- "Classic Rock",
- "Country",
- "Dance",
- "Disco",
- "Funk",
- "Grunge",
- "Hip-Hop",
- "Jazz",
- "Metal",
- "New Age",
- "Oldies",
- "Other",
- "Pop",
- "R&B",
- "Rap",
- "Reggae",
- "Rock",
- "Techno",
- "Industrial",
- "Alternative",
- "Ska",
- "Death Metal",
- "Pranks",
- "Soundtrack",
- "Euro-Techno",
- "Ambient",
- "Trip-Hop",
- "Vocal",
- "Jazz+Funk",
- "Fusion",
- "Trance",
- "Classical",
- "Instrumental",
- "Acid",
- "House",
- "Game",
- "Sound Clip",
- "Gospel",
- "Noise",
- "AlternRock",
- "Bass",
- "Soul",
- "Punk",
- "Space",
- "Meditative",
- "Instrumental Pop",
- "Instrumental Rock",
- "Ethnic",
- "Gothic",
- "Darkwave",
- "Techno-Industrial",
- "Electronic",
- "Pop-Folk",
- "Eurodance",
- "Dream",
- "Southern Rock",
- "Comedy",
- "Cult",
- "Gangsta",
- "Top 40",
- "Christian Rap",
- "Pop/Funk",
- "Jungle",
- "Native American",
- "Cabaret",
- "New Wave",
- "Psychadelic",
- "Rave",
- "Showtunes",
- "Trailer",
- "Lo-Fi",
- "Tribal",
- "Acid Punk",
- "Acid Jazz",
- "Polka",
- "Retro",
- "Musical",
- "Rock & Roll",
- "Hard Rock",
- // The following genres are Winamp extensions
- "Folk",
- "Folk-Rock",
- "National Folk",
- "Swing",
- "Fast Fusion",
- "Bebob",
- "Latin",
- "Revival",
- "Celtic",
- "Bluegrass",
- "Avantgarde",
- "Gothic Rock",
- "Progressive Rock",
- "Psychedelic Rock",
- "Symphonic Rock",
- "Slow Rock",
- "Big Band",
- "Chorus",
- "Easy Listening",
- "Acoustic",
- "Humour",
- "Speech",
- "Chanson",
- "Opera",
- "Chamber Music",
- "Sonata",
- "Symphony",
- "Booty Bass",
- "Primus",
- "Porn Groove",
- "Satire",
- "Slow Jam",
- "Club",
- "Tango",
- "Samba",
- "Folklore",
- "Ballad",
- "Power Ballad",
- "Rhythmic Soul",
- "Freestyle",
- "Duet",
- "Punk Rock",
- "Drum Solo",
- "A capella",
- "Euro-House",
- "Dance Hall"
- };
-
- private int mNativeContext;
- private Context mContext;
- private IContentProvider mMediaProvider;
- private Uri mAudioUri;
- private Uri mVideoUri;
- private Uri mImagesUri;
- private Uri mThumbsUri;
- private Uri mGenresUri;
- private Uri mPlaylistsUri;
- private boolean mProcessPlaylists, mProcessGenres;
-
- // used when scanning the image database so we know whether we have to prune
- // old thumbnail files
- private int mOriginalCount;
- /** Whether the scanner has set a default sound for the ringer ringtone. */
- private boolean mDefaultRingtoneSet;
- /** Whether the scanner has set a default sound for the notification ringtone. */
- private boolean mDefaultNotificationSet;
- /** The filename for the default sound for the ringer ringtone. */
- private String mDefaultRingtoneFilename;
- /** The filename for the default sound for the notification ringtone. */
- private String mDefaultNotificationFilename;
- /**
- * The prefix for system properties that define the default sound for
- * ringtones. Concatenate the name of the setting from Settings
- * to get the full system property.
- */
- private static final String DEFAULT_RINGTONE_PROPERTY_PREFIX = "ro.config.";
-
- // set to true if file path comparisons should be case insensitive.
- // this should be set when scanning files on a case insensitive file system.
- private boolean mCaseInsensitivePaths;
-
- private BitmapFactory.Options mBitmapOptions = new BitmapFactory.Options();
-
- private static class FileCacheEntry {
- Uri mTableUri;
- long mRowId;
- String mPath;
- long mLastModified;
- boolean mSeenInFileSystem;
- boolean mLastModifiedChanged;
-
- FileCacheEntry(Uri tableUri, long rowId, String path, long lastModified) {
- mTableUri = tableUri;
- mRowId = rowId;
- mPath = path;
- mLastModified = lastModified;
- mSeenInFileSystem = false;
- mLastModifiedChanged = false;
- }
-
- @Override
- public String toString() {
- return mPath;
- }
- }
-
- // hashes file path to FileCacheEntry.
- // path should be lower case if mCaseInsensitivePaths is true
- private HashMap<String, FileCacheEntry> mFileCache;
-
- private ArrayList<FileCacheEntry> mPlayLists;
- private HashMap<String, Uri> mGenreCache;
-
-
- public MediaScanner(Context c) {
- native_setup();
- mContext = c;
- mBitmapOptions.inSampleSize = 1;
- mBitmapOptions.inJustDecodeBounds = true;
-
- setDefaultRingtoneFileNames();
- }
-
- private void setDefaultRingtoneFileNames() {
- mDefaultRingtoneFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
- + Settings.System.RINGTONE);
- mDefaultNotificationFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
- + Settings.System.NOTIFICATION_SOUND);
- }
-
- private MyMediaScannerClient mClient = new MyMediaScannerClient();
-
- private class MyMediaScannerClient implements MediaScannerClient {
-
- private String mArtist;
- private String mAlbumArtist; // use this if mArtist is missing
- private String mAlbum;
- private String mTitle;
- private String mComposer;
- private String mGenre;
- private String mMimeType;
- private int mFileType;
- private int mTrack;
- private int mYear;
- private int mDuration;
- private String mPath;
- private long mLastModified;
- private long mFileSize;
-
- public FileCacheEntry beginFile(String path, String mimeType, long lastModified, long fileSize) {
-
- // special case certain file names
- // I use regionMatches() instead of substring() below
- // to avoid memory allocation
- int lastSlash = path.lastIndexOf('/');
- if (lastSlash >= 0 && lastSlash + 2 < path.length()) {
- // ignore those ._* files created by MacOS
- if (path.regionMatches(lastSlash + 1, "._", 0, 2)) {
- return null;
- }
-
- // ignore album art files created by Windows Media Player:
- // Folder.jpg, AlbumArtSmall.jpg, AlbumArt_{...}_Large.jpg and AlbumArt_{...}_Small.jpg
- if (path.regionMatches(true, path.length() - 4, ".jpg", 0, 4)) {
- if (path.regionMatches(true, lastSlash + 1, "AlbumArt_{", 0, 10) ||
- path.regionMatches(true, lastSlash + 1, "AlbumArt.", 0, 9)) {
- return null;
- }
- int length = path.length() - lastSlash - 1;
- if ((length == 17 && path.regionMatches(true, lastSlash + 1, "AlbumArtSmall", 0, 13)) ||
- (length == 10 && path.regionMatches(true, lastSlash + 1, "Folder", 0, 6))) {
- return null;
- }
- }
- }
-
- mMimeType = null;
- // try mimeType first, if it is specified
- if (mimeType != null) {
- mFileType = MediaFile.getFileTypeForMimeType(mimeType);
- if (mFileType != 0) {
- mMimeType = mimeType;
- }
- }
- mFileSize = fileSize;
-
- // if mimeType was not specified, compute file type based on file extension.
- if (mMimeType == null) {
- MediaFile.MediaFileType mediaFileType = MediaFile.getFileType(path);
- if (mediaFileType != null) {
- mFileType = mediaFileType.fileType;
- mMimeType = mediaFileType.mimeType;
- }
- }
-
- String key = path;
- if (mCaseInsensitivePaths) {
- key = path.toLowerCase();
- }
- FileCacheEntry entry = mFileCache.get(key);
- if (entry == null) {
- entry = new FileCacheEntry(null, 0, path, 0);
- mFileCache.put(key, entry);
- }
- entry.mSeenInFileSystem = true;
-
- // add some slack to avoid a rounding error
- long delta = lastModified - entry.mLastModified;
- if (delta > 1 || delta < -1) {
- entry.mLastModified = lastModified;
- entry.mLastModifiedChanged = true;
- }
-
- if (mProcessPlaylists && MediaFile.isPlayListFileType(mFileType)) {
- mPlayLists.add(entry);
- // we don't process playlists in the main scan, so return null
- return null;
- }
-
- // clear all the metadata
- mArtist = null;
- mAlbumArtist = null;
- mAlbum = null;
- mTitle = null;
- mComposer = null;
- mGenre = null;
- mTrack = 0;
- mYear = 0;
- mDuration = 0;
- mPath = path;
- mLastModified = lastModified;
-
- return entry;
- }
-
- public void scanFile(String path, long lastModified, long fileSize) {
- doScanFile(path, null, lastModified, fileSize, false);
- }
-
- public void scanFile(String path, String mimeType, long lastModified, long fileSize) {
- doScanFile(path, mimeType, lastModified, fileSize, false);
- }
-
- public Uri doScanFile(String path, String mimeType, long lastModified, long fileSize, boolean scanAlways) {
- Uri result = null;
-// long t1 = System.currentTimeMillis();
- try {
- FileCacheEntry entry = beginFile(path, mimeType, lastModified, fileSize);
- // rescan for metadata if file was modified since last scan
- if (entry != null && (entry.mLastModifiedChanged || scanAlways)) {
- boolean ringtones = (path.indexOf(RINGTONES_DIR) > 0);
- boolean notifications = (path.indexOf(NOTIFICATIONS_DIR) > 0);
- boolean alarms = (path.indexOf(ALARMS_DIR) > 0);
- boolean podcasts = (path.indexOf(PODCAST_DIR) > 0);
- boolean music = (path.indexOf(MUSIC_DIR) > 0) ||
- (!ringtones && !notifications && !alarms && !podcasts);
-
- if (mFileType == MediaFile.FILE_TYPE_MP3 ||
- mFileType == MediaFile.FILE_TYPE_MP4 ||
- mFileType == MediaFile.FILE_TYPE_M4A ||
- mFileType == MediaFile.FILE_TYPE_3GPP ||
- mFileType == MediaFile.FILE_TYPE_3GPP2 ||
- mFileType == MediaFile.FILE_TYPE_OGG ||
- mFileType == MediaFile.FILE_TYPE_MID ||
- mFileType == MediaFile.FILE_TYPE_WMA) {
- // we only extract metadata from MP3, M4A, OGG, MID and WMA files.
- // check MP4 files, to determine if they contain only audio.
- processFile(path, mimeType, this);
- } else if (MediaFile.isImageFileType(mFileType)) {
- // we used to compute the width and height but it's not worth it
- }
-
- result = endFile(entry, ringtones, notifications, alarms, music, podcasts);
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in MediaScanner.scanFile()", e);
- }
-// long t2 = System.currentTimeMillis();
-// Log.v(TAG, "scanFile: " + path + " took " + (t2-t1));
- return result;
- }
-
- private int parseSubstring(String s, int start, int defaultValue) {
- int length = s.length();
- if (start == length) return defaultValue;
-
- char ch = s.charAt(start++);
- // return defaultValue if we have no integer at all
- if (ch < '0' || ch > '9') return defaultValue;
-
- int result = ch - '0';
- while (start < length) {
- ch = s.charAt(start++);
- if (ch < '0' || ch > '9') return result;
- result = result * 10 + (ch - '0');
- }
-
- return result;
- }
-
- public void handleStringTag(String name, String value) {
- if (name.equalsIgnoreCase("title") || name.startsWith("title;")) {
- mTitle = value.trim();
- } else if (name.equalsIgnoreCase("artist") || name.startsWith("artist;")) {
- mArtist = value.trim();
- } else if (name.equalsIgnoreCase("albumartist") || name.startsWith("albumartist;")) {
- mAlbumArtist = value.trim();
- } else if (name.equalsIgnoreCase("album") || name.startsWith("album;")) {
- mAlbum = value.trim();
- } else if (name.equalsIgnoreCase("composer") || name.startsWith("composer;")) {
- mComposer = value.trim();
- } else if (name.equalsIgnoreCase("genre") || name.startsWith("genre;")) {
- // handle numeric genres, which PV sometimes encodes like "(20)"
- if (value.length() > 0) {
- int genreCode = -1;
- char ch = value.charAt(0);
- if (ch == '(') {
- genreCode = parseSubstring(value, 1, -1);
- } else if (ch >= '0' && ch <= '9') {
- genreCode = parseSubstring(value, 0, -1);
- }
- if (genreCode >= 0 && genreCode < ID3_GENRES.length) {
- value = ID3_GENRES[genreCode];
- }
- }
- mGenre = value;
- } else if (name.equalsIgnoreCase("year") || name.startsWith("year;")) {
- mYear = parseSubstring(value, 0, 0);
- } else if (name.equalsIgnoreCase("tracknumber") || name.startsWith("tracknumber;")) {
- // track number might be of the form "2/12"
- // we just read the number before the slash
- int num = parseSubstring(value, 0, 0);
- mTrack = (mTrack / 1000) * 1000 + num;
- } else if (name.equalsIgnoreCase("discnumber") ||
- name.equals("set") || name.startsWith("set;")) {
- // set number might be of the form "1/3"
- // we just read the number before the slash
- int num = parseSubstring(value, 0, 0);
- mTrack = (num * 1000) + (mTrack % 1000);
- } else if (name.equalsIgnoreCase("duration")) {
- mDuration = parseSubstring(value, 0, 0);
- }
- }
-
- public void setMimeType(String mimeType) {
- mMimeType = mimeType;
- mFileType = MediaFile.getFileTypeForMimeType(mimeType);
- }
-
- /**
- * Formats the data into a values array suitable for use with the Media
- * Content Provider.
- *
- * @return a map of values
- */
- private ContentValues toValues() {
- ContentValues map = new ContentValues();
-
- map.put(MediaStore.MediaColumns.DATA, mPath);
- map.put(MediaStore.MediaColumns.TITLE, mTitle);
- map.put(MediaStore.MediaColumns.DATE_MODIFIED, mLastModified);
- map.put(MediaStore.MediaColumns.SIZE, mFileSize);
- map.put(MediaStore.MediaColumns.MIME_TYPE, mMimeType);
-
- if (MediaFile.isVideoFileType(mFileType)) {
- map.put(Video.Media.ARTIST, (mArtist != null && mArtist.length() > 0 ? mArtist : MediaFile.UNKNOWN_STRING));
- map.put(Video.Media.ALBUM, (mAlbum != null && mAlbum.length() > 0 ? mAlbum : MediaFile.UNKNOWN_STRING));
- map.put(Video.Media.DURATION, mDuration);
- // FIXME - add RESOLUTION
- } else if (MediaFile.isImageFileType(mFileType)) {
- // FIXME - add DESCRIPTION
- // map.put(field, value);
- } else if (MediaFile.isAudioFileType(mFileType)) {
- map.put(Audio.Media.ARTIST, (mArtist != null && mArtist.length() > 0 ? mArtist : MediaFile.UNKNOWN_STRING));
- map.put(Audio.Media.ALBUM, (mAlbum != null && mAlbum.length() > 0 ? mAlbum : MediaFile.UNKNOWN_STRING));
- map.put(Audio.Media.COMPOSER, mComposer);
- if (mYear != 0) {
- map.put(Audio.Media.YEAR, mYear);
- }
- map.put(Audio.Media.TRACK, mTrack);
- map.put(Audio.Media.DURATION, mDuration);
- }
- return map;
- }
-
- private Uri endFile(FileCacheEntry entry, boolean ringtones, boolean notifications,
- boolean alarms, boolean music, boolean podcasts)
- throws RemoteException {
- // update database
- Uri tableUri;
- boolean isAudio = MediaFile.isAudioFileType(mFileType);
- boolean isVideo = MediaFile.isVideoFileType(mFileType);
- boolean isImage = MediaFile.isImageFileType(mFileType);
- if (isVideo) {
- tableUri = mVideoUri;
- } else if (isImage) {
- tableUri = mImagesUri;
- } else if (isAudio) {
- tableUri = mAudioUri;
- } else {
- // don't add file to database if not audio, video or image
- return null;
- }
- entry.mTableUri = tableUri;
-
- // use album artist if artist is missing
- if (mArtist == null || mArtist.length() == 0) {
- mArtist = mAlbumArtist;
- }
-
- ContentValues values = toValues();
- String title = values.getAsString(MediaStore.MediaColumns.TITLE);
- if (TextUtils.isEmpty(title)) {
- title = values.getAsString(MediaStore.MediaColumns.DATA);
- // extract file name after last slash
- int lastSlash = title.lastIndexOf('/');
- if (lastSlash >= 0) {
- lastSlash++;
- if (lastSlash < title.length()) {
- title = title.substring(lastSlash);
- }
- }
- // truncate the file extension (if any)
- int lastDot = title.lastIndexOf('.');
- if (lastDot > 0) {
- title = title.substring(0, lastDot);
- }
- values.put(MediaStore.MediaColumns.TITLE, title);
- }
- if (isAudio) {
- values.put(Audio.Media.IS_RINGTONE, ringtones);
- values.put(Audio.Media.IS_NOTIFICATION, notifications);
- values.put(Audio.Media.IS_ALARM, alarms);
- values.put(Audio.Media.IS_MUSIC, music);
- values.put(Audio.Media.IS_PODCAST, podcasts);
- } else if (isImage) {
- // nothing right now
- }
-
- Uri result = null;
- long rowId = entry.mRowId;
- if (rowId == 0) {
- // new file, insert it
- result = mMediaProvider.insert(tableUri, values);
- if (result != null) {
- rowId = ContentUris.parseId(result);
- entry.mRowId = rowId;
- }
- } else {
- // updated file
- result = ContentUris.withAppendedId(tableUri, rowId);
- mMediaProvider.update(result, values, null, null);
- }
- if (mProcessGenres && mGenre != null) {
- String genre = mGenre;
- Uri uri = mGenreCache.get(genre);
- if (uri == null) {
- Cursor cursor = null;
- try {
- // see if the genre already exists
- cursor = mMediaProvider.query(
- mGenresUri,
- GENRE_LOOKUP_PROJECTION, MediaStore.Audio.Genres.NAME + "=?",
- new String[] { genre }, null);
- if (cursor == null || cursor.getCount() == 0) {
- // genre does not exist, so create the genre in the genre table
- values.clear();
- values.put(MediaStore.Audio.Genres.NAME, genre);
- uri = mMediaProvider.insert(mGenresUri, values);
- } else {
- // genre already exists, so compute its Uri
- cursor.moveToNext();
- uri = ContentUris.withAppendedId(mGenresUri, cursor.getLong(0));
- }
- if (uri != null) {
- uri = Uri.withAppendedPath(uri, Genres.Members.CONTENT_DIRECTORY);
- mGenreCache.put(genre, uri);
- }
- } finally {
- // release the cursor if it exists
- if (cursor != null) {
- cursor.close();
- }
- }
- }
-
- if (uri != null) {
- // add entry to audio_genre_map
- values.clear();
- values.put(MediaStore.Audio.Genres.Members.AUDIO_ID, Long.valueOf(rowId));
- mMediaProvider.insert(uri, values);
- }
- }
-
- if (notifications && !mDefaultNotificationSet) {
- if (TextUtils.isEmpty(mDefaultNotificationFilename) ||
- doesPathHaveFilename(entry.mPath, mDefaultNotificationFilename)) {
- setSettingIfNotSet(Settings.System.NOTIFICATION_SOUND, tableUri, rowId);
- mDefaultNotificationSet = true;
- }
- } else if (ringtones && !mDefaultRingtoneSet) {
- if (TextUtils.isEmpty(mDefaultRingtoneFilename) ||
- doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) {
- setSettingIfNotSet(Settings.System.RINGTONE, tableUri, rowId);
- mDefaultRingtoneSet = true;
- }
- }
-
- return result;
- }
-
- private boolean doesPathHaveFilename(String path, String filename) {
- int pathFilenameStart = path.lastIndexOf(File.separatorChar) + 1;
- int filenameLength = filename.length();
- return path.regionMatches(pathFilenameStart, filename, 0, filenameLength) &&
- pathFilenameStart + filenameLength == path.length();
- }
-
- private void setSettingIfNotSet(String settingName, Uri uri, long rowId) {
-
- String existingSettingValue = Settings.System.getString(mContext.getContentResolver(),
- settingName);
-
- if (TextUtils.isEmpty(existingSettingValue)) {
- // Set the setting to the given URI
- Settings.System.putString(mContext.getContentResolver(), settingName,
- ContentUris.withAppendedId(uri, rowId).toString());
- }
- }
-
- }; // end of anonymous MediaScannerClient instance
-
- private void prescan(String filePath) throws RemoteException {
- Cursor c = null;
- String where = null;
- String[] selectionArgs = null;
-
- if (mFileCache == null) {
- mFileCache = new HashMap<String, FileCacheEntry>();
- } else {
- mFileCache.clear();
- }
- if (mPlayLists == null) {
- mPlayLists = new ArrayList<FileCacheEntry>();
- } else {
- mPlayLists.clear();
- }
-
- // Build the list of files from the content provider
- try {
- // Read existing files from the audio table
- if (filePath != null) {
- where = MediaStore.Audio.Media.DATA + "=?";
- selectionArgs = new String[] { filePath };
- }
- c = mMediaProvider.query(mAudioUri, AUDIO_PROJECTION, where, selectionArgs, null);
-
- if (c != null) {
- try {
- while (c.moveToNext()) {
- long rowId = c.getLong(ID_AUDIO_COLUMN_INDEX);
- String path = c.getString(PATH_AUDIO_COLUMN_INDEX);
- long lastModified = c.getLong(DATE_MODIFIED_AUDIO_COLUMN_INDEX);
-
- String key = path;
- if (mCaseInsensitivePaths) {
- key = path.toLowerCase();
- }
- mFileCache.put(key, new FileCacheEntry(mAudioUri, rowId, path,
- lastModified));
- }
- } finally {
- c.close();
- c = null;
- }
- }
-
- // Read existing files from the video table
- if (filePath != null) {
- where = MediaStore.Video.Media.DATA + "=?";
- } else {
- where = null;
- }
- c = mMediaProvider.query(mVideoUri, VIDEO_PROJECTION, where, selectionArgs, null);
-
- if (c != null) {
- try {
- while (c.moveToNext()) {
- long rowId = c.getLong(ID_VIDEO_COLUMN_INDEX);
- String path = c.getString(PATH_VIDEO_COLUMN_INDEX);
- long lastModified = c.getLong(DATE_MODIFIED_VIDEO_COLUMN_INDEX);
-
- String key = path;
- if (mCaseInsensitivePaths) {
- key = path.toLowerCase();
- }
- mFileCache.put(key, new FileCacheEntry(mVideoUri, rowId, path,
- lastModified));
- }
- } finally {
- c.close();
- c = null;
- }
- }
-
- // Read existing files from the images table
- if (filePath != null) {
- where = MediaStore.Images.Media.DATA + "=?";
- } else {
- where = null;
- }
- mOriginalCount = 0;
- c = mMediaProvider.query(mImagesUri, IMAGES_PROJECTION, where, selectionArgs, null);
-
- if (c != null) {
- try {
- mOriginalCount = c.getCount();
- while (c.moveToNext()) {
- long rowId = c.getLong(ID_IMAGES_COLUMN_INDEX);
- String path = c.getString(PATH_IMAGES_COLUMN_INDEX);
- long lastModified = c.getLong(DATE_MODIFIED_IMAGES_COLUMN_INDEX);
-
- String key = path;
- if (mCaseInsensitivePaths) {
- key = path.toLowerCase();
- }
- mFileCache.put(key, new FileCacheEntry(mImagesUri, rowId, path,
- lastModified));
- }
- } finally {
- c.close();
- c = null;
- }
- }
-
- if (mProcessPlaylists) {
- // Read existing files from the playlists table
- if (filePath != null) {
- where = MediaStore.Audio.Playlists.DATA + "=?";
- } else {
- where = null;
- }
- c = mMediaProvider.query(mPlaylistsUri, PLAYLISTS_PROJECTION, where, selectionArgs, null);
-
- if (c != null) {
- try {
- while (c.moveToNext()) {
- String path = c.getString(PATH_IMAGES_COLUMN_INDEX);
-
- if (path != null && path.length() > 0) {
- long rowId = c.getLong(ID_PLAYLISTS_COLUMN_INDEX);
- long lastModified = c.getLong(DATE_MODIFIED_PLAYLISTS_COLUMN_INDEX);
-
- String key = path;
- if (mCaseInsensitivePaths) {
- key = path.toLowerCase();
- }
- mFileCache.put(key, new FileCacheEntry(mPlaylistsUri, rowId, path,
- lastModified));
- }
- }
- } finally {
- c.close();
- c = null;
- }
- }
- }
- }
- finally {
- if (c != null) {
- c.close();
- }
- }
- }
-
- private boolean inScanDirectory(String path, String[] directories) {
- for (int i = 0; i < directories.length; i++) {
- if (path.startsWith(directories[i])) {
- return true;
- }
- }
- return false;
- }
-
- private void pruneDeadThumbnailFiles() {
- HashSet<String> existingFiles = new HashSet<String>();
- String directory = "/sdcard/DCIM/.thumbnails";
- String [] files = (new File(directory)).list();
- if (files == null)
- files = new String[0];
-
- for (int i = 0; i < files.length; i++) {
- String fullPathString = directory + "/" + files[i];
- existingFiles.add(fullPathString);
- }
-
- try {
- Cursor c = mMediaProvider.query(
- mThumbsUri,
- new String [] { "_data" },
- null,
- null,
- null);
- Log.v(TAG, "pruneDeadThumbnailFiles... " + c);
- if (c != null && c.moveToFirst()) {
- do {
- String fullPathString = c.getString(0);
- existingFiles.remove(fullPathString);
- } while (c.moveToNext());
- }
-
- for (String fileToDelete : existingFiles) {
- if (Config.LOGV)
- Log.v(TAG, "fileToDelete is " + fileToDelete);
- try {
- (new File(fileToDelete)).delete();
- } catch (SecurityException ex) {
- }
- }
-
- Log.v(TAG, "/pruneDeadThumbnailFiles... " + c);
- if (c != null) {
- c.close();
- }
- } catch (RemoteException e) {
- // We will soon be killed...
- }
- }
-
- private void postscan(String[] directories) throws RemoteException {
- Iterator<FileCacheEntry> iterator = mFileCache.values().iterator();
-
- while (iterator.hasNext()) {
- FileCacheEntry entry = iterator.next();
- String path = entry.mPath;
-
- // remove database entries for files that no longer exist.
- boolean fileMissing = false;
-
- if (!entry.mSeenInFileSystem) {
- if (inScanDirectory(path, directories)) {
- // we didn't see this file in the scan directory.
- fileMissing = true;
- } else {
- // the file is outside of our scan directory,
- // so we need to check for file existence here.
- File testFile = new File(path);
- if (!testFile.exists()) {
- fileMissing = true;
- }
- }
- }
-
- if (fileMissing) {
- // do not delete missing playlists, since they may have been modified by the user.
- // the user can delete them in the media player instead.
- // instead, clear the path and lastModified fields in the row
- MediaFile.MediaFileType mediaFileType = MediaFile.getFileType(path);
- int fileType = (mediaFileType == null ? 0 : mediaFileType.fileType);
-
- if (MediaFile.isPlayListFileType(fileType)) {
- ContentValues values = new ContentValues();
- values.put(MediaStore.Audio.Playlists.DATA, "");
- values.put(MediaStore.Audio.Playlists.DATE_MODIFIED, 0);
- mMediaProvider.update(ContentUris.withAppendedId(mPlaylistsUri, entry.mRowId), values, null, null);
- } else {
- mMediaProvider.delete(ContentUris.withAppendedId(entry.mTableUri, entry.mRowId), null, null);
- iterator.remove();
- }
- }
- }
-
- // handle playlists last, after we know what media files are on the storage.
- if (mProcessPlaylists) {
- processPlayLists();
- }
-
- if (mOriginalCount == 0 && mImagesUri.equals(Images.Media.getContentUri("external")))
- pruneDeadThumbnailFiles();
-
- // allow GC to clean up
- mGenreCache = null;
- mPlayLists = null;
- mFileCache = null;
- mMediaProvider = null;
- }
-
- private void initialize(String volumeName) {
- mMediaProvider = mContext.getContentResolver().acquireProvider("media");
-
- mAudioUri = Audio.Media.getContentUri(volumeName);
- mVideoUri = Video.Media.getContentUri(volumeName);
- mImagesUri = Images.Media.getContentUri(volumeName);
- mThumbsUri = Images.Thumbnails.getContentUri(volumeName);
-
- if (!volumeName.equals("internal")) {
- // we only support playlists on external media
- mProcessPlaylists = true;
- mProcessGenres = true;
- mGenreCache = new HashMap<String, Uri>();
- mGenresUri = Genres.getContentUri(volumeName);
- mPlaylistsUri = Playlists.getContentUri(volumeName);
- // assuming external storage is FAT (case insensitive), except on the simulator.
- if ( Process.supportsProcesses()) {
- mCaseInsensitivePaths = true;
- }
- }
- }
-
- public void scanDirectories(String[] directories, String volumeName) {
- try {
- long start = System.currentTimeMillis();
- initialize(volumeName);
- prescan(null);
- long prescan = System.currentTimeMillis();
-
- for (int i = 0; i < directories.length; i++) {
- processDirectory(directories[i], MediaFile.sFileExtensions, mClient);
- }
- long scan = System.currentTimeMillis();
- postscan(directories);
- long end = System.currentTimeMillis();
-
- if (Config.LOGD) {
- Log.d(TAG, " prescan time: " + (prescan - start) + "ms\n");
- Log.d(TAG, " scan time: " + (scan - prescan) + "ms\n");
- Log.d(TAG, "postscan time: " + (end - scan) + "ms\n");
- Log.d(TAG, " total time: " + (end - start) + "ms\n");
- }
- } catch (SQLException e) {
- // this might happen if the SD card is removed while the media scanner is running
- Log.e(TAG, "SQLException in MediaScanner.scan()", e);
- } catch (UnsupportedOperationException e) {
- // this might happen if the SD card is removed while the media scanner is running
- Log.e(TAG, "UnsupportedOperationException in MediaScanner.scan()", e);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in MediaScanner.scan()", e);
- }
- }
-
- // this function is used to scan a single file
- public Uri scanSingleFile(String path, String volumeName, String mimeType) {
- try {
- initialize(volumeName);
- prescan(path);
-
- File file = new File(path);
- // always scan the file, so we can return the content://media Uri for existing files
- return mClient.doScanFile(path, mimeType, file.lastModified(), file.length(), true);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in MediaScanner.scanFile()", e);
- return null;
- }
- }
-
- // returns the number of matching file/directory names, starting from the right
- private int matchPaths(String path1, String path2) {
- int result = 0;
- int end1 = path1.length();
- int end2 = path2.length();
-
- while (end1 > 0 && end2 > 0) {
- int slash1 = path1.lastIndexOf('/', end1 - 1);
- int slash2 = path2.lastIndexOf('/', end2 - 1);
- int backSlash1 = path1.lastIndexOf('\\', end1 - 1);
- int backSlash2 = path2.lastIndexOf('\\', end2 - 1);
- int start1 = (slash1 > backSlash1 ? slash1 : backSlash1);
- int start2 = (slash2 > backSlash2 ? slash2 : backSlash2);
- if (start1 < 0) start1 = 0; else start1++;
- if (start2 < 0) start2 = 0; else start2++;
- int length = end1 - start1;
- if (end2 - start2 != length) break;
- if (path1.regionMatches(true, start1, path2, start2, length)) {
- result++;
- end1 = start1 - 1;
- end2 = start2 - 1;
- } else break;
- }
-
- return result;
- }
-
- private boolean addPlayListEntry(String entry, String playListDirectory,
- Uri uri, ContentValues values, int index) {
-
- // watch for trailing whitespace
- int entryLength = entry.length();
- while (entryLength > 0 && Character.isWhitespace(entry.charAt(entryLength - 1))) entryLength--;
- // path should be longer than 3 characters.
- // avoid index out of bounds errors below by returning here.
- if (entryLength < 3) return false;
- if (entryLength < entry.length()) entry = entry.substring(0, entryLength);
-
- // does entry appear to be an absolute path?
- // look for Unix or DOS absolute paths
- char ch1 = entry.charAt(0);
- boolean fullPath = (ch1 == '/' ||
- (Character.isLetter(ch1) && entry.charAt(1) == ':' && entry.charAt(2) == '\\'));
- // if we have a relative path, combine entry with playListDirectory
- if (!fullPath)
- entry = playListDirectory + entry;
-
- //FIXME - should we look for "../" within the path?
-
- // best matching MediaFile for the play list entry
- FileCacheEntry bestMatch = null;
-
- // number of rightmost file/directory names for bestMatch
- int bestMatchLength = 0;
-
- Iterator<FileCacheEntry> iterator = mFileCache.values().iterator();
- while (iterator.hasNext()) {
- FileCacheEntry cacheEntry = iterator.next();
- String path = cacheEntry.mPath;
-
- if (path.equalsIgnoreCase(entry)) {
- bestMatch = cacheEntry;
- break; // don't bother continuing search
- }
-
- int matchLength = matchPaths(path, entry);
- if (matchLength > bestMatchLength) {
- bestMatch = cacheEntry;
- bestMatchLength = matchLength;
- }
- }
-
- if (bestMatch == null) {
- return false;
- }
-
- try {
- // OK, now we need to add this to the database
- values.clear();
- values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer.valueOf(index));
- values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, Long.valueOf(bestMatch.mRowId));
- mMediaProvider.insert(uri, values);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in MediaScanner.addPlayListEntry()", e);
- return false;
- }
-
- return true;
- }
-
- private void processM3uPlayList(String path, String playListDirectory, Uri uri, ContentValues values) {
- BufferedReader reader = null;
- try {
- File f = new File(path);
- if (f.exists()) {
- reader = new BufferedReader(
- new InputStreamReader(new FileInputStream(f)), 8192);
- String line = reader.readLine();
- int index = 0;
- while (line != null) {
- // ignore comment lines, which begin with '#'
- if (line.length() > 0 && line.charAt(0) != '#') {
- values.clear();
- if (addPlayListEntry(line, playListDirectory, uri, values, index))
- index++;
- }
- line = reader.readLine();
- }
- }
- } catch (IOException e) {
- Log.e(TAG, "IOException in MediaScanner.processM3uPlayList()", e);
- } finally {
- try {
- if (reader != null)
- reader.close();
- } catch (IOException e) {
- Log.e(TAG, "IOException in MediaScanner.processM3uPlayList()", e);
- }
- }
- }
-
- private void processPlsPlayList(String path, String playListDirectory, Uri uri, ContentValues values) {
- BufferedReader reader = null;
- try {
- File f = new File(path);
- if (f.exists()) {
- reader = new BufferedReader(
- new InputStreamReader(new FileInputStream(f)), 8192);
- String line = reader.readLine();
- int index = 0;
- while (line != null) {
- // ignore comment lines, which begin with '#'
- if (line.startsWith("File")) {
- int equals = line.indexOf('=');
- if (equals > 0) {
- values.clear();
- if (addPlayListEntry(line.substring(equals + 1), playListDirectory, uri, values, index))
- index++;
- }
- }
- line = reader.readLine();
- }
- }
- } catch (IOException e) {
- Log.e(TAG, "IOException in MediaScanner.processPlsPlayList()", e);
- } finally {
- try {
- if (reader != null)
- reader.close();
- } catch (IOException e) {
- Log.e(TAG, "IOException in MediaScanner.processPlsPlayList()", e);
- }
- }
- }
-
- class WplHandler implements ElementListener {
-
- final ContentHandler handler;
- String playListDirectory;
- Uri uri;
- ContentValues values = new ContentValues();
- int index = 0;
-
- public WplHandler(String playListDirectory, Uri uri) {
- this.playListDirectory = playListDirectory;
- this.uri = uri;
-
- RootElement root = new RootElement("smil");
- Element body = root.getChild("body");
- Element seq = body.getChild("seq");
- Element media = seq.getChild("media");
- media.setElementListener(this);
-
- this.handler = root.getContentHandler();
- }
-
- public void start(Attributes attributes) {
- String path = attributes.getValue("", "src");
- if (path != null) {
- values.clear();
- if (addPlayListEntry(path, playListDirectory, uri, values, index)) {
- index++;
- }
- }
- }
-
- public void end() {
- }
-
- ContentHandler getContentHandler() {
- return handler;
- }
- }
-
- private void processWplPlayList(String path, String playListDirectory, Uri uri) {
- FileInputStream fis = null;
- try {
- File f = new File(path);
- if (f.exists()) {
- fis = new FileInputStream(f);
-
- Xml.parse(fis, Xml.findEncodingByName("UTF-8"), new WplHandler(playListDirectory, uri).getContentHandler());
- }
- } catch (SAXException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (fis != null)
- fis.close();
- } catch (IOException e) {
- Log.e(TAG, "IOException in MediaScanner.processWplPlayList()", e);
- }
- }
- }
-
- private void processPlayLists() throws RemoteException {
- Iterator<FileCacheEntry> iterator = mPlayLists.iterator();
- while (iterator.hasNext()) {
- FileCacheEntry entry = iterator.next();
- String path = entry.mPath;
-
- // only process playlist files if they are new or have been modified since the last scan
- if (entry.mLastModifiedChanged) {
- ContentValues values = new ContentValues();
- int lastSlash = path.lastIndexOf('/');
- if (lastSlash < 0) throw new IllegalArgumentException("bad path " + path);
- Uri uri, membersUri;
- long rowId = entry.mRowId;
- if (rowId == 0) {
- // Create a new playlist
-
- int lastDot = path.lastIndexOf('.');
- String name = (lastDot < 0 ? path.substring(lastSlash + 1) : path.substring(lastSlash + 1, lastDot));
- values.put(MediaStore.Audio.Playlists.NAME, name);
- values.put(MediaStore.Audio.Playlists.DATA, path);
- values.put(MediaStore.Audio.Playlists.DATE_MODIFIED, entry.mLastModified);
- uri = mMediaProvider.insert(mPlaylistsUri, values);
- rowId = ContentUris.parseId(uri);
- membersUri = Uri.withAppendedPath(uri, Playlists.Members.CONTENT_DIRECTORY);
- } else {
- uri = ContentUris.withAppendedId(mPlaylistsUri, rowId);
-
- // update lastModified value of existing playlist
- values.put(MediaStore.Audio.Playlists.DATE_MODIFIED, entry.mLastModified);
- mMediaProvider.update(uri, values, null, null);
-
- // delete members of existing playlist
- membersUri = Uri.withAppendedPath(uri, Playlists.Members.CONTENT_DIRECTORY);
- mMediaProvider.delete(membersUri, null, null);
- }
-
- String playListDirectory = path.substring(0, lastSlash + 1);
- MediaFile.MediaFileType mediaFileType = MediaFile.getFileType(path);
- int fileType = (mediaFileType == null ? 0 : mediaFileType.fileType);
-
- if (fileType == MediaFile.FILE_TYPE_M3U)
- processM3uPlayList(path, playListDirectory, membersUri, values);
- else if (fileType == MediaFile.FILE_TYPE_PLS)
- processPlsPlayList(path, playListDirectory, membersUri, values);
- else if (fileType == MediaFile.FILE_TYPE_WPL)
- processWplPlayList(path, playListDirectory, membersUri);
-
- Cursor cursor = mMediaProvider.query(membersUri, PLAYLIST_MEMBERS_PROJECTION, null,
- null, null);
- try {
- if (cursor == null || cursor.getCount() == 0) {
- Log.d(TAG, "playlist is empty - deleting");
- mMediaProvider.delete(uri, null, null);
- }
- } finally {
- if (cursor != null) cursor.close();
- }
- }
- }
- }
-
- private native void processDirectory(String path, String extensions, MediaScannerClient client);
- private native void processFile(String path, String mimeType, MediaScannerClient client);
- public native void setLocale(String locale);
-
- public native byte[] extractAlbumArt(FileDescriptor fd);
-
- private native final void native_setup();
- private native final void native_finalize();
- @Override
- protected void finalize() {
- mContext.getContentResolver().releaseProvider(mMediaProvider);
- native_finalize();
- }
-}
diff --git a/media/java/android/media/MediaScannerClient.java b/media/java/android/media/MediaScannerClient.java
deleted file mode 100644
index cf1a8da..0000000
--- a/media/java/android/media/MediaScannerClient.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-/**
- * {@hide}
- */
-public interface MediaScannerClient
-{
- public void scanFile(String path, long lastModified, long fileSize);
-
- public void scanFile(String path, String mimeType, long lastModified, long fileSize);
-
- /**
- * Called by native code to return metadata extracted from media files.
- */
- public void handleStringTag(String name, String value);
-
- /**
- * Called by native code to return mime type extracted from DRM content.
- */
- public void setMimeType(String mimeType);
-}
diff --git a/media/java/android/media/MediaScannerConnection.java b/media/java/android/media/MediaScannerConnection.java
deleted file mode 100644
index d2596b8..0000000
--- a/media/java/android/media/MediaScannerConnection.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.media.IMediaScannerListener;
-import android.media.IMediaScannerService;
-import android.net.Uri;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.util.Config;
-import android.util.Log;
-
-
-/**
- * MediaScannerConnection provides a way for applications to pass a
- * newly created or downloaded media file to the media scanner service.
- * The media scanner service will read metadata from the file and add
- * the file to the media content provider.
- * The MediaScannerConnectionClient provides an interface for the
- * media scanner service to return the Uri for a newly scanned file
- * to the client of the MediaScannerConnection class.
- */
-public class MediaScannerConnection implements ServiceConnection {
-
- private static final String TAG = "MediaScannerConnection";
-
- private Context mContext;
- private MediaScannerConnectionClient mClient;
- private IMediaScannerService mService;
- private boolean mConnected; // true if connect() has been called since last disconnect()
-
- private IMediaScannerListener.Stub mListener = new IMediaScannerListener.Stub() {
- public void scanCompleted(String path, Uri uri) {
- MediaScannerConnectionClient client = mClient;
- if (client != null) {
- client.onScanCompleted(path, uri);
- }
- }
- };
-
- /**
- * An interface for notifying clients of MediaScannerConnection
- * when a connection to the MediaScanner service has been established
- * and when the scanning of a file has completed.
- */
- public interface MediaScannerConnectionClient {
- /**
- * Called to notify the client when a connection to the
- * MediaScanner service has been established.
- */
- public void onMediaScannerConnected();
-
- /**
- * Called to notify the client when the media scanner has finished
- * scanning a file.
- * @param path the path to the file that has been scanned.
- * @param uri the Uri for the file if the scanning operation succeeded
- * and the file was added to the media database, or null if scanning failed.
- */
- public void onScanCompleted(String path, Uri uri);
- }
-
- /**
- * Constructs a new MediaScannerConnection object.
- * @param context the Context object, required for establishing a connection to
- * the media scanner service.
- * @param client an optional object implementing the MediaScannerConnectionClient
- * interface, for receiving notifications from the media scanner.
- */
- public MediaScannerConnection(Context context, MediaScannerConnectionClient client) {
- mContext = context;
- mClient = client;
- }
-
- /**
- * Initiates a connection to the media scanner service.
- * {@link MediaScannerConnectionClient#onMediaScannerConnected()}
- * will be called when the connection is established.
- */
- public void connect() {
- synchronized (this) {
- if (!mConnected) {
- Intent intent = new Intent(IMediaScannerService.class.getName());
- mContext.bindService(intent, this, Context.BIND_AUTO_CREATE);
- mConnected = true;
- }
- }
- }
-
- /**
- * Releases the connection to the media scanner service.
- */
- public void disconnect() {
- synchronized (this) {
- if (mConnected) {
- if (Config.LOGV) {
- Log.v(TAG, "Disconnecting from Media Scanner");
- }
- try {
- mContext.unbindService(this);
- } catch (IllegalArgumentException ex) {
- if (Config.LOGV) {
- Log.v(TAG, "disconnect failed: " + ex);
- }
- }
- mConnected = false;
- }
- }
- }
-
- /**
- * Returns whether we are connected to the media scanner service
- * @return true if we are connected, false otherwise
- */
- public synchronized boolean isConnected() {
- return (mService != null && mConnected);
- }
-
- /**
- * Requests the media scanner to scan a file.
- * @param path the path to the file to be scanned.
- * @param mimeType an optional mimeType for the file.
- * If mimeType is null, then the mimeType will be inferred from the file extension.
- * Success or failure of the scanning operation cannot be determined until
- * {@link MediaScannerConnectionClient#onScanCompleted(String, Uri)} is called.
- */
- public void scanFile(String path, String mimeType) {
- synchronized (this) {
- if (mService == null || !mConnected) {
- throw new IllegalStateException("not connected to MediaScannerService");
- }
- try {
- if (Config.LOGV) {
- Log.v(TAG, "Scanning file " + path);
- }
- mService.requestScanFile(path, mimeType, mListener);
- } catch (RemoteException e) {
- if (Config.LOGD) {
- Log.d(TAG, "Failed to scan file " + path);
- }
- }
- }
- }
-
- /**
- * Part of the ServiceConnection interface. Do not call.
- */
- public void onServiceConnected(ComponentName className, IBinder service) {
- if (Config.LOGV) {
- Log.v(TAG, "Connected to Media Scanner");
- }
- synchronized (this) {
- mService = IMediaScannerService.Stub.asInterface(service);
- if (mService != null && mClient != null) {
- mClient.onMediaScannerConnected();
- }
- }
- }
-
- /**
- * Part of the ServiceConnection interface. Do not call.
- */
- public void onServiceDisconnected(ComponentName className) {
- if (Config.LOGV) {
- Log.v(TAG, "Disconnected from Media Scanner");
- }
- synchronized (this) {
- mService = null;
- }
- }
-}
diff --git a/media/java/android/media/ResampleInputStream.java b/media/java/android/media/ResampleInputStream.java
deleted file mode 100644
index e26eae5..0000000
--- a/media/java/android/media/ResampleInputStream.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.util.Config;
-import android.util.Log;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-
-/**
- * ResampleInputStream
- * @hide
- */
-public final class ResampleInputStream extends InputStream
-{
- static {
- System.loadLibrary("media_jni");
- }
-
- private final static String TAG = "ResampleInputStream";
-
- // pcm input stream
- private InputStream mInputStream;
-
- // sample rates, assumed to be normalized
- private final int mRateIn;
- private final int mRateOut;
-
- // input pcm data
- private byte[] mBuf;
- private int mBufCount;
-
- // length of 2:1 fir
- private static final int mFirLength = 29;
-
- // helper for bytewise read()
- private final byte[] mOneByte = new byte[1];
-
- /**
- * Create a new ResampleInputStream, which converts the sample rate
- * @param inputStream InputStream containing 16 bit PCM.
- * @param rateIn the input sample rate.
- * @param rateOut the output sample rate.
- * This only handles rateIn == rateOut / 2 for the moment.
- */
- public ResampleInputStream(InputStream inputStream, int rateIn, int rateOut) {
- // only support 2:1 at the moment
- if (rateIn != 2 * rateOut) throw new IllegalArgumentException("only support 2:1 at the moment");
- rateIn = 2;
- rateOut = 1;
-
- mInputStream = inputStream;
- mRateIn = rateIn;
- mRateOut = rateOut;
- }
-
- @Override
- public int read() throws IOException {
- int rtn = read(mOneByte, 0, 1);
- return rtn == 1 ? (0xff & mOneByte[0]) : -1;
- }
-
- @Override
- public int read(byte[] b) throws IOException {
- return read(b, 0, b.length);
- }
-
- @Override
- public int read(byte[] b, int offset, int length) throws IOException {
- if (mInputStream == null) throw new IllegalStateException("not open");
-
- // ensure that mBuf is big enough to cover requested 'length'
- int nIn = ((length / 2) * mRateIn / mRateOut + mFirLength) * 2;
- if (mBuf == null) {
- mBuf = new byte[nIn];
- } else if (nIn > mBuf.length) {
- byte[] bf = new byte[nIn];
- System.arraycopy(mBuf, 0, bf, 0, mBufCount);
- mBuf = bf;
- }
-
- // read until we have enough data for at least one output sample
- while (true) {
- int len = ((mBufCount / 2 - mFirLength) * mRateOut / mRateIn) * 2;
- if (len > 0) {
- length = len < length ? len : (length / 2) * 2;
- break;
- }
- // TODO: should mBuf.length below be nIn instead?
- int n = mInputStream.read(mBuf, mBufCount, mBuf.length - mBufCount);
- if (n == -1) return -1;
- mBufCount += n;
- }
-
- // resample input data
- fir21(mBuf, 0, b, offset, length / 2);
-
- // move any unused bytes to front of mBuf
- int nFwd = length * mRateIn / mRateOut;
- mBufCount -= nFwd;
- if (mBufCount > 0) System.arraycopy(mBuf, nFwd, mBuf, 0, mBufCount);
-
- return length;
- }
-
-/*
- @Override
- public int available() throws IOException {
- int nsamples = (mIn - mOut + mInputStream.available()) / 2;
- return ((nsamples - mFirLength) * mRateOut / mRateIn) * 2;
- }
-*/
-
- @Override
- public void close() throws IOException {
- try {
- if (mInputStream != null) mInputStream.close();
- } finally {
- mInputStream = null;
- }
- }
-
- @Override
- protected void finalize() throws Throwable {
- if (mInputStream != null) {
- close();
- throw new IllegalStateException("someone forgot to close ResampleInputStream");
- }
- }
-
- //
- // fir filter code JNI interface
- //
- private static native void fir21(byte[] in, int inOffset,
- byte[] out, int outOffset, int npoints);
-
-}
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
deleted file mode 100644
index cfcb5eb..0000000
--- a/media/java/android/media/Ringtone.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.res.AssetFileDescriptor;
-import android.database.Cursor;
-import android.media.AudioManager;
-import android.media.MediaPlayer;
-import android.net.Uri;
-import android.provider.DrmStore;
-import android.provider.MediaStore;
-import android.provider.Settings;
-import android.util.Log;
-
-import java.io.FileDescriptor;
-import java.io.IOException;
-
-/**
- * Ringtone provides a quick method for playing a ringtone, notification, or
- * other similar types of sounds.
- * <p>
- * For ways of retrieving {@link Ringtone} objects or to show a ringtone
- * picker, see {@link RingtoneManager}.
- *
- * @see RingtoneManager
- */
-public class Ringtone {
- private static String TAG = "Ringtone";
-
- private static final String[] MEDIA_COLUMNS = new String[] {
- MediaStore.Audio.Media._ID,
- MediaStore.Audio.Media.DATA,
- MediaStore.Audio.Media.TITLE
- };
-
- private static final String[] DRM_COLUMNS = new String[] {
- DrmStore.Audio._ID,
- DrmStore.Audio.DATA,
- DrmStore.Audio.TITLE
- };
-
- private MediaPlayer mAudio;
-
- private Uri mUri;
- private String mTitle;
- private FileDescriptor mFileDescriptor;
- private AssetFileDescriptor mAssetFileDescriptor;
-
- private int mStreamType = AudioManager.STREAM_RING;
-
- private Context mContext;
-
- Ringtone(Context context) {
- mContext = context;
- }
-
- /**
- * Sets the stream type where this ringtone will be played.
- *
- * @param streamType The stream, see {@link AudioManager}.
- */
- public void setStreamType(int streamType) {
- mStreamType = streamType;
-
- if (mAudio != null) {
- /*
- * The stream type has to be set before the media player is
- * prepared. Re-initialize it.
- */
- try {
- openMediaPlayer();
- } catch (IOException e) {
- Log.w(TAG, "Couldn't set the stream type", e);
- }
- }
- }
-
- /**
- * Gets the stream type where this ringtone will be played.
- *
- * @return The stream type, see {@link AudioManager}.
- */
- public int getStreamType() {
- return mStreamType;
- }
-
- /**
- * Returns a human-presentable title for ringtone. Looks in media and DRM
- * content providers. If not in either, uses the filename
- *
- * @param context A context used for querying.
- */
- public String getTitle(Context context) {
- if (mTitle != null) return mTitle;
- return mTitle = getTitle(context, mUri, true);
- }
-
- private static String getTitle(Context context, Uri uri, boolean followSettingsUri) {
- Cursor cursor = null;
- ContentResolver res = context.getContentResolver();
-
- String title = null;
-
- if (uri != null) {
- String authority = uri.getAuthority();
-
- if (Settings.AUTHORITY.equals(authority)) {
- if (followSettingsUri) {
- Uri actualUri = RingtoneManager.getActualDefaultRingtoneUri(context,
- RingtoneManager.getDefaultType(uri));
- String actualTitle = getTitle(context, actualUri, false);
- title = context
- .getString(com.android.internal.R.string.ringtone_default_with_actual,
- actualTitle);
- }
- } else {
-
- if (DrmStore.AUTHORITY.equals(authority)) {
- cursor = res.query(uri, DRM_COLUMNS, null, null, null);
- } else if (MediaStore.AUTHORITY.equals(authority)) {
- cursor = res.query(uri, MEDIA_COLUMNS, null, null, null);
- }
-
- if (cursor != null && cursor.getCount() == 1) {
- cursor.moveToFirst();
- return cursor.getString(2);
- } else {
- title = uri.getLastPathSegment();
- }
- }
- }
-
- if (title == null) {
- title = context.getString(com.android.internal.R.string.ringtone_unknown);
-
- if (title == null) {
- title = "";
- }
- }
-
- return title;
- }
-
- private void openMediaPlayer() throws IOException {
- mAudio = new MediaPlayer();
- if (mUri != null) {
- mAudio.setDataSource(mContext, mUri);
- } else if (mFileDescriptor != null) {
- mAudio.setDataSource(mFileDescriptor);
- } else if (mAssetFileDescriptor != null) {
- mAudio.setDataSource(mAssetFileDescriptor.getFileDescriptor(),
- mAssetFileDescriptor.getStartOffset(),
- mAssetFileDescriptor.getLength());
- } else {
- throw new IOException("No data source set.");
- }
- mAudio.setAudioStreamType(mStreamType);
- mAudio.prepare();
- }
-
- void open(FileDescriptor fd) throws IOException {
- mFileDescriptor = fd;
- openMediaPlayer();
- }
-
- void open(AssetFileDescriptor fd) throws IOException {
- mAssetFileDescriptor = fd;
- openMediaPlayer();
- }
-
- void open(Uri uri) throws IOException {
- mUri = uri;
- openMediaPlayer();
- }
-
- /**
- * Plays the ringtone.
- */
- public void play() {
- if (mAudio == null) {
- try {
- openMediaPlayer();
- } catch (Exception ex) {
- Log.e(TAG, "play() caught ", ex);
- mAudio = null;
- }
- }
- if (mAudio != null) {
- mAudio.start();
- }
- }
-
- /**
- * Stops a playing ringtone.
- */
- public void stop() {
- if (mAudio != null) {
- mAudio.reset();
- mAudio.release();
- mAudio = null;
- }
- }
-
- /**
- * Whether this ringtone is currently playing.
- *
- * @return True if playing, false otherwise.
- */
- public boolean isPlaying() {
- return mAudio != null && mAudio.isPlaying();
- }
-
- void setTitle(String title) {
- mTitle = title;
- }
-}
diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java
deleted file mode 100644
index 2f0007f..0000000
--- a/media/java/android/media/RingtoneManager.java
+++ /dev/null
@@ -1,713 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import com.android.internal.database.SortCursor;
-
-import android.annotation.SdkConstant;
-import android.annotation.SdkConstant.SdkConstantType;
-import android.app.Activity;
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.res.AssetFileDescriptor;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Environment;
-import android.provider.DrmStore;
-import android.provider.MediaStore;
-import android.provider.Settings;
-import android.provider.Settings.System;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * RingtoneManager provides access to ringtones, notification, and other types
- * of sounds. It manages querying the different media providers and combines the
- * results into a single cursor. It also provides a {@link Ringtone} for each
- * ringtone. We generically call these sounds ringtones, however the
- * {@link #TYPE_RINGTONE} refers to the type of sounds that are suitable for the
- * phone ringer.
- * <p>
- * To show a ringtone picker to the user, use the
- * {@link #ACTION_RINGTONE_PICKER} intent to launch the picker as a subactivity.
- *
- * @see Ringtone
- */
-public class RingtoneManager {
-
- private static final String TAG = "RingtoneManager";
-
- // Make sure these are in sync with attrs.xml:
- // <attr name="ringtoneType">
-
- /**
- * Type that refers to sounds that are used for the phone ringer.
- */
- public static final int TYPE_RINGTONE = 1;
-
- /**
- * Type that refers to sounds that are used for notifications.
- */
- public static final int TYPE_NOTIFICATION = 2;
-
- /**
- * Type that refers to sounds that are used for the alarm.
- */
- public static final int TYPE_ALARM = 4;
-
- /**
- * All types of sounds.
- */
- public static final int TYPE_ALL = TYPE_RINGTONE | TYPE_NOTIFICATION | TYPE_ALARM;
-
- // </attr>
-
- /**
- * Activity Action: Shows a ringtone picker.
- * <p>
- * Input: {@link #EXTRA_RINGTONE_EXISTING_URI},
- * {@link #EXTRA_RINGTONE_SHOW_DEFAULT},
- * {@link #EXTRA_RINGTONE_SHOW_SILENT}, {@link #EXTRA_RINGTONE_TYPE},
- * {@link #EXTRA_RINGTONE_DEFAULT_URI}, {@link #EXTRA_RINGTONE_TITLE},
- * {@link #EXTRA_RINGTONE_INCLUDE_DRM}.
- * <p>
- * Output: {@link #EXTRA_RINGTONE_PICKED_URI}.
- */
- @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
- public static final String ACTION_RINGTONE_PICKER = "android.intent.action.RINGTONE_PICKER";
-
- /**
- * Given to the ringtone picker as a boolean. Whether to show an item for
- * "Default".
- *
- * @see #ACTION_RINGTONE_PICKER
- */
- public static final String EXTRA_RINGTONE_SHOW_DEFAULT =
- "android.intent.extra.ringtone.SHOW_DEFAULT";
-
- /**
- * Given to the ringtone picker as a boolean. Whether to show an item for
- * "Silent". If the "Silent" item is picked,
- * {@link #EXTRA_RINGTONE_PICKED_URI} will be null.
- *
- * @see #ACTION_RINGTONE_PICKER
- */
- public static final String EXTRA_RINGTONE_SHOW_SILENT =
- "android.intent.extra.ringtone.SHOW_SILENT";
-
- /**
- * Given to the ringtone picker as a boolean. Whether to include DRM ringtones.
- */
- public static final String EXTRA_RINGTONE_INCLUDE_DRM =
- "android.intent.extra.ringtone.INCLUDE_DRM";
-
- /**
- * Given to the ringtone picker as a {@link Uri}. The {@link Uri} of the
- * current ringtone, which will be used to show a checkmark next to the item
- * for this {@link Uri}. If showing an item for "Default" (@see
- * {@link #EXTRA_RINGTONE_SHOW_DEFAULT}), this can also be one of
- * {@link System#DEFAULT_RINGTONE_URI} or
- * {@link System#DEFAULT_NOTIFICATION_URI} to have the "Default" item
- * checked.
- *
- * @see #ACTION_RINGTONE_PICKER
- */
- public static final String EXTRA_RINGTONE_EXISTING_URI =
- "android.intent.extra.ringtone.EXISTING_URI";
-
- /**
- * Given to the ringtone picker as a {@link Uri}. The {@link Uri} of the
- * ringtone to play when the user attempts to preview the "Default"
- * ringtone. This can be one of {@link System#DEFAULT_RINGTONE_URI} or
- * {@link System#DEFAULT_NOTIFICATION_URI} to have the "Default" point to
- * the current sound for the given default sound type. If you are showing a
- * ringtone picker for some other type of sound, you are free to provide any
- * {@link Uri} here.
- */
- public static final String EXTRA_RINGTONE_DEFAULT_URI =
- "android.intent.extra.ringtone.DEFAULT_URI";
-
- /**
- * Given to the ringtone picker as an int. Specifies which ringtone type(s) should be
- * shown in the picker. One or more of {@link #TYPE_RINGTONE},
- * {@link #TYPE_NOTIFICATION}, {@link #TYPE_ALARM}, or {@link #TYPE_ALL}
- * (bitwise-ored together).
- */
- public static final String EXTRA_RINGTONE_TYPE = "android.intent.extra.ringtone.TYPE";
-
- /**
- * Given to the ringtone picker as a {@link CharSequence}. The title to
- * show for the ringtone picker. This has a default value that is suitable
- * in most cases.
- */
- public static final String EXTRA_RINGTONE_TITLE = "android.intent.extra.ringtone.TITLE";
-
- /**
- * Returned from the ringtone picker as a {@link Uri}.
- * <p>
- * It will be one of:
- * <li> the picked ringtone,
- * <li> a {@link Uri} that equals {@link System#DEFAULT_RINGTONE_URI} or
- * {@link System#DEFAULT_NOTIFICATION_URI} if the default was chosen,
- * <li> null if the "Silent" item was picked.
- *
- * @see #ACTION_RINGTONE_PICKER
- */
- public static final String EXTRA_RINGTONE_PICKED_URI =
- "android.intent.extra.ringtone.PICKED_URI";
-
- // Make sure the column ordering and then ..._COLUMN_INDEX are in sync
-
- private static final String[] INTERNAL_COLUMNS = new String[] {
- MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE,
- "\"" + MediaStore.Audio.Media.INTERNAL_CONTENT_URI + "\""
- };
-
- private static final String[] DRM_COLUMNS = new String[] {
- DrmStore.Audio._ID, DrmStore.Audio.TITLE,
- "\"" + DrmStore.Audio.CONTENT_URI + "\""
- };
-
- private static final String[] MEDIA_COLUMNS = new String[] {
- MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE,
- "\"" + MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + "\""
- };
-
- /**
- * The column index (in the cursor returned by {@link #getCursor()} for the
- * row ID.
- */
- public static final int ID_COLUMN_INDEX = 0;
-
- /**
- * The column index (in the cursor returned by {@link #getCursor()} for the
- * title.
- */
- public static final int TITLE_COLUMN_INDEX = 1;
-
- /**
- * The column index (in the cursor returned by {@link #getCursor()} for the
- * media provider's URI.
- */
- public static final int URI_COLUMN_INDEX = 2;
-
- private Activity mActivity;
- private Context mContext;
-
- private Cursor mCursor;
-
- private int mType = TYPE_RINGTONE;
-
- /**
- * If a column (item from this list) exists in the Cursor, its value must
- * be true (value of 1) for the row to be returned.
- */
- private List<String> mFilterColumns = new ArrayList<String>();
-
- private boolean mStopPreviousRingtone = true;
- private Ringtone mPreviousRingtone;
-
- private boolean mIncludeDrm;
-
- /**
- * Constructs a RingtoneManager. This constructor is recommended as its
- * constructed instance manages cursor(s).
- *
- * @param activity The activity used to get a managed cursor.
- */
- public RingtoneManager(Activity activity) {
- mContext = mActivity = activity;
- setType(mType);
- }
-
- /**
- * Constructs a RingtoneManager. The instance constructed by this
- * constructor will not manage the cursor(s), so the client should handle
- * this itself.
- *
- * @param context The context to used to get a cursor.
- */
- public RingtoneManager(Context context) {
- mContext = context;
- setType(mType);
- }
-
- /**
- * Sets which type(s) of ringtones will be listed by this.
- *
- * @param type The type(s), one or more of {@link #TYPE_RINGTONE},
- * {@link #TYPE_NOTIFICATION}, {@link #TYPE_ALARM},
- * {@link #TYPE_ALL}.
- * @see #EXTRA_RINGTONE_TYPE
- */
- public void setType(int type) {
-
- if (mCursor != null) {
- throw new IllegalStateException(
- "Setting filter columns should be done before querying for ringtones.");
- }
-
- mType = type;
- setFilterColumnsList(type);
- }
-
- /**
- * Infers the playback stream type based on what type of ringtones this
- * manager is returning.
- *
- * @return The stream type.
- * @hide Pending API Council approval
- */
- public int inferStreamType() {
- switch (mType) {
-
- case TYPE_ALARM:
- return AudioManager.STREAM_ALARM;
-
- case TYPE_NOTIFICATION:
- return AudioManager.STREAM_NOTIFICATION;
-
- default:
- return AudioManager.STREAM_RING;
- }
- }
-
- /**
- * Whether retrieving another {@link Ringtone} will stop playing the
- * previously retrieved {@link Ringtone}.
- * <p>
- * If this is false, make sure to {@link Ringtone#stop()} any previous
- * ringtones to free resources.
- *
- * @param stopPreviousRingtone If true, the previously retrieved
- * {@link Ringtone} will be stopped.
- */
- public void setStopPreviousRingtone(boolean stopPreviousRingtone) {
- mStopPreviousRingtone = stopPreviousRingtone;
- }
-
- /**
- * @see #setStopPreviousRingtone(boolean)
- */
- public boolean getStopPreviousRingtone() {
- return mStopPreviousRingtone;
- }
-
- /**
- * Stops playing the last {@link Ringtone} retrieved from this.
- */
- public void stopPreviousRingtone() {
- if (mPreviousRingtone != null) {
- mPreviousRingtone.stop();
- }
- }
-
- /**
- * Returns whether DRM ringtones will be included.
- *
- * @return Whether DRM ringtones will be included.
- * @see #setIncludeDrm(boolean)
- */
- public boolean getIncludeDrm() {
- return mIncludeDrm;
- }
-
- /**
- * Sets whether to include DRM ringtones.
- *
- * @param includeDrm Whether to include DRM ringtones.
- */
- public void setIncludeDrm(boolean includeDrm) {
- mIncludeDrm = includeDrm;
- }
-
- /**
- * Returns a {@link Cursor} of all the ringtones available. The returned
- * cursor will be the same cursor returned each time this method is called,
- * so do not {@link Cursor#close()} the cursor. The cursor can be
- * {@link Cursor#deactivate()} safely.
- * <p>
- * If {@link RingtoneManager#RingtoneManager(Activity)} was not used, the
- * caller should manage the returned cursor through its activity's life
- * cycle to prevent leaking the cursor.
- *
- * @return A {@link Cursor} of all the ringtones available.
- * @see #ID_COLUMN_INDEX
- * @see #TITLE_COLUMN_INDEX
- * @see #URI_COLUMN_INDEX
- */
- public Cursor getCursor() {
- if (mCursor != null && mCursor.requery()) {
- return mCursor;
- }
-
- final Cursor internalCursor = getInternalRingtones();
- final Cursor drmCursor = mIncludeDrm ? getDrmRingtones() : null;
- final Cursor mediaCursor = getMediaRingtones();
-
- return mCursor = new SortCursor(new Cursor[] { internalCursor, drmCursor, mediaCursor },
- MediaStore.MediaColumns.TITLE);
- }
-
- /**
- * Gets a {@link Ringtone} for the ringtone at the given position in the
- * {@link Cursor}.
- *
- * @param position The position (in the {@link Cursor}) of the ringtone.
- * @return A {@link Ringtone} pointing to the ringtone.
- */
- public Ringtone getRingtone(int position) {
- if (mStopPreviousRingtone && mPreviousRingtone != null) {
- mPreviousRingtone.stop();
- }
-
- mPreviousRingtone = getRingtone(mContext, getRingtoneUri(position), inferStreamType());
- return mPreviousRingtone;
- }
-
- /**
- * Gets a {@link Uri} for the ringtone at the given position in the {@link Cursor}.
- *
- * @param position The position (in the {@link Cursor}) of the ringtone.
- * @return A {@link Uri} pointing to the ringtone.
- */
- public Uri getRingtoneUri(int position) {
- final Cursor cursor = getCursor();
-
- if (!cursor.moveToPosition(position)) {
- return null;
- }
-
- return getUriFromCursor(cursor);
- }
-
- private static Uri getUriFromCursor(Cursor cursor) {
- return ContentUris.withAppendedId(Uri.parse(cursor.getString(URI_COLUMN_INDEX)), cursor
- .getLong(ID_COLUMN_INDEX));
- }
-
- /**
- * Gets the position of a {@link Uri} within this {@link RingtoneManager}.
- *
- * @param ringtoneUri The {@link Uri} to retreive the position of.
- * @return The position of the {@link Uri}, or -1 if it cannot be found.
- */
- public int getRingtonePosition(Uri ringtoneUri) {
-
- if (ringtoneUri == null) return -1;
-
- final Cursor cursor = getCursor();
- final int cursorCount = cursor.getCount();
-
- if (!cursor.moveToFirst()) {
- return -1;
- }
-
- // Only create Uri objects when the actual URI changes
- Uri currentUri = null;
- String previousUriString = null;
- for (int i = 0; i < cursorCount; i++) {
- String uriString = cursor.getString(URI_COLUMN_INDEX);
- if (currentUri == null || !uriString.equals(previousUriString)) {
- currentUri = Uri.parse(uriString);
- }
-
- if (ringtoneUri.equals(ContentUris.withAppendedId(currentUri, cursor
- .getLong(ID_COLUMN_INDEX)))) {
- return i;
- }
-
- cursor.move(1);
-
- previousUriString = uriString;
- }
-
- return -1;
- }
-
- /**
- * Returns a valid ringtone URI. No guarantees on which it returns. If it
- * cannot find one, returns null.
- *
- * @param context The context to use for querying.
- * @return A ringtone URI, or null if one cannot be found.
- */
- public static Uri getValidRingtoneUri(Context context) {
- final RingtoneManager rm = new RingtoneManager(context);
-
- Uri uri = getValidRingtoneUriFromCursorAndClose(context, rm.getInternalRingtones());
-
- if (uri == null) {
- uri = getValidRingtoneUriFromCursorAndClose(context, rm.getMediaRingtones());
- }
-
- if (uri == null) {
- uri = getValidRingtoneUriFromCursorAndClose(context, rm.getDrmRingtones());
- }
-
- return uri;
- }
-
- private static Uri getValidRingtoneUriFromCursorAndClose(Context context, Cursor cursor) {
- if (cursor != null) {
- Uri uri = null;
-
- if (cursor.moveToFirst()) {
- uri = getUriFromCursor(cursor);
- }
- cursor.close();
-
- return uri;
- } else {
- return null;
- }
- }
-
- private Cursor getInternalRingtones() {
- return query(
- MediaStore.Audio.Media.INTERNAL_CONTENT_URI, INTERNAL_COLUMNS,
- constructBooleanTrueWhereClause(mFilterColumns),
- null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
- }
-
- private Cursor getDrmRingtones() {
- // DRM store does not have any columns to use for filtering
- return query(
- DrmStore.Audio.CONTENT_URI, DRM_COLUMNS,
- null, null, DrmStore.Audio.TITLE);
- }
-
- private Cursor getMediaRingtones() {
- // Get the external media cursor. First check to see if it is mounted.
- final String status = Environment.getExternalStorageState();
-
- return (status.equals(Environment.MEDIA_MOUNTED) ||
- status.equals(Environment.MEDIA_MOUNTED_READ_ONLY))
- ? query(
- MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, MEDIA_COLUMNS,
- constructBooleanTrueWhereClause(mFilterColumns), null,
- MediaStore.Audio.Media.DEFAULT_SORT_ORDER)
- : null;
- }
-
- private void setFilterColumnsList(int type) {
- List<String> columns = mFilterColumns;
- columns.clear();
-
- if ((type & TYPE_RINGTONE) != 0) {
- columns.add(MediaStore.Audio.AudioColumns.IS_RINGTONE);
- }
-
- if ((type & TYPE_NOTIFICATION) != 0) {
- columns.add(MediaStore.Audio.AudioColumns.IS_NOTIFICATION);
- }
-
- if ((type & TYPE_ALARM) != 0) {
- columns.add(MediaStore.Audio.AudioColumns.IS_ALARM);
- }
- }
-
- /**
- * Constructs a where clause that consists of at least one column being 1
- * (true). This is used to find all matching sounds for the given sound
- * types (ringtone, notifications, etc.)
- *
- * @param columns The columns that must be true.
- * @return The where clause.
- */
- private static String constructBooleanTrueWhereClause(List<String> columns) {
-
- if (columns == null) return null;
-
- StringBuilder sb = new StringBuilder();
- for (int i = columns.size() - 1; i >= 0; i--) {
- sb.append(columns.get(i)).append("=1 or ");
- }
-
- if (columns.size() > 0) {
- // Remove last ' or '
- sb.setLength(sb.length() - 4);
- }
-
- return sb.toString();
- }
-
- private Cursor query(Uri uri,
- String[] projection,
- String selection,
- String[] selectionArgs,
- String sortOrder) {
- if (mActivity != null) {
- return mActivity.managedQuery(uri, projection, selection, selectionArgs, sortOrder);
- } else {
- return mContext.getContentResolver().query(uri, projection, selection, selectionArgs,
- sortOrder);
- }
- }
-
- /**
- * Returns a {@link Ringtone} for a given sound URI.
- * <p>
- * If the given URI cannot be opened for any reason, this method will
- * attempt to fallback on another sound. If it cannot find any, it will
- * return null.
- *
- * @param context A context used to query.
- * @param ringtoneUri The {@link Uri} of a sound or ringtone.
- * @return A {@link Ringtone} for the given URI, or null.
- */
- public static Ringtone getRingtone(final Context context, Uri ringtoneUri) {
- // Don't set the stream type
- return getRingtone(context, ringtoneUri, -1);
- }
-
- /**
- * Returns a {@link Ringtone} for a given sound URI on the given stream
- * type. Normally, if you change the stream type on the returned
- * {@link Ringtone}, it will re-create the {@link MediaPlayer}. This is just
- * an optimized route to avoid that.
- *
- * @param streamType The stream type for the ringtone, or -1 if it should
- * not be set (and the default used instead).
- * @see #getRingtone(Context, Uri)
- */
- private static Ringtone getRingtone(final Context context, Uri ringtoneUri, int streamType) {
-
- try {
- Ringtone r = new Ringtone(context);
- if (streamType >= 0) {
- r.setStreamType(streamType);
- }
- r.open(ringtoneUri);
- return r;
- } catch (Exception ex) {
- Log.e(TAG, "Failed to open ringtone " + ringtoneUri);
- }
-
- // Ringtone doesn't exist, use the fallback ringtone.
- try {
- AssetFileDescriptor afd = context.getResources().openRawResourceFd(
- com.android.internal.R.raw.fallbackring);
- if (afd != null) {
- Ringtone r = new Ringtone(context);
- r.open(afd);
- afd.close();
- return r;
- }
- } catch (Exception ex) {
- }
-
- // we should never get here
- Log.e(TAG, "unable to find a usable ringtone");
- return null;
- }
-
- /**
- * Gets the current default sound's {@link Uri}. This will give the actual
- * sound {@link Uri}, instead of using this, most clients can use
- * {@link System#DEFAULT_RINGTONE_URI}.
- *
- * @param context A context used for querying.
- * @param type The type whose default sound should be returned. One of
- * {@link #TYPE_RINGTONE} or {@link #TYPE_NOTIFICATION}.
- * @return A {@link Uri} pointing to the default sound for the sound type.
- * @see #setActualDefaultRingtoneUri(Context, int, Uri)
- */
- public static Uri getActualDefaultRingtoneUri(Context context, int type) {
- String setting = getSettingForType(type);
- if (setting == null) return null;
- final String uriString = Settings.System.getString(context.getContentResolver(), setting);
- return uriString != null ? Uri.parse(uriString) : getValidRingtoneUri(context);
- }
-
- /**
- * Sets the {@link Uri} of the default sound for a given sound type.
- *
- * @param context A context used for querying.
- * @param type The type whose default sound should be set. One of
- * {@link #TYPE_RINGTONE} or {@link #TYPE_NOTIFICATION}.
- * @param ringtoneUri A {@link Uri} pointing to the default sound to set.
- * @see #getActualDefaultRingtoneUri(Context, int)
- */
- public static void setActualDefaultRingtoneUri(Context context, int type, Uri ringtoneUri) {
- String setting = getSettingForType(type);
- if (setting == null) return;
- Settings.System.putString(context.getContentResolver(), setting, ringtoneUri.toString());
- }
-
- private static String getSettingForType(int type) {
- if ((type & TYPE_RINGTONE) != 0) {
- return Settings.System.RINGTONE;
- } else if ((type & TYPE_NOTIFICATION) != 0) {
- return Settings.System.NOTIFICATION_SOUND;
- } else {
- return null;
- }
- }
-
- /**
- * Returns whether the given {@link Uri} is one of the default ringtones.
- *
- * @param ringtoneUri The ringtone {@link Uri} to be checked.
- * @return Whether the {@link Uri} is a default.
- */
- public static boolean isDefault(Uri ringtoneUri) {
- return getDefaultType(ringtoneUri) != -1;
- }
-
- /**
- * Returns the type of a default {@link Uri}.
- *
- * @param defaultRingtoneUri The default {@link Uri}. For example,
- * {@link System#DEFAULT_RINGTONE_URI} or
- * {@link System#DEFAULT_NOTIFICATION_URI}.
- * @return The type of the defaultRingtoneUri, or -1.
- */
- public static int getDefaultType(Uri defaultRingtoneUri) {
- if (defaultRingtoneUri == null) {
- return -1;
- } else if (defaultRingtoneUri.equals(Settings.System.DEFAULT_RINGTONE_URI)) {
- return TYPE_RINGTONE;
- } else if (defaultRingtoneUri.equals(Settings.System.DEFAULT_NOTIFICATION_URI)) {
- return TYPE_NOTIFICATION;
- } else {
- return -1;
- }
- }
-
- /**
- * Returns the {@link Uri} for the default ringtone of a particular type.
- * Rather than returning the actual ringtone's sound {@link Uri}, this will
- * return the symbolic {@link Uri} which will resolved to the actual sound
- * when played.
- *
- * @param type The ringtone type whose default should be returned.
- * @return The {@link Uri} of the default ringtone for the given type.
- */
- public static Uri getDefaultUri(int type) {
- if ((type & TYPE_RINGTONE) != 0) {
- return Settings.System.DEFAULT_RINGTONE_URI;
- } else if ((type & TYPE_NOTIFICATION) != 0) {
- return Settings.System.DEFAULT_NOTIFICATION_URI;
- } else {
- return null;
- }
- }
-
-}
diff --git a/media/java/android/media/SoundPool.java b/media/java/android/media/SoundPool.java
deleted file mode 100644
index 427f173..0000000
--- a/media/java/android/media/SoundPool.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.util.Log;
-import java.io.File;
-import java.io.FileDescriptor;
-import android.os.ParcelFileDescriptor;
-import java.lang.ref.WeakReference;
-import android.content.Context;
-import android.content.res.AssetFileDescriptor;
-import java.io.IOException;
-
-/*
- * The SoundPool class manages and plays audio resources for applications.
- */
-public class SoundPool
-{
- static { System.loadLibrary("soundpool"); }
-
- private final static String TAG = "SoundPool";
-
- private int mNativeContext; // accessed by native methods
-
- public SoundPool(int maxStreams, int streamType, int srcQuality) {
- native_setup(new WeakReference<SoundPool>(this), maxStreams, streamType, srcQuality);
- }
-
- public int load(String path, int priority)
- {
- // pass network streams to player
- if (path.startsWith("http:"))
- return _load(path, priority);
-
- // try local path
- int id = 0;
- try {
- File f = new File(path);
- if (f != null) {
- ParcelFileDescriptor fd = ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
- if (fd != null) {
- id = _load(fd.getFileDescriptor(), 0, f.length(), priority);
- //Log.v(TAG, "close fd");
- fd.close();
- }
- }
- } catch (java.io.IOException e) {}
- return id;
- }
-
- public int load(Context context, int resId, int priority) {
- AssetFileDescriptor afd = context.getResources().openRawResourceFd(resId);
- int id = 0;
- if (afd != null) {
- id = _load(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength(), priority);
- try {
- //Log.v(TAG, "close fd");
- afd.close();
- } catch (java.io.IOException ex) {
- //Log.d(TAG, "close failed:", ex);
- }
- }
- return id;
- }
-
- public int load(AssetFileDescriptor afd, int priority) {
- if (afd != null) {
- return _load(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength(), priority);
- } else {
- return 0;
- }
- }
-
- public int load(FileDescriptor fd, long offset, long length, int priority) {
- return _load(fd, offset, length, priority);
- }
-
- private native final int _load(String uri, int priority);
-
- private native final int _load(FileDescriptor fd, long offset, long length, int priority);
-
- public native final boolean unload(int soundID);
-
- public native final int play(int soundID, float leftVolume, float rightVolume,
- int priority, int loop, float rate);
-
- public native final void pause(int streamID);
-
- public native final void resume(int streamID);
-
- public native final void stop(int streamID);
-
- public native final void setVolume(int streamID,
- float leftVolume, float rightVolume);
-
- public native final void setPriority(int streamID, int priority);
-
- public native final void setLoop(int streamID, int loop);
-
- public native final void setRate(int streamID, float rate);
-
- public native final void release();
-
- private native final void native_setup(Object mediaplayer_this,
- int maxStreams, int streamType, int srcQuality);
-
- protected void finalize() { release(); }
-}
diff --git a/media/java/android/media/ToneGenerator.java b/media/java/android/media/ToneGenerator.java
deleted file mode 100644
index 0901fbf..0000000
--- a/media/java/android/media/ToneGenerator.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-
-
-/**
- * This class provides methods to play DTMF tones (ITU-T Recommendation Q.23),
- * call supervisory tones (3GPP TS 22.001, CEPT) and proprietary tones (3GPP TS 31.111).
- * Depending on call state and routing options, tones are mixed to the downlink audio
- * or output to the speaker phone or headset.
- * This API is not for generating tones over the uplink audio path.
- */
-public class ToneGenerator
-{
-
- /* Values for toneType parameter of ToneGenerator() constructor */
- /*
- * List of all available tones: These constants must be kept consistant with
- * the enum in ToneGenerator C++ class. */
-
- /**
- * DTMF tone for key 0: 1336Hz, 941Hz, continuous</p>
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_0 = 0;
- /**
- * DTMF tone for key 1: 1209Hz, 697Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_1 = 1;
- /**
- * DTMF tone for key 2: 1336Hz, 697Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_2 = 2;
- /**
- * DTMF tone for key 3: 1477Hz, 697Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_3 = 3;
- /**
- * DTMF tone for key 4: 1209Hz, 770Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_4 = 4;
- /**
- * DTMF tone for key 5: 1336Hz, 770Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_5 = 5;
- /**
- * DTMF tone for key 6: 1477Hz, 770Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_6 = 6;
- /**
- * DTMF tone for key 7: 1209Hz, 852Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_7 = 7;
- /**
- * DTMF tone for key 8: 1336Hz, 852Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_8 = 8;
- /**
- * DTMF tone for key 9: 1477Hz, 852Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_9 = 9;
- /**
- * DTMF tone for key *: 1209Hz, 941Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_S = 10;
- /**
- * DTMF tone for key #: 1477Hz, 941Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_P = 11;
- /**
- * DTMF tone for key A: 1633Hz, 697Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_A = 12;
- /**
- * DTMF tone for key B: 1633Hz, 770Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_B = 13;
- /**
- * DTMF tone for key C: 1633Hz, 852Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_C = 14;
- /**
- * DTMF tone for key D: 1633Hz, 941Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_DTMF_D = 15;
- /**
- * Call supervisory tone, Dial tone: 425Hz, continuous
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_SUP_DIAL = 16;
- /**
- * Call supervisory tone, Busy: 425Hz, 500ms ON, 500ms OFF...
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_SUP_BUSY = 17;
- /**
- * Call supervisory tone, Congestion: 425Hz, 200ms ON, 200ms OFF...
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_SUP_CONGESTION = 18;
- /**
- * Call supervisory tone, Radio path acknowlegment : 425Hz, 200ms ON
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_SUP_RADIO_ACK = 19;
- /**
- * Call supervisory tone, Radio path not available: 425Hz, 200ms ON, 200 OFF 3 bursts
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_SUP_RADIO_NOTAVAIL = 20;
- /**
- * Call supervisory tone, Error/Special info: 950Hz+1400Hz+1800Hz, 330ms ON, 1s OFF...
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_SUP_ERROR = 21;
- /**
- * Call supervisory tone, Call Waiting: 425Hz, 200ms ON, 600ms OFF, 200ms ON, 3s OFF...
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_SUP_CALL_WAITING = 22;
- /**
- * Call supervisory tone, Ring Tone: 425Hz, 1s ON, 4s OFF...
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_SUP_RINGTONE = 23;
- /**
- * Proprietary tone, general beep: 400Hz+1200Hz, 35ms ON
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_PROP_BEEP = 24;
- /**
- * Proprietary tone, positive acknowlegement: 1200Hz, 100ms ON, 100ms OFF 2 bursts
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_PROP_ACK = 25;
- /**
- * Proprietary tone, negative acknowlegement: 300Hz+400Hz+500Hz, 400ms ON
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_PROP_NACK = 26;
- /**
- * Proprietary tone, prompt tone: 400Hz+1200Hz, 200ms ON
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_PROP_PROMPT = 27;
- /**
- * Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
- *
- * @see #ToneGenerator(int, int)
- */
- public static final int TONE_PROP_BEEP2 = 28;
-
- /** Maximum volume, for use with {@link #ToneGenerator(int,int)} */
- public static final int MAX_VOLUME = AudioSystem.MAX_VOLUME;
- /** Minimum volume setting, for use with {@link #ToneGenerator(int,int)} */
- public static final int MIN_VOLUME = AudioSystem.MIN_VOLUME;
-
-
- /**
- * ToneGenerator class contructor specifying output stream type and volume.
- *
- * @param streamType The streame type used for tone playback (e.g. STREAM_MUSIC).
- * @param volume The volume of the tone, given in percentage of maximum volume (from 0-100).
- *
- */
- public ToneGenerator(int streamType, int volume) {
- native_setup(streamType, volume);
- }
-
- /**
- * This method starts the playback of a tone of the specified type.
- * only one tone can play at a time: if a tone is playing while this method is called,
- * this tone is stopped and replaced by the one requested.
- * @param toneType The type of tone generate chosen from the following list:
- * <ul>
- * <li>{@link #TONE_DTMF_0}
- * <li>{@link #TONE_DTMF_1}
- * <li>{@link #TONE_DTMF_2}
- * <li>{@link #TONE_DTMF_3}
- * <li>{@link #TONE_DTMF_4}
- * <li>{@link #TONE_DTMF_5}
- * <li>{@link #TONE_DTMF_6}
- * <li>{@link #TONE_DTMF_7}
- * <li>{@link #TONE_DTMF_8}
- * <li>{@link #TONE_DTMF_9}
- * <li>{@link #TONE_DTMF_A}
- * <li>{@link #TONE_DTMF_B}
- * <li>{@link #TONE_DTMF_C}
- * <li>{@link #TONE_DTMF_D}
- * <li>{@link #TONE_SUP_DIAL}
- * <li>{@link #TONE_SUP_BUSY}
- * <li>{@link #TONE_SUP_CONGESTION}
- * <li>{@link #TONE_SUP_RADIO_ACK}
- * <li>{@link #TONE_SUP_RADIO_NOTAVAIL}
- * <li>{@link #TONE_SUP_ERROR}
- * <li>{@link #TONE_SUP_CALL_WAITING}
- * <li>{@link #TONE_SUP_RINGTONE}
- * <li>{@link #TONE_PROP_BEEP}
- * <li>{@link #TONE_PROP_ACK}
- * <li>{@link #TONE_PROP_NACK}
- * <li>{@link #TONE_PROP_PROMPT}
- * <li>{@link #TONE_PROP_BEEP2}
- * </ul>
- * @see #ToneGenerator(int, int)
- */
- public native boolean startTone(int toneType);
-
- /**
- * This method stops the tone currently playing playback.
- * @see #ToneGenerator(int, int)
- */
- public native void stopTone();
-
- /**
- * Releases resources associated with this ToneGenerator object. It is good
- * practice to call this method when you're done using the ToneGenerator.
- */
- public native void release();
-
- private native final void native_setup(int streamType, int volume);
-
- private native final void native_finalize();
- protected void finalize() { native_finalize(); }
-
- private int mNativeContext; // accessed by native methods
-
-
-}
diff --git a/media/java/android/media/package.html b/media/java/android/media/package.html
deleted file mode 100644
index 3de7167..0000000
--- a/media/java/android/media/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<HTML>
-<BODY>
-Provides classes that manage various media interfaces in audio and video.
-<p>The Media APIs are used to play and, in some cases, record media files. This includes
-audio (e.g., play MP3s or other music files, ringtones, game sound effects, or DTMF tones)
-and video (e.g., play a video streamed over the web or from local storage).
-</p>
-<p>Other special classes in the package offer the ability to detect the faces of people
-in Bitmaps ({@link android.media.FaceDetector}), control audio routing (to the device or a headset)
-and control alerts such as ringtones and phone vibrations ({@link android.media.AudioManager}).
-</p>
-</BODY>
-</HTML>
diff --git a/media/jni/Android.mk b/media/jni/Android.mk
deleted file mode 100644
index 3620494..0000000
--- a/media/jni/Android.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-ifneq ($(BUILD_WITHOUT_PV),true)
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- android_media_MediaPlayer.cpp \
- android_media_MediaRecorder.cpp \
- android_media_MediaScanner.cpp \
- android_media_MediaMetadataRetriever.cpp \
- android_media_AmrInputStream.cpp \
- android_media_ResampleInputStream.cpp
-
-LOCAL_SHARED_LIBRARIES := \
- libopencoreplayer \
- libopencoreauthor \
- libandroid_runtime \
- libnativehelper \
- libcutils \
- libutils \
- libmedia \
- libsgl \
- libui
-
-LOCAL_STATIC_LIBRARIES :=
-
-LOCAL_C_INCLUDES += \
- external/tremor/Tremor \
- $(PV_INCLUDES) \
- $(JNI_H_INCLUDE) \
- $(call include-path-for, corecg graphics)
-
-LOCAL_CFLAGS +=
-
-LOCAL_LDLIBS := -lpthread
-
-LOCAL_MODULE:= libmedia_jni
-
-include $(BUILD_SHARED_LIBRARY)
-
-# build libsoundpool.so
-include $(LOCAL_PATH)/soundpool/Android.mk
-endif
diff --git a/media/jni/MODULE_LICENSE_APACHE2 b/media/jni/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/media/jni/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/media/jni/NOTICE b/media/jni/NOTICE
deleted file mode 100644
index c5b1efa..0000000
--- a/media/jni/NOTICE
+++ /dev/null
@@ -1,190 +0,0 @@
-
- Copyright (c) 2005-2008, The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
diff --git a/media/jni/android_media_AmrInputStream.cpp b/media/jni/android_media_AmrInputStream.cpp
deleted file mode 100644
index 978c110..0000000
--- a/media/jni/android_media_AmrInputStream.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#define LOG_TAG "AmrInputStream"
-#include "utils/Log.h"
-
-#include <media/mediarecorder.h>
-#include <stdio.h>
-#include <assert.h>
-#include <limits.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <utils/threads.h>
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-#include "gsmamr_encoder_wrapper.h"
-
-
-// ----------------------------------------------------------------------------
-
-using namespace android;
-
-// Corresponds to max bit rate of 12.2 kbps.
-static const int aMaxOutputBufferSize = 32;
-
-static const int SAMPLES_PER_FRAME = 8000 * 20 / 1000;
-
-
-//
-// helper function to throw an exception
-//
-static void throwException(JNIEnv *env, const char* ex, const char* fmt, int data) {
- if (jclass cls = env->FindClass(ex)) {
- char msg[1000];
- sprintf(msg, fmt, data);
- env->ThrowNew(cls, msg);
- env->DeleteLocalRef(cls);
- }
-}
-
-static jint android_media_AmrInputStream_GsmAmrEncoderNew
- (JNIEnv *env, jclass clazz) {
- CPvGsmAmrEncoder* gae = new CPvGsmAmrEncoder();
- if (gae == NULL) {
- throwException(env, "java/lang/IllegalStateException",
- "new CPvGsmAmrEncoder() failed", 0);
- }
- return (jint)gae;
-}
-
-static void android_media_AmrInputStream_GsmAmrEncoderInitialize
- (JNIEnv *env, jclass clazz, jint gae) {
- // set input parameters
- TEncodeProperties encodeProps;
- encodeProps.iInBitsPerSample = 16;
- encodeProps.iInSamplingRate = 8000;
- encodeProps.iInClockRate = 1000;
- encodeProps.iInNumChannels = 1;
- encodeProps.iInInterleaveMode = TEncodeProperties::EINTERLEAVE_LR;
- encodeProps.iMode = CPvGsmAmrEncoder::GSM_AMR_12_2;
- encodeProps.iBitStreamFormatIf2 = false;
- encodeProps.iAudioObjectType = 0;
- encodeProps.iOutSamplingRate = encodeProps.iInSamplingRate;
- encodeProps.iOutNumChannels = encodeProps.iInNumChannels;
- encodeProps.iOutClockRate = encodeProps.iInClockRate;
-
- if (int rtn = ((CPvGsmAmrEncoder*)gae)->
- InitializeEncoder(aMaxOutputBufferSize, &encodeProps)) {
- throwException(env, "java/lang/IllegalArgumentException",
- "CPvGsmAmrEncoder::InitializeEncoder failed %d", rtn);
- }
-}
-
-static jint android_media_AmrInputStream_GsmAmrEncoderEncode
- (JNIEnv *env, jclass clazz,
- jint gae, jbyteArray pcm, jint pcmOffset, jbyteArray amr, jint amrOffset) {
-
- // set up input stream
- jbyte inBuf[SAMPLES_PER_FRAME*2];
- TInputAudioStream in;
- in.iSampleBuffer = (uint8*)inBuf;
- env->GetByteArrayRegion(pcm, pcmOffset, sizeof(inBuf), inBuf);
- in.iSampleLength = sizeof(inBuf);
- in.iMode = CPvGsmAmrEncoder::GSM_AMR_12_2;
- in.iStartTime = 0;
- in.iStopTime = 0;
-
- // set up output stream
- jbyte outBuf[aMaxOutputBufferSize];
- int32 sampleFrameSize[1] = { 0 };
- TOutputAudioStream out;
- out.iBitStreamBuffer = (uint8*)outBuf;
- out.iNumSampleFrames = 0;
- out.iSampleFrameSize = sampleFrameSize;
- out.iStartTime = 0;
- out.iStopTime = 0;
-
- // encode
- if (int rtn = ((CPvGsmAmrEncoder*)gae)->Encode(in, out)) {
- throwException(env, "java/io/IOException", "CPvGsmAmrEncoder::Encode failed %d", rtn);
- return -1;
- }
-
- // validate one-frame assumption
- if (out.iNumSampleFrames != 1) {
- throwException(env, "java/io/IOException",
- "CPvGsmAmrEncoder::Encode more than one frame returned %d", out.iNumSampleFrames);
- return 0;
- }
-
- // copy result
- int length = out.iSampleFrameSize[0];
-
- // The 1st byte of PV AMR frames are WMF (Wireless Multimedia Forum)
- // bitpacked, i.e.;
- // [P(4) + FT(4)]. Q=1 for good frame, P=padding bit, 0
- // Here we are converting the header to be as specified in Section 5.3 of
- // RFC 3267 (AMR storage format) i.e.
- // [P(1) + FT(4) + Q(1) + P(2)].
- if (length > 0) {
- outBuf[0] = (outBuf[0] << 3) | 0x4;
- }
-
- env->SetByteArrayRegion(amr, amrOffset, length, outBuf);
-
- return length;
-}
-
-static void android_media_AmrInputStream_GsmAmrEncoderCleanup
- (JNIEnv *env, jclass clazz, jint gae) {
- if (int rtn = ((CPvGsmAmrEncoder*)gae)->CleanupEncoder()) {
- throwException(env, "java/lang/IllegalStateException",
- "CPvGsmAmrEncoder::CleanupEncoder failed %d", rtn);
- }
-}
-
-static void android_media_AmrInputStream_GsmAmrEncoderDelete
- (JNIEnv *env, jclass clazz, jint gae) {
- delete (CPvGsmAmrEncoder*)gae;
-}
-
-// ----------------------------------------------------------------------------
-
-static JNINativeMethod gMethods[] = {
- {"GsmAmrEncoderNew", "()I", (void*)android_media_AmrInputStream_GsmAmrEncoderNew},
- {"GsmAmrEncoderInitialize", "(I)V", (void*)android_media_AmrInputStream_GsmAmrEncoderInitialize},
- {"GsmAmrEncoderEncode", "(I[BI[BI)I", (void*)android_media_AmrInputStream_GsmAmrEncoderEncode},
- {"GsmAmrEncoderCleanup", "(I)V", (void*)android_media_AmrInputStream_GsmAmrEncoderCleanup},
- {"GsmAmrEncoderDelete", "(I)V", (void*)android_media_AmrInputStream_GsmAmrEncoderDelete},
-};
-
-
-int register_android_media_AmrInputStream(JNIEnv *env)
-{
- const char* const kClassPathName = "android/media/AmrInputStream";
- jclass clazz;
-
- clazz = env->FindClass(kClassPathName);
- if (clazz == NULL) {
- LOGE("Can't find %s", kClassPathName);
- return -1;
- }
-
- return AndroidRuntime::registerNativeMethods(env,
- kClassPathName, gMethods, NELEM(gMethods));
-}
-
-
diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp
deleted file mode 100644
index 4624a18..0000000
--- a/media/jni/android_media_MediaMetadataRetriever.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "MediaMetadataRetrieverJNI"
-
-#include <assert.h>
-#include <utils/Log.h>
-#include <utils/threads.h>
-#include <core/SkBitmap.h>
-#include <media/mediametadataretriever.h>
-#include <private/media/VideoFrame.h>
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-
-
-using namespace android;
-
-struct fields_t {
- jfieldID context;
- jclass bitmapClazz;
- jmethodID bitmapConstructor;
-};
-
-static fields_t fields;
-static Mutex sLock;
-
-static void process_media_retriever_call(JNIEnv *env, status_t opStatus, const char* exception, const char *message)
-{
- if (opStatus == (status_t) INVALID_OPERATION) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- } else if (opStatus != (status_t) OK) {
- if (strlen(message) > 230) {
- // If the message is too long, don't bother displaying the status code.
- jniThrowException( env, exception, message);
- } else {
- char msg[256];
- // Append the status code to the message.
- sprintf(msg, "%s: status = 0x%X", message, opStatus);
- jniThrowException( env, exception, msg);
- }
- }
-}
-
-static MediaMetadataRetriever* getRetriever(JNIEnv* env, jobject thiz)
-{
- // No lock is needed, since it is called internally by other methods that are protected
- MediaMetadataRetriever* retriever = (MediaMetadataRetriever*) env->GetIntField(thiz, fields.context);
- return retriever;
-}
-
-static void setRetriever(JNIEnv* env, jobject thiz, int retriever)
-{
- // No lock is needed, since it is called internally by other methods that are protected
- MediaMetadataRetriever *old = (MediaMetadataRetriever*) env->GetIntField(thiz, fields.context);
- env->SetIntField(thiz, fields.context, retriever);
-}
-
-static void android_media_MediaMetadataRetriever_setDataSource(JNIEnv *env, jobject thiz, jstring path)
-{
- LOGV("setDataSource");
- Mutex::Autolock lock(sLock);
- MediaMetadataRetriever* retriever = getRetriever(env, thiz);
- if (retriever == 0) {
- jniThrowException(env, "java/lang/IllegalStateException", "No retriever available");
- return;
- }
- if (!path) {
- jniThrowException(env, "java/lang/IllegalArgumentException", "Null pointer");
- return;
- }
-
- const char *pathStr = env->GetStringUTFChars(path, NULL);
- if (!pathStr) { // OutOfMemoryError exception already thrown
- return;
- }
-
- // Don't let somebody trick us in to reading some random block of memory
- if (strncmp("mem://", pathStr, 6) == 0) {
- jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid pathname");
- return;
- }
-
- process_media_retriever_call(env, retriever->setDataSource(pathStr), "java/lang/RuntimeException", "setDataSource failed");
- env->ReleaseStringUTFChars(path, pathStr);
-}
-
-static void android_media_MediaMetadataRetriever_setDataSourceFD(JNIEnv *env, jobject thiz, jobject fileDescriptor, jlong offset, jlong length)
-{
- LOGV("setDataSource");
- Mutex::Autolock lock(sLock);
- MediaMetadataRetriever* retriever = getRetriever(env, thiz);
- if (retriever == 0) {
- jniThrowException(env, "java/lang/IllegalStateException", "No retriever available");
- return;
- }
- if (!fileDescriptor) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
- int fd = getParcelFileDescriptorFD(env, fileDescriptor);
- if (offset < 0 || length < 0 || fd < 0) {
- if (offset < 0) {
- LOGE("negative offset (%lld)", offset);
- }
- if (length < 0) {
- LOGE("negative length (%lld)", length);
- }
- if (fd < 0) {
- LOGE("invalid file descriptor");
- }
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
- process_media_retriever_call(env, retriever->setDataSource(fd, offset, length), "java/lang/RuntimeException", "setDataSource failed");
-}
-
-static void android_media_MediaMetadataRetriever_setMode(JNIEnv *env, jobject thiz, jint mode)
-{
- LOGV("setMode");
- Mutex::Autolock lock(sLock);
- MediaMetadataRetriever* retriever = getRetriever(env, thiz);
- if (retriever == 0) {
- jniThrowException(env, "java/lang/IllegalStateException", "No retriever available");
- return;
- }
- process_media_retriever_call(env, retriever->setMode(mode), "java/lang/RuntimeException", "setMode failed");
-}
-
-static int android_media_MediaMetadataRetriever_getMode(JNIEnv *env, jobject thiz)
-{
- LOGV("getMode");
- Mutex::Autolock lock(sLock);
- MediaMetadataRetriever* retriever = getRetriever(env, thiz);
- if (retriever == 0) {
- jniThrowException(env, "java/lang/IllegalStateException", "No retriever available");
- return -1; // Error
- }
- int mode = -1;
- retriever->getMode(&mode);
- return mode;
-}
-
-static jobject android_media_MediaMetadataRetriever_captureFrame(JNIEnv *env, jobject thiz)
-{
- LOGV("captureFrame");
- Mutex::Autolock lock(sLock);
- MediaMetadataRetriever* retriever = getRetriever(env, thiz);
- if (retriever == 0) {
- jniThrowException(env, "java/lang/IllegalStateException", "No retriever available");
- return NULL;
- }
-
- // Call native method to retrieve a video frame
- VideoFrame *videoFrame = NULL;
- sp<IMemory> frameMemory = retriever->captureFrame();
- if (frameMemory != 0) { // cast the shared structure to a VideoFrame object
- videoFrame = static_cast<VideoFrame *>(frameMemory->pointer());
- }
- if (videoFrame == NULL) {
- LOGE("captureFrame: videoFrame is a NULL pointer");
- return NULL;
- }
-
- // Create a SkBitmap to hold the pixels
- SkBitmap *bitmap = new SkBitmap();
- if (bitmap == NULL) {
- LOGE("captureFrame: cannot instantiate a SkBitmap object.");
- return NULL;
- }
- bitmap->setConfig(SkBitmap::kRGB_565_Config, videoFrame->mDisplayWidth, videoFrame->mDisplayHeight);
- if (!bitmap->allocPixels()) {
- delete bitmap;
- LOGE("failed to allocate pixel buffer");
- return NULL;
- }
- memcpy((uint8_t*)bitmap->getPixels(), (uint8_t*)videoFrame + sizeof(VideoFrame), videoFrame->mSize);
-
- // Since internally SkBitmap uses reference count to manage the reference to
- // its pixels, it is important that the pixels (along with SkBitmap) be
- // available after creating the Bitmap is returned to Java app.
- return env->NewObject(fields.bitmapClazz, fields.bitmapConstructor, (int) bitmap, true, NULL);
-}
-
-static jbyteArray android_media_MediaMetadataRetriever_extractAlbumArt(JNIEnv *env, jobject thiz)
-{
- LOGV("extractAlbumArt");
- Mutex::Autolock lock(sLock);
- MediaMetadataRetriever* retriever = getRetriever(env, thiz);
- if (retriever == 0) {
- jniThrowException(env, "java/lang/IllegalStateException", "No retriever available");
- return NULL;
- }
- MediaAlbumArt* mediaAlbumArt = NULL;
- sp<IMemory> albumArtMemory = retriever->extractAlbumArt();
- if (albumArtMemory != 0) { // cast the shared structure to a MediaAlbumArt object
- mediaAlbumArt = static_cast<MediaAlbumArt *>(albumArtMemory->pointer());
- }
- if (mediaAlbumArt == NULL) {
- LOGE("extractAlbumArt: Call to extractAlbumArt failed.");
- return NULL;
- }
-
- unsigned int len = mediaAlbumArt->mSize;
- char* data = (char*) mediaAlbumArt + sizeof(MediaAlbumArt);
- jbyteArray array = env->NewByteArray(len);
- if (!array) { // OutOfMemoryError exception has already been thrown.
- LOGE("extractAlbumArt: OutOfMemoryError is thrown.");
- } else {
- jbyte* bytes = env->GetByteArrayElements(array, NULL);
- if (bytes != NULL) {
- memcpy(bytes, data, len);
- env->ReleaseByteArrayElements(array, bytes, 0);
- }
- }
-
- // No need to delete mediaAlbumArt here
- return array;
-}
-
-static jobject android_media_MediaMetadataRetriever_extractMetadata(JNIEnv *env, jobject thiz, jint keyCode)
-{
- LOGV("extractMetadata");
- Mutex::Autolock lock(sLock);
- MediaMetadataRetriever* retriever = getRetriever(env, thiz);
- if (retriever == 0) {
- jniThrowException(env, "java/lang/IllegalStateException", "No retriever available");
- return NULL;
- }
- const char* value = retriever->extractMetadata(keyCode);
- if (!value) {
- LOGV("extractMetadata: Metadata is not found");
- return NULL;
- }
- LOGV("extractMetadata: value (%s) for keyCode(%d)", value, keyCode);
- return env->NewStringUTF(value);
-}
-
-static void android_media_MediaMetadataRetriever_release(JNIEnv *env, jobject thiz)
-{
- LOGV("release");
- Mutex::Autolock lock(sLock);
- MediaMetadataRetriever* retriever = getRetriever(env, thiz);
- delete retriever;
- setRetriever(env, thiz, 0);
-}
-
-static void android_media_MediaMetadataRetriever_native_finalize(JNIEnv *env, jobject thiz)
-{
- LOGV("native_finalize");
-
- // No lock is needed, since android_media_MediaMetadataRetriever_release() is protected
- android_media_MediaMetadataRetriever_release(env, thiz);
-}
-
-static void android_media_MediaMetadataRetriever_native_setup(JNIEnv *env, jobject thiz)
-{
- LOGV("native_setup");
- MediaMetadataRetriever* retriever = new MediaMetadataRetriever();
- if (retriever == 0) {
- jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
- return;
- }
- setRetriever(env, thiz, (int)retriever);
-}
-
-// JNI mapping between Java methods and native methods
-static JNINativeMethod nativeMethods[] = {
- {"setDataSource", "(Ljava/lang/String;)V", (void *)android_media_MediaMetadataRetriever_setDataSource},
- {"setDataSource", "(Ljava/io/FileDescriptor;JJ)V", (void *)android_media_MediaMetadataRetriever_setDataSourceFD},
- {"setMode", "(I)V", (void *)android_media_MediaMetadataRetriever_setMode},
- {"getMode", "()I", (void *)android_media_MediaMetadataRetriever_getMode},
- {"captureFrame", "()Landroid/graphics/Bitmap;", (void *)android_media_MediaMetadataRetriever_captureFrame},
- {"extractMetadata", "(I)Ljava/lang/String;", (void *)android_media_MediaMetadataRetriever_extractMetadata},
- {"extractAlbumArt", "()[B", (void *)android_media_MediaMetadataRetriever_extractAlbumArt},
- {"release", "()V", (void *)android_media_MediaMetadataRetriever_release},
- {"native_finalize", "()V", (void *)android_media_MediaMetadataRetriever_native_finalize},
- {"native_setup", "()V", (void *)android_media_MediaMetadataRetriever_native_setup},
-};
-
-// Register native mehtods with Android runtime environment
-int register_android_media_MediaMetadataRetriever(JNIEnv *env)
-{
- static const char* const kClassPathName = "android/media/MediaMetadataRetriever";
- jclass clazz = env->FindClass(kClassPathName);
- if (clazz == NULL) {
- LOGE("Can't find class: %s", kClassPathName);
- return -1;
- }
-
- fields.context = env->GetFieldID(clazz, "mNativeContext", "I");
- if (fields.context == NULL) {
- LOGE("Can't find MediaMetadataRetriever.mNativeContext");
- return -1;
- }
-
- fields.bitmapClazz = env->FindClass("android/graphics/Bitmap");
- if (fields.bitmapClazz == NULL) {
- LOGE("Bitmap class is not found");
- return -1;
- }
-
- fields.bitmapConstructor = env->GetMethodID(fields.bitmapClazz, "<init>", "(IZ[B)V");
- if (fields.bitmapConstructor == NULL) {
- LOGE("Bitmap constructor is not found");
- return -1;
- }
-
- return AndroidRuntime::registerNativeMethods
- (env, kClassPathName, nativeMethods, NELEM(nativeMethods));
-}
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
deleted file mode 100644
index 5562254..0000000
--- a/media/jni/android_media_MediaPlayer.cpp
+++ /dev/null
@@ -1,573 +0,0 @@
-/* //device/libs/android_runtime/android_media_MediaPlayer.cpp
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "MediaPlayer-JNI"
-#include "utils/Log.h"
-
-#include <media/mediaplayer.h>
-#include <stdio.h>
-#include <assert.h>
-#include <limits.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <utils/threads.h>
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-
-
-// ----------------------------------------------------------------------------
-
-using namespace android;
-
-// ----------------------------------------------------------------------------
-
-struct fields_t {
- jfieldID context;
- jfieldID surface;
- /* actually in android.view.Surface XXX */
- jfieldID surface_native;
-
- jmethodID post_event;
-};
-static fields_t fields;
-
-static Mutex sLock;
-
-// ----------------------------------------------------------------------------
-// ref-counted object for callbacks
-class JNIMediaPlayerListener: public MediaPlayerListener
-{
-public:
- JNIMediaPlayerListener(JNIEnv* env, jobject thiz, jobject weak_thiz);
- ~JNIMediaPlayerListener();
- void notify(int msg, int ext1, int ext2);
-private:
- JNIMediaPlayerListener();
- jclass mClass; // Reference to MediaPlayer class
- jobject mObject; // Weak ref to MediaPlayer Java object to call on
-};
-
-JNIMediaPlayerListener::JNIMediaPlayerListener(JNIEnv* env, jobject thiz, jobject weak_thiz)
-{
-
- // Hold onto the MediaPlayer class for use in calling the static method
- // that posts events to the application thread.
- jclass clazz = env->GetObjectClass(thiz);
- if (clazz == NULL) {
- LOGE("Can't find android/media/MediaPlayer");
- jniThrowException(env, "java/lang/Exception", NULL);
- return;
- }
- mClass = (jclass)env->NewGlobalRef(clazz);
-
- // We use a weak reference so the MediaPlayer object can be garbage collected.
- // The reference is only used as a proxy for callbacks.
- mObject = env->NewGlobalRef(weak_thiz);
-}
-
-JNIMediaPlayerListener::~JNIMediaPlayerListener()
-{
- // remove global references
- JNIEnv *env = AndroidRuntime::getJNIEnv();
- env->DeleteGlobalRef(mObject);
- env->DeleteGlobalRef(mClass);
-}
-
-void JNIMediaPlayerListener::notify(int msg, int ext1, int ext2)
-{
- JNIEnv *env = AndroidRuntime::getJNIEnv();
- env->CallStaticVoidMethod(mClass, fields.post_event, mObject, msg, ext1, ext2, 0);
-}
-
-// ----------------------------------------------------------------------------
-
-static sp<Surface> get_surface(JNIEnv* env, jobject clazz)
-{
- Surface* const p = (Surface*)env->GetIntField(clazz, fields.surface_native);
- return sp<Surface>(p);
-}
-
-static sp<MediaPlayer> getMediaPlayer(JNIEnv* env, jobject thiz)
-{
- Mutex::Autolock l(sLock);
- MediaPlayer* const p = (MediaPlayer*)env->GetIntField(thiz, fields.context);
- return sp<MediaPlayer>(p);
-}
-
-static sp<MediaPlayer> setMediaPlayer(JNIEnv* env, jobject thiz, const sp<MediaPlayer>& player)
-{
- Mutex::Autolock l(sLock);
- sp<MediaPlayer> old = (MediaPlayer*)env->GetIntField(thiz, fields.context);
- if (player.get()) {
- player->incStrong(thiz);
- }
- if (old != 0) {
- old->decStrong(thiz);
- }
- env->SetIntField(thiz, fields.context, (int)player.get());
- return old;
-}
-
-// If exception is NULL and opStatus is not OK, this method sends an error
-// event to the client application; otherwise, if exception is not NULL and
-// opStatus is not OK, this method throws the given exception to the client
-// application.
-static void process_media_player_call(JNIEnv *env, jobject thiz, status_t opStatus, const char* exception, const char *message)
-{
- if (exception == NULL) { // Don't throw exception. Instead, send an event.
- if (opStatus != (status_t) OK) {
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp != 0) mp->notify(MEDIA_ERROR, opStatus, 0);
- }
- } else { // Throw exception!
- if ( opStatus == (status_t) INVALID_OPERATION ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- } else if ( opStatus != (status_t) OK ) {
- if (strlen(message) > 230) {
- // if the message is too long, don't bother displaying the status code
- jniThrowException( env, exception, message);
- } else {
- char msg[256];
- // append the status code to the message
- sprintf(msg, "%s: status=0x%X", message, opStatus);
- jniThrowException( env, exception, msg);
- }
- }
- }
-}
-
-static void
-android_media_MediaPlayer_setDataSource(JNIEnv *env, jobject thiz, jstring path)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
-
- if (path == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
-
- const char *pathStr = env->GetStringUTFChars(path, NULL);
- if (pathStr == NULL) { // Out of memory
- jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
- return;
- }
- status_t opStatus = mp->setDataSource(pathStr);
-
- // Make sure that local ref is released before a potential exception
- env->ReleaseStringUTFChars(path, pathStr);
- process_media_player_call( env, thiz, opStatus, "java/io/IOException", "setDataSource failed." );
-}
-
-static void
-android_media_MediaPlayer_setDataSourceFD(JNIEnv *env, jobject thiz, jobject fileDescriptor, jlong offset, jlong length)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
-
- if (fileDescriptor == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
- int fd = getParcelFileDescriptorFD(env, fileDescriptor);
- process_media_player_call( env, thiz, mp->setDataSource(fd, offset, length), "java/io/IOException", "setDataSourceFD failed." );
-}
-
-
-static void
-android_media_MediaPlayer_prepare(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
- jobject surface = env->GetObjectField(thiz, fields.surface);
- if (surface != NULL) {
- const sp<Surface>& native_surface = get_surface(env, surface);
- //LOGI("prepare: surface=%p (id=%d)",
- // native_surface.get(), native_surface->ID());
- mp->setVideoSurface(native_surface);
- }
- process_media_player_call( env, thiz, mp->prepare(), "java/io/IOException", "Prepare failed." );
-}
-
-static void
-android_media_MediaPlayer_prepareAsync(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
- jobject surface = env->GetObjectField(thiz, fields.surface);
- if (surface != NULL) {
- const sp<Surface>& native_surface = get_surface(env, surface);
- LOGI("prepareAsync: surface=%p (id=%d)",
- native_surface.get(), native_surface->ID());
- mp->setVideoSurface(native_surface);
- }
- process_media_player_call( env, thiz, mp->prepareAsync(), "java/io/IOException", "Prepare Async failed." );
-}
-
-static void
-android_media_MediaPlayer_start(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
- process_media_player_call( env, thiz, mp->start(), NULL, NULL );
-}
-
-static void
-android_media_MediaPlayer_stop(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
- process_media_player_call( env, thiz, mp->stop(), NULL, NULL );
-}
-
-static void
-android_media_MediaPlayer_pause(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
- process_media_player_call( env, thiz, mp->pause(), NULL, NULL );
-}
-
-static jboolean
-android_media_MediaPlayer_isPlaying(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return false;
- }
- return mp->isPlaying();
-}
-
-static void
-android_media_MediaPlayer_seekTo(JNIEnv *env, jobject thiz, int msec)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
- process_media_player_call( env, thiz, mp->seekTo(msec), NULL, NULL );
-}
-
-static int
-android_media_MediaPlayer_getVideoWidth(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return 0;
- }
- int w;
- if (0 == mp->getVideoWidth(&w))
- return w;
- return 0;
-}
-
-static int
-android_media_MediaPlayer_getVideoHeight(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return 0;
- }
- int h;
- if (0 == mp->getVideoHeight(&h))
- return h;
- return 0;
-}
-
-
-static int
-android_media_MediaPlayer_getCurrentPosition(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return 0;
- }
- int msec;
- process_media_player_call( env, thiz, mp->getCurrentPosition(&msec), NULL, NULL );
- return msec;
-}
-
-static int
-android_media_MediaPlayer_getDuration(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return 0;
- }
- int msec;
- process_media_player_call( env, thiz, mp->getDuration(&msec), NULL, NULL );
- return msec;
-}
-
-static void
-android_media_MediaPlayer_reset(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
- process_media_player_call( env, thiz, mp->reset(), NULL, NULL );
-}
-
-static void
-android_media_MediaPlayer_setAudioStreamType(JNIEnv *env, jobject thiz, int streamtype)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
- process_media_player_call( env, thiz, mp->setAudioStreamType(streamtype) , NULL, NULL );
-}
-
-static void
-android_media_MediaPlayer_setLooping(JNIEnv *env, jobject thiz, jboolean looping)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
- process_media_player_call( env, thiz, mp->setLooping(looping), NULL, NULL );
-}
-
-static jboolean
-android_media_MediaPlayer_isLooping(JNIEnv *env, jobject thiz)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return false;
- }
- return mp->isLooping();
-}
-
-static void
-android_media_MediaPlayer_setVolume(JNIEnv *env, jobject thiz, float leftVolume, float rightVolume)
-{
- sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return;
- }
- process_media_player_call( env, thiz, mp->setVolume(leftVolume, rightVolume), NULL, NULL );
-}
-
-// FIXME: deprecated
-static jobject
-android_media_MediaPlayer_getFrameAt(JNIEnv *env, jobject thiz, jint msec)
-{
- return NULL;
-}
-
-static void
-android_media_MediaPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this)
-{
- LOGV("native_setup");
- sp<MediaPlayer> mp = new MediaPlayer();
- if (mp == NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
- return;
- }
-
- // create new listener and give it to MediaPlayer
- sp<JNIMediaPlayerListener> listener = new JNIMediaPlayerListener(env, thiz, weak_this);
- mp->setListener(listener);
-
- // Stow our new C++ MediaPlayer in an opaque field in the Java object.
- setMediaPlayer(env, thiz, mp);
-}
-
-static void
-android_media_MediaPlayer_release(JNIEnv *env, jobject thiz)
-{
- LOGV("release");
- sp<MediaPlayer> mp = setMediaPlayer(env, thiz, 0);
- if (mp != NULL) {
- // this prevents native callbacks after the object is released
- mp->setListener(0);
- mp->disconnect();
- }
-}
-
-static void
-android_media_MediaPlayer_native_finalize(JNIEnv *env, jobject thiz)
-{
- LOGV("native_finalize");
- android_media_MediaPlayer_release(env, thiz);
-}
-
-// ----------------------------------------------------------------------------
-
-static JNINativeMethod gMethods[] = {
- {"setDataSource", "(Ljava/lang/String;)V", (void *)android_media_MediaPlayer_setDataSource},
- {"setDataSource", "(Ljava/io/FileDescriptor;JJ)V", (void *)android_media_MediaPlayer_setDataSourceFD},
- {"prepare", "()V", (void *)android_media_MediaPlayer_prepare},
- {"prepareAsync", "()V", (void *)android_media_MediaPlayer_prepareAsync},
- {"_start", "()V", (void *)android_media_MediaPlayer_start},
- {"_stop", "()V", (void *)android_media_MediaPlayer_stop},
- {"getVideoWidth", "()I", (void *)android_media_MediaPlayer_getVideoWidth},
- {"getVideoHeight", "()I", (void *)android_media_MediaPlayer_getVideoHeight},
- {"seekTo", "(I)V", (void *)android_media_MediaPlayer_seekTo},
- {"_pause", "()V", (void *)android_media_MediaPlayer_pause},
- {"isPlaying", "()Z", (void *)android_media_MediaPlayer_isPlaying},
- {"getCurrentPosition", "()I", (void *)android_media_MediaPlayer_getCurrentPosition},
- {"getDuration", "()I", (void *)android_media_MediaPlayer_getDuration},
- {"_release", "()V", (void *)android_media_MediaPlayer_release},
- {"_reset", "()V", (void *)android_media_MediaPlayer_reset},
- {"setAudioStreamType", "(I)V", (void *)android_media_MediaPlayer_setAudioStreamType},
- {"setLooping", "(Z)V", (void *)android_media_MediaPlayer_setLooping},
- {"isLooping", "()Z", (void *)android_media_MediaPlayer_isLooping},
- {"setVolume", "(FF)V", (void *)android_media_MediaPlayer_setVolume},
- {"getFrameAt", "(I)Landroid/graphics/Bitmap;", (void *)android_media_MediaPlayer_getFrameAt},
- {"native_setup", "(Ljava/lang/Object;)V", (void *)android_media_MediaPlayer_native_setup},
- {"native_finalize", "()V", (void *)android_media_MediaPlayer_native_finalize},
-};
-
-static const char* const kClassPathName = "android/media/MediaPlayer";
-
-static int register_android_media_MediaPlayer(JNIEnv *env)
-{
- jclass clazz;
-
- clazz = env->FindClass("android/media/MediaPlayer");
- if (clazz == NULL) {
- LOGE("Can't find android/media/MediaPlayer");
- return -1;
- }
-
- fields.context = env->GetFieldID(clazz, "mNativeContext", "I");
- if (fields.context == NULL) {
- LOGE("Can't find MediaPlayer.mNativeContext");
- return -1;
- }
-
- fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative",
- "(Ljava/lang/Object;IIILjava/lang/Object;)V");
- if (fields.post_event == NULL) {
- LOGE("Can't find MediaPlayer.postEventFromNative");
- return -1;
- }
-
- fields.surface = env->GetFieldID(clazz, "mSurface", "Landroid/view/Surface;");
- if (fields.surface == NULL) {
- LOGE("Can't find MediaPlayer.mSurface");
- return -1;
- }
-
- jclass surface = env->FindClass("android/view/Surface");
- if (surface == NULL) {
- LOGE("Can't find android/view/Surface");
- return -1;
- }
-
- fields.surface_native = env->GetFieldID(surface, "mSurface", "I");
- if (fields.surface_native == NULL) {
- LOGE("Can't find Surface fields");
- return -1;
- }
-
- return AndroidRuntime::registerNativeMethods(env,
- "android/media/MediaPlayer", gMethods, NELEM(gMethods));
-}
-
-extern int register_android_media_MediaRecorder(JNIEnv *env);
-extern int register_android_media_MediaScanner(JNIEnv *env);
-extern int register_android_media_MediaMetadataRetriever(JNIEnv *env);
-extern int register_android_media_AmrInputStream(JNIEnv *env);
-extern int register_android_media_ResampleInputStream(JNIEnv *env);
-
-jint JNI_OnLoad(JavaVM* vm, void* reserved)
-{
- JNIEnv* env = NULL;
- jint result = -1;
-
- if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- LOGE("ERROR: GetEnv failed\n");
- goto bail;
- }
- assert(env != NULL);
-
- if (register_android_media_MediaPlayer(env) < 0) {
- LOGE("ERROR: MediaPlayer native registration failed\n");
- goto bail;
- }
-
- if (register_android_media_MediaRecorder(env) < 0) {
- LOGE("ERROR: MediaRecorder native registration failed\n");
- goto bail;
- }
-
- if (register_android_media_MediaScanner(env) < 0) {
- LOGE("ERROR: MediaScanner native registration failed\n");
- goto bail;
- }
-
- if (register_android_media_MediaMetadataRetriever(env) < 0) {
- LOGE("ERROR: MediaMetadataRetriever native registration failed\n");
- goto bail;
- }
-
- if (register_android_media_AmrInputStream(env) < 0) {
- LOGE("ERROR: AmrInputStream native registration failed\n");
- goto bail;
- }
-
- if (register_android_media_ResampleInputStream(env) < 0) {
- LOGE("ERROR: ResampleInputStream native registration failed\n");
- goto bail;
- }
-
- /* success -- return valid version number */
- result = JNI_VERSION_1_4;
-
-bail:
- return result;
-}
-
-// KTHXBYE
-
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
deleted file mode 100644
index 095749b..0000000
--- a/media/jni/android_media_MediaRecorder.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "MediaRecorderJNI"
-#include <utils/Log.h>
-
-#include <ui/SurfaceComposerClient.h>
-#include <ui/ICameraService.h>
-#include <ui/Camera.h>
-#include <media/mediarecorder.h>
-#include <stdio.h>
-#include <assert.h>
-#include <limits.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <utils/threads.h>
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-
-
-// ----------------------------------------------------------------------------
-
-using namespace android;
-
-// ----------------------------------------------------------------------------
-
-// helper function to extract a native Camera object from a Camera Java object
-extern sp<Camera> get_native_camera(JNIEnv *env, jobject thiz);
-
-struct fields_t {
- jfieldID context;
- jfieldID surface;
- /* actually in android.view.Surface XXX */
- jfieldID surface_native;
-};
-static fields_t fields;
-
-// ----------------------------------------------------------------------------
-
-static sp<Surface> get_surface(JNIEnv* env, jobject clazz)
-{
- LOGV("get_surface");
- Surface* const p = (Surface*)env->GetIntField(clazz, fields.surface_native);
- return sp<Surface>(p);
-}
-
-// Returns true if it throws an exception.
-static bool process_media_recorder_call(JNIEnv *env, status_t opStatus, const char* exception, const char* message)
-{
- LOGV("process_media_recorder_call");
- if (opStatus == (status_t)INVALID_OPERATION) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
- return true;
- } else if (opStatus != (status_t)OK) {
- jniThrowException(env, exception, message);
- return true;
- }
- return false;
-}
-
-static void android_media_MediaRecorder_setCamera(JNIEnv* env, jobject thiz, jobject camera)
-{
- sp<Camera> c = get_native_camera(env, camera);
- MediaRecorder *mr = (MediaRecorder*)env->GetIntField(thiz, fields.context);
- process_media_recorder_call(env, mr->setCamera(c->remote()),
- "java/lang/RuntimeException", "setCamera failed.");
-}
-
-static void
-android_media_MediaRecorder_setVideoSource(JNIEnv *env, jobject thiz, jint vs)
-{
- LOGV("setVideoSource(%d)", vs);
- if (vs < VIDEO_SOURCE_DEFAULT || vs > VIDEO_SOURCE_CAMERA) {
- jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid video source");
- return;
- }
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- process_media_recorder_call(env, mr->setVideoSource(vs), "java/lang/RuntimeException", "setVideoSource failed.");
-}
-
-static void
-android_media_MediaRecorder_setAudioSource(JNIEnv *env, jobject thiz, jint as)
-{
- LOGV("setAudioSource(%d)", as);
- if (as < AUDIO_SOURCE_DEFAULT || as > AUDIO_SOURCE_MIC) {
- jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid audio source");
- return;
- }
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- process_media_recorder_call(env, mr->setAudioSource(as), "java/lang/RuntimeException", "setAudioSource failed.");
-}
-
-static void
-android_media_MediaRecorder_setOutputFormat(JNIEnv *env, jobject thiz, jint of)
-{
- LOGV("setOutputFormat(%d)", of);
- if (of < OUTPUT_FORMAT_DEFAULT || of >= OUTPUT_FORMAT_LIST_END) {
- jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid output format");
- return;
- }
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- process_media_recorder_call(env, mr->setOutputFormat(of), "java/lang/RuntimeException", "setOutputFormat failed.");
-}
-
-static void
-android_media_MediaRecorder_setVideoEncoder(JNIEnv *env, jobject thiz, jint ve)
-{
- LOGV("setVideoEncoder(%d)", ve);
- if (ve < VIDEO_ENCODER_DEFAULT || ve > VIDEO_ENCODER_MPEG_4_SP) {
- jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid video encoder");
- return;
- }
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- process_media_recorder_call(env, mr->setVideoEncoder(ve), "java/lang/RuntimeException", "setVideoEncoder failed.");
-}
-
-static void
-android_media_MediaRecorder_setAudioEncoder(JNIEnv *env, jobject thiz, jint ae)
-{
- LOGV("setAudioEncoder(%d)", ae);
- if (ae < AUDIO_ENCODER_DEFAULT || ae > AUDIO_ENCODER_AMR_NB) {
- jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid audio encoder");
- return;
- }
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- process_media_recorder_call(env, mr->setAudioEncoder(ae), "java/lang/RuntimeException", "setAudioEncoder failed.");
-}
-
-static void
-android_media_MediaRecorder_setOutputFileFD(JNIEnv *env, jobject thiz, jobject fileDescriptor, jlong offset, jlong length)
-{
- LOGV("setOutputFile");
- if (fileDescriptor == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
- int fd = getParcelFileDescriptorFD(env, fileDescriptor);
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- status_t opStatus = mr->setOutputFile(fd, offset, length);
- process_media_recorder_call(env, opStatus, "java/io/IOException", "setOutputFile failed.");
-}
-
-static void
-android_media_MediaRecorder_setVideoSize(JNIEnv *env, jobject thiz, jint width, jint height)
-{
- LOGV("setVideoSize(%d, %d)", width, height);
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
-
- if (width <= 0 || height <= 0) {
- jniThrowException(env, "java/lang/IllegalArgumentException", "invalid video size");
- return;
- }
- process_media_recorder_call(env, mr->setVideoSize(width, height), "java/lang/RuntimeException", "setVideoSize failed.");
-}
-
-static void
-android_media_MediaRecorder_setVideoFrameRate(JNIEnv *env, jobject thiz, jint rate)
-{
- LOGV("setVideoFrameRate(%d)", rate);
- if (rate <= 0 || rate > MEDIA_RECORDER_MAX_FRAME_RATE) {
- jniThrowException(env, "java/lang/IllegalArgumentException", "invalid frame rate");
- return;
- }
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- process_media_recorder_call(env, mr->setVideoFrameRate(rate), "java/lang/RuntimeException", "setVideoFrameRate failed.");
-}
-
-static void
-android_media_MediaRecorder_prepare(JNIEnv *env, jobject thiz)
-{
- LOGV("prepare");
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
-
- jobject surface = env->GetObjectField(thiz, fields.surface);
- if (surface != NULL) {
- const sp<Surface>& native_surface = get_surface(env, surface);
- LOGI("prepare: surface=%p (id=%d)", native_surface.get(), native_surface->ID());
- if (process_media_recorder_call(env, mr->setPreviewSurface(native_surface), "java/lang/RuntimeException", "setPreviewSurface failed.")) {
- return;
- }
- }
- process_media_recorder_call(env, mr->prepare(), "java/io/IOException", "prepare failed.");
-}
-
-static int
-android_media_MediaRecorder_native_getMaxAmplitude(JNIEnv *env, jobject thiz)
-{
- LOGV("getMaxAmplitude");
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- int result = 0;
- process_media_recorder_call(env, mr->getMaxAmplitude(&result), "java/lang/RuntimeException", "getMaxAmplitude failed.");
- return result;
-}
-
-static void
-android_media_MediaRecorder_start(JNIEnv *env, jobject thiz)
-{
- LOGV("start");
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- process_media_recorder_call(env, mr->start(), "java/lang/RuntimeException", "start failed.");
-}
-
-static void
-android_media_MediaRecorder_stop(JNIEnv *env, jobject thiz)
-{
- LOGV("stop");
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- process_media_recorder_call(env, mr->stop(), "java/lang/RuntimeException", "stop failed.");
-}
-
-static void
-android_media_MediaRecorder_reset(JNIEnv *env, jobject thiz)
-{
- LOGV("reset");
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- process_media_recorder_call(env, mr->reset(), "java/lang/RuntimeException", "reset failed.");
-}
-
-static void
-android_media_MediaRecorder_release(JNIEnv *env, jobject thiz)
-{
- LOGV("release");
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- env->SetIntField(thiz, fields.context, 0);
- delete mr;
-}
-
-static void
-android_media_MediaRecorder_native_setup(JNIEnv *env, jobject thiz)
-{
- LOGV("setup");
- MediaRecorder *mr = new MediaRecorder();
- if (mr->initCheck() == NO_ERROR) {
- env->SetIntField(thiz, fields.context, (int)mr);
- } else {
- delete mr;
- jniThrowException(env, "java/lang/IOException", "Unable to initialize camera");
- }
-}
-
-static void
-android_media_MediaRecorder_native_finalize(JNIEnv *env, jobject thiz)
-{
- LOGV("finalize");
- MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
- delete mr;
-}
-
-// ----------------------------------------------------------------------------
-
-static JNINativeMethod gMethods[] = {
- {"setCamera", "(Landroid/hardware/Camera;)V", (void *)android_media_MediaRecorder_setCamera},
- {"setVideoSource", "(I)V", (void *)android_media_MediaRecorder_setVideoSource},
- {"setAudioSource", "(I)V", (void *)android_media_MediaRecorder_setAudioSource},
- {"setOutputFormat", "(I)V", (void *)android_media_MediaRecorder_setOutputFormat},
- {"setVideoEncoder", "(I)V", (void *)android_media_MediaRecorder_setVideoEncoder},
- {"setAudioEncoder", "(I)V", (void *)android_media_MediaRecorder_setAudioEncoder},
- {"_setOutputFile", "(Ljava/io/FileDescriptor;JJ)V", (void *)android_media_MediaRecorder_setOutputFileFD},
- {"setVideoSize", "(II)V", (void *)android_media_MediaRecorder_setVideoSize},
- {"setVideoFrameRate", "(I)V", (void *)android_media_MediaRecorder_setVideoFrameRate},
- {"_prepare", "()V", (void *)android_media_MediaRecorder_prepare},
- {"getMaxAmplitude", "()I", (void *)android_media_MediaRecorder_native_getMaxAmplitude},
- {"start", "()V", (void *)android_media_MediaRecorder_start},
- {"stop", "()V", (void *)android_media_MediaRecorder_stop},
- {"reset", "()V", (void *)android_media_MediaRecorder_reset},
- {"release", "()V", (void *)android_media_MediaRecorder_release},
- {"native_setup", "()V", (void *)android_media_MediaRecorder_native_setup},
- {"native_finalize", "()V", (void *)android_media_MediaRecorder_native_finalize},
-};
-
-static const char* const kClassPathName = "android/media/MediaRecorder";
-
-int register_android_media_MediaRecorder(JNIEnv *env)
-{
- jclass clazz;
-
- clazz = env->FindClass("android/media/MediaRecorder");
- if (clazz == NULL) {
- LOGE("Can't find android/media/MediaRecorder");
- return -1;
- }
-
- fields.context = env->GetFieldID(clazz, "mNativeContext", "I");
- if (fields.context == NULL) {
- LOGE("Can't find MediaRecorder.mNativeContext");
- return -1;
- }
-
- fields.surface = env->GetFieldID(clazz, "mSurface", "Landroid/view/Surface;");
- if (fields.surface == NULL) {
- LOGE("Can't find MediaRecorder.mSurface");
- return -1;
- }
-
- jclass surface = env->FindClass("android/view/Surface");
- if (surface == NULL) {
- LOGE("Can't find android/view/Surface");
- return -1;
- }
-
- fields.surface_native = env->GetFieldID(surface, "mSurface", "I");
- if (fields.surface_native == NULL) {
- LOGE("Can't find Surface fields");
- return -1;
- }
-
- return AndroidRuntime::registerNativeMethods(env,
- "android/media/MediaRecorder", gMethods, NELEM(gMethods));
-}
-
-
diff --git a/media/jni/android_media_MediaScanner.cpp b/media/jni/android_media_MediaScanner.cpp
deleted file mode 100644
index 8764a70..0000000
--- a/media/jni/android_media_MediaScanner.cpp
+++ /dev/null
@@ -1,304 +0,0 @@
-/* //device/libs/media_jni/MediaScanner.cpp
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#define LOG_TAG "MediaScanner"
-#include "utils/Log.h"
-
-#include <media/mediascanner.h>
-#include <stdio.h>
-#include <assert.h>
-#include <limits.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <utils/threads.h>
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-
-
-// ----------------------------------------------------------------------------
-
-using namespace android;
-
-// ----------------------------------------------------------------------------
-
-struct fields_t {
- jfieldID context;
-};
-static fields_t fields;
-
-// ----------------------------------------------------------------------------
-
-class MyMediaScannerClient : public MediaScannerClient
-{
-public:
- MyMediaScannerClient(JNIEnv *env, jobject client)
- : mEnv(env),
- mClient(env->NewGlobalRef(client)),
- mScanFileMethodID(0),
- mHandleStringTagMethodID(0),
- mSetMimeTypeMethodID(0)
- {
- jclass mediaScannerClientInterface = env->FindClass("android/media/MediaScannerClient");
- if (mediaScannerClientInterface == NULL) {
- fprintf(stderr, "android/media/MediaScannerClient not found\n");
- }
- else {
- mScanFileMethodID = env->GetMethodID(mediaScannerClientInterface, "scanFile",
- "(Ljava/lang/String;JJ)V");
- mHandleStringTagMethodID = env->GetMethodID(mediaScannerClientInterface, "handleStringTag",
- "(Ljava/lang/String;Ljava/lang/String;)V");
- mSetMimeTypeMethodID = env->GetMethodID(mediaScannerClientInterface, "setMimeType",
- "(Ljava/lang/String;)V");
- }
- }
-
- virtual ~MyMediaScannerClient()
- {
- mEnv->DeleteGlobalRef(mClient);
- }
-
- // returns true if it succeeded, false if an exception occured in the Java code
- virtual bool scanFile(const char* path, long long lastModified, long long fileSize)
- {
- jstring pathStr;
- if ((pathStr = mEnv->NewStringUTF(path)) == NULL) return false;
-
- mEnv->CallVoidMethod(mClient, mScanFileMethodID, pathStr, lastModified, fileSize);
-
- mEnv->DeleteLocalRef(pathStr);
- return (!mEnv->ExceptionCheck());
- }
-
- // returns true if it succeeded, false if an exception occured in the Java code
- virtual bool handleStringTag(const char* name, const char* value)
- {
- jstring nameStr, valueStr;
- if ((nameStr = mEnv->NewStringUTF(name)) == NULL) return false;
- if ((valueStr = mEnv->NewStringUTF(value)) == NULL) return false;
-
- mEnv->CallVoidMethod(mClient, mHandleStringTagMethodID, nameStr, valueStr);
-
- mEnv->DeleteLocalRef(nameStr);
- mEnv->DeleteLocalRef(valueStr);
- return (!mEnv->ExceptionCheck());
- }
-
- // returns true if it succeeded, false if an exception occured in the Java code
- virtual bool setMimeType(const char* mimeType)
- {
- jstring mimeTypeStr;
- if ((mimeTypeStr = mEnv->NewStringUTF(mimeType)) == NULL) return false;
-
- mEnv->CallVoidMethod(mClient, mSetMimeTypeMethodID, mimeTypeStr);
-
- mEnv->DeleteLocalRef(mimeTypeStr);
- return (!mEnv->ExceptionCheck());
- }
-
-private:
- JNIEnv *mEnv;
- jobject mClient;
- jmethodID mScanFileMethodID;
- jmethodID mHandleStringTagMethodID;
- jmethodID mSetMimeTypeMethodID;
-};
-
-
-// ----------------------------------------------------------------------------
-
-static bool ExceptionCheck(void* env)
-{
- return ((JNIEnv *)env)->ExceptionCheck();
-}
-
-static void
-android_media_MediaScanner_processDirectory(JNIEnv *env, jobject thiz, jstring path, jstring extensions, jobject client)
-{
- MediaScanner *mp = (MediaScanner *)env->GetIntField(thiz, fields.context);
-
- if (path == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
- if (extensions == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
-
- const char *pathStr = env->GetStringUTFChars(path, NULL);
- if (pathStr == NULL) { // Out of memory
- jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
- return;
- }
- const char *extensionsStr = env->GetStringUTFChars(extensions, NULL);
- if (extensionsStr == NULL) { // Out of memory
- env->ReleaseStringUTFChars(path, pathStr);
- jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
- return;
- }
-
- MyMediaScannerClient myClient(env, client);
- mp->processDirectory(pathStr, extensionsStr, myClient, ExceptionCheck, env);
- env->ReleaseStringUTFChars(path, pathStr);
- env->ReleaseStringUTFChars(extensions, extensionsStr);
-}
-
-static void
-android_media_MediaScanner_processFile(JNIEnv *env, jobject thiz, jstring path, jstring mimeType, jobject client)
-{
- MediaScanner *mp = (MediaScanner *)env->GetIntField(thiz, fields.context);
-
- if (path == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
-
- const char *pathStr = env->GetStringUTFChars(path, NULL);
- if (pathStr == NULL) { // Out of memory
- jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
- return;
- }
- const char *mimeTypeStr = (mimeType ? env->GetStringUTFChars(mimeType, NULL) : NULL);
- if (mimeType && mimeTypeStr == NULL) { // Out of memory
- env->ReleaseStringUTFChars(path, pathStr);
- jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
- return;
- }
-
- MyMediaScannerClient myClient(env, client);
- mp->processFile(pathStr, mimeTypeStr, myClient);
- env->ReleaseStringUTFChars(path, pathStr);
- if (mimeType) {
- env->ReleaseStringUTFChars(mimeType, mimeTypeStr);
- }
-}
-
-static void
-android_media_MediaScanner_setLocale(JNIEnv *env, jobject thiz, jstring locale)
-{
- MediaScanner *mp = (MediaScanner *)env->GetIntField(thiz, fields.context);
-
- if (locale == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
- const char *localeStr = env->GetStringUTFChars(locale, NULL);
- if (localeStr == NULL) { // Out of memory
- jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
- return;
- }
- mp->setLocale(localeStr);
-
- env->ReleaseStringUTFChars(locale, localeStr);
-}
-
-static jbyteArray
-android_media_MediaScanner_extractAlbumArt(JNIEnv *env, jobject thiz, jobject fileDescriptor)
-{
- MediaScanner *mp = (MediaScanner *)env->GetIntField(thiz, fields.context);
-
- if (fileDescriptor == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return NULL;
- }
-
- int fd = getParcelFileDescriptorFD(env, fileDescriptor);
- char* data = mp->extractAlbumArt(fd);
- if (!data) {
- return NULL;
- }
- long len = *((long*)data);
-
- jbyteArray array = env->NewByteArray(len);
- if (array != NULL) {
- jbyte* bytes = env->GetByteArrayElements(array, NULL);
- memcpy(bytes, data + 4, len);
- env->ReleaseByteArrayElements(array, bytes, 0);
- }
-
-done:
- free(data);
- // if NewByteArray() returned NULL, an out-of-memory
- // exception will have been raised. I just want to
- // return null in that case.
- env->ExceptionClear();
- return array;
-}
-
-static void
-android_media_MediaScanner_native_setup(JNIEnv *env, jobject thiz)
-{
- MediaScanner *mp = new MediaScanner();
- if (mp == NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
- return;
- }
-
- env->SetIntField(thiz, fields.context, (int)mp);
-}
-
-static void
-android_media_MediaScanner_native_finalize(JNIEnv *env, jobject thiz)
-{
- MediaScanner *mp = (MediaScanner *)env->GetIntField(thiz, fields.context);
-
- //printf("##### android_media_MediaScanner_native_finalize: ctx=0x%p\n", ctx);
-
- if (mp == 0)
- return;
-
- delete mp;
-}
-
-// ----------------------------------------------------------------------------
-
-static JNINativeMethod gMethods[] = {
- {"processDirectory", "(Ljava/lang/String;Ljava/lang/String;Landroid/media/MediaScannerClient;)V",
- (void *)android_media_MediaScanner_processDirectory},
- {"processFile", "(Ljava/lang/String;Ljava/lang/String;Landroid/media/MediaScannerClient;)V",
- (void *)android_media_MediaScanner_processFile},
- {"setLocale", "(Ljava/lang/String;)V", (void *)android_media_MediaScanner_setLocale},
- {"extractAlbumArt", "(Ljava/io/FileDescriptor;)[B", (void *)android_media_MediaScanner_extractAlbumArt},
- {"native_setup", "()V", (void *)android_media_MediaScanner_native_setup},
- {"native_finalize", "()V", (void *)android_media_MediaScanner_native_finalize},
-};
-
-static const char* const kClassPathName = "android/media/MediaScanner";
-
-int register_android_media_MediaScanner(JNIEnv *env)
-{
- jclass clazz;
-
- clazz = env->FindClass("android/media/MediaScanner");
- if (clazz == NULL) {
- LOGE("Can't find android/media/MediaScanner");
- return -1;
- }
-
- fields.context = env->GetFieldID(clazz, "mNativeContext", "I");
- if (fields.context == NULL) {
- LOGE("Can't find MediaScanner.mNativeContext");
- return -1;
- }
-
- return AndroidRuntime::registerNativeMethods(env,
- "android/media/MediaScanner", gMethods, NELEM(gMethods));
-}
-
-
diff --git a/media/jni/android_media_ResampleInputStream.cpp b/media/jni/android_media_ResampleInputStream.cpp
deleted file mode 100644
index 0247cdb..0000000
--- a/media/jni/android_media_ResampleInputStream.cpp
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#define LOG_TAG "ResampleInputStream"
-#include "utils/Log.h"
-
-#include <media/mediarecorder.h>
-#include <stdio.h>
-#include <assert.h>
-#include <limits.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <utils/threads.h>
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-
-
-// ----------------------------------------------------------------------------
-
-using namespace android;
-
-
-//
-// helper function to throw an exception
-//
-static void throwException(JNIEnv *env, const char* ex, const char* fmt, int data) {
- if (jclass cls = env->FindClass(ex)) {
- char msg[1000];
- sprintf(msg, fmt, data);
- env->ThrowNew(cls, msg);
- env->DeleteLocalRef(cls);
- }
-}
-
-
-#define FIR_COEF(coef) (short)(0x10000 * coef)
-static const short fir21[] = {
- FIR_COEF(-0.006965742326),
- FIR_COEF(-0.008428945737),
- FIR_COEF( 0.004241280174),
- FIR_COEF( 0.022141096893),
- FIR_COEF( 0.018765669437),
- FIR_COEF(-0.009871891152),
- FIR_COEF(-0.024842433247),
- FIR_COEF( 0.006121772058),
- FIR_COEF( 0.045890841611),
- FIR_COEF( 0.021573503509),
- FIR_COEF(-0.059681984668),
- FIR_COEF(-0.076036275138),
- FIR_COEF( 0.072405390275),
- FIR_COEF( 0.308255674582),
- FIR_COEF( 0.424321210495),
- FIR_COEF( 0.308255674582),
- FIR_COEF( 0.072405390275),
- FIR_COEF(-0.076036275138),
- FIR_COEF(-0.059681984668),
- FIR_COEF( 0.021573503509),
- FIR_COEF( 0.045890841611),
- FIR_COEF( 0.006121772058),
- FIR_COEF(-0.024842433247),
- FIR_COEF(-0.009871891152),
- FIR_COEF( 0.018765669437),
- FIR_COEF( 0.022141096893),
- FIR_COEF( 0.004241280174),
- FIR_COEF(-0.008428945737),
- FIR_COEF(-0.006965742326)
-};
-static const int nFir21 = sizeof(fir21) / sizeof(fir21[0]);
-
-static const int BUF_SIZE = 2048;
-
-
-static void android_media_ResampleInputStream_fir21(JNIEnv *env, jclass clazz,
- jbyteArray jIn, jint jInOffset,
- jbyteArray jOut, jint jOutOffset,
- jint jNpoints) {
-
- // safety first!
- if (nFir21 + jNpoints > BUF_SIZE) {
- throwException(env, "java/lang/IllegalArgumentException",
- "FIR+data too long %d", nFir21 + jNpoints);
- return;
- }
-
- // get input data
- short in[BUF_SIZE];
- env->GetByteArrayRegion(jIn, jInOffset, (jNpoints * 2 + nFir21 - 1) * 2, (jbyte*)in);
-
- // compute filter
- short out[BUF_SIZE];
- for (int i = 0; i < jNpoints; i++) {
- long sum = 0;
- const short* firp = &fir21[0];
- const short* inp = &in[i * 2];
- for (int n = nFir21; --n >= 0; ) {
- sum += ((long)*firp++) * ((long)*inp++);
- }
- out[i] = (short)(sum >> 16);
- }
-
- // save new values
- env->SetByteArrayRegion(jOut, jOutOffset, jNpoints * 2, (jbyte*)out);
-}
-
-// ----------------------------------------------------------------------------
-
-static JNINativeMethod gMethods[] = {
- {"fir21", "([BI[BII)V", (void*)android_media_ResampleInputStream_fir21},
-};
-
-
-int register_android_media_ResampleInputStream(JNIEnv *env)
-{
- const char* const kClassPathName = "android/media/ResampleInputStream";
- jclass clazz;
-
- clazz = env->FindClass(kClassPathName);
- if (clazz == NULL) {
- LOGE("Can't find %s", kClassPathName);
- return -1;
- }
-
- return AndroidRuntime::registerNativeMethods(env,
- kClassPathName, gMethods, NELEM(gMethods));
-}
-
-
diff --git a/media/jni/soundpool/Android.mk b/media/jni/soundpool/Android.mk
deleted file mode 100644
index 374ddeb..0000000
--- a/media/jni/soundpool/Android.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- android_media_SoundPool.cpp \
- SoundPool.cpp \
- SoundPoolThread.cpp
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libutils \
- libandroid_runtime \
- libnativehelper \
- libmedia
-
-LOCAL_MODULE:= libsoundpool
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/media/jni/soundpool/SoundPool.cpp b/media/jni/soundpool/SoundPool.cpp
deleted file mode 100644
index 02731825..0000000
--- a/media/jni/soundpool/SoundPool.cpp
+++ /dev/null
@@ -1,764 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "SoundPool"
-#include <utils/Log.h>
-
-//#define USE_SHARED_MEM_BUFFER
-
-// XXX needed for timing latency
-#include <utils/Timers.h>
-
-#include <sys/resource.h>
-#include <media/AudioTrack.h>
-#include <media/mediaplayer.h>
-
-#include "SoundPool.h"
-#include "SoundPoolThread.h"
-
-namespace android
-{
-
-int kDefaultBufferCount = 4;
-uint32_t kMaxSampleRate = 48000;
-uint32_t kDefaultSampleRate = 44100;
-uint32_t kDefaultFrameCount = 1200;
-
-SoundPool::SoundPool(jobject soundPoolRef, int maxChannels, int streamType, int srcQuality)
-{
- LOGV("SoundPool constructor: maxChannels=%d, streamType=%d, srcQuality=%d",
- maxChannels, streamType, srcQuality);
-
- if (maxChannels > 32) {
- LOGW("App requested %d channels, capped at 32", maxChannels);
- maxChannels = 32;
- }
-
- mQuit = false;
- mSoundPoolRef = soundPoolRef;
- mDecodeThread = 0;
- mMaxChannels = maxChannels;
- mStreamType = streamType;
- mSrcQuality = srcQuality;
- mAllocated = 0;
- mNextSampleID = 0;
- mNextChannelID = 0;
-
- mChannelPool = new SoundChannel[maxChannels];
- for (int i = 0; i < maxChannels; ++i) {
- mChannelPool[i].init(this);
- mChannels.push_back(&mChannelPool[i]);
- }
-
- // start decode thread
- startThreads();
-}
-
-SoundPool::~SoundPool()
-{
- LOGV("SoundPool destructor");
- mDecodeThread->quit();
- quit();
-
- Mutex::Autolock lock(&mLock);
- mChannels.clear();
- if (mChannelPool)
- delete [] mChannelPool;
-
- // clean up samples
- LOGV("clear samples");
- mSamples.clear();
-
- if (mDecodeThread)
- delete mDecodeThread;
-}
-
-void SoundPool::addToRestartList(SoundChannel* channel)
-{
- Mutex::Autolock lock(&mLock);
- mRestart.push_back(channel);
- mCondition.signal();
-}
-
-int SoundPool::beginThread(void* arg)
-{
- SoundPool* p = (SoundPool*)arg;
- return p->run();
-}
-
-int SoundPool::run()
-{
- mLock.lock();
- while (!mQuit) {
- mCondition.wait(mLock);
- LOGV("awake");
- if (mQuit) break;
-
- while (!mRestart.empty()) {
- SoundChannel* channel;
- LOGV("Getting channel from list");
- List<SoundChannel*>::iterator iter = mRestart.begin();
- channel = *iter;
- mRestart.erase(iter);
- if (channel) channel->nextEvent();
- if (mQuit) break;
- }
- }
-
- mRestart.clear();
- mCondition.signal();
- mLock.unlock();
- LOGV("goodbye");
- return 0;
-}
-
-void SoundPool::quit()
-{
- mLock.lock();
- mQuit = true;
- mCondition.signal();
- mCondition.wait(mLock);
- LOGV("return from quit");
- mLock.unlock();
-}
-
-bool SoundPool::startThreads()
-{
- createThread(beginThread, this);
- if (mDecodeThread == NULL)
- mDecodeThread = new SoundPoolThread(this);
- return mDecodeThread != NULL;
-}
-
-SoundChannel* SoundPool::findChannel(int channelID)
-{
- for (int i = 0; i < mMaxChannels; ++i) {
- if (mChannelPool[i].channelID() == channelID) {
- return &mChannelPool[i];
- }
- }
- return NULL;
-}
-
-SoundChannel* SoundPool::findNextChannel(int channelID)
-{
- for (int i = 0; i < mMaxChannels; ++i) {
- if (mChannelPool[i].nextChannelID() == channelID) {
- return &mChannelPool[i];
- }
- }
- return NULL;
-}
-
-int SoundPool::load(const char* path, int priority)
-{
- LOGV("load: path=%s, priority=%d", path, priority);
- Mutex::Autolock lock(&mLock);
- sp<Sample> sample = new Sample(++mNextSampleID, path);
- mSamples.add(sample->sampleID(), sample);
- doLoad(sample);
- return sample->sampleID();
-}
-
-int SoundPool::load(int fd, int64_t offset, int64_t length, int priority)
-{
- LOGV("load: fd=%d, offset=%lld, length=%lld, priority=%d",
- fd, offset, length, priority);
- Mutex::Autolock lock(&mLock);
- sp<Sample> sample = new Sample(++mNextSampleID, fd, offset, length);
- mSamples.add(sample->sampleID(), sample);
- doLoad(sample);
- return sample->sampleID();
-}
-
-void SoundPool::doLoad(sp<Sample>& sample)
-{
- LOGV("doLoad: loading sample sampleID=%d", sample->sampleID());
- sample->startLoad();
- mDecodeThread->loadSample(sample->sampleID());
-}
-
-bool SoundPool::unload(int sampleID)
-{
- LOGV("unload: sampleID=%d", sampleID);
- Mutex::Autolock lock(&mLock);
- return mSamples.removeItem(sampleID);
-}
-
-int SoundPool::play(int sampleID, float leftVolume, float rightVolume,
- int priority, int loop, float rate)
-{
- LOGV("sampleID=%d, leftVolume=%f, rightVolume=%f, priority=%d, loop=%d, rate=%f",
- sampleID, leftVolume, rightVolume, priority, loop, rate);
- sp<Sample> sample;
- SoundChannel* channel;
- int channelID;
-
- // scope for lock
- {
- Mutex::Autolock lock(&mLock);
-
- // is sample ready?
- sample = findSample(sampleID);
- if ((sample == 0) || (sample->state() != Sample::READY)) {
- LOGW(" sample %d not READY", sampleID);
- return 0;
- }
-
- dump();
-
- // allocate a channel
- channel = allocateChannel(priority);
-
- // no channel allocated - return 0
- if (!channel) {
- LOGV("No channel allocated");
- return 0;
- }
-
- channelID = ++mNextChannelID;
- }
-
- LOGV("channel state = %d", channel->state());
- channel->play(sample, channelID, leftVolume, rightVolume, priority, loop, rate);
- return channelID;
-}
-
-SoundChannel* SoundPool::allocateChannel(int priority)
-{
- List<SoundChannel*>::iterator iter;
- SoundChannel* channel = NULL;
-
- // allocate a channel
- if (!mChannels.empty()) {
- iter = mChannels.begin();
- if (priority >= (*iter)->priority()) {
- channel = *iter;
- mChannels.erase(iter);
- LOGV("Allocated active channel");
- }
- }
-
- // update priority and put it back in the list
- if (channel) {
- channel->setPriority(priority);
- for (iter = mChannels.begin(); iter != mChannels.end(); ++iter) {
- if (priority < (*iter)->priority()) {
- break;
- }
- }
- mChannels.insert(iter, channel);
- }
- return channel;
-}
-
-// move a channel from its current position to the front of the list
-void SoundPool::moveToFront(SoundChannel* channel)
-{
- for (List<SoundChannel*>::iterator iter = mChannels.begin(); iter != mChannels.end(); ++iter) {
- if (*iter == channel) {
- mChannels.erase(iter);
- mChannels.push_front(channel);
- break;
- }
- }
-}
-
-void SoundPool::pause(int channelID)
-{
- LOGV("pause(%d)", channelID);
- Mutex::Autolock lock(&mLock);
- SoundChannel* channel = findChannel(channelID);
- if (channel) {
- channel->pause();
- }
-}
-
-void SoundPool::resume(int channelID)
-{
- LOGV("resume(%d)", channelID);
- Mutex::Autolock lock(&mLock);
- SoundChannel* channel = findChannel(channelID);
- if (channel) {
- channel->resume();
- }
-}
-
-void SoundPool::stop(int channelID)
-{
- LOGV("stop(%d)", channelID);
- Mutex::Autolock lock(&mLock);
- SoundChannel* channel = findChannel(channelID);
- if (channel) {
- channel->stop();
- } else {
- channel = findNextChannel(channelID);
- if (channel)
- channel->clearNextEvent();
- }
-}
-
-void SoundPool::setVolume(int channelID, float leftVolume, float rightVolume)
-{
- Mutex::Autolock lock(&mLock);
- SoundChannel* channel = findChannel(channelID);
- if (channel) {
- channel->setVolume(leftVolume, rightVolume);
- }
-}
-
-void SoundPool::setPriority(int channelID, int priority)
-{
- LOGV("setPriority(%d, %d)", channelID, priority);
- Mutex::Autolock lock(&mLock);
- SoundChannel* channel = findChannel(channelID);
- if (channel) {
- channel->setPriority(priority);
- }
-}
-
-void SoundPool::setLoop(int channelID, int loop)
-{
- LOGV("setLoop(%d, %d)", channelID, loop);
- Mutex::Autolock lock(&mLock);
- SoundChannel* channel = findChannel(channelID);
- if (channel) {
- channel->setLoop(loop);
- }
-}
-
-void SoundPool::setRate(int channelID, float rate)
-{
- LOGV("setRate(%d, %f)", channelID, rate);
- Mutex::Autolock lock(&mLock);
- SoundChannel* channel = findChannel(channelID);
- if (channel) {
- channel->setRate(rate);
- }
-}
-
-// call with lock held
-void SoundPool::done(SoundChannel* channel)
-{
- LOGV("done(%d)", channel->channelID());
-
- // if "stolen", play next event
- if (channel->nextChannelID() != 0) {
- LOGV("add to restart list");
- addToRestartList(channel);
- }
-
- // return to idle state
- else {
- LOGV("move to front");
- moveToFront(channel);
- }
-}
-
-void SoundPool::dump()
-{
- for (int i = 0; i < mMaxChannels; ++i) {
- mChannelPool[i].dump();
- }
-}
-
-
-Sample::Sample(int sampleID, const char* url)
-{
- init();
- mSampleID = sampleID;
- mUrl = strdup(url);
- LOGV("create sampleID=%d, url=%s", mSampleID, mUrl);
-}
-
-Sample::Sample(int sampleID, int fd, int64_t offset, int64_t length)
-{
- init();
- mSampleID = sampleID;
- mFd = dup(fd);
- mOffset = offset;
- mLength = length;
- LOGV("create sampleID=%d, fd=%d, offset=%lld, length=%lld", mSampleID, mFd, mLength, mOffset);
-}
-
-void Sample::init()
-{
- mData = 0;
- mSize = 0;
- mRefCount = 0;
- mSampleID = 0;
- mState = UNLOADED;
- mFd = -1;
- mOffset = 0;
- mLength = 0;
- mUrl = 0;
-}
-
-Sample::~Sample()
-{
- LOGV("Sample::destructor sampleID=%d, fd=%d", mSampleID, mFd);
- if (mFd > 0) {
- LOGV("close(%d)", mFd);
- ::close(mFd);
- }
- mData.clear();
- delete mUrl;
-}
-
-void Sample::doLoad()
-{
- uint32_t sampleRate;
- int numChannels;
- int format;
- sp<IMemory> p;
- LOGV("Start decode");
- if (mUrl) {
- p = MediaPlayer::decode(mUrl, &sampleRate, &numChannels, &format);
- } else {
- p = MediaPlayer::decode(mFd, mOffset, mLength, &sampleRate, &numChannels, &format);
- LOGV("close(%d)", mFd);
- ::close(mFd);
- mFd = -1;
- }
- if (p == 0) {
- LOGE("Unable to load sample: %s", mUrl);
- return;
- }
- LOGV("pointer = %p, size = %u, sampleRate = %u, numChannels = %d",
- p->pointer(), p->size(), sampleRate, numChannels);
-
- if (sampleRate > kMaxSampleRate) {
- LOGE("Sample rate (%u) out of range", sampleRate);
- return;
- }
-
- if ((numChannels < 1) || (numChannels > 2)) {
- LOGE("Sample channel count (%d) out of range", numChannels);
- return;
- }
-
- //_dumpBuffer(p->pointer(), p->size());
- uint8_t* q = static_cast<uint8_t*>(p->pointer()) + p->size() - 10;
- //_dumpBuffer(q, 10, 10, false);
-
- mData = p;
- mSize = p->size();
- mSampleRate = sampleRate;
- mNumChannels = numChannels;
- mFormat = format;
- mState = READY;
-}
-
-
-void SoundChannel::init(SoundPool* soundPool)
-{
- mSoundPool = soundPool;
-}
-
-void SoundChannel::play(const sp<Sample>& sample, int nextChannelID, float leftVolume,
- float rightVolume, int priority, int loop, float rate)
-{
- AudioTrack* oldTrack;
-
- LOGV("play %p: sampleID=%d, channelID=%d, leftVolume=%f, rightVolume=%f, priority=%d, loop=%d, rate=%f",
- this, sample->sampleID(), nextChannelID, leftVolume, rightVolume, priority, loop, rate);
-
- // if not idle, this voice is being stolen
- if (mState != IDLE) {
- LOGV("channel %d stolen - event queued for channel %d", channelID(), nextChannelID);
- stop_l();
- mNextEvent.set(sample, nextChannelID, leftVolume, rightVolume, priority, loop, rate);
-#ifdef USE_SHARED_MEM_BUFFER
- mSoundPool->done(this);
-#endif
- return;
- }
-
- // initialize track
- int afFrameCount;
- int afSampleRate;
- int streamType = mSoundPool->streamType();
- if (AudioSystem::getOutputFrameCount(&afFrameCount, streamType) != NO_ERROR) {
- afFrameCount = kDefaultFrameCount;
- }
- if (AudioSystem::getOutputSamplingRate(&afSampleRate, streamType) != NO_ERROR) {
- afSampleRate = kDefaultSampleRate;
- }
- int numChannels = sample->numChannels();
- uint32_t sampleRate = uint32_t(float(sample->sampleRate()) * rate + 0.5);
- uint32_t bufferFrames = (afFrameCount * sampleRate) / afSampleRate;
- uint32_t frameCount = 0;
-
- if (loop) {
- frameCount = sample->size()/numChannels/((sample->format() == AudioSystem::PCM_16_BIT) ? sizeof(int16_t) : sizeof(uint8_t));
- }
-
- // Ensure minimum audio buffer size in case of short looped sample
- if(frameCount < kDefaultBufferCount * bufferFrames) {
- frameCount = kDefaultBufferCount * bufferFrames;
- }
-
- AudioTrack* newTrack;
-
- // mToggle toggles each time a track is started on a given channel.
- // The toggle is concatenated with the SoundChannel address and passed to AudioTrack
- // as callback user data. This enables the detection of callbacks received from the old
- // audio track while the new one is being started and avoids processing them with
- // wrong audio audio buffer size (mAudioBufferSize)
- unsigned long toggle = mToggle ^ 1;
- void *userData = (void *)((unsigned long)this | toggle);
-
-#ifdef USE_SHARED_MEM_BUFFER
- newTrack = new AudioTrack(streamType, sampleRate, sample->format(),
- numChannels, sample->getIMemory(), 0, callback, userData);
-#else
- newTrack = new AudioTrack(streamType, sampleRate, sample->format(),
- numChannels, frameCount, 0, callback, userData, bufferFrames);
-#endif
- if (newTrack->initCheck() != NO_ERROR) {
- LOGE("Error creating AudioTrack");
- delete newTrack;
- return;
- }
- LOGV("setVolume %p", newTrack);
- newTrack->setVolume(leftVolume, rightVolume);
- newTrack->setLoop(0, frameCount, loop);
-
- {
- Mutex::Autolock lock(&mLock);
- // From now on, AudioTrack callbacks recevieved with previous toggle value will be ignored.
- mToggle = toggle;
- oldTrack = mAudioTrack;
- mAudioTrack = newTrack;
- mPos = 0;
- mSample = sample;
- mChannelID = nextChannelID;
- mPriority = priority;
- mLoop = loop;
- mLeftVolume = leftVolume;
- mRightVolume = rightVolume;
- mNumChannels = numChannels;
- mRate = rate;
- clearNextEvent();
- mState = PLAYING;
- mAudioTrack->start();
- mAudioBufferSize = newTrack->frameCount()*newTrack->frameSize();
- }
-
- LOGV("delete oldTrack %p", oldTrack);
- delete oldTrack;
-}
-
-void SoundChannel::nextEvent()
-{
- sp<Sample> sample;
- int nextChannelID;
- float leftVolume;
- float rightVolume;
- int priority;
- int loop;
- float rate;
-
- // check for valid event
- {
- Mutex::Autolock lock(&mLock);
- nextChannelID = mNextEvent.channelID();
- if (nextChannelID == 0) {
- LOGV("stolen channel has no event");
- return;
- }
-
- sample = mNextEvent.sample();
- leftVolume = mNextEvent.leftVolume();
- rightVolume = mNextEvent.rightVolume();
- priority = mNextEvent.priority();
- loop = mNextEvent.loop();
- rate = mNextEvent.rate();
- }
-
- LOGV("Starting stolen channel %d -> %d", channelID(), nextChannelID);
- play(sample, nextChannelID, leftVolume, rightVolume, priority, loop, rate);
-}
-
-void SoundChannel::callback(int event, void* user, void *info)
-{
- unsigned long toggle = (unsigned long)user & 1;
- SoundChannel* channel = static_cast<SoundChannel*>((void *)((unsigned long)user & ~1));
-
- if (channel->mToggle != toggle) {
- LOGV("callback with wrong toggle");
- return;
- }
- channel->process(event, info);
-}
-
-void SoundChannel::process(int event, void *info)
-{
- //LOGV("process(%d)", mChannelID);
- sp<Sample> sample = mSample;
-
-// LOGV("SoundChannel::process event %d", event);
-
- if (event == AudioTrack::EVENT_MORE_DATA) {
- AudioTrack::Buffer* b = static_cast<AudioTrack::Buffer *>(info);
-
- // check for stop state
- if (b->size == 0) return;
-
- if (sample != 0) {
- // fill buffer
- uint8_t* q = (uint8_t*) b->i8;
- size_t count = 0;
-
- if (mPos < (int)sample->size()) {
- uint8_t* p = sample->data() + mPos;
- count = sample->size() - mPos;
- if (count > b->size) {
- count = b->size;
- }
- memcpy(q, p, count);
- LOGV("fill: q=%p, p=%p, mPos=%u, b->size=%u, count=%d", q, p, mPos, b->size, count);
- } else if (mPos < mAudioBufferSize) {
- count = mAudioBufferSize - mPos;
- if (count > b->size) {
- count = b->size;
- }
- memset(q, 0, count);
- LOGV("fill extra: q=%p, mPos=%u, b->size=%u, count=%d", q, mPos, b->size, count);
- }
-
- mPos += count;
- b->size = count;
- //LOGV("buffer=%p, [0]=%d", b->i16, b->i16[0]);
- }
- } else if (event == AudioTrack::EVENT_UNDERRUN) {
- LOGV("stopping track");
- stop();
- } else if (event == AudioTrack::EVENT_LOOP_END) {
- LOGV("End loop: %d", *(int *)info);
- }
-}
-
-
-// call with lock held
-void SoundChannel::stop_l()
-{
- if (mState != IDLE) {
- setVolume_l(0, 0);
- LOGV("stop");
- mAudioTrack->stop();
- mSample.clear();
- mState = IDLE;
- mPriority = IDLE_PRIORITY;
- }
-}
-
-void SoundChannel::stop()
-{
- {
- Mutex::Autolock lock(&mLock);
- stop_l();
- }
- mSoundPool->done(this);
-}
-
-//FIXME: Pause is a little broken right now
-void SoundChannel::pause()
-{
- Mutex::Autolock lock(&mLock);
- if (mState == PLAYING) {
- LOGV("pause track");
- mState = PAUSED;
- mAudioTrack->pause();
- }
-}
-
-void SoundChannel::resume()
-{
- Mutex::Autolock lock(&mLock);
- if (mState == PAUSED) {
- LOGV("resume track");
- mState = PLAYING;
- mAudioTrack->start();
- }
-}
-
-void SoundChannel::setRate(float rate)
-{
- Mutex::Autolock lock(&mLock);
- if (mAudioTrack != 0 && mSample.get() != 0) {
- uint32_t sampleRate = uint32_t(float(mSample->sampleRate()) * rate + 0.5);
- mAudioTrack->setSampleRate(sampleRate);
- mRate = rate;
- }
-}
-
-// call with lock held
-void SoundChannel::setVolume_l(float leftVolume, float rightVolume)
-{
- mLeftVolume = leftVolume;
- mRightVolume = rightVolume;
- if (mAudioTrack != 0) mAudioTrack->setVolume(leftVolume, rightVolume);
-}
-
-void SoundChannel::setVolume(float leftVolume, float rightVolume)
-{
- Mutex::Autolock lock(&mLock);
- setVolume_l(leftVolume, rightVolume);
-}
-
-void SoundChannel::setLoop(int loop)
-{
- Mutex::Autolock lock(&mLock);
- if (mAudioTrack != 0 && mSample.get() != 0) {
- mAudioTrack->setLoop(0, mSample->size()/mNumChannels/((mSample->format() == AudioSystem::PCM_16_BIT) ? sizeof(int16_t) : sizeof(uint8_t)), loop);
- mLoop = loop;
- }
-}
-
-SoundChannel::~SoundChannel()
-{
- LOGV("SoundChannel destructor");
- if (mAudioTrack) {
- LOGV("stop track");
- mAudioTrack->stop();
- delete mAudioTrack;
- }
- clearNextEvent();
- mSample.clear();
-}
-
-void SoundChannel::dump()
-{
- LOGV("mState = %d mChannelID=%d, mNumChannels=%d, mPos = %d, mPriority=%d, mLoop=%d",
- mState, mChannelID, mNumChannels, mPos, mPriority, mLoop);
-}
-
-void SoundEvent::set(const sp<Sample>& sample, int channelID, float leftVolume,
- float rightVolume, int priority, int loop, float rate)
-{
- mSample =sample;
- mChannelID = channelID;
- mLeftVolume = leftVolume;
- mRightVolume = rightVolume;
- mPriority = priority;
- mLoop = loop;
- mRate =rate;
-}
-
-} // end namespace android
-
diff --git a/media/jni/soundpool/SoundPool.h b/media/jni/soundpool/SoundPool.h
deleted file mode 100644
index 7802781..0000000
--- a/media/jni/soundpool/SoundPool.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SOUNDPOOL_H_
-#define SOUNDPOOL_H_
-
-#include <utils/threads.h>
-#include <utils/List.h>
-#include <utils/Vector.h>
-#include <utils/KeyedVector.h>
-#include <media/AudioTrack.h>
-#include <cutils/atomic.h>
-
-#include <nativehelper/jni.h>
-
-namespace android {
-
-static const int IDLE_PRIORITY = -1;
-
-// forward declarations
-class SoundEvent;
-class SoundPoolThread;
-class SoundPool;
-
-// for queued events
-class SoundPoolEvent {
-public:
- SoundPoolEvent(int msg, int arg1=0, int arg2=0) :
- mMsg(msg), mArg1(arg1), mArg2(arg2) {}
- int mMsg;
- int mArg1;
- int mArg2;
-};
-
-// JNI for calling back Java SoundPool object
-extern void android_soundpool_SoundPool_notify(jobject ref, const SoundPoolEvent *event);
-
-// tracks samples used by application
-class Sample : public RefBase {
-public:
- enum sample_state { UNLOADED, LOADING, READY, UNLOADING };
- Sample(int sampleID, const char* url);
- Sample(int sampleID, int fd, int64_t offset, int64_t length);
- ~Sample();
- int sampleID() { return mSampleID; }
- int numChannels() { return mNumChannels; }
- int sampleRate() { return mSampleRate; }
- int format() { return mFormat; }
- size_t size() { return mSize; }
- int state() { return mState; }
- uint8_t* data() { return static_cast<uint8_t*>(mData->pointer()); }
- void doLoad();
- void startLoad() { mState = LOADING; }
- sp<IMemory> getIMemory() { return mData; }
-
- // hack
- void init(int numChannels, int sampleRate, int format, size_t size, sp<IMemory> data ) {
- mNumChannels = numChannels; mSampleRate = sampleRate; mFormat = format; mSize = size; mData = data; }
-
-private:
- void init();
-
- size_t mSize;
- volatile int32_t mRefCount;
- uint16_t mSampleID;
- uint16_t mSampleRate;
- uint8_t mState : 3;
- uint8_t mNumChannels : 2;
- uint8_t mFormat : 2;
- int mFd;
- int64_t mOffset;
- int64_t mLength;
- char* mUrl;
- sp<IMemory> mData;
-};
-
-// stores pending events for stolen channels
-class SoundEvent
-{
-public:
- SoundEvent() : mChannelID(0), mLeftVolume(0), mRightVolume(0),
- mPriority(IDLE_PRIORITY), mLoop(0), mRate(0) {}
- void set(const sp<Sample>& sample, int channelID, float leftVolume,
- float rightVolume, int priority, int loop, float rate);
- sp<Sample> sample() { return mSample; }
- int channelID() { return mChannelID; }
- float leftVolume() { return mLeftVolume; }
- float rightVolume() { return mRightVolume; }
- int priority() { return mPriority; }
- int loop() { return mLoop; }
- float rate() { return mRate; }
- void clear() { mChannelID = 0; mSample.clear(); }
-
-protected:
- sp<Sample> mSample;
- int mChannelID;
- float mLeftVolume;
- float mRightVolume;
- int mPriority;
- int mLoop;
- float mRate;
-};
-
-// for channels aka AudioTracks
-class SoundChannel : public SoundEvent {
-public:
- enum state { IDLE, RESUMING, STOPPING, PAUSED, PLAYING };
- SoundChannel() : mAudioTrack(0), mState(IDLE), mNumChannels(1), mPos(0), mToggle(0) {}
- ~SoundChannel();
- void init(SoundPool* soundPool);
- void play(const sp<Sample>& sample, int channelID, float leftVolume, float rightVolume,
- int priority, int loop, float rate);
- void setVolume_l(float leftVolume, float rightVolume);
- void setVolume(float leftVolume, float rightVolume);
- void stop_l();
- void stop();
- void pause();
- void resume();
- void setRate(float rate);
- int state() { return mState; }
- void setPriority(int priority) { mPriority = priority; }
- void setLoop(int loop);
- int numChannels() { return mNumChannels; }
- void clearNextEvent() { mNextEvent.clear(); }
- void nextEvent();
- int nextChannelID() { return mNextEvent.channelID(); }
- void dump();
-
-private:
- static void callback(int event, void* user, void *info);
- void process(int event, void *info);
-
- SoundPool* mSoundPool;
- AudioTrack* mAudioTrack;
- SoundEvent mNextEvent;
- Mutex mLock;
- int mState;
- int mNumChannels;
- int mPos;
- int mAudioBufferSize;
- unsigned long mToggle;
-};
-
-// application object for managing a pool of sounds
-class SoundPool {
- friend class SoundPoolThread;
- friend class SoundChannel;
-public:
- SoundPool(jobject soundPoolRef, int maxChannels, int streamType, int srcQuality);
- ~SoundPool();
- int load(const char* url, int priority);
- int load(int fd, int64_t offset, int64_t length, int priority);
- bool unload(int sampleID);
- int play(int sampleID, float leftVolume, float rightVolume, int priority,
- int loop, float rate);
- void pause(int channelID);
- void resume(int channelID);
- void stop(int channelID);
- void setVolume(int channelID, float leftVolume, float rightVolume);
- void setPriority(int channelID, int priority);
- void setLoop(int channelID, int loop);
- void setRate(int channelID, float rate);
- int streamType() const { return mStreamType; }
- int srcQuality() const { return mSrcQuality; }
-
- // called from SoundPoolThread
- void sampleLoaded(int sampleID);
-
- // called from AudioTrack thread
- void done(SoundChannel* channel);
-
-private:
- SoundPool() {} // no default constructor
- bool startThreads();
- void doLoad(sp<Sample>& sample);
- inline void notify(const SoundPoolEvent* event) {
- android_soundpool_SoundPool_notify(mSoundPoolRef, event);
- }
- sp<Sample> findSample(int sampleID) { return mSamples.valueFor(sampleID); }
- SoundChannel* findChannel (int channelID);
- SoundChannel* findNextChannel (int channelID);
- SoundChannel* allocateChannel(int priority);
- void moveToFront(SoundChannel* channel);
- void dump();
-
- // restart thread
- void addToRestartList(SoundChannel* channel);
- static int beginThread(void* arg);
- int run();
- void quit();
-
- jobject mSoundPoolRef;
- Mutex mLock;
- Condition mCondition;
- SoundPoolThread* mDecodeThread;
- SoundChannel* mChannelPool;
- List<SoundChannel*> mChannels;
- List<SoundChannel*> mRestart;
- DefaultKeyedVector< int, sp<Sample> > mSamples;
- int mMaxChannels;
- int mStreamType;
- int mSrcQuality;
- int mAllocated;
- int mNextSampleID;
- int mNextChannelID;
- bool mQuit;
-};
-
-} // end namespace android
-
-#endif /*SOUNDPOOL_H_*/
diff --git a/media/jni/soundpool/SoundPoolThread.cpp b/media/jni/soundpool/SoundPoolThread.cpp
deleted file mode 100644
index 4e6798d..0000000
--- a/media/jni/soundpool/SoundPoolThread.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "SoundPoolThread"
-#include "utils/Log.h"
-
-#include "SoundPoolThread.h"
-
-namespace android {
-
-void SoundPoolThread::MessageQueue::write(SoundPoolMsg msg) {
- LOGV("MessageQueue::write - acquiring lock\n");
- Mutex::Autolock lock(&mLock);
- while (mQueue.size() >= maxMessages) {
- LOGV("MessageQueue::write - wait\n");
- mCondition.wait(mLock);
- }
- LOGV("MessageQueue::write - push message\n");
- mQueue.push(msg);
- mCondition.signal();
-}
-
-const SoundPoolMsg SoundPoolThread::MessageQueue::read() {
- LOGV("MessageQueue::read - acquiring lock\n");
- Mutex::Autolock lock(&mLock);
- while (mQueue.size() == 0) {
- LOGV("MessageQueue::read - wait\n");
- mCondition.wait(mLock);
- }
- SoundPoolMsg msg = mQueue[0];
- LOGV("MessageQueue::read - retrieve message\n");
- mQueue.removeAt(0);
- mCondition.signal();
- return msg;
-}
-
-void SoundPoolThread::MessageQueue::quit() {
- Mutex::Autolock lock(&mLock);
- mQueue.clear();
- mQueue.push(SoundPoolMsg(SoundPoolMsg::KILL, 0));
- mCondition.signal();
- mCondition.wait(mLock);
- LOGV("return from quit");
-}
-
-SoundPoolThread::SoundPoolThread(SoundPool* soundPool) :
- mSoundPool(soundPool)
-{
- mMessages.setCapacity(maxMessages);
- createThread(beginThread, this);
-}
-
-SoundPoolThread::~SoundPoolThread()
-{
-}
-
-int SoundPoolThread::beginThread(void* arg) {
- LOGV("beginThread");
- SoundPoolThread* soundPoolThread = (SoundPoolThread*)arg;
- return soundPoolThread->run();
-}
-
-int SoundPoolThread::run() {
- LOGV("run");
- for (;;) {
- SoundPoolMsg msg = mMessages.read();
- LOGV("Got message m=%d, mData=%d", msg.mMessageType, msg.mData);
- switch (msg.mMessageType) {
- case SoundPoolMsg::KILL:
- LOGV("goodbye");
- return NO_ERROR;
- case SoundPoolMsg::LOAD_SAMPLE:
- doLoadSample(msg.mData);
- break;
- default:
- LOGW("run: Unrecognized message %d\n",
- msg.mMessageType);
- break;
- }
- }
-}
-
-void SoundPoolThread::loadSample(int sampleID) {
- mMessages.write(SoundPoolMsg(SoundPoolMsg::LOAD_SAMPLE, sampleID));
-}
-
-void SoundPoolThread::doLoadSample(int sampleID) {
- sp <Sample> sample = mSoundPool->findSample(sampleID);
- if (sample != 0) {
- sample->doLoad();
- }
-}
-
-} // end namespace android
diff --git a/media/jni/soundpool/SoundPoolThread.h b/media/jni/soundpool/SoundPoolThread.h
deleted file mode 100644
index 459a764..0000000
--- a/media/jni/soundpool/SoundPoolThread.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SOUNDPOOLTHREAD_H_
-#define SOUNDPOOLTHREAD_H_
-
-#include <utils/threads.h>
-#include <utils/Vector.h>
-#include <media/AudioTrack.h>
-
-#include "SoundPool.h"
-
-namespace android {
-
-class SoundPoolMsg {
-public:
- enum MessageType { INVALID, KILL, LOAD_SAMPLE, PLAY_SAMPLE, SAMPLE_DONE };
- SoundPoolMsg() : mMessageType(INVALID), mData(0) {}
- SoundPoolMsg(MessageType MessageType, int data) :
- mMessageType(MessageType), mData(data) {}
- uint8_t mMessageType;
- uint8_t mData;
- uint8_t mData2;
- uint8_t mData3;
-};
-
-/*
- * This class handles background requests from the SoundPool
- */
-class SoundPoolThread {
-public:
- SoundPoolThread(SoundPool* SoundPool);
- ~SoundPoolThread();
- void loadSample(int sampleID);
- void quit() { mMessages.quit(); }
-
-private:
- static const size_t maxMessages = 5;
-
- class MessageQueue {
- public:
- void write(SoundPoolMsg msg);
- const SoundPoolMsg read();
- void setCapacity(size_t size) { mQueue.setCapacity(size); }
- void quit();
- private:
- Vector<SoundPoolMsg> mQueue;
- Mutex mLock;
- Condition mCondition;
- };
-
- static int beginThread(void* arg);
- int run();
- void doLoadSample(int sampleID);
-
- SoundPool* mSoundPool;
- MessageQueue mMessages;
-};
-
-} // end namespace android
-
-#endif /*SOUNDPOOLTHREAD_H_*/
diff --git a/media/jni/soundpool/android_media_SoundPool.cpp b/media/jni/soundpool/android_media_SoundPool.cpp
deleted file mode 100644
index 0ce2d6f..0000000
--- a/media/jni/soundpool/android_media_SoundPool.cpp
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "SoundPool"
-
-#include <utils/Log.h>
-#include <nativehelper/jni.h>
-#include <nativehelper/JNIHelp.h>
-#include <android_runtime/AndroidRuntime.h>
-#include "SoundPool.h"
-
-using namespace android;
-
-static struct fields_t {
- jfieldID mNativeContext;
- jclass mSoundPoolClass;
-} fields;
-
-static inline SoundPool* MusterSoundPool(JNIEnv *env, jobject thiz) {
- return (SoundPool*)env->GetIntField(thiz, fields.mNativeContext);
-}
-
-// ----------------------------------------------------------------------------
-static int
-android_media_SoundPool_load_URL(JNIEnv *env, jobject thiz, jstring path, jint priority)
-{
- LOGV("android_media_SoundPool_load_URL");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (path == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return 0;
- }
- const char* s = env->GetStringUTFChars(path, NULL);
- int id = ap->load(s, priority);
- env->ReleaseStringUTFChars(path, s);
- return id;
-}
-
-static int
-android_media_SoundPool_load_FD(JNIEnv *env, jobject thiz, jobject fileDescriptor,
- jlong offset, jlong length, jint priority)
-{
- LOGV("android_media_SoundPool_load_FD");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (ap == NULL) return 0;
- return ap->load(getParcelFileDescriptorFD(env, fileDescriptor),
- int64_t(offset), int64_t(length), int(priority));
-}
-
-static bool
-android_media_SoundPool_unload(JNIEnv *env, jobject thiz, jint sampleID) {
- LOGV("android_media_SoundPool_unload\n");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (ap == NULL) return 0;
- return ap->unload(sampleID);
-}
-
-static int
-android_media_SoundPool_play(JNIEnv *env, jobject thiz, jint sampleID,
- jfloat leftVolume, jfloat rightVolume, jint priority, jint loop,
- jfloat rate)
-{
- LOGV("android_media_SoundPool_play\n");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (ap == NULL) return 0;
- return ap->play(sampleID, leftVolume, rightVolume, priority, loop, rate);
-}
-
-static void
-android_media_SoundPool_pause(JNIEnv *env, jobject thiz, jint channelID)
-{
- LOGV("android_media_SoundPool_pause");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (ap == NULL) return;
- ap->pause(channelID);
-}
-
-static void
-android_media_SoundPool_resume(JNIEnv *env, jobject thiz, jint channelID)
-{
- LOGV("android_media_SoundPool_resume");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (ap == NULL) return;
- ap->resume(channelID);
-}
-
-static void
-android_media_SoundPool_stop(JNIEnv *env, jobject thiz, jint channelID)
-{
- LOGV("android_media_SoundPool_stop");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (ap == NULL) return;
- ap->stop(channelID);
-}
-
-static void
-android_media_SoundPool_setVolume(JNIEnv *env, jobject thiz, jint channelID,
- float leftVolume, float rightVolume)
-{
- LOGV("android_media_SoundPool_setVolume");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (ap == NULL) return;
- ap->setVolume(channelID, leftVolume, rightVolume);
-}
-
-static void
-android_media_SoundPool_setPriority(JNIEnv *env, jobject thiz, jint channelID,
- int priority)
-{
- LOGV("android_media_SoundPool_setPriority");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (ap == NULL) return;
- ap->setPriority(channelID, priority);
-}
-
-static void
-android_media_SoundPool_setLoop(JNIEnv *env, jobject thiz, jint channelID,
- int loop)
-{
- LOGV("android_media_SoundPool_setLoop");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (ap == NULL) return;
- ap->setLoop(channelID, loop);
-}
-
-static void
-android_media_SoundPool_setRate(JNIEnv *env, jobject thiz, jint channelID,
- float rate)
-{
- LOGV("android_media_SoundPool_setRate");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (ap == NULL) return;
- ap->setRate(channelID, rate);
-}
-
-static void
-android_media_SoundPool_native_setup(JNIEnv *env, jobject thiz,
- jobject weak_this, jint maxChannels, jint streamType, jint srcQuality)
-{
- LOGV("android_media_SoundPool_native_setup");
- SoundPool *ap = new SoundPool(weak_this, maxChannels, streamType, srcQuality);
- if (ap == NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
- return;
- }
-
- // save pointer to SoundPool C++ object in opaque field in Java object
- env->SetIntField(thiz, fields.mNativeContext, (int)ap);
-}
-
-static void
-android_media_SoundPool_release(JNIEnv *env, jobject thiz)
-{
- LOGV("android_media_SoundPool_release");
- SoundPool *ap = MusterSoundPool(env, thiz);
- if (ap != NULL) {
- env->SetIntField(thiz, fields.mNativeContext, 0);
- delete ap;
- }
-}
-
-// ----------------------------------------------------------------------------
-
-// Dalvik VM type signatures
-static JNINativeMethod gMethods[] = {
- { "_load",
- "(Ljava/lang/String;I)I",
- (void *)android_media_SoundPool_load_URL
- },
- { "_load",
- "(Ljava/io/FileDescriptor;JJI)I",
- (void *)android_media_SoundPool_load_FD
- },
- { "unload",
- "(I)Z",
- (void *)android_media_SoundPool_unload
- },
- { "play",
- "(IFFIIF)I",
- (void *)android_media_SoundPool_play
- },
- { "pause",
- "(I)V",
- (void *)android_media_SoundPool_pause
- },
- { "resume",
- "(I)V",
- (void *)android_media_SoundPool_resume
- },
- { "stop",
- "(I)V",
- (void *)android_media_SoundPool_stop
- },
- { "setVolume",
- "(IFF)V",
- (void *)android_media_SoundPool_setVolume
- },
- { "setPriority",
- "(II)V",
- (void *)android_media_SoundPool_setPriority
- },
- { "setLoop",
- "(II)V",
- (void *)android_media_SoundPool_setLoop
- },
- { "setRate",
- "(IF)V",
- (void *)android_media_SoundPool_setRate
- },
- { "native_setup",
- "(Ljava/lang/Object;III)V",
- (void*)android_media_SoundPool_native_setup
- },
- { "release",
- "()V",
- (void*)android_media_SoundPool_release
- }
-};
-
-static const char* const kClassPathName = "android/media/SoundPool";
-
-jint JNI_OnLoad(JavaVM* vm, void* reserved)
-{
- JNIEnv* env = NULL;
- jint result = -1;
- jclass clazz;
-
- if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- LOGE("ERROR: GetEnv failed\n");
- goto bail;
- }
- assert(env != NULL);
-
- clazz = env->FindClass(kClassPathName);
- if (clazz == NULL) {
- LOGE("Can't find %s", kClassPathName);
- goto bail;
- }
-
- fields.mNativeContext = env->GetFieldID(clazz, "mNativeContext", "I");
- if (fields.mNativeContext == NULL) {
- LOGE("Can't find SoundPool.mNativeContext");
- goto bail;
- }
-
- if (AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)) < 0)
- goto bail;
-
- /* success -- return valid version number */
- result = JNI_VERSION_1_4;
-
-bail:
- return result;
-}
diff --git a/media/libdrm/Android.mk b/media/libdrm/Android.mk
deleted file mode 100644
index 5053e7d..0000000
--- a/media/libdrm/Android.mk
+++ /dev/null
@@ -1 +0,0 @@
-include $(call all-subdir-makefiles)
diff --git a/media/libdrm/MODULE_LICENSE_APACHE2 b/media/libdrm/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/media/libdrm/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/media/libdrm/NOTICE b/media/libdrm/NOTICE
deleted file mode 100644
index c5b1efa..0000000
--- a/media/libdrm/NOTICE
+++ /dev/null
@@ -1,190 +0,0 @@
-
- Copyright (c) 2005-2008, The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
diff --git a/media/libdrm/mobile1/Android.mk b/media/libdrm/mobile1/Android.mk
deleted file mode 100644
index 2065cd2..0000000
--- a/media/libdrm/mobile1/Android.mk
+++ /dev/null
@@ -1,81 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-# ---------------------------------------
-# First project
-#
-# Build DRM1 core library
-#
-# Output: libdrm1.so
-# ---------------------------------------
-include $(CLEAR_VARS)
-
-ifeq ($(TARGET_ARCH), arm)
-LOCAL_DRM_CFLAG = -DDRM_DEVICE_ARCH_ARM
-endif
-
-ifeq ($(TARGET_ARCH), x86)
-LOCAL_DRM_CFLAG = -DDRM_DEVICE_ARCH_X86
-endif
-
-# DRM 1.0 core source files
-LOCAL_SRC_FILES := \
- src/objmng/drm_decoder.c \
- src/objmng/drm_file.c \
- src/objmng/drm_i18n.c \
- src/objmng/drm_time.c \
- src/objmng/drm_api.c \
- src/objmng/drm_rights_manager.c \
- src/parser/parser_dcf.c \
- src/parser/parser_dm.c \
- src/parser/parser_rel.c \
- src/xml/xml_tinyparser.c
-
-# Header files path
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/include \
- $(LOCAL_PATH)/include/objmng \
- $(LOCAL_PATH)/include/parser \
- $(LOCAL_PATH)/include/xml \
- external/aes \
- $(call include-path-for, system-core)/cutils
-
-LOCAL_CFLAGS := $(LOCAL_DRM_CFLAG)
-
-LOCAL_SHARED_LIBRARIES := \
- libaes \
- libutils \
- libcutils
-
-LOCAL_MODULE := libdrm1
-
-include $(BUILD_SHARED_LIBRARY)
-
-# ---------------------------------------
-# Second project
-#
-# Build DRM1 Java Native Interface(JNI) library
-#
-# Output: libdrm1_jni.so
-# ------------------------------------------------
-include $(CLEAR_VARS)
-
-# Source files of DRM1 Java Native Interfaces
-LOCAL_SRC_FILES := \
- src/jni/drm1_jni.c
-
-# Header files path
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/include \
- $(LOCAL_PATH)/include/parser \
- $(JNI_H_INCLUDE) \
- $(call include-path-for, system-core)/cutils \
- external/aes
-
-
-LOCAL_SHARED_LIBRARIES := libdrm1 \
- libutils \
- libcutils
-
-LOCAL_MODULE := libdrm1_jni
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/media/libdrm/mobile1/include/drm_common_types.h b/media/libdrm/mobile1/include/drm_common_types.h
deleted file mode 100644
index c6bea61..0000000
--- a/media/libdrm/mobile1/include/drm_common_types.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __COMMON_TYPES_H__
-#define __COMMON_TYPES_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <assert.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#define Trace(...)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __COMMON_TYPES_H__ */
diff --git a/media/libdrm/mobile1/include/jni/drm1_jni.h b/media/libdrm/mobile1/include/jni/drm1_jni.h
deleted file mode 100644
index 64e78ad..0000000
--- a/media/libdrm/mobile1/include/jni/drm1_jni.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __DRM1_JNI_H__
-#define __DRM1_JNI_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class android_drm_mobile1_DrmRawContent */
-
-#undef android_drm_mobile1_DrmRawContent_DRM_FORWARD_LOCK
-#define android_drm_mobile1_DrmRawContent_DRM_FORWARD_LOCK 1L
-#undef android_drm_mobile1_DrmRawContent_DRM_COMBINED_DELIVERY
-#define android_drm_mobile1_DrmRawContent_DRM_COMBINED_DELIVERY 2L
-#undef android_drm_mobile1_DrmRawContent_DRM_SEPARATE_DELIVERY
-#define android_drm_mobile1_DrmRawContent_DRM_SEPARATE_DELIVERY 3L
-#undef android_drm_mobile1_DrmRawContent_DRM_SEPARATE_DELIVERY_DM
-#define android_drm_mobile1_DrmRawContent_DRM_SEPARATE_DELIVERY_DM 4L
-#undef android_drm_mobile1_DrmRawContent_DRM_MIMETYPE_MESSAGE
-#define android_drm_mobile1_DrmRawContent_DRM_MIMETYPE_MESSAGE 1L
-#undef android_drm_mobile1_DrmRawContent_DRM_MIMETYPE_CONTENT
-#define android_drm_mobile1_DrmRawContent_DRM_MIMETYPE_CONTENT 2L
-#undef android_drm_mobile1_DrmRawContent_JNI_DRM_SUCCESS
-#define android_drm_mobile1_DrmRawContent_JNI_DRM_SUCCESS 0L
-#undef android_drm_mobile1_DrmRawContent_JNI_DRM_FAILURE
-#define android_drm_mobile1_DrmRawContent_JNI_DRM_FAILURE -1L
-#undef android_drm_mobile1_DrmRawContent_JNI_DRM_EOF
-#define android_drm_mobile1_DrmRawContent_JNI_DRM_EOF -2L
-#undef android_drm_mobile1_DrmRawContent_JNI_DRM_UNKNOWN_DATA_LEN
-#define android_drm_mobile1_DrmRawContent_JNI_DRM_UNKNOWN_DATA_LEN -3L
-/*
- * Class: android_drm_mobile1_DrmRawContent
- * Method: nativeConstructDrmContent
- * Signature: (Ljava/io/InputStream;II)I
- */
-JNIEXPORT jint JNICALL Java_android_drm_mobile1_DrmRawContent_nativeConstructDrmContent
- (JNIEnv *, jobject, jobject, jint, jint);
-
-/*
- * Class: android_drm_mobile1_DrmRawContent
- * Method: nativeGetRightsAddress
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_android_drm_mobile1_DrmRawContent_nativeGetRightsAddress
- (JNIEnv *, jobject);
-
-/*
- * Class: android_drm_mobile1_DrmRawContent
- * Method: nativeGetDeliveryMethod
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_android_drm_mobile1_DrmRawContent_nativeGetDeliveryMethod
- (JNIEnv *, jobject);
-
-/*
- * Class: android_drm_mobile1_DrmRawContent
- * Method: nativeReadPieceOfContent
- * Signature: ([BIII)I
- */
-JNIEXPORT jint JNICALL Java_android_drm_mobile1_DrmRawContent_nativeReadContent
- (JNIEnv *, jobject, jbyteArray, jint, jint, jint);
-
-/*
- * Class: android_drm_mobile1_DrmRawContent
- * Method: nativeGetContentType
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_android_drm_mobile1_DrmRawContent_nativeGetContentType
- (JNIEnv *, jobject);
-
-/*
- * Class: android_drm_mobile1_DrmRawContent
- * Method: nativeGetContentLength
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_android_drm_mobile1_DrmRawContent_nativeGetContentLength
- (JNIEnv *, jobject);
-
-/*
- * Class: android_drm_mobile1_DrmRawContent
- * Method: finalize
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_android_drm_mobile1_DrmRawContent_finalize
- (JNIEnv *, jobject);
-
-/* Header for class android_drm_mobile1_DrmRights */
-
-#undef android_drm_mobile1_DrmRights_DRM_PERMISSION_PLAY
-#define android_drm_mobile1_DrmRights_DRM_PERMISSION_PLAY 1L
-#undef android_drm_mobile1_DrmRights_DRM_PERMISSION_DISPLAY
-#define android_drm_mobile1_DrmRights_DRM_PERMISSION_DISPLAY 2L
-#undef android_drm_mobile1_DrmRights_DRM_PERMISSION_EXECUTE
-#define android_drm_mobile1_DrmRights_DRM_PERMISSION_EXECUTE 3L
-#undef android_drm_mobile1_DrmRights_DRM_PERMISSION_PRINT
-#define android_drm_mobile1_DrmRights_DRM_PERMISSION_PRINT 4L
-#undef android_drm_mobile1_DrmRights_DRM_CONSUME_RIGHTS_SUCCESS
-#define android_drm_mobile1_DrmRights_DRM_CONSUME_RIGHTS_SUCCESS 0L
-#undef android_drm_mobile1_DrmRights_DRM_CONSUME_RIGHTS_FAILURE
-#define android_drm_mobile1_DrmRights_DRM_CONSUME_RIGHTS_FAILURE -1L
-#undef android_drm_mobile1_DrmRights_JNI_DRM_SUCCESS
-#define android_drm_mobile1_DrmRights_JNI_DRM_SUCCESS 0L
-#undef android_drm_mobile1_DrmRights_JNI_DRM_FAILURE
-#define android_drm_mobile1_DrmRights_JNI_DRM_FAILURE -1L
-/*
- * Class: android_drm_mobile1_DrmRights
- * Method: nativeGetConstraintInfo
- * Signature: (ILandroid/drm/mobile1/DrmConstraintInfo;)I
- */
-JNIEXPORT jint JNICALL Java_android_drm_mobile1_DrmRights_nativeGetConstraintInfo
- (JNIEnv *, jobject, jint, jobject);
-
-/*
- * Class: android_drm_mobile1_DrmRights
- * Method: nativeConsumeRights
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_android_drm_mobile1_DrmRights_nativeConsumeRights
- (JNIEnv *, jobject, jint);
-
-/* Header for class android_drm_mobile1_DrmRightsManager */
-
-#undef android_drm_mobile1_DrmRightsManager_DRM_MIMETYPE_RIGHTS_XML
-#define android_drm_mobile1_DrmRightsManager_DRM_MIMETYPE_RIGHTS_XML 3L
-#undef android_drm_mobile1_DrmRightsManager_DRM_MIMETYPE_RIGHTS_WBXML
-#define android_drm_mobile1_DrmRightsManager_DRM_MIMETYPE_RIGHTS_WBXML 4L
-#undef android_drm_mobile1_DrmRightsManager_DRM_MIMETYPE_MESSAGE
-#define android_drm_mobile1_DrmRightsManager_DRM_MIMETYPE_MESSAGE 1L
-#undef android_drm_mobile1_DrmRightsManager_JNI_DRM_SUCCESS
-#define android_drm_mobile1_DrmRightsManager_JNI_DRM_SUCCESS 0L
-#undef android_drm_mobile1_DrmRightsManager_JNI_DRM_FAILURE
-#define android_drm_mobile1_DrmRightsManager_JNI_DRM_FAILURE -1L
-/* Inaccessible static: singleton */
-/*
- * Class: android_drm_mobile1_DrmRightsManager
- * Method: nativeInstallDrmRights
- * Signature: (Ljava/io/InputStream;IILandroid/drm/mobile1/DrmRights;)I
- */
-JNIEXPORT jint JNICALL Java_android_drm_mobile1_DrmRightsManager_nativeInstallDrmRights
- (JNIEnv *, jobject, jobject, jint, jint, jobject);
-
-/*
- * Class: android_drm_mobile1_DrmRightsManager
- * Method: nativeQueryRights
- * Signature: (Landroid/drm/mobile1/DrmRawContent;Landroid/drm/mobile1/DrmRights;)I
- */
-JNIEXPORT jint JNICALL Java_android_drm_mobile1_DrmRightsManager_nativeQueryRights
- (JNIEnv *, jobject, jobject, jobject);
-
-/*
- * Class: android_drm_mobile1_DrmRightsManager
- * Method: nativeGetRightsNumber
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_android_drm_mobile1_DrmRightsManager_nativeGetNumOfRights
- (JNIEnv *, jobject);
-
-/*
- * Class: android_drm_mobile1_DrmRightsManager
- * Method: nativeGetRightsList
- * Signature: ([Landroid/drm/mobile1/DrmRights;I)I
- */
-JNIEXPORT jint JNICALL Java_android_drm_mobile1_DrmRightsManager_nativeGetRightsList
- (JNIEnv *, jobject, jobjectArray, jint);
-
-/*
- * Class: android_drm_mobile1_DrmRightsManager
- * Method: nativeDeleteRights
- * Signature: (Landroid/drm/mobile1/DrmRights;)I
- */
-JNIEXPORT jint JNICALL Java_android_drm_mobile1_DrmRightsManager_nativeDeleteRights
- (JNIEnv *, jobject, jobject);
-
-/**
- * DRM return value defines
- */
-#define JNI_DRM_SUCCESS \
- android_drm_mobile1_DrmRawContent_JNI_DRM_SUCCESS /**< Successful operation */
-#define JNI_DRM_FAILURE \
- android_drm_mobile1_DrmRawContent_JNI_DRM_FAILURE /**< General failure */
-#define JNI_DRM_EOF \
- android_drm_mobile1_DrmRawContent_JNI_DRM_EOF /**< Indicates the end of the DRM content is reached */
-#define JNI_DRM_UNKNOWN_DATA_LEN \
- android_drm_mobile1_DrmRawContent_JNI_DRM_UNKNOWN_DATA_LEN /**< Indicates the data length is unknown */
-
-/**
- * DRM MIME type defines
- */
-#define JNI_DRM_MIMETYPE_MESSAGE \
- android_drm_mobile1_DrmRawContent_DRM_MIMETYPE_MESSAGE /**< The "application/vnd.oma.drm.message" MIME type */
-#define JNI_DRM_MIMETYPE_CONTENT \
- android_drm_mobile1_DrmRawContent_DRM_MIMETYPE_CONTENT /**< The "application/vnd.oma.drm.content" MIME type */
-#define JNI_DRM_MIMETYPE_RIGHTS_XML \
- android_drm_mobile1_DrmRightsManager_DRM_MIMETYPE_RIGHTS_XML /**< The "application/vnd.oma.drm.rights+xml" MIME type */
-#define JNI_DRM_MIMETYPE_RIGHTS_WBXML \
- android_drm_mobile1_DrmRightsManager_DRM_MIMETYPE_RIGHTS_WBXML /**< The "application/vnd.oma.drm.rights+wbxml" MIME type */
-
-/**
- * DRM permission defines
- */
-#define JNI_DRM_PERMISSION_PLAY \
- android_drm_mobile1_DrmRights_DRM_PERMISSION_PLAY /**< The permission to play */
-#define JNI_DRM_PERMISSION_DISPLAY \
- android_drm_mobile1_DrmRights_DRM_PERMISSION_DISPLAY /**< The permission to display */
-#define JNI_DRM_PERMISSION_EXECUTE \
- android_drm_mobile1_DrmRights_DRM_PERMISSION_EXECUTE /**< The permission to execute */
-#define JNI_DRM_PERMISSION_PRINT \
- android_drm_mobile1_DrmRights_DRM_PERMISSION_PRINT /**< The permission to print */
-
-/**
- * DRM delivery type defines
- */
-#define JNI_DRM_FORWARD_LOCK \
- android_drm_mobile1_DrmRawContent_DRM_FORWARD_LOCK /**< forward lock */
-#define JNI_DRM_COMBINED_DELIVERY \
- android_drm_mobile1_DrmRawContent_DRM_COMBINED_DELIVERY /**< combined delivery */
-#define JNI_DRM_SEPARATE_DELIVERY \
- android_drm_mobile1_DrmRawContent_DRM_SEPARATE_DELIVERY /**< separate delivery */
-#define JNI_DRM_SEPARATE_DELIVERY_DM \
- android_drm_mobile1_DrmRawContent_DRM_SEPARATE_DELIVERY_DM /**< separate delivery DRM message */
-#ifdef __cplusplus
-}
-#endif
-#endif /* __DRM1_JNI_H__ */
-
diff --git a/media/libdrm/mobile1/include/objmng/drm_decoder.h b/media/libdrm/mobile1/include/objmng/drm_decoder.h
deleted file mode 100644
index a769c81..0000000
--- a/media/libdrm/mobile1/include/objmng/drm_decoder.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @file drm_decoder.h
- *
- * provide service to decode base64 data.
- *
- * <!-- #interface list begin -->
- * \section drm decoder interface
- * - drm_decodeBase64()
- * <!-- #interface list end -->
- */
-
-#ifndef __DRM_DECODER_H__
-#define __DRM_DECODER_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <drm_common_types.h>
-
-/**
- * Decode base64
- * \param dest dest buffer to save decode base64 data
- * \param destLen dest buffer length
- * \param src source data to be decoded
- * \param srcLen source buffer length, and when return, give out how many bytes has been decoded
- * \return
- * -when success, return a positive integer of dest buffer length,
- * if input dest buffer is NULL or destLen is 0,
- * return dest buffer length that user should allocate to save decoding data
- * -when failed, return -1
- */
-int32_t drm_decodeBase64(uint8_t * dest, int32_t destLen, uint8_t * src, int32_t * srcLen);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __DRM_DECODER_H__ */
diff --git a/media/libdrm/mobile1/include/objmng/drm_file.h b/media/libdrm/mobile1/include/objmng/drm_file.h
deleted file mode 100644
index b94ddd0..0000000
--- a/media/libdrm/mobile1/include/objmng/drm_file.h
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * File Porting Layer.
- */
-#ifndef __DRM_FILE_H__
-#define __DRM_FILE_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <drm_common_types.h>
-
-/** Type value of a regular file or file name. */
-#define DRM_FILE_ISREG 1
-/** Type value of a directory or directory name. */
-#define DRM_FILE_ISDIR 2
-/** Type value of a filter name */
-#define DRM_FILE_ISFILTER 3
-
-
-/** Return code that indicates successful completion of an operation. */
-#define DRM_FILE_SUCCESS 0
-/** Indicates that an operation failed. */
-#define DRM_FILE_FAILURE -1
-/** Indicates that the a DRM_file_read() call reached the end of the file. */
-#define DRM_FILE_EOF -2
-
-
-/** Open for read access. */
-#define DRM_FILE_MODE_READ 1
-/** Open for write access. */
-#define DRM_FILE_MODE_WRITE 2
-
-
-#ifndef MAX_FILENAME_LEN
-/** Maximum number of characters that a filename may have. By default assumes
- * that the entry results of DRM_file_listNextEntry() are returned in the async state
- * buffer, after the #DRM_file_result_s, and calculates the maximum name
- * from that.
- */
-#define MAX_FILENAME_LEN 1024
-#endif
-
-
-/**
- * Performs one-time initialization of the File System (FS).
- * This function is called once during the lifetime of an application,
- * and before any call to <code>DRM_file_*</code> functions by this application.
- * When several applications are using the file interface, this function may be called
- * several times, once per application.
- *
- * @return #DRM_FILE_SUCCESS, #DRM_FILE_FAILURE.
- */
-int32_t DRM_file_startup(void);
-
-/**
- * Returns the length of a file (by name, opened or unopened).
- *
- * @param name Name of the file, UCS-2 encoded.
- * @param nameChars Number characters encoded in name.
- * asynchronous operation returns #DRM_FILE_WOULDBLOCK.
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_FAILURE or the file length.
- */
-int32_t DRM_file_getFileLength(const uint16_t* name,
- int32_t nameChars);
-
-/**
- * Initializes a list iteration session.
- *
- * @param prefix Prefix that must be matched, UCS-2 encoded. *
- * @param prefixChars Number characters encoded in prefix.
- * @param session List session identifier.
- * @param iteration List iteration identifier.
- *
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_SUCCESS, #DRM_FILE_FAILURE.
- */
-int32_t DRM_file_listOpen(const uint16_t* prefix,
- int32_t prefixChars,
- int32_t* session,
- int32_t* iteration);
-
-/**
- * Used to fetch a list of file names that match a given name prefix.
- *
- * @param prefix See DRM_file_listOpen(). This does not change during the
- * iteration session.
- * @param prefixChars See DRM_file_listOpen(). This does not change during
- * the iteration session.
- * @param entry Buffer parameter to return the next file name that matches the
- * #prefix parameter, if any, when the function returns a positive number of
- * characters.
- * @param entryBytes Size of entry in bytes.
- * @param session See DRM_file_listOpen().
- * @param iteration See DRM_file_listOpen().
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_FAILURE or the number of
- * characters encoded in entry. Returns 0 when the end of the list is reached.
- */
-int32_t DRM_file_listNextEntry(const uint16_t* prefix,
- int32_t prefixChars,
- uint16_t* entry,
- int32_t entryBytes,
- int32_t* session,
- int32_t* iteration);
-
-/**
- * Ends a list iteration session. Notifies the implementation
- * that the list session is over and that any session resources
- * can be released.
- *
- * @param session See DRM_file_listOpen().
- * @param iteration See DRM_file_listOpen().
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_SUCCESS, #DRM_FILE_FAILURE.
- */
-int32_t DRM_file_listClose(int32_t session, int32_t iteration);
-
-/**
- * Renames a file, given its old name. The file or directory is renamed
- * immediately on the actual file system upon invocation of this method.
- * Any open handles on the file specified by oldName become invalid after
- * this method has been called.
- *
- * @param oldName Current file name (unopened), UCS-2 encoded.
- * @param oldNameChars Number of characters encoded on oldName.
- * @param newName New name for the file (unopened), UCS-2 encoded.
- * @param newNameChars Number of characters encoded on newName.
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_SUCCESS, #DRM_FILE_FAILURE. In particular,
- * #DRM_FILE_FAILURE if a file or directory already exists with the new name.
- */
-int32_t DRM_file_rename(const uint16_t* oldName,
- int32_t oldNameChars,
- const uint16_t* newName,
- int32_t newNameChars);
-
-/**
- * Tests if a file exists given its name.
- *
- * @param name Name of the file, UCS-2 encoded.
- * @param nameChars Number of characters encoded in name.
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_ISREG, #DRM_FILE_ISDIR, #DRM_FILE_FAILURE. If name
- * exists, returns #DRM_FILE_ISREG if it is a regular file and #DRM_FILE_ISDIR if it is a directory.
- * Returns #DRM_FILE_FAILURE in all other cases, including those where name exists but is neither
- * a regular file nor a directory. Platforms that do not support directories MUST NOT return
- * #DRM_FILE_ISDIR.
- */
-int32_t DRM_file_exists(const uint16_t* name,
- int32_t nameChars);
-
-/**
- * Opens a file with the given name and returns its file handle.
- *
- * @param name Name of the file, UCS-2 encoded.
- * @param nameChars Number of characters encoded in name.
- * @param mode Any combination of the #DRM_FILE_MODE_READ and
- * #DRM_FILE_MODE_WRITE flags. If the file does not exist and mode contains the
- * #DRM_FILE_MODE_WRITE flag, then the file is automatically created. If the
- * file exists and the mode contains the #DRM_FILE_MODE_WRITE flag, the file is
- * opened so it can be modified, but the data is not modified by the open call.
- * In all cases the current position is set to the start of the file.
- * The following table shows how to map the mode semantics above to UNIX
- * fopen-style modes. For brevity in the table, R=#DRM_FILE_MODE_READ,
- * W=#DRM_FILE_MODE_WRITE, E=File exists:
- * <table>
- * <tr><td>RW</td><td>E</td><td>Maps-to</td></tr>
- * <tr><td>00</td><td>0</td><td>Return #DRM_FILE_FAILURE</td></tr>
- * <tr><td>00</td><td>1</td><td>Return #DRM_FILE_FAILURE</td></tr>
- * <tr><td>01</td><td>0</td><td>Use fopen mode "w"</td></tr>
- * <tr><td>01</td><td>1</td><td>Use fopen mode "a" and fseek to the start</td></tr>
- * <tr><td>10</td><td>0</td><td>Return #DRM_FILE_FAILURE</td></tr>
- * <tr><td>10</td><td>1</td><td>Use fopen mode "r"</td></tr>
- * <tr><td>11</td><td>0</td><td>Use fopen mode "w+"</td></tr>
- * <tr><td>11</td><td>1</td><td>Use fopen mode "r+"</td></tr>
- * </table>
- * @param handle Pointer where the result handle value is placed when the function
- * is called synchronously.
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_SUCCESS, #DRM_FILE_FAILURE.
- */
-int32_t DRM_file_open(const uint16_t* name,
- int32_t nameChars,
- int32_t mode,
- int32_t* handle);
-
-/**
- * Deletes a file given its name, UCS-2 encoded. The file or directory is
- * deleted immediately on the actual file system upon invocation of this
- * method. Any open handles on the file specified by name become invalid
- * after this method has been called.
- *
- * If the port needs to ensure that a specific application does not exceed a given storage
- * space quota, then the bytes freed by the deletion must be added to the available space for
- * that application.
- *
- * @param name Name of the file, UCS-2 encoded.
- * @param nameChars Number of characters encoded in name.
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_SUCCESS, #DRM_FILE_FAILURE.
- */
-int32_t DRM_file_delete(const uint16_t* name,
- int32_t nameChars);
-
-/**
- * Read bytes from a file at the current position to a buffer. Afterwards the
- * new file position is the byte after the last byte read.
- * DRM_FILE_FAILURE is returned if the handle is invalid (e.g., as a
- * consquence of DRM_file_delete, DRM_file_rename, or DRM_file_close).
- *
- * @param handle File handle as returned by DRM_file_open().
- * @param dst Buffer where the data is to be copied.
- * @param length Number of bytes to be copied.
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_SUCCESS, #DRM_FILE_FAILURE, #DRM_FILE_EOF
- * or the number of bytes that were read, i.e. in the range 0..length.
- */
-int32_t DRM_file_read(int32_t handle,
- uint8_t* dst,
- int32_t length);
-
-/**
- * Write bytes from a buffer to the file at the current position. If the
- * current position + number of bytes written > current size of the file,
- * then the file is grown. Afterwards the new file position is the byte
- * after the last byte written.
- * DRM_FILE_FAILURE is returned if the handle is invalid (e.g., as a
- * consquence of DRM_file_delete, DRM_file_rename, or DRM_file_close).
- *
- * @param handle File handle as returned by DRM_file_open().
- * @param src Buffer that contains the bytes to be written.
- * @param length Number of bytes to be written.
- * If the port needs to ensure that a specific application does not exceed a given storage
- * space quota, the implementation must make sure the call does not violate that invariant.
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_FAILURE or the number of bytes
- * that were written. This number must be in the range 0..length.
- * Returns #DRM_FILE_FAILURE when storage is full or exceeds quota.
- */
-int32_t DRM_file_write(int32_t handle,
- const uint8_t* src,
- int32_t length);
-
-/**
- * Closes a file.
- * DRM_FILE_SUCCESS is returned if the handle is invalid (e.g., as a
- * consquence of DRM_file_delete or DRM_file_rename).
- *
- * @param handle File handle as returned by DRM_file_open().
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_SUCCESS, #DRM_FILE_FAILURE.
- */
-int32_t DRM_file_close(int32_t handle);
-
-/**
- * Sets the current position in an opened file.
- * DRM_FILE_FAILURE is returned if the handle is invalid (e.g., as a
- * consquence of DRM_file_delete, DRM_file_rename, or DRM_file_close).
- *
- * @param handle File handle as returned by DRM_file_open().
- * @param value The new current position of the file. If value is greater
- * than the length of the file then the file should be extended. The contents
- * of the newly extended portion of the file is undefined.
- * If the port needs to ensure that a specific application does not exceed a given storage
- * space quota, the implementation must make sure the call does not violate that invariant.
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_SUCCESS, #DRM_FILE_FAILURE.
- * Returns #DRM_FILE_FAILURE when storage is full or exceeds quota.
- */
-int32_t DRM_file_setPosition(int32_t handle, int32_t value);
-
-/**
- * Creates a directory with the assigned name and full file permissions on
- * the file system. The full path to the new directory must already exist.
- * The directory is created immediately on the actual file system upon
- * invocation of this method.
- *
- * @param name Name of the directory, UCS-2 encoded.
- * @param nameChars Number of characters encoded in name.
- * @return #DRM_FILE_WOULDBLOCK, #DRM_FILE_SUCCESS, #DRM_FILE_FAILURE.
- */
-int32_t DRM_file_mkdir(const uint16_t* name,
- int32_t nameChars);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __DRM_FILE_H__ */
diff --git a/media/libdrm/mobile1/include/objmng/drm_i18n.h b/media/libdrm/mobile1/include/objmng/drm_i18n.h
deleted file mode 100644
index 7487e9b..0000000
--- a/media/libdrm/mobile1/include/objmng/drm_i18n.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef __DRM_I18N_H__
-#define __DRM_I18N_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <drm_common_types.h>
-
-/**
- * @name Charset value defines
- * @ingroup i18n
- *
- * Charset value defines
- * see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/unicode_81rn.asp
- */
-typedef enum {
- DRM_CHARSET_GBK = 936, /** Simplified Chinese GBK (CP936) */
- DRM_CHARSET_GB2312 = 20936, /** Simplified Chinese GB2312 (CP936) */
- DRM_CHARSET_BIG5 = 950, /** BIG5 (CP950) */
- DRM_CHARSET_LATIN1 = 28591, /** ISO 8859-1, Latin 1 */
- DRM_CHARSET_LATIN2 = 28592, /** ISO 8859-2, Latin 2 */
- DRM_CHARSET_LATIN3 = 28593, /** ISO 8859-3, Latin 3 */
- DRM_CHARSET_LATIN4 = 28594, /** ISO 8859-4, Latin 4 */
- DRM_CHARSET_CYRILLIC = 28595, /** ISO 8859-5, Cyrillic */
- DRM_CHARSET_ARABIC = 28596, /** ISO 8859-6, Arabic */
- DRM_CHARSET_GREEK = 28597, /** ISO 8859-7, Greek */
- DRM_CHARSET_HEBREW = 28598, /** ISO 8859-8, Hebrew */
- DRM_CHARSET_LATIN5 = 28599, /** ISO 8859-9, Latin 5 */
- DRM_CHARSET_LATIN6 = 865, /** ISO 8859-10, Latin 6 (not sure here) */
- DRM_CHARSET_THAI = 874, /** ISO 8859-11, Thai */
- DRM_CHARSET_LATIN7 = 1257, /** ISO 8859-13, Latin 7 (not sure here) */
- DRM_CHARSET_LATIN8 = 38598, /** ISO 8859-14, Latin 8 (not sure here) */
- DRM_CHARSET_LATIN9 = 28605, /** ISO 8859-15, Latin 9 */
- DRM_CHARSET_LATIN10 = 28606, /** ISO 8859-16, Latin 10 */
- DRM_CHARSET_UTF8 = 65001, /** UTF-8 */
- DRM_CHARSET_UTF16LE = 1200, /** UTF-16 LE */
- DRM_CHARSET_UTF16BE = 1201, /** UTF-16 BE */
- DRM_CHARSET_HINDI = 57002, /** Hindi/Mac Devanagari */
- DRM_CHARSET_UNSUPPORTED = -1
-} DRM_Charset_t;
-
-/**
- * Convert multibyte string of specified charset to unicode string.
- * Note NO terminating '\0' will be appended to the output unicode string.
- *
- * @param charset Charset of the multibyte string.
- * @param mbs Multibyte string to be converted.
- * @param mbsLen Number of the bytes (in mbs) to be converted.
- * @param wcsBuf Buffer for the converted unicode characters.
- * If wcsBuf is NULL, the function returns the number of unicode
- * characters required for the buffer.
- * @param bufSizeInWideChar The size (in wide char) of wcsBuf
- * @param bytesConsumed The number of bytes in mbs that have been successfully
- * converted. The value of *bytesConsumed is undefined
- * if wcsBuf is NULL.
- *
- * @return Number of the successfully converted unicode characters if wcsBuf
- * is not NULL. If wcsBuf is NULL, returns required unicode buffer
- * size. -1 for unrecoverable errors.
- */
-int32_t DRM_i18n_mbsToWcs(DRM_Charset_t charset,
- const uint8_t *mbs, int32_t mbsLen,
- uint16_t *wcsBuf, int32_t bufSizeInWideChar,
- int32_t *bytesConsumed);
-
-/**
- * Convert unicode string to multibyte string with specified charset.
- * Note NO terminating '\0' will be appended to the output multibyte string.
- *
- * @param charset Charset of the multibyte string to be converted to.
- * @param wcs Unicode string to be converted.
- * @param wcsLen Number of the unicode characters (in wcs) to be converted.
- * @param mbsBuf Buffer for converted multibyte characters.
- * If mbsBuf is NULL, the function returns the number of bytes
- * required for the buffer.
- * @param bufSizeInByte The size (in byte) of mbsBuf.
- *
- * @return Number of the successfully converted bytes.
- */
-int32_t DRM_i18n_wcsToMbs(DRM_Charset_t charset,
- const uint16_t *wcs, int32_t wcsLen,
- uint8_t *mbsBuf, int32_t bufSizeInByte);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/media/libdrm/mobile1/include/objmng/drm_inner.h b/media/libdrm/mobile1/include/objmng/drm_inner.h
deleted file mode 100644
index 55234f8..0000000
--- a/media/libdrm/mobile1/include/objmng/drm_inner.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __DRM_INNER_H__
-#define __DRM_INNER_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <drm_common_types.h>
-
-#define INT_2_YMD_HMS(year, mon, day, date, hour, min, sec, time) do{\
- year = date / 10000;\
- mon = date % 10000 / 100;\
- day = date %100;\
- hour = time / 10000;\
- min = time % 10000 / 100;\
- sec = time % 100;\
-}while(0)
-
-/**
- * Define the max malloc length for a DRM.
- */
-#define DRM_MAX_MALLOC_LEN (50 * 1024) /* 50K */
-
-#define DRM_ONE_AES_BLOCK_LEN 16
-#define DRM_TWO_AES_BLOCK_LEN 32
-
-typedef struct _T_DRM_DM_Binary_Node {
- uint8_t boundary[256];
-} T_DRM_DM_Binary_Node;
-
-typedef struct _T_DRM_DM_Base64_Node {
- uint8_t boundary[256];
- uint8_t b64DecodeData[4];
- int32_t b64DecodeDataLen;
-} T_DRM_DM_Base64_Node;
-
-typedef struct _T_DRM_Dcf_Node {
- uint8_t rightsIssuer[256];
- int32_t encContentLength;
- uint8_t aesDecData[16];
- int32_t aesDecDataLen;
- int32_t aesDecDataOff;
- uint8_t aesBackupBuf[16];
- int32_t bAesBackupBuf;
-} T_DRM_Dcf_Node;
-
-typedef struct _T_DRM_Session_Node {
- int32_t sessionId;
- int32_t inputHandle;
- int32_t mimeType;
- int32_t (*getInputDataLengthFunc)(int32_t inputHandle);
- int32_t (*readInputDataFunc)(int32_t inputHandle, uint8_t* buf, int32_t bufLen);
- int32_t (*seekInputDataFunc)(int32_t inputHandle, int32_t offset);
- int32_t deliveryMethod;
- int32_t transferEncoding;
- uint8_t contentType[64];
- int32_t contentLength;
- int32_t contentOffset;
- uint8_t contentID[256];
- uint8_t* rawContent;
- int32_t rawContentLen;
- int32_t bEndData;
- uint8_t* readBuf;
- int32_t readBufLen;
- int32_t readBufOff;
- void* infoStruct;
- struct _T_DRM_Session_Node* next;
-} T_DRM_Session_Node;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __DRM_INNER_H__ */
diff --git a/media/libdrm/mobile1/include/objmng/drm_rights_manager.h b/media/libdrm/mobile1/include/objmng/drm_rights_manager.h
deleted file mode 100644
index dd2116c..0000000
--- a/media/libdrm/mobile1/include/objmng/drm_rights_manager.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __DRM_RIGHTS_MANAGER_H__
-#define __DRM_RIGHTS_MANAGER_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <drm_common_types.h>
-#include <parser_rel.h>
-#include <aes.h>
-
-#ifdef DRM_DEVICE_ARCH_ARM
-#define ANDROID_DRM_CORE_PATH "/data/drm/rights/"
-#define DRM_UID_FILE_PATH "/data/drm/rights/uid.txt"
-#else
-#define ANDROID_DRM_CORE_PATH "/home/user/golf/esmertec/device/out/debug/host/linux-x86/product/sim/data/data/com.android.drm.mobile1/"
-#define DRM_UID_FILE_PATH "/home/user/golf/esmertec/device/out/debug/host/linux-x86/product/sim/data/data/com.android.drm.mobile1/uid.txt"
-#endif
-
-#define EXTENSION_NAME_INFO ".info"
-
-#define GET_ID 1
-#define GET_UID 2
-
-#define GET_ROAMOUNT 1
-#define GET_ALL_RO 2
-#define SAVE_ALL_RO 3
-#define GET_A_RO 4
-#define SAVE_A_RO 5
-
-/**
- * Get the id or uid from the "uid.txt" file.
- *
- * \param Uid The content id for a specially DRM object.
- * \param id The id number managed by DRM engine for a specially DRM object.
- * \param option The option to get id or uid, the value includes: GET_ID, GET_UID.
- *
- * \return
- * -TRUE, if the operation successfully.
- * -FALSE, if the operation failed.
- */
-int32_t drm_readFromUidTxt(uint8_t* Uid, int32_t* id, int32_t option);
-
-/**
- * Save or read the rights information on the "id.info" file.
- *
- * \param id The id number managed by DRM engine for a specially DRM object.
- * \param Ro The rights structure to save the rights information.
- * \param RoAmount The number of rights for this DRM object.
- * \param option The option include: GET_ROAMOUNT, GET_ALL_RO, SAVE_ALL_RO, GET_A_RO, SAVE_A_RO.
- *
- * \return
- * -TRUE, if the operation successfully.
- * -FALSE, if the operation failed.
- */
-int32_t drm_writeOrReadInfo(int32_t id, T_DRM_Rights* Ro, int32_t* RoAmount, int32_t option);
-
-/**
- * Append a rights information to DRM engine storage.
- *
- * \param Ro The rights structure to save the rights information.
- *
- * return
- * -TRUE, if the operation successfully.
- * -FALSE, if the operation failed.
- */
-int32_t drm_appendRightsInfo(T_DRM_Rights* rights);
-
-/**
- * Get the mex id number from the "uid.txt" file.
- *
- * \return
- * -an integer to indicate the max id number.
- * -(-1), if the operation failed.
- */
-int32_t drm_getMaxIdFromUidTxt();
-
-/**
- * Remove the "id.info" file if all the rights for this DRM object has been deleted.
- *
- * \param id The id number managed by DRM engine for a specially DRM object.
- *
- * \return
- * -TRUE, if the operation successfully.
- * -FALSE, if the operation failed.
- */
-int32_t drm_removeIdInfoFile(int32_t id);
-
-/**
- * Update the "uid.txt" file when delete the rights object.
- *
- * \param id The id number managed by DRM engine for a specially DRM object.
- *
- * \return
- * -TRUE, if the operation successfully.
- * -FALSE, if the operation failed.
- */
-int32_t drm_updateUidTxtWhenDelete(int32_t id);
-
-/**
- * Get the CEK according the given content id.
- *
- * \param uid The content id for a specially DRM object.
- * \param KeyValue The buffer to save the CEK.
- *
- * \return
- * -TRUE, if the operation successfully.
- * -FALSE, if the operation failed.
- */
-int32_t drm_getKey(uint8_t* uid, uint8_t* KeyValue);
-
-/**
- * Discard the padding bytes in DCF decrypted data.
- *
- * \param decryptedBuf The aes decrypted data buffer to be scanned.
- * \param decryptedBufLen The length of the buffer. And save the output result.
- *
- * \return
- * -0
- */
-void drm_discardPaddingByte(uint8_t *decryptedBuf, int32_t *decryptedBufLen);
-
-/**
- * Decrypt the media data according the CEK.
- *
- * \param Buffer The buffer to decrypted and also used to save the output data.
- * \param BufferLen The length of the buffer data and also save the output data length.
- * \param ctx The structure of the CEK.
- *
- * \return
- * -0
- */
-int32_t drm_aesDecBuffer(uint8_t * Buffer, int32_t * BufferLen, aes_decrypt_ctx ctx[1]);
-
-/**
- * Update the DCF data length according the CEK.
- *
- * \param pDcfLastData The last several byte for the DCF.
- * \param keyValue The CEK of the DRM content.
- * \param moreBytes Output the more bytes for discarded.
- *
- * \return
- * -TRUE, if the operation successfully.
- * -FALSE, if the operation failed.
- */
-int32_t drm_updateDcfDataLen(uint8_t* pDcfLastData, uint8_t* keyValue, int32_t* moreBytes);
-
-/**
- * Check and update the rights for a specially DRM content.
- *
- * \param id The id number managed by DRM engine for a specially DRM object.
- * \param permission The permission to be check and updated.
- *
- * \return
- * -DRM_SUCCESS, if there is a valid rights and update it successfully.
- * -DRM_NO_RIGHTS, if there is no rights for this content.
- * -DRM_RIGHTS_PENDING, if the rights is pending.
- * -DRM_RIGHTS_EXPIRED, if the rights has expired.
- * -DRM_RIGHTS_FAILURE, if there is some other error occur.
- */
-int32_t drm_checkRoAndUpdate(int32_t id, int32_t permission);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __DRM_RIGHTS_MANAGER_H__ */
diff --git a/media/libdrm/mobile1/include/objmng/drm_time.h b/media/libdrm/mobile1/include/objmng/drm_time.h
deleted file mode 100644
index 9b013e6..0000000
--- a/media/libdrm/mobile1/include/objmng/drm_time.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * @file
- * Time Porting Layer
- *
- * Basic support functions that are needed by time.
- *
- * <!-- #interface list begin -->
- * \section drm_time Interface
- * - DRM_time_getElapsedSecondsFrom1970()
- * - DRM_time_sleep()
- * - DRM_time_getSysTime()
- * <!-- #interface list end -->
- */
-
-#ifndef __DRM_TIME_H__
-#define __DRM_TIME_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <time.h>
-#include <drm_common_types.h>
-
-/** the time format */
-typedef struct __db_system_time_
-{
- uint16_t year;
- uint16_t month;
- uint16_t day;
- uint16_t hour;
- uint16_t min;
- uint16_t sec;
-} T_DB_TIME_SysTime;
-
-/**
- * Get the system time.it's up to UTC
- * \return Return the time in elapsed seconds.
- */
-uint32_t DRM_time_getElapsedSecondsFrom1970(void);
-
-/**
- * Suspend the execution of the current thread for a specified interval
- * \param ms suspended time by millisecond
- */
-void DRM_time_sleep(uint32_t ms);
-
-/**
- * function: get current system time
- * \param time_ptr[OUT] the system time got
- * \attention
- * time_ptr must not be NULL
- */
-void DRM_time_getSysTime(T_DB_TIME_SysTime *time_ptr);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __DRM_TIME_H__ */
diff --git a/media/libdrm/mobile1/include/objmng/svc_drm.h b/media/libdrm/mobile1/include/objmng/svc_drm.h
deleted file mode 100644
index 789343f..0000000
--- a/media/libdrm/mobile1/include/objmng/svc_drm.h
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __SVC_DRM_NEW_H__
-#define __SVC_DRM_NEW_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <drm_common_types.h>
-
-/**
- * Define the mime type of DRM data.
- */
-#define TYPE_DRM_MESSAGE 0x48 /**< The mime type is "application/vnd.oma.drm.message" */
-#define TYPE_DRM_CONTENT 0x49 /**< The mime type is "application/vnd.oma.drm.content" */
-#define TYPE_DRM_RIGHTS_XML 0x4a /**< The mime type is "application/vnd.oma.drm.rights+xml" */
-#define TYPE_DRM_RIGHTS_WBXML 0x4b /**< The mime type is "application/vnd.oma.drm.rights+wbxml" */
-#define TYPE_DRM_UNKNOWN 0xff /**< The mime type is unknown */
-
-/**
- * Define the delivery methods.
- */
-#define FORWARD_LOCK 1 /**< Forward_lock */
-#define COMBINED_DELIVERY 2 /**< Combined delivery */
-#define SEPARATE_DELIVERY 3 /**< Separate delivery */
-#define SEPARATE_DELIVERY_FL 4 /**< Separate delivery but DCF is forward-lock */
-
-/**
- * Define the permissions.
- */
-#define DRM_PERMISSION_PLAY 0x01 /**< Play */
-#define DRM_PERMISSION_DISPLAY 0x02 /**< Display */
-#define DRM_PERMISSION_EXECUTE 0x04 /**< Execute */
-#define DRM_PERMISSION_PRINT 0x08 /**< Print */
-#define DRM_PERMISSION_FORWARD 0x10 /**< Forward */
-
-/**
- * Define the constraints.
- */
-#define DRM_NO_CONSTRAINT 0x80 /**< Indicate have no constraint, it can use freely */
-#define DRM_END_TIME_CONSTRAINT 0x08 /**< Indicate have end time constraint */
-#define DRM_INTERVAL_CONSTRAINT 0x04 /**< Indicate have interval constraint */
-#define DRM_COUNT_CONSTRAINT 0x02 /**< Indicate have count constraint */
-#define DRM_START_TIME_CONSTRAINT 0x01 /**< Indicate have start time constraint */
-#define DRM_NO_PERMISSION 0x00 /**< Indicate no rights */
-
-/**
- * Define the return values for those interface.
- */
-#define DRM_SUCCESS 0
-#define DRM_FAILURE -1
-#define DRM_MEDIA_EOF -2
-#define DRM_RIGHTS_DATA_INVALID -3
-#define DRM_MEDIA_DATA_INVALID -4
-#define DRM_SESSION_NOT_OPENED -5
-#define DRM_NO_RIGHTS -6
-#define DRM_NOT_SD_METHOD -7
-#define DRM_RIGHTS_PENDING -8
-#define DRM_RIGHTS_EXPIRED -9
-#define DRM_UNKNOWN_DATA_LEN -10
-
-/**
- * The input DRM data structure, include DM, DCF, DR, DRC.
- */
-typedef struct _T_DRM_Input_Data {
- /**
- * The handle of the input DRM data.
- */
- int32_t inputHandle;
-
- /**
- * The mime type of the DRM data, if the mime type set to unknown, DRM engine
- * will try to scan the input data to confirm the mime type, but we must say that
- * the scan and check of mime type is not strictly precise.
- */
- int32_t mimeType;
-
- /**
- * The function to get input data length, this function should be implement by out module,
- * and DRM engine will call-back it.
- *
- * \param inputHandle The handle of the DRM data.
- *
- * \return
- * -A positive integer indicate the length of input data.
- * -0, if some error occurred.
- */
- int32_t (*getInputDataLength)(int32_t inputHandle);
-
- /**
- * The function to read the input data, this function should be implement by out module,
- * and DRM engine will call-back it.
- *
- * \param inputHandle The handle of the DRM data.
- * \param buf The buffer mallocced by DRM engine to save the data.
- * \param bufLen The length of the buffer.
- *
- * \return
- * -A positive integer indicate the actually length of byte has been read.
- * -0, if some error occurred.
- * -(-1), if reach to the end of the data.
- */
- int32_t (*readInputData)(int32_t inputHandle, uint8_t* buf, int32_t bufLen);
-
- /**
- * The function to seek the current file pointer, this function should be implement by out module,
- * and DRM engine will call-back it.
- *
- * \param inputHandle The handle of the DRM data.
- * \param offset The offset from the start position to be seek.
- *
- * \return
- * -0, if seek operation success.
- * -(-1), if seek operation fail.
- */
- int32_t (*seekInputData)(int32_t inputHandle, int32_t offset);
-} T_DRM_Input_Data;
-
-/**
- * The constraint structure.
- */
-typedef struct _T_DRM_Constraint_Info {
- uint8_t indicator; /**< Whether there is a right */
- uint8_t unUsed[3];
- int32_t count; /**< The constraint of count */
- int32_t startDate; /**< The constraint of start date */
- int32_t startTime; /**< The constraint of start time */
- int32_t endDate; /**< The constraint of end date */
- int32_t endTime; /**< The constraint of end time */
- int32_t intervalDate; /**< The constraint of interval date */
- int32_t intervalTime; /**< The constraint of interval time */
-} T_DRM_Constraint_Info;
-
-/**
- * The rights permission and constraint information structure.
- */
-typedef struct _T_DRM_Rights_Info {
- uint8_t roId[256]; /**< The unique id for a specially rights object */
- T_DRM_Constraint_Info playRights; /**< Constraint of play */
- T_DRM_Constraint_Info displayRights; /**< Constraint of display */
- T_DRM_Constraint_Info executeRights; /**< Constraint of execute */
- T_DRM_Constraint_Info printRights; /**< Constraint of print */
-} T_DRM_Rights_Info;
-
-/**
- * The list node of the Rights information structure.
- */
-typedef struct _T_DRM_Rights_Info_Node {
- T_DRM_Rights_Info roInfo;
- struct _T_DRM_Rights_Info_Node *next;
-} T_DRM_Rights_Info_Node;
-
-/**
- * Install a rights object to DRM engine, include the rights in Combined Delivery cases.
- * Because all the rights object is managed by DRM engine, so every incoming rights object
- * must be install to the engine first, or the DRM engine will not recognize it.
- *
- * \param data The rights object data or Combined Delivery case data.
- * \param pRightsInfo The structure to save this rights information.
- *
- * \return
- * -DRM_SUCCESS, when install successfully.
- * -DRM_RIGHTS_DATA_INVALID, when the input rights data is invalid.
- * -DRM_FAILURE, when some other error occur.
- */
-int32_t SVC_drm_installRights(T_DRM_Input_Data data, T_DRM_Rights_Info* pRightsInfo);
-
-/**
- * Open a session for a special DRM object, it will parse the input DRM data, and then user
- * can try to get information for this DRM object, or try to use it if the rights is valid.
- *
- * \param data The DRM object data, DM or DCF.
- *
- * \return
- * -A handle for this opened DRM object session.
- * -DRM_MEDIA_DATA_INVALID, when the input DRM object data is invalid.
- * -DRM_FAILURE, when some other error occurred.
- */
-int32_t SVC_drm_openSession(T_DRM_Input_Data data);
-
-/**
- * Get the delivery method of the DRM object.
- *
- * \param session The handle for this DRM object session.
- *
- * \return
- * -The delivery method of this DRM object, include: FORWARD_LOCK, COMBINED_DELIVERY, SEPARATE_DELIVERY, SEPARATE_DELIVERY_FL.
- * -DRM_FAILURE, when some other error occurred.
- */
-int32_t SVC_drm_getDeliveryMethod(int32_t session);
-
-/**
- * Get DRM object media object content type.
- *
- * \param session The handle for this DRM object session.
- * \param mediaType The buffer to save the media type string, 64 bytes is enough.
- *
- * \return
- * -DRM_SUCCESS, when get the media object content type successfully.
- * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_getContentType(int32_t session, uint8_t* mediaType);
-
-/**
- * Check whether a specific DRM object has the specific permission rights or not.
- *
- * \param session The handle for this DRM object session.
- * \param permission Specify the permission to be checked.
- *
- * \return
- * -DRM_SUCCESS, when it has the rights for the permission.
- * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed.
- * -DRM_NO_RIGHTS, when it has no rights.
- * -DRM_RIGHTS_PENDING, when it has the rights, but currently it is pending.
- * -DRM_RIGHTS_EXPIRED, when the rights has expired.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_checkRights(int32_t session, int32_t permission);
-
-/**
- * Consume the rights when try to use the DRM object.
- *
- * \param session The handle for this DRM object session.
- * \param permission Specify the permission to be checked.
- *
- * \return
- * -DRM_SUCCESS, when consume rights successfully.
- * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed.
- * -DRM_NO_RIGHTS, when it has no rights.
- * -DRM_RIGHTS_PENDING, when it has the rights, but currently it is pending.
- * -DRM_RIGHTS_EXPIRED, when the rights has expired.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_consumeRights(int32_t session, int32_t permission);
-
-/**
- * Get DRM media object content data length.
- *
- * \param session The handle for this DRM object session.
- *
- * \return
- * -A positive integer indicate the length of the media object content data.
- * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed.
- * -DRM_NO_RIGHTS, when the rights object is not existed.
- * -DRM_UNKNOWN_DATA_LEN, when DRM object media data length is unknown in case of DCF has no rights.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_getContentLength(int32_t session);
-
-/**
- * Get DRM media object content data. Support get the data piece by piece if the content is too large.
- *
- * \param session The handle for this DRM object session.
- * \param offset The offset to start to get content.
- * \param mediaBuf The buffer to save media object data.
- * \param mediaBufLen The length of the buffer.
- *
- * \return
- * -A positive integer indicate the actually length of the data has been got.
- * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed.
- * -DRM_NO_RIGHTS, when the rights object is not existed.
- * -DRM_MEDIA_EOF, when reach to the end of the media data.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_getContent(int32_t session, int32_t offset, uint8_t* mediaBuf, int32_t mediaBufLen);
-
-/**
- * Get the rights issuer address, this interface is specially for Separate Delivery method.
- *
- * \param session The handle for this DRM object session.
- * \param rightsIssuer The buffer to save rights issuer, 256 bytes are enough.
- *
- * \return
- * -DRM_SUCCESS, when get the rights issuer successfully.
- * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed.
- * -DRM_NOT_SD_METHOD, when it is not a Separate Delivery DRM object.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_getRightsIssuer(int32_t session, uint8_t* rightsIssuer);
-
-/**
- * Get DRM object constraint informations.
- *
- * \param session The handle for this DRM object session.
- * \param rights The structue to save the rights object information.
- *
- * \return
- * -DRM_SUCCESS, when get the rights information successfully.
- * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed.
- * -DRM_NO_RIGHTS, when this DRM object has not rights.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_getRightsInfo(int32_t session, T_DRM_Rights_Info* rights);
-
-/**
- * Close the opened session, after closed, the handle become invalid.
- *
- * \param session The handle for this DRM object session.
- *
- * \return
- * -DRM_SUCCESS, when close operation success.
- * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_closeSession(int32_t session);
-
-/**
- * Check and update the given rights according the given permission.
- *
- * \param contentID The unique id of the rights object.
- * \param permission The permission to be updated.
- *
- * \return
- * -DRM_SUCCESS, when update operation success.
- * -DRM_NO_RIGHTS, when it has no rights.
- * -DRM_RIGHTS_PENDING, when it has the rights, but currently it is pending.
- * -DRM_RIGHTS_EXPIRED, when the rights has expired.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_updateRights(uint8_t* contentID, int32_t permission);
-
-/**
- * Scan all the rights object in current DRM engine, and get all their information.
- *
- * \param ppRightsInfo The pointer to the list structure to save rights info.
- *
- * \return
- * -DRM_SUCCESS, when get information successfully.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_viewAllRights(T_DRM_Rights_Info_Node **ppRightsInfo);
-
-/**
- * Free the allocated memory when call "SVC_drm_viewAllRights".
- *
- * \param pRightsHeader The header pointer of the list to be free.
- *
- * \return
- * -DRM_SUCCESS, when free operation successfully.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_freeRightsInfoList(T_DRM_Rights_Info_Node *pRightsHeader);
-
-/**
- * Delete a specify rights.
- *
- * \param roId The unique id of the rights.
- *
- * \return
- * -DRM_SUCCESS, when free operation successfully.
- * -DRM_NO_RIGHTS, when there is not this rights object.
- * -DRM_FAILURE, when some other error occured.
- */
-int32_t SVC_drm_deleteRights(uint8_t* roId);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __SVC_DRM_NEW_H__ */
diff --git a/media/libdrm/mobile1/include/parser/parser_dcf.h b/media/libdrm/mobile1/include/parser/parser_dcf.h
deleted file mode 100644
index c63a195..0000000
--- a/media/libdrm/mobile1/include/parser/parser_dcf.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __PARSER_DCF_H__
-#define __PARSER_DCF_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <drm_common_types.h>
-
-#define MAX_ENCRYPTION_METHOD_LEN 64
-#define MAX_RIGHTS_ISSUER_LEN 256
-#define MAX_CONTENT_NAME_LEN 64
-#define MAX_CONTENT_DESCRIPTION_LEN 256
-#define MAX_CONTENT_VENDOR_LEN 256
-#define MAX_ICON_URI_LEN 256
-#define MAX_CONTENT_TYPE_LEN 64
-#define MAX_CONTENT_URI_LEN 256
-
-#define HEADER_ENCRYPTION_METHOD "Encryption-Method: "
-#define HEADER_RIGHTS_ISSUER "Rights-Issuer: "
-#define HEADER_CONTENT_NAME "Content-Name: "
-#define HEADER_CONTENT_DESCRIPTION "Content-Description: "
-#define HEADER_CONTENT_VENDOR "Content-Vendor: "
-#define HEADER_ICON_URI "Icon-Uri: "
-
-#define HEADER_ENCRYPTION_METHOD_LEN 19
-#define HEADER_RIGHTS_ISSUER_LEN 15
-#define HEADER_CONTENT_NAME_LEN 14
-#define HEADER_CONTENT_DESCRIPTION_LEN 21
-#define HEADER_CONTENT_VENDOR_LEN 16
-#define HEADER_ICON_URI_LEN 10
-
-#define UINT_VAR_FLAG 0x80
-#define UINT_VAR_DATA 0x7F
-#define MAX_UINT_VAR_BYTE 5
-#define DRM_UINT_VAR_ERR -1
-
-typedef struct _T_DRM_DCF_Info {
- uint8_t Version;
- uint8_t ContentTypeLen; /**< Length of the ContentType field */
- uint8_t ContentURILen; /**< Length of the ContentURI field */
- uint8_t unUsed;
- uint8_t ContentType[MAX_CONTENT_TYPE_LEN]; /**< The MIME media type of the plaintext data */
- uint8_t ContentURI[MAX_CONTENT_URI_LEN]; /**< The unique identifier of this content object */
- int32_t HeadersLen; /**< Length of the Headers field */
- int32_t EncryptedDataLen; /**< Length of the encrypted data field */
- int32_t DecryptedDataLen; /**< Length of the decrypted data field */
- uint8_t Encryption_Method[MAX_ENCRYPTION_METHOD_LEN]; /**< Encryption method */
- uint8_t Rights_Issuer[MAX_RIGHTS_ISSUER_LEN]; /**< Rights issuer */
- uint8_t Content_Name[MAX_CONTENT_NAME_LEN]; /**< Content name */
- uint8_t ContentDescription[MAX_CONTENT_DESCRIPTION_LEN]; /**< Content description */
- uint8_t ContentVendor[MAX_CONTENT_VENDOR_LEN]; /**< Content vendor */
- uint8_t Icon_URI[MAX_ICON_URI_LEN]; /**< Icon URI */
-} T_DRM_DCF_Info;
-
-/**
- * Parse the DRM content format data
- *
- * \param buffer (in)Input the DCF format data
- * \param bufferLen (in)The input buffer length
- * \param pDcfInfo (out)A structure pointer which contain information of DCF headers
- * \param ppEncryptedData (out)The location of encrypted data
- *
- * \return
- * -TRUE, when success
- * -FALSE, when failed
- */
-int32_t drm_dcfParser(uint8_t *buffer, int32_t bufferLen, T_DRM_DCF_Info *pDcfInfo,
- uint8_t **ppEncryptedData);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __PARSER_DCF_H__ */
diff --git a/media/libdrm/mobile1/include/parser/parser_dm.h b/media/libdrm/mobile1/include/parser/parser_dm.h
deleted file mode 100644
index ec8b6b2..0000000
--- a/media/libdrm/mobile1/include/parser/parser_dm.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __PARSER_DM_H__
-#define __PARSER_DM_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <drm_common_types.h>
-
-#define MAX_CONTENT_TYPE_LEN 64
-#define MAX_CONTENT_ID 256
-#define MAX_CONTENT_BOUNDARY_LEN 256
-#define MAX_RIGHTS_ISSUER_LEN 256
-
-#define DRM_MIME_TYPE_RIGHTS_XML "application/vnd.oma.drm.rights+xml"
-#define DRM_MIME_TYPE_CONTENT "application/vnd.oma.drm.content"
-
-#define HEADERS_TRANSFER_CODING "Content-Transfer-Encoding:"
-#define HEADERS_CONTENT_TYPE "Content-Type:"
-#define HEADERS_CONTENT_ID "Content-ID:"
-
-#define TRANSFER_CODING_TYPE_7BIT "7bit"
-#define TRANSFER_CODING_TYPE_8BIT "8bit"
-#define TRANSFER_CODING_TYPE_BINARY "binary"
-#define TRANSFER_CODING_TYPE_BASE64 "base64"
-
-#define DRM_UID_TYPE_FORWORD_LOCK "forwardlock"
-#define DRM_NEW_LINE_CRLF "\r\n"
-
-#define HEADERS_TRANSFER_CODING_LEN 26
-#define HEADERS_CONTENT_TYPE_LEN 13
-#define HEADERS_CONTENT_ID_LEN 11
-
-#define DRM_MESSAGE_CODING_7BIT 0 /* default */
-#define DRM_MESSAGE_CODING_8BIT 1
-#define DRM_MESSAGE_CODING_BINARY 2
-#define DRM_MESSAGE_CODING_BASE64 3
-
-#define DRM_B64_DEC_BLOCK 3
-#define DRM_B64_ENC_BLOCK 4
-
-typedef struct _T_DRM_DM_Info {
- uint8_t contentType[MAX_CONTENT_TYPE_LEN]; /**< Content type */
- uint8_t contentID[MAX_CONTENT_ID]; /**< Content ID */
- uint8_t boundary[MAX_CONTENT_BOUNDARY_LEN]; /**< DRM message's boundary */
- uint8_t deliveryType; /**< The Delivery type */
- uint8_t transferEncoding; /**< Transfer encoding type */
- int32_t contentOffset; /**< The offset of the media content from the original DRM data */
- int32_t contentLen; /**< The length of the media content */
- int32_t rightsOffset; /**< The offset of the rights object in case of combined delivery */
- int32_t rightsLen; /**< The length of the rights object in case of combined delivery */
- uint8_t rightsIssuer[MAX_RIGHTS_ISSUER_LEN];/**< The rights issuer address in case of separate delivery */
-} T_DRM_DM_Info;
-
-/**
- * Search the string in a limited length.
- *
- * \param str The original string
- * \param strSearch The sub-string to be searched
- * \param len The length limited
- *
- * \return
- * -NULL, when there is not the searched string in length
- * -The pointer of this sub-string
- */
-const uint8_t* drm_strnstr(const uint8_t* str, const uint8_t* strSearch, int32_t len);
-
-/**
- * Parse the DRM message format data.
- *
- * \param buffer (in)Input the DRM message format data
- * \param bufferLen (in)The input buffer length
- * \param pDmInfo (out)A structure pointer which contain information of DRM message headers
- *
- * \return
- * -TRUE, when success
- * -FALSE, when failed
- */
-int32_t drm_parseDM(const uint8_t* buffer, int32_t bufferLen, T_DRM_DM_Info* pDmInfo);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __PARSER_DM_H__ */
diff --git a/media/libdrm/mobile1/include/parser/parser_rel.h b/media/libdrm/mobile1/include/parser/parser_rel.h
deleted file mode 100644
index 8def199..0000000
--- a/media/libdrm/mobile1/include/parser/parser_rel.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __PARSER_REL_H__
-#define __PARSER_REL_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <drm_common_types.h>
-
-#define WRITE_RO_FLAG(whoIsAble, boolValue, Indicator, RIGHTS) do{\
- whoIsAble = boolValue;\
- Indicator |= RIGHTS;\
-}while(0)
-
-#define CHECK_VALIDITY(ret) do{\
- if(ret == NULL){\
- if(XML_ERROR_NO_SUCH_NODE != xml_errno)\
- return FALSE;\
- }\
- else\
- {\
- if(XML_ERROR_OK != xml_errno)\
- return FALSE;\
- }\
-}while(0)
-
-#define YMD_HMS_2_INT(year, mon, day, date, hour, min, sec, time) do{\
- date = year * 10000 + mon * 100 + day;\
- time = hour * 10000 + min * 100 + sec;\
-}while(0)
-
-#define DRM_UID_LEN 256
-#define DRM_KEY_LEN 16
-
-#define XML_DOM_PARSER
-
-typedef struct _T_DRM_DATETIME {
- int32_t date; /**< year * 10000 + mon *100 + day */
- int32_t time; /**< hour * 10000 + min *100 + sec */
-} T_DRM_DATETIME;
-
-typedef struct _T_DRM_Rights_Constraint {
- uint8_t Indicator; /**< Indicate which is constrainted, the first one indicate 0001, second one indicate 0010 */
- uint8_t unUsed[3];
- int32_t Count; /**< The times that can be used */
- T_DRM_DATETIME StartTime; /**< The starting time */
- T_DRM_DATETIME EndTime; /**< The ending time */
- T_DRM_DATETIME Interval; /**< The interval time */
-} T_DRM_Rights_Constraint;
-
-typedef struct _T_DRM_Rights {
- uint8_t Version[8]; /**< Version number */
- uint8_t uid[256]; /**< record the rights object name */
- uint8_t KeyValue[16]; /**< Decode base64 */
- int32_t bIsPlayable; /**< Is playable */
- int32_t bIsDisplayable; /**< Is displayable */
- int32_t bIsExecuteable; /**< Is executeable */
- int32_t bIsPrintable; /**< Is printable */
- T_DRM_Rights_Constraint PlayConstraint; /**< Play constraint */
- T_DRM_Rights_Constraint DisplayConstraint; /**< Display constraint */
- T_DRM_Rights_Constraint ExecuteConstraint; /**< Execute constraint */
- T_DRM_Rights_Constraint PrintConstraint; /**< Print constraint */
-} T_DRM_Rights;
-
-/**
- * Input year and month, return how many days that month have
- * \param year (in)Input the year
- * \param month (in)Input the month
- * \return
- * -A positive integer, which is how many days that month have
- * -When wrong input, return -1
- */
-int32_t drm_monthDays(int32_t year, int32_t month);
-
-/**
- * Check whether the date and time is valid.
- * \param year year of the date
- * \param month month of the date
- * \param day day of the date
- * \param hour hour of the time
- * \param min minute of the time
- * \param sec second of the time
- * \return
- * -when it is a valid time, return 0
- * -when it is a invalid time, return -1
- */
-int32_t drm_checkDate(int32_t year, int32_t month, int32_t day, int32_t hour, int32_t min, int32_t sec);
-
-/**
- * Parse the rights object include xml format and wbxml format data
- *
- * \param buffer (in)Input the DRM rights object data
- * \param bufferLen (in)The buffer length
- * \param format (in)Which format, xml or wbxml
- * \param pRights (out)A structure pointer which save the rights information
- *
- * \return
- * -TRUE, when success
- * -FALSE, when failed
- */
-int32_t drm_relParser(uint8_t* buffer, int32_t bufferLen, int32_t Format, T_DRM_Rights* pRights);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __PARSER_REL_H__ */
diff --git a/media/libdrm/mobile1/include/xml/wbxml_tinyparser.h b/media/libdrm/mobile1/include/xml/wbxml_tinyparser.h
deleted file mode 100644
index 1c40467..0000000
--- a/media/libdrm/mobile1/include/xml/wbxml_tinyparser.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __WBXML_TINYPARSER_H__
-#define __WBXML_TINYPARSER_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <drm_common_types.h>
-
-#define REL_TAG_RIGHTS 0x05
-#define REL_TAG_CONTEXT 0x06
-#define REL_TAG_VERSION 0x07
-#define REL_TAG_UID 0x08
-#define REL_TAG_AGREEMENT 0x09
-#define REL_TAG_ASSET 0x0A
-#define REL_TAG_KEYINFO 0x0B
-#define REL_TAG_KEYVALUE 0x0C
-#define REL_TAG_PERMISSION 0x0D
-#define REL_TAG_PLAY 0x0E
-#define REL_TAG_DISPLAY 0x0F
-#define REL_TAG_EXECUTE 0x10
-#define REL_TAG_PRINT 0x11
-#define REL_TAG_CONSTRAINT 0x12
-#define REL_TAG_COUNT 0x13
-#define REL_TAG_DATETIME 0x14
-#define REL_TAG_START 0x15
-#define REL_TAG_END 0x16
-#define REL_TAG_INTERVAL 0x17
-
-#define REL_CHECK_WBXML_HEADER(x) ((x != NULL) && (x[0] == 0x03) && (x[1] == 0x0E) && (x[2] == 0x6A))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __WBXML_TINYPARSER_H__ */
diff --git a/media/libdrm/mobile1/include/xml/xml_tinyParser.h b/media/libdrm/mobile1/include/xml/xml_tinyParser.h
deleted file mode 100644
index 4ad65b8..0000000
--- a/media/libdrm/mobile1/include/xml/xml_tinyParser.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __XML_TINYPARSER_H__
-#define __XML_TINYPARSER_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <drm_common_types.h>
-
-#define XML_DOM_PARSER
-#define WBXML_DOM_PARSER
-#define XML_DOM_CHECK_ENDTAG
-#define XML_ENABLE_ERRNO
-#define WBXML_OLD_VERSION /* for drm only */
-
-#ifdef DEBUG_MODE
-void XML_PrintMallocInfo();
-#endif /* DEBUG_MODE */
-
-#define XML_TRUE 1
-#define XML_FALSE 0
-#define XML_EOF 0
-#define XML_TAG_START 0
-#define XML_TAG_END 1
-#define XML_TAG_SELF 2
-
-#define XML_MAX_PROPERTY_LEN 256
-#define XML_MAX_ATTR_NAME_LEN 256
-#define XML_MAX_ATTR_VALUE_LEN 256
-#define XML_MAX_VALUE_LEN 256
-
-#define XML_ERROR_OK 0
-#define XML_ERROR_BUFFER_NULL -1
-#define XML_ERROR_ATTR_NAME -2
-#define XML_ERROR_ATTR_MISSED_EQUAL -3
-#define XML_ERROR_PROPERTY_NAME -4
-#define XML_ERROR_ATTR_VALUE -5
-#define XML_ERROR_ENDTAG -6
-#define XML_ERROR_NO_SUCH_NODE -7
-#define XML_ERROR_PROPERTY_END -8
-#define XML_ERROR_VALUE -9
-#define XML_ERROR_NO_START_TAG -14
-#define XML_ERROR_NOVALUE -15
-
-#define WBXML_ERROR_MISSED_CONTENT -10
-#define WBXML_ERROR_MBUINT32 -11
-#define WBXML_ERROR_MISSED_STARTTAG -12
-#define WBXML_ERROR_MISSED_ENDTAG -13
-
-#ifdef XML_ENABLE_ERRNO
-extern int32_t xml_errno;
-#define XML_ERROR(x) do { xml_errno = x; } while (0)
-#else /* XML_ENABLE_ERRNO */
-#define XML_ERROR
-#endif /* XML_ENABLE_ERRNO */
-
-#ifdef XML_DOM_PARSER
-uint8_t *XML_DOM_getNode(uint8_t *buffer, const uint8_t *const node);
-uint8_t *XML_DOM_getNodeValue(uint8_t *buffer, uint8_t *node,
- uint8_t **value, int32_t *valueLen);
-
-uint8_t *XML_DOM_getValue(uint8_t *buffer, uint8_t **pValue, int32_t *valueLen);
-uint8_t *XML_DOM_getAttr(uint8_t *buffer, uint8_t **pName, int32_t *nameLen,
- uint8_t **pValue, int32_t *valueLen);
-
-uint8_t *XML_DOM_getNextNode(uint8_t *buffer, uint8_t **pNodeName,
- int32_t *nodenameLen);
-
-uint8_t *XML_DOM_getTag(uint8_t *buffer, int32_t *tagLen, int32_t *tagType);
-#endif /* XML_DOM_PARSER */
-
-#ifdef WBXML_DOM_PARSER
-
-#define WBXML_WITH_ATTR 0x80
-#define WBXML_WITH_CONTENT 0x40
-#define WBXML_ATTR_END 0x01
-#define WBXML_CONTENT_END 0x01
-
-#define WBXML_SWITCH_PAGE 0x00
-#define WBXML_STR_I 0x03
-#define WBXML_END 0x00
-#define WBXML_OPAUE 0xC3
-#define WBXML_STR_T 0x83
-#define WBXML_OPAQUE 0xC3
-
-#define WBXML_GET_TAG(x) ((x) & 0x3F) /* get 6-digits */
-#define WBXML_HAS_ATTR(x) ((x) & WBXML_WITH_ATTR)
-#define WBXML_HAS_CONTENT(x) ((x) & WBXML_WITH_CONTENT)
-
-typedef struct _WBXML {
- uint8_t version;
- uint8_t unUsed[3];
- uint32_t publicid;
- uint32_t charset;
- int32_t strTableLen;
- uint8_t *strTable;
- uint8_t *Content;
- uint8_t *End;
- uint8_t *curPtr;
- int32_t depth;
-} WBXML;
-
-typedef int32_t XML_BOOL;
-
-#ifdef WBXML_OLD_VERSION
-uint8_t *WBXML_DOM_getNode(uint8_t *buffer, int32_t bufferLen,
- uint8_t *node);
-uint8_t *WBXML_DOM_getNodeValue(uint8_t *buffer, int32_t bufferLen,
- uint8_t *node,
- uint8_t **value,
- int32_t *valueLen);
-#endif /* WBXML_OLD_VERSION */
-
-XML_BOOL WBXML_DOM_Init(WBXML * pWbxml, uint8_t *buffer,
- int32_t bufferLen);
-XML_BOOL WBXML_DOM_Eof(WBXML * pWbxml);
-uint8_t WBXML_DOM_GetTag(WBXML * pWbxml);
-uint8_t WBXML_DOM_GetChar(WBXML * pWbxml);
-uint8_t WBXML_DOM_GetUIntVar(WBXML * pWbxml);
-void WBXML_DOM_Rewind(WBXML * pWbxml);
-void WBXML_DOM_Seek(WBXML * pWbxml, int32_t offset);
-int32_t WBXML_GetUintVar(const uint8_t *const buffer, int32_t *len);
-
-#endif /* WBXML_DOM_PARSER */
-
-#ifdef XML_TREE_STRUCTURE
-
-typedef struct _XML_TREE_ATTR XML_TREE_ATTR;
-struct _XML_TREE_ATTR {
- uint8_t name[XML_MAX_ATTR_VALUE_LEN];
- uint8_t value[XML_MAX_ATTR_VALUE_LEN];
- XML_TREE_ATTR *next;
-};
-
-typedef struct _XML_TREE XML_TREE;
-struct _XML_TREE {
- uint8_t tag[XML_MAX_PROPERTY_LEN];
- uint8_t value[XML_MAX_VALUE_LEN];
- XML_TREE_ATTR *attr;
- XML_TREE_ATTR *last_attr;
- XML_TREE *brother;
- XML_TREE *last_brother;
- XML_TREE *child;
-};
-
-XML_TREE *XML_makeTree(uint8_t **buf);
-void XML_freeTree(XML_TREE * pTree);
-
-#endif /* XML_TREE_STRUCTURE */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __XML_TINYPARSER_H__ */
diff --git a/media/libdrm/mobile1/src/jni/drm1_jni.c b/media/libdrm/mobile1/src/jni/drm1_jni.c
deleted file mode 100644
index 79ce931..0000000
--- a/media/libdrm/mobile1/src/jni/drm1_jni.c
+++ /dev/null
@@ -1,1175 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @file drm1_jni.c
- *
- * This file implement the Java Native Interface
- * for supporting OMA DRM 1.0
- */
-
-#include <jni/drm1_jni.h>
-#include <objmng/svc_drm.h>
-#include "log.h"
-
-
-#define MS_PER_SECOND 1000 /* Milliseconds per second */
-#define MS_PER_MINUTE 60 * MS_PER_SECOND /* Milliseconds per minute */
-#define MS_PER_HOUR 60 * MS_PER_MINUTE /* Milliseconds per hour */
-#define MS_PER_DAY 24 * MS_PER_HOUR /* Milliseconds per day */
-
-#define SECONDS_PER_MINUTE 60 /* Seconds per minute*/
-#define SECONDS_PER_HOUR 60 * SECONDS_PER_MINUTE /* Seconds per hour */
-#define SECONDS_PER_DAY 24 * SECONDS_PER_HOUR /* Seconds per day */
-
-#define DAY_PER_MONTH 30 /* Days per month */
-#define DAY_PER_YEAR 365 /* Days per year */
-
-/** Nonzero if 'y' is a leap year, else zero. */
-#define leap(y) (((y) % 4 == 0 && (y) % 100 != 0) || (y) % 400 == 0)
-
-/** Number of leap years from 1970 to 'y' (not including 'y' itself). */
-#define nleap(y) (((y) - 1969) / 4 - ((y) - 1901) / 100 + ((y) - 1601) / 400)
-
-/** Accumulated number of days from 01-Jan up to start of current month. */
-static const int32_t ydays[] = {
- 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
-};
-
-#define int64_const(s) (s)
-#define int64_add(dst, s1, s2) ((void)((dst) = (s1) + (s2)))
-#define int64_mul(dst, s1, s2) ((void)((dst) = (int64_t)(s1) * (int64_t)(s2)))
-
-/**
- * DRM data structure
- */
-typedef struct _DrmData {
- /**
- * The id of the DRM content.
- */
- int32_t id;
-
- /**
- * The pointer of JNI interface.
- */
- JNIEnv* env;
-
- /**
- * The pointer of DRM raw content InputStream object.
- */
- jobject* pInData;
-
- /**
- * The len of the InputStream object.
- */
- int32_t len;
-
- /**
- * The next DRM data.
- */
- struct _DrmData *next;
-} DrmData;
-
-/** The table to hold all the DRM data. */
-static DrmData *drmTable = NULL;
-
-/**
- * Allocate a new item of DrmData.
- *
- * \return a pointer to a DrmData item if allocate successfully,
- * otherwise return NULL
- */
-static DrmData * newItem(void)
-{
- DrmData *d = (DrmData *)malloc(sizeof(DrmData));
-
- if (d != NULL) {
- d->id = -1;
- d->next = NULL;
- }
-
- return d;
-}
-
-/**
- * Free the memory of the specified DrmData item <code>d</code>.
- *
- * \param d - a pointer to DrmData
- */
-static void freeItem(DrmData *d)
-{
- assert(d != NULL);
-
- free(d);
-}
-
-/**
- * Insert a DrmData item with given <code>name</code> into the head of
- * the DrmData list.
- *
- * @param d - the pointer of the JNI interface
- * @param pInData - the pointer of the DRM content InputStream object.
- *
- * @return <code>JNI_DRM_SUCCESS</code> if insert successfully, otherwise
- * return <code>JNI_DRM_FAILURE</code>
- */
-static int32_t addItem(DrmData* d)
-{
- if (NULL == d)
- return JNI_DRM_FAILURE;
-
- if (NULL == drmTable) {
- drmTable = d;
- return JNI_DRM_SUCCESS;
- }
-
- d->next = drmTable;
- drmTable = d;
-
- return JNI_DRM_SUCCESS;
-}
-
-/**
- * Get the item from the DrmData list by the specified <code>
- * id</code>.
- *
- * @param p - the pointer of the DRM content InputStream object.
- *
- * @return a pointer to the DrmData item if find it successfuly,
- * otherwise return NULL
- */
-static DrmData * getItem(int32_t id)
-{
- DrmData *d;
-
- if (NULL == drmTable)
- return NULL;
-
- for (d = drmTable; d != NULL; d = d->next) {
- if (id == d->id)
- return d;
- }
-
- return NULL;
-}
-
-/**
- * Remove the specified DrmData item <code>d</code>.
- *
- * @param p - the pointer of the DRM content InputStream object.
- *
- * @return <code>JNI_DRM_SUCCESS</code> if remove successfuly,
- * otherwise return <code>JNI_DRM_FAILURE</code>
- */
-static int32_t removeItem(int32_t id)
-{
- DrmData *curItem, *preItem, *dstItem;
-
- if (NULL == drmTable)
- return JNI_DRM_FAILURE;
-
- preItem = NULL;
- for (curItem = drmTable; curItem != NULL; curItem = curItem->next) {
- if (id == curItem->id) {
- if (curItem == drmTable)
- drmTable = curItem->next;
- else
- preItem->next = curItem->next;
-
- freeItem(curItem);
-
- return JNI_DRM_SUCCESS;
- }
-
- preItem = curItem;
- }
-
- return JNI_DRM_FAILURE;
-}
-
-
-static int32_t getInputStreamDataLength(int32_t handle)
-{
- JNIEnv* env;
- jobject* pInputStream;
- int32_t len;
- DrmData* p;
- jclass cls;
- jmethodID mid;
-
- p = (DrmData *)handle;
-
- if (NULL == p)
- return 0;
-
- env = p->env;
- pInputStream = p->pInData;
- len = p->len;
-
- if (NULL == env || p->len <= 0 || NULL == pInputStream)
- return 0;
-
- /* check the original InputStream is available or not */
- cls = (*env)->GetObjectClass(env, *pInputStream);
- mid = (*env)->GetMethodID(env, cls, "available", "()I");
- (*env)->DeleteLocalRef(env, cls);
-
- if (NULL == mid)
- return 0;
-
- if (0 > (*env)->CallIntMethod(env, *pInputStream, mid))
- return 0;
-
- return len;
-}
-
-static int32_t readInputStreamData(int32_t handle, uint8_t* buf, int32_t bufLen)
-{
- JNIEnv* env;
- jobject* pInputStream;
- int32_t len;
- DrmData* p;
- jclass cls;
- jmethodID mid;
- jbyteArray tmp;
- int tmpLen;
- jbyte* pNativeBuf;
-
- p = (DrmData *)handle;
-
- if (NULL == p || NULL == buf || bufLen <- 0)
- return 0;
-
- env = p->env;
- pInputStream = p->pInData;
- len = p->len;
-
- if (NULL == env || p->len <= 0 || NULL == pInputStream)
- return 0;
-
- cls = (*env)->GetObjectClass(env, *pInputStream);
- mid = (*env)->GetMethodID(env, cls, "read", "([BII)I");
- tmp = (*env)->NewByteArray(env, bufLen);
- bufLen = (*env)->CallIntMethod(env, *pInputStream, mid, tmp, 0, bufLen);
-
- (*env)->DeleteLocalRef(env, cls);
-
- if (-1 == bufLen)
- return -1;
-
- pNativeBuf = (*env)->GetByteArrayElements(env, tmp, NULL);
- memcpy(buf, pNativeBuf, bufLen);
- (*env)->ReleaseByteArrayElements(env, tmp, pNativeBuf, 0);
- (*env)->DeleteLocalRef(env, tmp);
-
- return bufLen;
-}
-
-static const T_DRM_Rights_Info_Node *searchRightsObject(const jbyte* roId, const T_DRM_Rights_Info_Node* pRightsList)
-{
- const T_DRM_Rights_Info_Node *pTmp;
-
- if (NULL == roId || NULL == pRightsList)
- return NULL;
-
- pTmp = pRightsList;
-
- while (NULL != pTmp) {
- if(0 == strcmp((char *)roId, (char *)pTmp->roInfo.roId))
- break;
- pTmp = pTmp->next;
- }
-
- return pTmp;
-}
-
-/**
- * Returns the difference in seconds between the given GMT time
- * and 1970-01-01 00:00:00 GMT.
- *
- * \param year the year (since 1970)
- * \param month the month (1 - 12)
- * \param day the day (1 - 31)
- * \param hour the hour (0 - 23)
- * \param minute the minute (0 - 59)
- * \param second the second (0 - 59)
- *
- * \return the difference in seconds between the given GMT time
- * and 1970-01-01 00:00:00 GMT.
- */
-static int64_t mkgmtime(
- uint32_t year, uint32_t month, uint32_t day,
- uint32_t hour, uint32_t minute, uint32_t second)
-{
- int64_t result;
-
- /*
- * FIXME: It does not check whether the specified days
- * is valid based on the specified months.
- */
- assert(year >= 1970
- && month > 0 && month <= 12
- && day > 0 && day <= 31
- && hour < 24 && minute < 60
- && second < 60);
-
- /* Set 'day' to the number of days into the year. */
- day += ydays[month - 1] + (month > 2 && leap (year)) - 1;
-
- /* Now calculate 'day' to the number of days since Jan 1, 1970. */
- day = day + 365 * (year - 1970) + nleap(year);
-
- int64_mul(result, int64_const(day), int64_const(SECONDS_PER_DAY));
- int64_add(result, result, int64_const(
- SECONDS_PER_HOUR * hour + SECONDS_PER_MINUTE * minute + second));
-
- return result;
-}
-
-/**
- * Compute the milliseconds by the specified <code>date</code>
- * and <code>time</code>.
- *
- * @param date - the specified date,
- * <code>date = year * 10000 + month * 100 + day</code>
- * @param time - the specified time,
- * <code>time = hour * 10000 + minute * 100 + second</code>
- *
- * @return the related milliseconds
- */
-static int64_t computeTime(int32_t date, int32_t time)
-{
- int32_t year, month, day, hour, minute, second;
-
- year = date / 10000;
- month = (date / 100) % 100;
- day = date % 100;
- hour = time / 10000;
- minute = (time / 100) % 100;
- second = time % 100;
-
- /* Adjust the invalid parameters. */
- if (year < 1970) year = 1970;
- if (month < 1) month = 1;
- if (month > 12) month = 12;
- if (day < 1) day = 1;
- if (day > 31) day = 31;
- if (hour < 0) hour = 0;
- if (hour > 23) hour = 23;
- if (minute < 0) minute = 0;
- if (minute > 59) minute = 59;
- if (second < 0) second = 0;
- if (second > 59) second = 59;
-
- return mkgmtime(year, month, day, hour, minute, second) * 1000;
-}
-
-/**
- * Compute the milliseconds by the specified <code>date</code>
- * and <code>time</code>.
- * Note that here we always treat 1 year as 365 days and 1 month as 30 days
- * that is not precise. But it should not be a problem since OMA DRM 2.0
- * already restricts the interval representation to be day-based,
- * i.e. there will not be an interval with year or month any more in the
- * future.
- *
- * @param date - the specified date,
- * <code>date = year * 10000 + month * 100 + day</code>
- * @param time - the specified time,
- * <code>time = hour * 10000 + minute * 100 + second</code>
- *
- * @return the related milliseconds
- */
-static int64_t computeInterval(int32_t date, int32_t time)
-{
- int32_t year, month, day, hour, minute, second;
- int64_t milliseconds;
-
- year = date / 10000;
- month = (date / 100) % 100;
- day = date % 100;
- hour = time / 10000;
- minute = (time / 100) % 100;
- second = time % 100;
-
- /* milliseconds = ((((year * 365 + month * 30 + day) * 24
- * + hour) * 60 + minute) * 60 + second) * 1000;
- */
- int64_mul(milliseconds,
- int64_const(year * DAY_PER_YEAR + month * DAY_PER_MONTH + day),
- int64_const(MS_PER_DAY));
- int64_add(milliseconds, milliseconds,
- int64_const(hour * MS_PER_HOUR + minute * MS_PER_MINUTE +
- second * MS_PER_SECOND));
-
- return milliseconds;
-}
-
-static jint getObjectIntField(JNIEnv * env, jobject obj, const char *name, jint * value)
-{
- jclass clazz;
- jfieldID field;
-
- clazz = (*env)->GetObjectClass(env, obj);
- if (NULL == clazz)
- return JNI_DRM_FAILURE;
-
- field = (*env)->GetFieldID(env, clazz, name, "I");
- (*env)->DeleteLocalRef(env, clazz);
-
- if (NULL == field)
- return JNI_DRM_FAILURE;
-
- *value = (*env)->GetIntField(env, obj, field);
-
- return JNI_DRM_SUCCESS;
-}
-
-static jint setObjectIntField(JNIEnv * env, jobject obj, const char *name, jint value)
-{
- jclass clazz;
- jfieldID field;
-
- clazz = (*env)->GetObjectClass(env, obj);
- if (NULL == clazz)
- return JNI_DRM_FAILURE;
-
- field = (*env)->GetFieldID(env, clazz, name, "I");
- (*env)->DeleteLocalRef(env, clazz);
-
- if (NULL == field)
- return JNI_DRM_FAILURE;
-
- (*env)->SetIntField(env, obj, field, value);
-
- return JNI_DRM_SUCCESS;
-}
-
-static jint setObjectLongField(JNIEnv * env, jobject obj, const char *name, jlong value)
-{
- jclass clazz;
- jfieldID field;
-
- clazz = (*env)->GetObjectClass(env, obj);
- if (NULL == clazz)
- return JNI_DRM_FAILURE;
-
- field = (*env)->GetFieldID(env, clazz, name, "J");
- (*env)->DeleteLocalRef(env, clazz);
-
- if (NULL == field)
- return JNI_DRM_FAILURE;
-
- (*env)->SetLongField(env, obj, field, value);
-
- return JNI_DRM_SUCCESS;
-}
-
-static jint setConstraintFields(JNIEnv * env, jobject constraint, T_DRM_Constraint_Info * pConstraint)
-{
- /* if no this permission */
- if (pConstraint->indicator == (uint8_t)DRM_NO_RIGHTS) {
- if (JNI_DRM_FAILURE == setObjectIntField(env, constraint, "count", 0))
- return JNI_DRM_FAILURE;
-
- return JNI_DRM_SUCCESS;
- }
-
- /* set count field */
- if (pConstraint->indicator & DRM_COUNT_CONSTRAINT) {
- if (JNI_DRM_FAILURE == setObjectIntField(env, constraint, "count", pConstraint->count))
- return JNI_DRM_FAILURE;
- }
-
- /* set start time field */
- if (pConstraint->indicator & DRM_START_TIME_CONSTRAINT) {
- int64_t startTime;
-
- startTime = computeTime(pConstraint->startDate, pConstraint->startTime);
-
- if (JNI_DRM_FAILURE == setObjectLongField(env, constraint, "startDate", startTime))
- return JNI_DRM_FAILURE;
- }
-
- /* set end time field */
- if (pConstraint->indicator & DRM_END_TIME_CONSTRAINT) {
- int64_t endTime;
-
- endTime = computeTime(pConstraint->endDate, pConstraint->endTime);
-
- if (JNI_DRM_FAILURE == setObjectLongField(env, constraint, "endDate", endTime))
- return JNI_DRM_FAILURE;
- }
-
- /* set interval field */
- if (pConstraint->indicator & DRM_INTERVAL_CONSTRAINT) {
- int64_t interval;
-
- interval = computeInterval(pConstraint->intervalDate, pConstraint->intervalTime);
-
- if (JNI_DRM_FAILURE == setObjectLongField(env, constraint, "interval", interval))
- return JNI_DRM_FAILURE;
- }
-
- return JNI_DRM_SUCCESS;
-}
-
-static jint setRightsFields(JNIEnv * env, jobject rights, T_DRM_Rights_Info* pRoInfo)
-{
- jclass clazz;
- jfieldID field;
- jstring str;
- jint index;
-
- clazz = (*env)->GetObjectClass(env, rights);
- if (NULL == clazz)
- return JNI_DRM_FAILURE;
-
- /* set roId field */
- field = (*env)->GetFieldID(env, clazz, "roId", "Ljava/lang/String;");
- (*env)->DeleteLocalRef(env, clazz);
-
- if (NULL == field)
- return JNI_DRM_FAILURE;
-
- str = (*env)->NewStringUTF(env, (char *)pRoInfo->roId);
- if (NULL == str)
- return JNI_DRM_FAILURE;
-
- (*env)->SetObjectField(env, rights, field, str);
- (*env)->DeleteLocalRef(env, str);
-
- return JNI_DRM_SUCCESS;
-}
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_android_drm_mobile1_DrmRawContent_nativeConstructDrmContent
- (JNIEnv * env, jobject rawContent, jobject data, jint len, jint mimeType)
-{
- int32_t id;
- T_DRM_Input_Data inData;
- DrmData* drmInData;
-
- switch (mimeType) {
- case JNI_DRM_MIMETYPE_MESSAGE:
- mimeType = TYPE_DRM_MESSAGE;
- break;
- case JNI_DRM_MIMETYPE_CONTENT:
- mimeType = TYPE_DRM_CONTENT;
- break;
- default:
- return JNI_DRM_FAILURE;
- }
-
- drmInData = newItem();
- if (NULL == drmInData)
- return JNI_DRM_FAILURE;
-
- drmInData->env = env;
- drmInData->pInData = &data;
- drmInData->len = len;
-
- if (JNI_DRM_FAILURE == addItem(drmInData))
- return JNI_DRM_FAILURE;
-
- inData.inputHandle = (int32_t)drmInData;
- inData.mimeType = mimeType;
- inData.getInputDataLength = getInputStreamDataLength;
- inData.readInputData = readInputStreamData;
-
- id = SVC_drm_openSession(inData);
- if (id < 0)
- return JNI_DRM_FAILURE;
-
- drmInData->id = id;
-
- return id;
-}
-
-/* native interface */
-JNIEXPORT jstring JNICALL
-Java_android_drm_mobile1_DrmRawContent_nativeGetRightsAddress
- (JNIEnv * env, jobject rawContent)
-{
- jint id;
- uint8_t rightsIssuer[256] = {0};
- jstring str = NULL;
-
- if (JNI_DRM_FAILURE == getObjectIntField(env, rawContent, "id", &id))
- return NULL;
-
- if (DRM_SUCCESS == SVC_drm_getRightsIssuer(id, rightsIssuer))
- str = (*env)->NewStringUTF(env, (char *)rightsIssuer);
-
- return str;
-}
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_android_drm_mobile1_DrmRawContent_nativeGetDeliveryMethod
- (JNIEnv * env, jobject rawContent)
-{
- jint id;
- int32_t res;
-
- if (JNI_DRM_FAILURE == getObjectIntField(env, rawContent, "id", &id))
- return JNI_DRM_FAILURE;
-
- res = SVC_drm_getDeliveryMethod(id);
-
- switch (res) {
- case FORWARD_LOCK:
- return JNI_DRM_FORWARD_LOCK;
- case COMBINED_DELIVERY:
- return JNI_DRM_COMBINED_DELIVERY;
- case SEPARATE_DELIVERY:
- return JNI_DRM_SEPARATE_DELIVERY;
- case SEPARATE_DELIVERY_FL:
- return JNI_DRM_SEPARATE_DELIVERY_DM;
- default:
- return JNI_DRM_FAILURE;
- }
-}
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_android_drm_mobile1_DrmRawContent_nativeReadContent
- (JNIEnv * env, jobject rawContent, jbyteArray buf, jint bufOff, jint len, jint mediaOff)
-{
- jint id;
- jbyte *nativeBuf;
- jclass cls;
- jmethodID mid;
- DrmData* p;
- jobject inputStream;
- jfieldID field;
-
- if (NULL == buf) {
- jclass newExcCls = (*env)->FindClass(env, "java/lang/NullPointerException");
-
- if (newExcCls == NULL)
- /* Unable to find the exception class, give up. */
- return JNI_DRM_FAILURE;
-
- (*env)->ThrowNew(env, newExcCls, "b is null");
- }
-
- if (len < 0 || bufOff < 0 || len + bufOff > (*env)->GetArrayLength(env, buf)) {
- jclass newExcCls = (*env)->FindClass(env, "java/lang/IndexOutOfBoundsException");
-
- if (newExcCls == NULL)
- /* Unable to find the exception class, give up. */
- return JNI_DRM_FAILURE;
-
- (*env)->ThrowNew(env, newExcCls, NULL);
- }
-
- if (mediaOff < 0 || len == 0)
- return JNI_DRM_FAILURE;
-
- if (JNI_DRM_FAILURE == getObjectIntField(env, rawContent, "id", &id))
- return JNI_DRM_FAILURE;
-
- p = getItem(id);
- if (NULL == p)
- return JNI_DRM_FAILURE;
-
- cls = (*env)->GetObjectClass(env, rawContent);
- if (NULL == cls)
- return JNI_DRM_FAILURE;
-
- field = (*env)->GetFieldID(env, cls, "inData", "Ljava/io/BufferedInputStream;");
- (*env)->DeleteLocalRef(env, cls);
-
- if (NULL == field)
- return JNI_DRM_FAILURE;
-
- inputStream = (*env)->GetObjectField(env, rawContent, field);
-
- p->env = env;
- p->pInData = &inputStream;
-
- nativeBuf = (*env)->GetByteArrayElements(env, buf, NULL);
-
- len = SVC_drm_getContent(id, mediaOff, (uint8_t *)nativeBuf + bufOff, len);
-
- (*env)->ReleaseByteArrayElements(env, buf, nativeBuf, 0);
-
- if (DRM_MEDIA_EOF == len)
- return JNI_DRM_EOF;
- if (len <= 0)
- return JNI_DRM_FAILURE;
-
- return len;
-}
-
-/* native interface */
-JNIEXPORT jstring JNICALL
-Java_android_drm_mobile1_DrmRawContent_nativeGetContentType
- (JNIEnv * env, jobject rawContent)
-{
- jint id;
- uint8_t contentType[64] = {0};
- jstring str = NULL;
-
- if (JNI_DRM_FAILURE == getObjectIntField(env, rawContent, "id", &id))
- return NULL;
-
- if (DRM_SUCCESS == SVC_drm_getContentType(id, contentType))
- str = (*env)->NewStringUTF(env, (char *)contentType);
-
- return str;
-}
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_android_drm_mobile1_DrmRawContent_nativeGetContentLength
- (JNIEnv * env, jobject rawContent)
-{
- jint id;
- int32_t len;
-
- if (JNI_DRM_FAILURE == getObjectIntField(env, rawContent, "id", &id))
- return JNI_DRM_FAILURE;
-
- len = SVC_drm_getContentLength(id);
-
- if (DRM_UNKNOWN_DATA_LEN == len)
- return JNI_DRM_UNKNOWN_DATA_LEN;
-
- if (0 > len)
- return JNI_DRM_FAILURE;
-
- return len;
-}
-
-/* native interface */
-JNIEXPORT void JNICALL
-Java_android_drm_mobile1_DrmRawContent_finalize
- (JNIEnv * env, jobject rawContent)
-{
- jint id;
-
- if (JNI_DRM_FAILURE == getObjectIntField(env, rawContent, "id", &id))
- return;
-
- removeItem(id);
-
- SVC_drm_closeSession(id);
-}
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_android_drm_mobile1_DrmRights_nativeGetConstraintInfo
- (JNIEnv * env, jobject rights, jint permission, jobject constraint)
-{
- jclass clazz;
- jfieldID field;
- jstring str;
- uint8_t *nativeStr;
- T_DRM_Rights_Info_Node *pRightsList;
- T_DRM_Rights_Info_Node *pCurNode;
- T_DRM_Constraint_Info *pConstraint;
-
- clazz = (*env)->GetObjectClass(env, rights);
- if (NULL == clazz)
- return JNI_DRM_FAILURE;
-
- field = (*env)->GetFieldID(env, clazz, "roId", "Ljava/lang/String;");
- (*env)->DeleteLocalRef(env, clazz);
-
- if (NULL == field)
- return JNI_DRM_FAILURE;
-
- str = (*env)->GetObjectField(env, rights, field);
-
- nativeStr = (uint8_t *)(*env)->GetStringUTFChars(env, str, NULL);
- if (NULL == nativeStr)
- return JNI_DRM_FAILURE;
-
- /* this means forward-lock rights */
- if (0 == strcmp((char *)nativeStr, "ForwardLock")) {
- (*env)->ReleaseStringUTFChars(env, str, (char *)nativeStr);
- return JNI_DRM_SUCCESS;
- }
-
- if (DRM_FAILURE == SVC_drm_viewAllRights(&pRightsList)) {
- (*env)->ReleaseStringUTFChars(env, str, (char *)nativeStr);
- return JNI_DRM_FAILURE;
- }
-
- pCurNode = searchRightsObject((jbyte *)nativeStr, pRightsList);
- if (NULL == pCurNode) {
- (*env)->ReleaseStringUTFChars(env, str, (char *)nativeStr);
- SVC_drm_freeRightsInfoList(pRightsList);
- return JNI_DRM_FAILURE;
- }
- (*env)->ReleaseStringUTFChars(env, str, (char *)nativeStr);
-
- switch (permission) {
- case JNI_DRM_PERMISSION_PLAY:
- pConstraint = &(pCurNode->roInfo.playRights);
- break;
- case JNI_DRM_PERMISSION_DISPLAY:
- pConstraint = &(pCurNode->roInfo.displayRights);
- break;
- case JNI_DRM_PERMISSION_EXECUTE:
- pConstraint = &(pCurNode->roInfo.executeRights);
- break;
- case JNI_DRM_PERMISSION_PRINT:
- pConstraint = &(pCurNode->roInfo.printRights);
- break;
- default:
- SVC_drm_freeRightsInfoList(pRightsList);
- return JNI_DRM_FAILURE;
- }
-
- /* set constraint field */
- if (JNI_DRM_FAILURE == setConstraintFields(env, constraint, pConstraint)) {
- SVC_drm_freeRightsInfoList(pRightsList);
- return JNI_DRM_FAILURE;
- }
-
- SVC_drm_freeRightsInfoList(pRightsList);
-
- return JNI_DRM_SUCCESS;
-}
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_android_drm_mobile1_DrmRights_nativeConsumeRights
- (JNIEnv * env, jobject rights, jint permission)
-{
- jclass clazz;
- jfieldID field;
- jstring str;
- uint8_t *nativeStr;
- int32_t id;
-
- switch (permission) {
- case JNI_DRM_PERMISSION_PLAY:
- permission = DRM_PERMISSION_PLAY;
- break;
- case JNI_DRM_PERMISSION_DISPLAY:
- permission = DRM_PERMISSION_DISPLAY;
- break;
- case JNI_DRM_PERMISSION_EXECUTE:
- permission = DRM_PERMISSION_EXECUTE;
- break;
- case JNI_DRM_PERMISSION_PRINT:
- permission = DRM_PERMISSION_PRINT;
- break;
- default:
- return JNI_DRM_FAILURE;
- }
-
- clazz = (*env)->GetObjectClass(env, rights);
- if (NULL == clazz)
- return JNI_DRM_FAILURE;
-
- field = (*env)->GetFieldID(env, clazz, "roId", "Ljava/lang/String;");
- (*env)->DeleteLocalRef(env, clazz);
-
- if (NULL == field)
- return JNI_DRM_FAILURE;
-
- str = (*env)->GetObjectField(env, rights, field);
-
- nativeStr = (uint8_t *)(*env)->GetStringUTFChars(env, str, NULL);
- if (NULL == nativeStr)
- return JNI_DRM_FAILURE;
-
- if (0 == strcmp("ForwardLock", (char *)nativeStr)) {
- (*env)->ReleaseStringUTFChars(env, str, (char *)nativeStr);
- return JNI_DRM_SUCCESS;
- }
-
- if (DRM_SUCCESS != SVC_drm_updateRights(nativeStr, permission)) {
- (*env)->ReleaseStringUTFChars(env, str, (char *)nativeStr);
- return JNI_DRM_FAILURE;
- }
-
- (*env)->ReleaseStringUTFChars(env, str, (char *)nativeStr);
-
- return JNI_DRM_SUCCESS;
-}
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_android_drm_mobile1_DrmRightsManager_nativeInstallDrmRights
- (JNIEnv * env, jobject rightsManager, jobject data, jint len, jint mimeType, jobject rights)
-{
- int32_t id;
- T_DRM_Input_Data inData;
- DrmData* drmInData;
- jclass cls;
- jmethodID mid;
- T_DRM_Rights_Info rightsInfo;
-
- switch (mimeType) {
- case JNI_DRM_MIMETYPE_RIGHTS_XML:
- mimeType = TYPE_DRM_RIGHTS_XML;
- break;
- case JNI_DRM_MIMETYPE_RIGHTS_WBXML:
- mimeType = TYPE_DRM_RIGHTS_WBXML;
- break;
- case JNI_DRM_MIMETYPE_MESSAGE:
- mimeType = TYPE_DRM_MESSAGE;
- break;
- default:
- return JNI_DRM_FAILURE;
- }
-
- drmInData = newItem();
- if (NULL == drmInData)
- return JNI_DRM_FAILURE;
-
- drmInData->env = env;
- drmInData->pInData = &data;
- drmInData->len = len;
-
- inData.inputHandle = (int32_t)drmInData;
- inData.mimeType = mimeType;
- inData.getInputDataLength = getInputStreamDataLength;
- inData.readInputData = readInputStreamData;
-
- memset(&rightsInfo, 0, sizeof(T_DRM_Rights_Info));
- if (DRM_FAILURE == SVC_drm_installRights(inData, &rightsInfo))
- return JNI_DRM_FAILURE;
-
- freeItem(drmInData);
-
- return setRightsFields(env, rights, &rightsInfo);
-}
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_android_drm_mobile1_DrmRightsManager_nativeQueryRights
- (JNIEnv * env, jobject rightsManager, jobject rawContent, jobject rights)
-{
- jint id;
- T_DRM_Rights_Info rightsInfo;
-
- if (JNI_DRM_FAILURE == getObjectIntField(env, rawContent, "id", &id))
- return JNI_DRM_FAILURE;
-
- memset(&rightsInfo, 0, sizeof(T_DRM_Rights_Info));
- if (DRM_SUCCESS != SVC_drm_getRightsInfo(id, &rightsInfo))
- return JNI_DRM_FAILURE;
-
- return setRightsFields(env, rights, &rightsInfo);
-}
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_android_drm_mobile1_DrmRightsManager_nativeGetNumOfRights
- (JNIEnv * env, jobject rightsManager)
-{
- T_DRM_Rights_Info_Node *pRightsList;
- T_DRM_Rights_Info_Node *pCurNode;
- int32_t num = 0;
-
- if (DRM_FAILURE == SVC_drm_viewAllRights(&pRightsList))
- return JNI_DRM_FAILURE;
-
- pCurNode = pRightsList;
- while (pCurNode != NULL) {
- num++;
- pCurNode = pCurNode->next;
- }
-
- SVC_drm_freeRightsInfoList(pRightsList);
-
- return num;
-}
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_android_drm_mobile1_DrmRightsManager_nativeGetRightsList
- (JNIEnv * env, jobject rightsManager, jobjectArray rightsArray, jint num)
-{
- T_DRM_Rights_Info_Node *pRightsList;
- T_DRM_Rights_Info_Node *pCurNode;
- int32_t index;
-
- if (DRM_FAILURE == SVC_drm_viewAllRights(&pRightsList))
- return JNI_DRM_FAILURE;
-
- pCurNode = pRightsList;
- for (index = 0; NULL != pCurNode; index++) {
- jobject rights = (*env)->GetObjectArrayElement(env, rightsArray, index);
- if (NULL == rights)
- break;
-
- if (JNI_DRM_FAILURE == setRightsFields(env, rights, &(pCurNode->roInfo)))
- break;
-
- (*env)->SetObjectArrayElement(env, rightsArray, index, rights);
-
- pCurNode = pCurNode->next;
- }
-
- SVC_drm_freeRightsInfoList(pRightsList);
-
- return index;
-}
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_android_drm_mobile1_DrmRightsManager_nativeDeleteRights
- (JNIEnv * env, jobject rightsManager, jobject rights)
-{
- jclass clazz;
- jfieldID field;
- jstring str;
- uint8_t *nativeStr;
-
- clazz = (*env)->GetObjectClass(env, rights);
- if (NULL == clazz)
- return JNI_DRM_FAILURE;
-
- field = (*env)->GetFieldID(env, clazz, "roId", "Ljava/lang/String;");
- if (NULL == field)
- return JNI_DRM_FAILURE;
-
- str = (*env)->GetObjectField(env, rights, field);
-
- nativeStr = (uint8_t *)(*env)->GetStringUTFChars(env, str, NULL);
- if (NULL == nativeStr)
- return JNI_DRM_FAILURE;
-
- if (0 == strcmp("ForwardLock", (char *)nativeStr))
- return JNI_DRM_SUCCESS;
-
- if (DRM_SUCCESS != SVC_drm_deleteRights(nativeStr)) {
- (*env)->ReleaseStringUTFChars(env, str, (char *)nativeStr);
- return JNI_DRM_FAILURE;
- }
-
- (*env)->ReleaseStringUTFChars(env, str, (char *)nativeStr);
- return JNI_DRM_SUCCESS;
-}
-
-/*
- * Table of methods associated with the DrmRawContent class.
- */
-static JNINativeMethod gDrmRawContentMethods[] = {
- /* name, signature, funcPtr */
- {"nativeConstructDrmContent", "(Ljava/io/InputStream;II)I",
- (void*)Java_android_drm_mobile1_DrmRawContent_nativeConstructDrmContent},
- {"nativeGetRightsAddress", "()Ljava/lang/String;",
- (void*)Java_android_drm_mobile1_DrmRawContent_nativeGetRightsAddress},
- {"nativeGetDeliveryMethod", "()I",
- (void*)Java_android_drm_mobile1_DrmRawContent_nativeGetDeliveryMethod},
- {"nativeReadContent", "([BIII)I",
- (void*)Java_android_drm_mobile1_DrmRawContent_nativeReadContent},
- {"nativeGetContentType", "()Ljava/lang/String;",
- (void*)Java_android_drm_mobile1_DrmRawContent_nativeGetContentType},
- {"nativeGetContentLength", "()I",
- (void*)Java_android_drm_mobile1_DrmRawContent_nativeGetContentLength},
- {"finalize", "()V",
- (void*)Java_android_drm_mobile1_DrmRawContent_finalize},
-};
-
-/*
- * Table of methods associated with the DrmRights class.
- */
-static JNINativeMethod gDrmRightsMethods[] = {
- /* name, signature, funcPtr */
- {"nativeGetConstraintInfo", "(ILandroid/drm/mobile1/DrmConstraintInfo;)I",
- (void*)Java_android_drm_mobile1_DrmRights_nativeGetConstraintInfo},
- {"nativeConsumeRights", "(I)I",
- (void*)Java_android_drm_mobile1_DrmRights_nativeConsumeRights},
-};
-
-/*
- * Table of methods associated with the DrmRightsManager class.
- */
-static JNINativeMethod gDrmRightsManagerMethods[] = {
- /* name, signature, funcPtr */
- {"nativeInstallDrmRights", "(Ljava/io/InputStream;IILandroid/drm/mobile1/DrmRights;)I",
- (void*)Java_android_drm_mobile1_DrmRightsManager_nativeInstallDrmRights},
- {"nativeQueryRights", "(Landroid/drm/mobile1/DrmRawContent;Landroid/drm/mobile1/DrmRights;)I",
- (void*)Java_android_drm_mobile1_DrmRightsManager_nativeQueryRights},
- {"nativeGetNumOfRights", "()I",
- (void*)Java_android_drm_mobile1_DrmRightsManager_nativeGetNumOfRights},
- {"nativeGetRightsList", "([Landroid/drm/mobile1/DrmRights;I)I",
- (void*)Java_android_drm_mobile1_DrmRightsManager_nativeGetRightsList},
- {"nativeDeleteRights", "(Landroid/drm/mobile1/DrmRights;)I",
- (void*)Java_android_drm_mobile1_DrmRightsManager_nativeDeleteRights},
-};
-
-/*
- * Register several native methods for one class.
- */
-static int registerNativeMethods(JNIEnv* env, const char* className,
- JNINativeMethod* gMethods, int numMethods)
-{
- jclass clazz;
-
- clazz = (*env)->FindClass(env, className);
- if (clazz == NULL)
- return JNI_FALSE;
-
- if ((*env)->RegisterNatives(env, clazz, gMethods, numMethods) < 0)
- return JNI_FALSE;
-
- return JNI_TRUE;
-}
-
-/*
- * Register native methods for all classes we know about.
- */
-static int registerNatives(JNIEnv* env)
-{
- if (!registerNativeMethods(env, "android/drm/mobile1/DrmRawContent",
- gDrmRawContentMethods, sizeof(gDrmRawContentMethods) / sizeof(gDrmRawContentMethods[0])))
- return JNI_FALSE;
-
- if (!registerNativeMethods(env, "android/drm/mobile1/DrmRights",
- gDrmRightsMethods, sizeof(gDrmRightsMethods) / sizeof(gDrmRightsMethods[0])))
- return JNI_FALSE;
-
- if (!registerNativeMethods(env, "android/drm/mobile1/DrmRightsManager",
- gDrmRightsManagerMethods, sizeof(gDrmRightsManagerMethods) / sizeof(gDrmRightsManagerMethods[0])))
- return JNI_FALSE;
-
- return JNI_TRUE;
-}
-
-jint JNI_OnLoad(JavaVM* vm, void* reserved)
-{
- JNIEnv* env = NULL;
- jint result = -1;
-
- printf("Entering JNI_OnLoad\n");
-
- if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK)
- goto bail;
-
- assert(env != NULL);
-
- if (!registerNatives(env))
- goto bail;
-
- /* success -- return valid version number */
- result = JNI_VERSION_1_4;
-
-bail:
- printf("Leaving JNI_OnLoad (result=0x%x)\n", result);
- return result;
-}
diff --git a/media/libdrm/mobile1/src/objmng/drm_api.c b/media/libdrm/mobile1/src/objmng/drm_api.c
deleted file mode 100644
index 0e453de..0000000
--- a/media/libdrm/mobile1/src/objmng/drm_api.c
+++ /dev/null
@@ -1,1944 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <svc_drm.h>
-#include <drm_inner.h>
-#include <parser_dm.h>
-#include <parser_dcf.h>
-#include <parser_rel.h>
-#include <drm_rights_manager.h>
-#include <drm_time.h>
-#include <drm_decoder.h>
-#include <aes.h>
-#include "log.h"
-
-/**
- * Current id.
- */
-static int32_t curID = 0;
-
-/**
- * The header pointer for the session list.
- */
-static T_DRM_Session_Node* sessionTable = NULL;
-
-/**
- * New a session.
- */
-static T_DRM_Session_Node* newSession(T_DRM_Input_Data data)
-{
- T_DRM_Session_Node* s = (T_DRM_Session_Node *)malloc(sizeof(T_DRM_Session_Node));
-
- if (NULL != s) {
- memset(s, 0, sizeof(T_DRM_Session_Node));
-
- s->sessionId = curID++;
- s->inputHandle = data.inputHandle;
- s->mimeType = data.mimeType;
- s->getInputDataLengthFunc = data.getInputDataLength;
- s->readInputDataFunc = data.readInputData;
- s->seekInputDataFunc = data.seekInputData;
- }
-
- return s;
-}
-
-/**
- * Free a session.
- */
-static void freeSession(T_DRM_Session_Node* s)
-{
- if (NULL == s)
- return;
-
- if (NULL != s->rawContent)
- free(s->rawContent);
-
- if (NULL != s->readBuf)
- free(s->readBuf);
-
- if (NULL != s->infoStruct)
- free(s->infoStruct);
-
- free(s);
-}
-
-/**
- * Add a session to list.
- */
-static int32_t addSession(T_DRM_Session_Node* s)
-{
- if (NULL == s)
- return -1;
-
- s->next = sessionTable;
- sessionTable = s;
-
- return s->sessionId;
-}
-
-/**
- * Get a session from the list.
- */
-static T_DRM_Session_Node* getSession(int32_t sessionId)
-{
- T_DRM_Session_Node* s;
-
- if (sessionId < 0 || NULL == sessionTable)
- return NULL;
-
- for (s = sessionTable; s != NULL; s = s->next) {
- if (sessionId == s->sessionId)
- return s;
- }
-
- return NULL;
-}
-
-/**
- * Remove a session from the list.
- */
-static void removeSession(int32_t sessionId)
-{
- T_DRM_Session_Node *curS, *preS;
-
- if (sessionId < 0 || NULL == sessionTable)
- return;
-
- if (sessionId == sessionTable->sessionId) {
- curS = sessionTable;
- sessionTable = curS->next;
- freeSession(curS);
- return;
- }
-
- for (preS = sessionTable; preS->next != NULL; preS = preS->next) {
- if (preS->next->sessionId == sessionId)
- curS = preS->next;
- }
-
- if (NULL == preS->next)
- return;
-
- preS->next = curS->next;
- freeSession(curS);
-}
-
-/**
- * Try to identify the mimetype according the input DRM data.
- */
-static int32_t getMimeType(const uint8_t *buf, int32_t bufLen)
-{
- const uint8_t *p;
-
- if (NULL == buf || bufLen <= 0)
- return TYPE_DRM_UNKNOWN;
-
- p = buf;
-
- /* check if it is DRM Content Format, only check the first field of Version, it must be "0x01" */
- if (0x01 == *p)
- return TYPE_DRM_CONTENT;
-
- /* check if it is DRM Message, only check the first two bytes, it must be the start flag of boundary: "--" */
- if (bufLen >= 2 && '-' == *p && '-' == *(p + 1))
- return TYPE_DRM_MESSAGE;
-
- /* check if it is DRM Rights XML format, only check the first several bytes, it must be: "<o-ex:rights" */
- if (bufLen >= 12 && 0 == strncmp("<o-ex:rights", (char *)p, 12))
- return TYPE_DRM_RIGHTS_XML;
-
- /* check if it is DRM Rights WBXML format, only check the first two bytes, it must be: 0x03, 0x0e */
- if (bufLen >= 2 && 0x03 == *p && 0x0e == *(p + 1))
- return TYPE_DRM_RIGHTS_WBXML;
-
- return TYPE_DRM_UNKNOWN;
-}
-
-static int32_t drm_skipCRLFinB64(const uint8_t* b64Data, int32_t len)
-{
- const uint8_t* p;
- int32_t skipLen = 0;
-
- if (NULL == b64Data || len <= 0)
- return -1;
-
- p = b64Data;
- while (p - b64Data < len) {
- if ('\r' == *p || '\n'== *p)
- skipLen++;
- p++;
- }
-
- return skipLen;
-}
-
-static int32_t drm_scanEndBoundary(const uint8_t* pBuf, int32_t len, uint8_t* const boundary)
-{
- const uint8_t* p;
- int32_t leftLen;
- int32_t boundaryLen;
-
- if (NULL == pBuf || len <=0 || NULL == boundary)
- return -1;
-
- p = pBuf;
- boundaryLen = strlen((char *)boundary) + 2; /* 2 means: '\r' and '\n' */
- leftLen = len - (p - pBuf);
- while (leftLen > 0) {
- if (NULL == (p = memchr(p, '\r', leftLen)))
- break;
-
- leftLen = len - (p - pBuf);
- if (leftLen < boundaryLen)
- return -2; /* here means may be the boundary has been split */
-
- if (('\n' == *(p + 1)) && (0 == memcmp(p + 2, boundary, strlen((char *)boundary))))
- return p - pBuf; /* find the boundary here */
-
- p++;
- leftLen--;
- }
-
- return len; /* no boundary found */
-}
-
-static int32_t drm_getLicenseInfo(T_DRM_Rights* pRights, T_DRM_Rights_Info* licenseInfo)
-{
- if (NULL != licenseInfo && NULL != pRights) {
- strcpy((char *)licenseInfo->roId, (char *)pRights->uid);
-
- if (1 == pRights->bIsDisplayable) {
- licenseInfo->displayRights.indicator = pRights->DisplayConstraint.Indicator;
- licenseInfo->displayRights.count =
- pRights->DisplayConstraint.Count;
- licenseInfo->displayRights.startDate =
- pRights->DisplayConstraint.StartTime.date;
- licenseInfo->displayRights.startTime =
- pRights->DisplayConstraint.StartTime.time;
- licenseInfo->displayRights.endDate =
- pRights->DisplayConstraint.EndTime.date;
- licenseInfo->displayRights.endTime =
- pRights->DisplayConstraint.EndTime.time;
- licenseInfo->displayRights.intervalDate =
- pRights->DisplayConstraint.Interval.date;
- licenseInfo->displayRights.intervalTime =
- pRights->DisplayConstraint.Interval.time;
- }
- if (1 == pRights->bIsPlayable) {
- licenseInfo->playRights.indicator = pRights->PlayConstraint.Indicator;
- licenseInfo->playRights.count = pRights->PlayConstraint.Count;
- licenseInfo->playRights.startDate =
- pRights->PlayConstraint.StartTime.date;
- licenseInfo->playRights.startTime =
- pRights->PlayConstraint.StartTime.time;
- licenseInfo->playRights.endDate =
- pRights->PlayConstraint.EndTime.date;
- licenseInfo->playRights.endTime =
- pRights->PlayConstraint.EndTime.time;
- licenseInfo->playRights.intervalDate =
- pRights->PlayConstraint.Interval.date;
- licenseInfo->playRights.intervalTime =
- pRights->PlayConstraint.Interval.time;
- }
- if (1 == pRights->bIsExecuteable) {
- licenseInfo->executeRights.indicator = pRights->ExecuteConstraint.Indicator;
- licenseInfo->executeRights.count =
- pRights->ExecuteConstraint.Count;
- licenseInfo->executeRights.startDate =
- pRights->ExecuteConstraint.StartTime.date;
- licenseInfo->executeRights.startTime =
- pRights->ExecuteConstraint.StartTime.time;
- licenseInfo->executeRights.endDate =
- pRights->ExecuteConstraint.EndTime.date;
- licenseInfo->executeRights.endTime =
- pRights->ExecuteConstraint.EndTime.time;
- licenseInfo->executeRights.intervalDate =
- pRights->ExecuteConstraint.Interval.date;
- licenseInfo->executeRights.intervalTime =
- pRights->ExecuteConstraint.Interval.time;
- }
- if (1 == pRights->bIsPrintable) {
- licenseInfo->printRights.indicator = pRights->PrintConstraint.Indicator;
- licenseInfo->printRights.count =
- pRights->PrintConstraint.Count;
- licenseInfo->printRights.startDate =
- pRights->PrintConstraint.StartTime.date;
- licenseInfo->printRights.startTime =
- pRights->PrintConstraint.StartTime.time;
- licenseInfo->printRights.endDate =
- pRights->PrintConstraint.EndTime.date;
- licenseInfo->printRights.endTime =
- pRights->PrintConstraint.EndTime.time;
- licenseInfo->printRights.intervalDate =
- pRights->PrintConstraint.Interval.date;
- licenseInfo->printRights.intervalTime =
- pRights->PrintConstraint.Interval.time;
- }
- return TRUE;
- }
- return FALSE;
-}
-
-static int32_t drm_addRightsNodeToList(T_DRM_Rights_Info_Node **ppRightsHeader,
- T_DRM_Rights_Info_Node *pInputRightsNode)
-{
- T_DRM_Rights_Info_Node *pRightsNode;
-
- if (NULL == ppRightsHeader || NULL == pInputRightsNode)
- return FALSE;
-
- pRightsNode = (T_DRM_Rights_Info_Node *)malloc(sizeof(T_DRM_Rights_Info_Node));
- if (NULL == pRightsNode)
- return FALSE;
-
- memcpy(pRightsNode, pInputRightsNode, sizeof(T_DRM_Rights_Info_Node));
- pRightsNode->next = NULL;
-
- /* this means it is the first node */
- if (NULL == *ppRightsHeader)
- *ppRightsHeader = pRightsNode;
- else {
- T_DRM_Rights_Info_Node *pTmp;
-
- pTmp = *ppRightsHeader;
- while (NULL != pTmp->next)
- pTmp = pTmp->next;
-
- pTmp->next = pRightsNode;
- }
- return TRUE;
-}
-
-static int32_t drm_startConsumeRights(int32_t * bIsXXable,
- T_DRM_Rights_Constraint * XXConstraint,
- int32_t * writeFlag)
-{
- T_DB_TIME_SysTime curDateTime;
- T_DRM_DATETIME CurrentTime;
- uint8_t countFlag = 0;
-
- memset(&CurrentTime, 0, sizeof(T_DRM_DATETIME));
-
- if (NULL == bIsXXable || 0 == *bIsXXable || NULL == XXConstraint || NULL == writeFlag)
- return DRM_FAILURE;
-
- if (0 != (uint8_t)(XXConstraint->Indicator & DRM_NO_CONSTRAINT)) /* Have utter right? */
- return DRM_SUCCESS;
-
- *bIsXXable = 0; /* Assume have invalid rights at first */
- *writeFlag = 0;
-
- if (0 != (XXConstraint->Indicator & (DRM_START_TIME_CONSTRAINT | DRM_END_TIME_CONSTRAINT | DRM_INTERVAL_CONSTRAINT))) {
- DRM_time_getSysTime(&curDateTime);
-
- if (-1 == drm_checkDate(curDateTime.year, curDateTime.month, curDateTime.day,
- curDateTime.hour, curDateTime.min, curDateTime.sec))
- return DRM_FAILURE;
-
- YMD_HMS_2_INT(curDateTime.year, curDateTime.month, curDateTime.day,
- CurrentTime.date, curDateTime.hour, curDateTime.min,
- curDateTime.sec, CurrentTime.time);
- }
-
- if (0 != (uint8_t)(XXConstraint->Indicator & DRM_COUNT_CONSTRAINT)) { /* Have count restrict? */
- *writeFlag = 1;
- /* If it has only one time for use, after use this function, we will delete this rights */
- if (XXConstraint->Count <= 0) {
- XXConstraint->Indicator &= ~DRM_COUNT_CONSTRAINT;
- return DRM_RIGHTS_EXPIRED;
- }
-
- if (XXConstraint->Count-- <= 1) {
- XXConstraint->Indicator &= ~DRM_COUNT_CONSTRAINT;
- countFlag = 1;
- }
- }
-
- if (0 != (uint8_t)(XXConstraint->Indicator & DRM_START_TIME_CONSTRAINT)) {
- if (XXConstraint->StartTime.date > CurrentTime.date ||
- (XXConstraint->StartTime.date == CurrentTime.date &&
- XXConstraint->StartTime.time >= CurrentTime.time)) {
- *bIsXXable = 1;
- return DRM_RIGHTS_PENDING;
- }
- }
-
- if (0 != (uint8_t)(XXConstraint->Indicator & DRM_END_TIME_CONSTRAINT)) { /* Have end time restrict? */
- if (XXConstraint->EndTime.date < CurrentTime.date ||
- (XXConstraint->EndTime.date == CurrentTime.date &&
- XXConstraint->EndTime.time <= CurrentTime.time)) {
- *writeFlag = 1;
- XXConstraint->Indicator &= ~DRM_END_TIME_CONSTRAINT;
- return DRM_RIGHTS_EXPIRED;
- }
- }
-
- if (0 != (uint8_t)(XXConstraint->Indicator & DRM_INTERVAL_CONSTRAINT)) { /* Have interval time restrict? */
- int32_t year, mon, day, hour, min, sec, date, time;
- int32_t ret;
-
- XXConstraint->Indicator |= DRM_END_TIME_CONSTRAINT;
- XXConstraint->Indicator &= ~DRM_INTERVAL_CONSTRAINT; /* Write off interval right */
- *writeFlag = 1;
-
- if (XXConstraint->Interval.date == 0
- && XXConstraint->Interval.time == 0) {
- return DRM_RIGHTS_EXPIRED;
- }
- date = CurrentTime.date + XXConstraint->Interval.date;
- time = CurrentTime.time + XXConstraint->Interval.time;
- INT_2_YMD_HMS(year, mon, day, date, hour, min, sec, time);
-
- if (sec > 59) {
- min += sec / 60;
- sec %= 60;
- }
- if (min > 59) {
- hour += min / 60;
- min %= 60;
- }
- if (hour > 23) {
- day += hour / 24;
- hour %= 24;
- }
- if (day > 31) {
- mon += day / 31;
- day %= 31;
- }
- if (mon > 12) {
- year += mon / 12;
- mon %= 12;
- }
- if (day > (ret = drm_monthDays(year, mon))) {
- day -= ret;
- mon++;
- if (mon > 12) {
- mon -= 12;
- year++;
- }
- }
- YMD_HMS_2_INT(year, mon, day, XXConstraint->EndTime.date, hour,
- min, sec, XXConstraint->EndTime.time);
- }
-
- if (1 != countFlag)
- *bIsXXable = 1; /* Can go here ,so right must be valid */
- return DRM_SUCCESS;
-}
-
-static int32_t drm_startCheckRights(int32_t * bIsXXable,
- T_DRM_Rights_Constraint * XXConstraint)
-{
- T_DB_TIME_SysTime curDateTime;
- T_DRM_DATETIME CurrentTime;
-
- memset(&CurrentTime, 0, sizeof(T_DRM_DATETIME));
-
- if (NULL == bIsXXable || 0 == *bIsXXable || NULL == XXConstraint)
- return DRM_FAILURE;
-
- if (0 != (uint8_t)(XXConstraint->Indicator & DRM_NO_CONSTRAINT)) /* Have utter right? */
- return DRM_SUCCESS;
-
- *bIsXXable = 0; /* Assume have invalid rights at first */
-
- if (0 != (XXConstraint->Indicator & (DRM_START_TIME_CONSTRAINT | DRM_END_TIME_CONSTRAINT))) {
- DRM_time_getSysTime(&curDateTime);
-
- if (-1 == drm_checkDate(curDateTime.year, curDateTime.month, curDateTime.day,
- curDateTime.hour, curDateTime.min, curDateTime.sec))
- return DRM_FAILURE;
-
- YMD_HMS_2_INT(curDateTime.year, curDateTime.month, curDateTime.day,
- CurrentTime.date, curDateTime.hour, curDateTime.min,
- curDateTime.sec, CurrentTime.time);
- }
-
- if (0 != (uint8_t)(XXConstraint->Indicator & DRM_COUNT_CONSTRAINT)) { /* Have count restrict? */
- if (XXConstraint->Count <= 0) {
- XXConstraint->Indicator &= ~DRM_COUNT_CONSTRAINT;
- return DRM_RIGHTS_EXPIRED;
- }
- }
-
- if (0 != (uint8_t)(XXConstraint->Indicator & DRM_START_TIME_CONSTRAINT)) {
- if (XXConstraint->StartTime.date > CurrentTime.date ||
- (XXConstraint->StartTime.date == CurrentTime.date &&
- XXConstraint->StartTime.time >= CurrentTime.time)) {
- *bIsXXable = 1;
- return DRM_RIGHTS_PENDING;
- }
- }
-
- if (0 != (uint8_t)(XXConstraint->Indicator & DRM_END_TIME_CONSTRAINT)) { /* Have end time restrict? */
- if (XXConstraint->EndTime.date < CurrentTime.date ||
- (XXConstraint->EndTime.date == CurrentTime.date &&
- XXConstraint->EndTime.time <= CurrentTime.time)) {
- XXConstraint->Indicator &= ~DRM_END_TIME_CONSTRAINT;
- return DRM_RIGHTS_EXPIRED;
- }
- }
-
- if (0 != (uint8_t)(XXConstraint->Indicator & DRM_INTERVAL_CONSTRAINT)) { /* Have interval time restrict? */
- if (XXConstraint->Interval.date == 0 && XXConstraint->Interval.time == 0) {
- XXConstraint->Indicator &= ~DRM_INTERVAL_CONSTRAINT;
- return DRM_RIGHTS_EXPIRED;
- }
- }
-
- *bIsXXable = 1;
- return DRM_SUCCESS;
-}
-
-int32_t drm_checkRoAndUpdate(int32_t id, int32_t permission)
-{
- int32_t writeFlag = 0;
- int32_t roAmount;
- int32_t validRoAmount = 0;
- int32_t flag = DRM_FAILURE;
- int32_t i, j;
- T_DRM_Rights *pRo;
- T_DRM_Rights *pCurRo;
- int32_t * pNumOfPriority;
- int32_t iNum;
- T_DRM_Rights_Constraint * pCurConstraint;
- T_DRM_Rights_Constraint * pCompareConstraint;
- int priority[8] = {1, 2, 4, 3, 8, 6, 7, 5};
-
- if (FALSE == drm_writeOrReadInfo(id, NULL, &roAmount, GET_ROAMOUNT))
- return DRM_FAILURE;
-
- validRoAmount = roAmount;
- if (roAmount < 1)
- return DRM_NO_RIGHTS;
-
- pRo = malloc(roAmount * sizeof(T_DRM_Rights));
- pCurRo = pRo;
- if (NULL == pRo)
- return DRM_FAILURE;
-
- if (FALSE == drm_writeOrReadInfo(id, pRo, &roAmount, GET_ALL_RO)) {
- free(pRo);
- return DRM_FAILURE;
- }
-
- /** check the right priority */
- pNumOfPriority = malloc(sizeof(int32_t) * roAmount);
- for(i = 0; i < roAmount; i++) {
- iNum = roAmount - 1;
- for(j = 0; j < roAmount; j++) {
- if(i == j)
- continue;
- switch(permission) {
- case DRM_PERMISSION_PLAY:
- pCurConstraint = &pRo[i].PlayConstraint;
- pCompareConstraint = &pRo[j].PlayConstraint;
- break;
- case DRM_PERMISSION_DISPLAY:
- pCurConstraint = &pRo[i].DisplayConstraint;
- pCompareConstraint = &pRo[j].DisplayConstraint;
- break;
- case DRM_PERMISSION_EXECUTE:
- pCurConstraint = &pRo[i].ExecuteConstraint;
- pCompareConstraint = &pRo[j].ExecuteConstraint;
- break;
- case DRM_PERMISSION_PRINT:
- pCurConstraint = &pRo[i].PrintConstraint;
- pCompareConstraint = &pRo[j].PrintConstraint;
- break;
- default:
- free(pRo);
- free(pNumOfPriority);
- return DRM_FAILURE;
- }
-
- /**get priority by Indicator*/
- if(0 == (pCurConstraint->Indicator & DRM_NO_CONSTRAINT) &&
- 0 == (pCompareConstraint->Indicator & DRM_NO_CONSTRAINT)) {
- int num1, num2;
- num1 = (pCurConstraint->Indicator & 0x0e) >> 1;
- num2 = (pCompareConstraint->Indicator & 0x0e) >> 1;
- if(priority[num1] > priority[num2]) {
- iNum--;
- continue;
- } else if(priority[pCurConstraint->Indicator] < priority[pCompareConstraint->Indicator])
- continue;
- } else if(pCurConstraint->Indicator > pCompareConstraint->Indicator) {
- iNum--;
- continue;
- } else if(pCurConstraint->Indicator < pCompareConstraint->Indicator)
- continue;
-
- if(0 != (pCurConstraint->Indicator & DRM_END_TIME_CONSTRAINT)) {
- if(pCurConstraint->EndTime.date < pCompareConstraint->EndTime.date) {
- iNum--;
- continue;
- } else if(pCurConstraint->EndTime.date > pCompareConstraint->EndTime.date)
- continue;
-
- if(pCurConstraint->EndTime.time < pCompareConstraint->EndTime.time) {
- iNum--;
- continue;
- } else if(pCurConstraint->EndTime.date > pCompareConstraint->EndTime.date)
- continue;
- }
-
- if(0 != (pCurConstraint->Indicator & DRM_INTERVAL_CONSTRAINT)) {
- if(pCurConstraint->Interval.date < pCompareConstraint->Interval.date) {
- iNum--;
- continue;
- } else if(pCurConstraint->Interval.date > pCompareConstraint->Interval.date)
- continue;
-
- if(pCurConstraint->Interval.time < pCompareConstraint->Interval.time) {
- iNum--;
- continue;
- } else if(pCurConstraint->Interval.time > pCompareConstraint->Interval.time)
- continue;
- }
-
- if(0 != (pCurConstraint->Indicator & DRM_COUNT_CONSTRAINT)) {
- if(pCurConstraint->Count < pCompareConstraint->Count) {
- iNum--;
- continue;
- } else if(pCurConstraint->Count > pCompareConstraint->Count)
- continue;
- }
-
- if(i < j)
- iNum--;
- }
- pNumOfPriority[iNum] = i;
- }
-
- for (i = 0; i < validRoAmount; i++) {
- /** check the right priority */
- if (pNumOfPriority[i] >= validRoAmount)
- break;
-
- pCurRo = pRo + pNumOfPriority[i];
-
- switch (permission) {
- case DRM_PERMISSION_PLAY:
- flag =
- drm_startConsumeRights(&pCurRo->bIsPlayable,
- &pCurRo->PlayConstraint, &writeFlag);
- break;
- case DRM_PERMISSION_DISPLAY:
- flag =
- drm_startConsumeRights(&pCurRo->bIsDisplayable,
- &pCurRo->DisplayConstraint,
- &writeFlag);
- break;
- case DRM_PERMISSION_EXECUTE:
- flag =
- drm_startConsumeRights(&pCurRo->bIsExecuteable,
- &pCurRo->ExecuteConstraint,
- &writeFlag);
- break;
- case DRM_PERMISSION_PRINT:
- flag =
- drm_startConsumeRights(&pCurRo->bIsPrintable,
- &pCurRo->PrintConstraint, &writeFlag);
- break;
- default:
- free(pNumOfPriority);
- free(pRo);
- return DRM_FAILURE;
- }
-
- /* Here confirm the valid RO amount and set the writeFlag */
- if (0 == pCurRo->bIsPlayable && 0 == pCurRo->bIsDisplayable &&
- 0 == pCurRo->bIsExecuteable && 0 == pCurRo->bIsPrintable) {
- int32_t iCurPri;
-
- /** refresh the right priority */
- iCurPri = pNumOfPriority[i];
- for(j = i; j < validRoAmount - 1; j++)
- pNumOfPriority[j] = pNumOfPriority[j + 1];
-
- if(iCurPri != validRoAmount - 1) {
- memcpy(pCurRo, pRo + validRoAmount - 1,
- sizeof(T_DRM_Rights));
- for(j = 0; j < validRoAmount -1; j++) {
- if(validRoAmount - 1 == pNumOfPriority[j])
- pNumOfPriority[j] = iCurPri;
- }
- }
-
- /* Here means it is not the last one RO, so the invalid RO should be deleted */
- writeFlag = 1;
- validRoAmount--; /* If current right is invalid */
- i--;
- }
-
- /* If the flag is TRUE, this means: we have found a valid RO, so break, no need to check other RO */
- if (DRM_SUCCESS == flag)
- break;
- }
-
- if (1 == writeFlag) {
- /* Delete the *.info first */
- //drm_removeIdInfoFile(id);
-
- if (FALSE == drm_writeOrReadInfo(id, pRo, &validRoAmount, SAVE_ALL_RO))
- flag = DRM_FAILURE;
- }
-
- free(pNumOfPriority);
- free(pRo);
- return flag;
-}
-
-
-/* see svc_drm.h */
-int32_t SVC_drm_installRights(T_DRM_Input_Data data, T_DRM_Rights_Info* pRightsInfo)
-{
- uint8_t *buf;
- int32_t dataLen, bufLen;
- T_DRM_Rights rights;
-
- if (0 == data.inputHandle)
- return DRM_RIGHTS_DATA_INVALID;
-
- /* Get input rights data length */
- dataLen = data.getInputDataLength(data.inputHandle);
- if (dataLen <= 0)
- return DRM_RIGHTS_DATA_INVALID;
-
- /* Check if the length is larger than DRM max malloc length */
- if (dataLen > DRM_MAX_MALLOC_LEN)
- bufLen = DRM_MAX_MALLOC_LEN;
- else
- bufLen = dataLen;
-
- buf = (uint8_t *)malloc(bufLen);
- if (NULL == buf)
- return DRM_FAILURE;
-
- /* Read input data to buffer */
- if (0 >= data.readInputData(data.inputHandle, buf, bufLen)) {
- free(buf);
- return DRM_RIGHTS_DATA_INVALID;
- }
-
- /* if the input mime type is unknown, DRM engine will try to recognize it. */
- if (TYPE_DRM_UNKNOWN == data.mimeType)
- data.mimeType = getMimeType(buf, bufLen);
-
- switch(data.mimeType) {
- case TYPE_DRM_MESSAGE: /* in case of Combined Delivery, extract the rights part to install */
- {
- T_DRM_DM_Info dmInfo;
-
- memset(&dmInfo, 0, sizeof(T_DRM_DM_Info));
- if (FALSE == drm_parseDM(buf, bufLen, &dmInfo)) {
- free(buf);
- return DRM_RIGHTS_DATA_INVALID;
- }
-
- /* if it is not Combined Delivery, it can not use to "SVC_drm_installRights" */
- if (COMBINED_DELIVERY != dmInfo.deliveryType || dmInfo.rightsOffset <= 0 || dmInfo.rightsLen <= 0) {
- free(buf);
- return DRM_RIGHTS_DATA_INVALID;
- }
-
- memset(&rights, 0, sizeof(T_DRM_Rights));
- if (FALSE == drm_relParser(buf + dmInfo.rightsOffset, dmInfo.rightsLen, TYPE_DRM_RIGHTS_XML, &rights)) {
- free(buf);
- return DRM_RIGHTS_DATA_INVALID;
- }
- }
- break;
- case TYPE_DRM_RIGHTS_XML:
- case TYPE_DRM_RIGHTS_WBXML:
- memset(&rights, 0, sizeof(T_DRM_Rights));
- if (FALSE == drm_relParser(buf, bufLen, data.mimeType, &rights)) {
- free(buf);
- return DRM_RIGHTS_DATA_INVALID;
- }
- break;
- case TYPE_DRM_CONTENT: /* DCF should not using "SVC_drm_installRights", it should be used to open a session. */
- case TYPE_DRM_UNKNOWN:
- default:
- free(buf);
- return DRM_MEDIA_DATA_INVALID;
- }
-
- free(buf);
-
- /* append the rights information to DRM engine storage */
- if (FALSE == drm_appendRightsInfo(&rights))
- return DRM_FAILURE;
-
- memset(pRightsInfo, 0, sizeof(T_DRM_Rights_Info));
- drm_getLicenseInfo(&rights, pRightsInfo);
-
- return DRM_SUCCESS;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_openSession(T_DRM_Input_Data data)
-{
- int32_t session;
- int32_t dataLen;
- T_DRM_Session_Node* s;
-
- if (0 == data.inputHandle)
- return DRM_MEDIA_DATA_INVALID;
-
- /* Get input data length */
- dataLen = data.getInputDataLength(data.inputHandle);
- if (dataLen <= 0)
- return DRM_MEDIA_DATA_INVALID;
-
- s = newSession(data);
- if (NULL == s)
- return DRM_FAILURE;
-
- /* Check if the length is larger than DRM max malloc length */
- if (dataLen > DRM_MAX_MALLOC_LEN)
- s->rawContentLen = DRM_MAX_MALLOC_LEN;
- else
- s->rawContentLen = dataLen;
-
- s->rawContent = (uint8_t *)malloc(s->rawContentLen);
- if (NULL == s->rawContent)
- return DRM_FAILURE;
-
- /* Read input data to buffer */
- if (0 >= data.readInputData(data.inputHandle, s->rawContent, s->rawContentLen)) {
- freeSession(s);
- return DRM_MEDIA_DATA_INVALID;
- }
-
- /* if the input mime type is unknown, DRM engine will try to recognize it. */
- if (TYPE_DRM_UNKNOWN == data.mimeType)
- data.mimeType = getMimeType(s->rawContent, s->rawContentLen);
-
- switch(data.mimeType) {
- case TYPE_DRM_MESSAGE:
- {
- T_DRM_DM_Info dmInfo;
-
- memset(&dmInfo, 0, sizeof(T_DRM_DM_Info));
- if (FALSE == drm_parseDM(s->rawContent, s->rawContentLen, &dmInfo)) {
- freeSession(s);
- return DRM_MEDIA_DATA_INVALID;
- }
-
- s->deliveryMethod = dmInfo.deliveryType;
-
- if (SEPARATE_DELIVERY_FL == s->deliveryMethod)
- s->contentLength = DRM_UNKNOWN_DATA_LEN;
- else
- s->contentLength = dmInfo.contentLen;
-
- s->transferEncoding = dmInfo.transferEncoding;
- s->contentOffset = dmInfo.contentOffset;
- s->bEndData = FALSE;
- strcpy((char *)s->contentType, (char *)dmInfo.contentType);
- strcpy((char *)s->contentID, (char *)dmInfo.contentID);
-
- if (SEPARATE_DELIVERY_FL == s->deliveryMethod) {
- s->infoStruct = (T_DRM_Dcf_Node *)malloc(sizeof(T_DRM_Dcf_Node));
- if (NULL == s->infoStruct)
- return DRM_FAILURE;
- memset(s->infoStruct, 0, sizeof(T_DRM_Dcf_Node));
-
- ((T_DRM_Dcf_Node *)(s->infoStruct))->encContentLength = dmInfo.contentLen;
- strcpy((char *)((T_DRM_Dcf_Node *)(s->infoStruct))->rightsIssuer, (char *)dmInfo.rightsIssuer);
- break;
- }
-
- if (DRM_MESSAGE_CODING_BASE64 == s->transferEncoding) {
- s->infoStruct = (T_DRM_DM_Base64_Node *)malloc(sizeof(T_DRM_DM_Base64_Node));
- if (NULL == s->infoStruct)
- return DRM_FAILURE;
- memset(s->infoStruct, 0, sizeof(T_DRM_DM_Base64_Node));
-
- strcpy((char *)((T_DRM_DM_Base64_Node *)(s->infoStruct))->boundary, (char *)dmInfo.boundary);
- } else {
- s->infoStruct = (T_DRM_DM_Binary_Node *)malloc(sizeof(T_DRM_DM_Binary_Node));
- if (NULL == s->infoStruct)
- return DRM_FAILURE;
- memset(s->infoStruct, 0, sizeof(T_DRM_DM_Binary_Node));
-
- strcpy((char *)((T_DRM_DM_Binary_Node *)(s->infoStruct))->boundary, (char *)dmInfo.boundary);
- }
-
-
- if (DRM_MESSAGE_CODING_BASE64 == s->transferEncoding) {
- if (s->contentLength > 0) {
- int32_t encLen, decLen;
-
- encLen = s->contentLength;
- decLen = encLen / DRM_B64_ENC_BLOCK * DRM_B64_DEC_BLOCK;
-
- decLen = drm_decodeBase64(s->rawContent, decLen, s->rawContent + s->contentOffset, &encLen);
- s->contentLength = decLen;
- } else {
- int32_t encLen = DRM_MAX_MALLOC_LEN - s->contentOffset, decLen;
- int32_t skipLen, needBytes, i;
- uint8_t *pStart;
- int32_t res, bFoundBoundary = FALSE;
-
- pStart = s->rawContent + s->contentOffset;
- if (-1 == (skipLen = drm_skipCRLFinB64(pStart, encLen))) {
- freeSession(s);
- return DRM_FAILURE;
- }
-
- needBytes = DRM_B64_ENC_BLOCK - ((encLen - skipLen) % DRM_B64_ENC_BLOCK);
- if (needBytes < DRM_B64_ENC_BLOCK) {
- s->rawContent = (uint8_t *)realloc(s->rawContent, DRM_MAX_MALLOC_LEN + needBytes);
- if (NULL == s->rawContent) {
- freeSession(s);
- return DRM_FAILURE;
- }
-
- i = 0;
- while (i < needBytes) {
- if (-1 != data.readInputData(data.inputHandle, s->rawContent + DRM_MAX_MALLOC_LEN + i, 1)) {
- if ('\r' == *(s->rawContent + DRM_MAX_MALLOC_LEN + i) || '\n' == *(s->rawContent + DRM_MAX_MALLOC_LEN + i))
- continue;
- i++;
- } else
- break;
- }
- encLen += i;
- }
-
- res = drm_scanEndBoundary(pStart, encLen, ((T_DRM_DM_Base64_Node *)(s->infoStruct))->boundary);
- if (-1 == res) {
- freeSession(s);
- return DRM_FAILURE;
- }
- if (-2 == res) { /* may be there is a boundary */
- int32_t boundaryLen, leftLen, readBytes;
- char* pTmp = memrchr(pStart, '\r', encLen);
-
- if (NULL == pTmp) {
- freeSession(s);
- return DRM_FAILURE; /* conflict */
- }
- boundaryLen = strlen((char *)((T_DRM_DM_Base64_Node *)(s->infoStruct))->boundary) + 2; /* 2 means: '\r''\n' */
- s->readBuf = (uint8_t *)malloc(boundaryLen);
- if (NULL == s->readBuf) {
- freeSession(s);
- return DRM_FAILURE;
- }
- s->readBufOff = encLen - ((uint8_t *)pTmp - pStart);
- s->readBufLen = boundaryLen - s->readBufOff;
- memcpy(s->readBuf, pTmp, s->readBufOff);
- readBytes = data.readInputData(data.inputHandle, s->readBuf + s->readBufOff, s->readBufLen);
- if (-1 == readBytes || readBytes < s->readBufLen) {
- freeSession(s);
- return DRM_MEDIA_DATA_INVALID;
- }
-
- if (0 == drm_scanEndBoundary(s->readBuf, boundaryLen, ((T_DRM_DM_Base64_Node *)(s->infoStruct))->boundary)) {
- encLen = (uint8_t *)pTmp - pStart; /* yes, it is the end boundary */
- bFoundBoundary = TRUE;
- }
- } else {
- if (res >= 0 && res < encLen) {
- encLen = res;
- bFoundBoundary = TRUE;
- }
- }
-
- decLen = encLen / DRM_B64_ENC_BLOCK * DRM_B64_DEC_BLOCK;
- decLen = drm_decodeBase64(s->rawContent, decLen, s->rawContent + s->contentOffset, &encLen);
- ((T_DRM_DM_Base64_Node *)(s->infoStruct))->b64DecodeDataLen = decLen;
- if (bFoundBoundary)
- s->contentLength = decLen;
- }
- } else {
- /* binary data */
- if (DRM_UNKNOWN_DATA_LEN == s->contentLength) {
- /* try to check whether there is boundary may be split */
- int32_t res, binContentLen;
- uint8_t* pStart;
- int32_t bFoundBoundary = FALSE;
-
- pStart = s->rawContent + s->contentOffset;
- binContentLen = s->rawContentLen - s->contentOffset;
- res = drm_scanEndBoundary(pStart, binContentLen, ((T_DRM_DM_Binary_Node *)(s->infoStruct))->boundary);
-
- if (-1 == res) {
- freeSession(s);
- return DRM_FAILURE;
- }
-
- if (-2 == res) { /* may be the boundary is split */
- int32_t boundaryLen, leftLen, readBytes;
- char* pTmp = memrchr(pStart, '\r', binContentLen);
-
- if (NULL == pTmp) {
- freeSession(s);
- return DRM_FAILURE; /* conflict */
- }
-
- boundaryLen = strlen((char *)((T_DRM_DM_Binary_Node *)(s->infoStruct))->boundary) + 2; /* 2 means: '\r''\n' */
- s->readBuf = (uint8_t *)malloc(boundaryLen);
- if (NULL == s->readBuf) {
- freeSession(s);
- return DRM_FAILURE;
- }
- s->readBufOff = binContentLen - ((uint8_t *)pTmp - pStart);
- s->readBufLen = boundaryLen - s->readBufOff;
- memcpy(s->readBuf, pTmp, s->readBufOff);
- readBytes = data.readInputData(data.inputHandle, s->readBuf + s->readBufOff, s->readBufLen);
- if (-1 == readBytes || readBytes < s->readBufLen) {
- freeSession(s);
- return DRM_MEDIA_DATA_INVALID;
- }
-
- if (0 == drm_scanEndBoundary(s->readBuf, boundaryLen, ((T_DRM_DM_Binary_Node *)(s->infoStruct))->boundary)) {
- binContentLen = (uint8_t *)pTmp - pStart; /* yes, it is the end boundary */
- bFoundBoundary = TRUE;
- }
- } else {
- if (res >= 0 && res < binContentLen) {
- binContentLen = res;
- bFoundBoundary = TRUE;
- }
- }
-
- if (bFoundBoundary)
- s->contentLength = binContentLen;
- }
- }
- }
- break;
- case TYPE_DRM_CONTENT:
- {
- T_DRM_DCF_Info dcfInfo;
- uint8_t* pEncData = NULL;
-
- memset(&dcfInfo, 0, sizeof(T_DRM_DCF_Info));
- if (FALSE == drm_dcfParser(s->rawContent, s->rawContentLen, &dcfInfo, &pEncData)) {
- freeSession(s);
- return DRM_MEDIA_DATA_INVALID;
- }
-
- s->infoStruct = (T_DRM_Dcf_Node *)malloc(sizeof(T_DRM_Dcf_Node));
- if (NULL == s->infoStruct)
- return DRM_FAILURE;
- memset(s->infoStruct, 0, sizeof(T_DRM_Dcf_Node));
-
- s->deliveryMethod = SEPARATE_DELIVERY;
- s->contentLength = dcfInfo.DecryptedDataLen;
- ((T_DRM_Dcf_Node *)(s->infoStruct))->encContentLength = dcfInfo.EncryptedDataLen;
- s->contentOffset = pEncData - s->rawContent;
- strcpy((char *)s->contentType, (char *)dcfInfo.ContentType);
- strcpy((char *)s->contentID, (char *)dcfInfo.ContentURI);
- strcpy((char *)((T_DRM_Dcf_Node *)(s->infoStruct))->rightsIssuer, (char *)dcfInfo.Rights_Issuer);
- }
- break;
- case TYPE_DRM_RIGHTS_XML: /* rights object should using "SVC_drm_installRights", it can not open a session */
- case TYPE_DRM_RIGHTS_WBXML: /* rights object should using "SVC_drm_installRights", it can not open a session */
- case TYPE_DRM_UNKNOWN:
- default:
- freeSession(s);
- return DRM_MEDIA_DATA_INVALID;
- }
-
- if ((SEPARATE_DELIVERY_FL == s->deliveryMethod || SEPARATE_DELIVERY == s->deliveryMethod) &&
- s->contentOffset + ((T_DRM_Dcf_Node *)(s->infoStruct))->encContentLength <= DRM_MAX_MALLOC_LEN) {
- uint8_t keyValue[DRM_KEY_LEN];
- uint8_t lastDcfBuf[DRM_TWO_AES_BLOCK_LEN];
- int32_t seekPos, moreBytes;
-
- if (TRUE == drm_getKey(s->contentID, keyValue)) {
- seekPos = s->contentOffset + ((T_DRM_Dcf_Node *)(s->infoStruct))->encContentLength - DRM_TWO_AES_BLOCK_LEN;
- memcpy(lastDcfBuf, s->rawContent + seekPos, DRM_TWO_AES_BLOCK_LEN);
-
- if (TRUE == drm_updateDcfDataLen(lastDcfBuf, keyValue, &moreBytes)) {
- s->contentLength = ((T_DRM_Dcf_Node *)(s->infoStruct))->encContentLength;
- s->contentLength -= moreBytes;
- }
- }
- }
-
- session = addSession(s);
- if (-1 == session)
- return DRM_FAILURE;
-
- return session;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_getDeliveryMethod(int32_t session)
-{
- T_DRM_Session_Node* s;
-
- if (session < 0)
- return DRM_FAILURE;
-
- s = getSession(session);
- if (NULL == s)
- return DRM_SESSION_NOT_OPENED;
-
- return s->deliveryMethod;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_getContentType(int32_t session, uint8_t* mediaType)
-{
- T_DRM_Session_Node* s;
-
- if (session < 0 || NULL == mediaType)
- return DRM_FAILURE;
-
- s = getSession(session);
- if (NULL == s)
- return DRM_SESSION_NOT_OPENED;
-
- strcpy((char *)mediaType, (char *)s->contentType);
-
- return DRM_SUCCESS;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_checkRights(int32_t session, int32_t permission)
-{
- T_DRM_Session_Node* s;
- int32_t id;
- T_DRM_Rights *pRo, *pCurRo;
- int32_t roAmount;
- int32_t i;
- int32_t res = DRM_FAILURE;
-
- if (session < 0)
- return DRM_FAILURE;
-
- s = getSession(session);
- if (NULL == s)
- return DRM_SESSION_NOT_OPENED;
-
- /* if it is Forward-Lock cases, check it and return directly */
- if (FORWARD_LOCK == s->deliveryMethod) {
- if (DRM_PERMISSION_PLAY == permission ||
- DRM_PERMISSION_DISPLAY == permission ||
- DRM_PERMISSION_EXECUTE == permission ||
- DRM_PERMISSION_PRINT == permission)
- return DRM_SUCCESS;
-
- return DRM_FAILURE;
- }
-
- /* if try to forward, only DCF can be forwarded */
- if (DRM_PERMISSION_FORWARD == permission) {
- if (SEPARATE_DELIVERY == s->deliveryMethod)
- return DRM_SUCCESS;
-
- return DRM_FAILURE;
- }
-
- /* The following will check CD or SD other permissions */
- if (FALSE == drm_readFromUidTxt(s->contentID, &id, GET_ID))
- return DRM_FAILURE;
-
- drm_writeOrReadInfo(id, NULL, &roAmount, GET_ROAMOUNT);
- if (roAmount <= 0)
- return DRM_FAILURE;
-
- pRo = malloc(roAmount * sizeof(T_DRM_Rights));
- if (NULL == pRo)
- return DRM_FAILURE;
-
- drm_writeOrReadInfo(id, pRo, &roAmount, GET_ALL_RO);
-
- pCurRo = pRo;
- for (i = 0; i < roAmount; i++) {
- switch (permission) {
- case DRM_PERMISSION_PLAY:
- res = drm_startCheckRights(&(pCurRo->bIsPlayable), &(pCurRo->PlayConstraint));
- break;
- case DRM_PERMISSION_DISPLAY:
- res = drm_startCheckRights(&(pCurRo->bIsDisplayable), &(pCurRo->DisplayConstraint));
- break;
- case DRM_PERMISSION_EXECUTE:
- res = drm_startCheckRights(&(pCurRo->bIsExecuteable), &(pCurRo->ExecuteConstraint));
- break;
- case DRM_PERMISSION_PRINT:
- res = drm_startCheckRights(&(pCurRo->bIsPrintable), &(pCurRo->PrintConstraint));
- break;
- default:
- free(pRo);
- return DRM_FAILURE;
- }
-
- if (DRM_SUCCESS == res) {
- free(pRo);
- return DRM_SUCCESS;
- }
- pCurRo++;
- }
-
- free(pRo);
- return res;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_consumeRights(int32_t session, int32_t permission)
-{
- T_DRM_Session_Node* s;
- int32_t id;
-
- if (session < 0)
- return DRM_FAILURE;
-
- s = getSession(session);
- if (NULL == s)
- return DRM_SESSION_NOT_OPENED;
-
- if (DRM_PERMISSION_FORWARD == permission) {
- if (SEPARATE_DELIVERY == s->deliveryMethod)
- return DRM_SUCCESS;
-
- return DRM_FAILURE;
- }
-
- if (FORWARD_LOCK == s->deliveryMethod) /* Forwardlock type have utter rights */
- return DRM_SUCCESS;
-
- if (FALSE == drm_readFromUidTxt(s->contentID, &id, GET_ID))
- return DRM_FAILURE;
-
- return drm_checkRoAndUpdate(id, permission);
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_getContentLength(int32_t session)
-{
- T_DRM_Session_Node* s;
-
- if (session < 0)
- return DRM_FAILURE;
-
- s = getSession(session);
- if (NULL == s)
- return DRM_SESSION_NOT_OPENED;
-
- if (DRM_UNKNOWN_DATA_LEN == s->contentLength && s->contentOffset + ((T_DRM_Dcf_Node *)(s->infoStruct))->encContentLength <= DRM_MAX_MALLOC_LEN &&
- (SEPARATE_DELIVERY == s->deliveryMethod || SEPARATE_DELIVERY_FL == s->deliveryMethod)) {
- uint8_t keyValue[DRM_KEY_LEN];
- uint8_t lastDcfBuf[DRM_TWO_AES_BLOCK_LEN];
- int32_t seekPos, moreBytes;
-
- if (TRUE == drm_getKey(s->contentID, keyValue)) {
- seekPos = s->contentOffset + ((T_DRM_Dcf_Node *)(s->infoStruct))->encContentLength - DRM_TWO_AES_BLOCK_LEN;
- memcpy(lastDcfBuf, s->rawContent + seekPos, DRM_TWO_AES_BLOCK_LEN);
-
- if (TRUE == drm_updateDcfDataLen(lastDcfBuf, keyValue, &moreBytes)) {
- s->contentLength = ((T_DRM_Dcf_Node *)(s->infoStruct))->encContentLength;
- s->contentLength -= moreBytes;
- }
- }
- }
-
- return s->contentLength;
-}
-
-static int32_t drm_readAesData(uint8_t* buf, T_DRM_Session_Node* s, int32_t aesStart, int32_t bufLen)
-{
- if (NULL == buf || NULL == s || aesStart < 0 || bufLen < 0)
- return -1;
-
- if (aesStart - s->contentOffset + bufLen > ((T_DRM_Dcf_Node *)(s->infoStruct))->encContentLength)
- return -2;
-
- if (aesStart < DRM_MAX_MALLOC_LEN) {
- if (aesStart + bufLen <= DRM_MAX_MALLOC_LEN) { /* read from buffer */
- memcpy(buf, s->rawContent + aesStart, bufLen);
- return bufLen;
- } else { /* first read from buffer and then from InputStream */
- int32_t point = DRM_MAX_MALLOC_LEN - aesStart;
- int32_t res;
-
- if (((T_DRM_Dcf_Node *)(s->infoStruct))->bAesBackupBuf) {
- memcpy(buf, ((T_DRM_Dcf_Node *)(s->infoStruct))->aesBackupBuf, DRM_ONE_AES_BLOCK_LEN);
- res = s->readInputDataFunc(s->inputHandle, buf + DRM_ONE_AES_BLOCK_LEN, DRM_ONE_AES_BLOCK_LEN);
- if (0 == res || -1 == res)
- return -1;
-
- res += DRM_ONE_AES_BLOCK_LEN;
- } else {
- memcpy(buf, s->rawContent + aesStart, point);
- res = s->readInputDataFunc(s->inputHandle, buf + point, bufLen - point);
- if (0 == res || -1 == res)
- return -1;
-
- res += point;
- }
-
- memcpy(((T_DRM_Dcf_Node *)(s->infoStruct))->aesBackupBuf, buf + DRM_ONE_AES_BLOCK_LEN, DRM_ONE_AES_BLOCK_LEN);
- ((T_DRM_Dcf_Node *)(s->infoStruct))->bAesBackupBuf = TRUE;
-
- return res;
- }
- } else { /* read from InputStream */
- int32_t res;
-
- memcpy(buf, ((T_DRM_Dcf_Node *)(s->infoStruct))->aesBackupBuf, DRM_ONE_AES_BLOCK_LEN);
- res = s->readInputDataFunc(s->inputHandle, buf + DRM_ONE_AES_BLOCK_LEN, DRM_ONE_AES_BLOCK_LEN);
-
- if (0 == res || -1 == res)
- return -1;
-
- memcpy(((T_DRM_Dcf_Node *)(s->infoStruct))->aesBackupBuf, buf + DRM_ONE_AES_BLOCK_LEN, DRM_ONE_AES_BLOCK_LEN);
-
- return DRM_ONE_AES_BLOCK_LEN + res;
- }
-}
-
-static int32_t drm_readContentFromBuf(T_DRM_Session_Node* s, int32_t offset, uint8_t* mediaBuf, int32_t mediaBufLen)
-{
- int32_t readBytes;
-
- if (offset > s->contentLength)
- return DRM_FAILURE;
-
- if (offset == s->contentLength)
- return DRM_MEDIA_EOF;
-
- if (offset + mediaBufLen > s->contentLength)
- readBytes = s->contentLength - offset;
- else
- readBytes = mediaBufLen;
-
- if (DRM_MESSAGE_CODING_BASE64 == s->transferEncoding)
- memcpy(mediaBuf, s->rawContent + offset, readBytes);
- else
- memcpy(mediaBuf, s->rawContent + s->contentOffset + offset, readBytes);
-
- return readBytes;
-}
-
-static int32_t drm_readB64ContentFromInputStream(T_DRM_Session_Node* s, int32_t offset, uint8_t* mediaBuf, int32_t mediaBufLen)
-{
- uint8_t encBuf[DRM_B64_ENC_BLOCK], decBuf[DRM_B64_DEC_BLOCK];
- int32_t encLen, decLen;
- int32_t i, j, piece, leftLen, firstBytes;
- int32_t readBytes = 0;
-
- if (offset < ((T_DRM_DM_Base64_Node *)(s->infoStruct))->b64DecodeDataLen) {
- readBytes = ((T_DRM_DM_Base64_Node *)(s->infoStruct))->b64DecodeDataLen - offset;
- memcpy(mediaBuf, s->rawContent + offset, readBytes);
- } else {
- if (s->bEndData)
- return DRM_MEDIA_EOF;
-
- firstBytes = offset % DRM_B64_DEC_BLOCK;
- if (firstBytes > 0) {
- if (DRM_B64_DEC_BLOCK - firstBytes >= mediaBufLen) {
- readBytes = mediaBufLen;
- memcpy(mediaBuf, ((T_DRM_DM_Base64_Node *)(s->infoStruct))->b64DecodeData + firstBytes, readBytes);
- return readBytes;
- }
-
- readBytes = DRM_B64_DEC_BLOCK - firstBytes;
- memcpy(mediaBuf, ((T_DRM_DM_Base64_Node *)(s->infoStruct))->b64DecodeData + firstBytes, readBytes);
- }
- }
-
- leftLen = mediaBufLen - readBytes;
- encLen = (leftLen - 1) / DRM_B64_DEC_BLOCK * DRM_B64_ENC_BLOCK + DRM_B64_ENC_BLOCK;
- piece = encLen / DRM_B64_ENC_BLOCK;
-
- for (i = 0; i < piece; i++) {
- j = 0;
- while (j < DRM_B64_ENC_BLOCK) {
- if (NULL != s->readBuf && s->readBufLen > 0) { /* read from backup buffer */
- *(encBuf + j) = s->readBuf[s->readBufOff];
- s->readBufOff++;
- s->readBufLen--;
- } else { /* read from InputStream */
- if (0 == s->readInputDataFunc(s->inputHandle, encBuf + j, 1))
- return DRM_MEDIA_DATA_INVALID;
- }
-
- if ('\r' == *(encBuf + j) || '\n' == *(encBuf + j))
- continue; /* skip CRLF */
-
- if ('-' == *(encBuf + j)) {
- int32_t k, len;
-
- /* invalid base64 data, it comes to end boundary */
- if (0 != j)
- return DRM_MEDIA_DATA_INVALID;
-
- /* check whether it is really the boundary */
- len = strlen((char *)((T_DRM_DM_Base64_Node *)(s->infoStruct))->boundary);
- if (NULL == s->readBuf) {
- s->readBuf = (uint8_t *)malloc(len);
- if (NULL == s->readBuf)
- return DRM_FAILURE;
- }
-
- s->readBuf[0] = '-';
- for (k = 0; k < len - 1; k++) {
- if (NULL != s->readBuf && s->readBufLen > 0) { /* read from backup buffer */
- *(s->readBuf + k + 1) = s->readBuf[s->readBufOff];
- s->readBufOff++;
- s->readBufLen--;
- } else { /* read from InputStream */
- if (-1 == s->readInputDataFunc(s->inputHandle, s->readBuf + k + 1, 1))
- return DRM_MEDIA_DATA_INVALID;
- }
- }
- if (0 == memcmp(s->readBuf, ((T_DRM_DM_Base64_Node *)(s->infoStruct))->boundary, len))
- s->bEndData = TRUE;
- else
- return DRM_MEDIA_DATA_INVALID;
-
- break;
- }
- j++;
- }
-
- if (TRUE == s->bEndData) { /* it means come to the end of base64 data */
- if (0 == readBytes)
- return DRM_MEDIA_EOF;
-
- break;
- }
-
- encLen = DRM_B64_ENC_BLOCK;
- decLen = DRM_B64_DEC_BLOCK;
- if (-1 == (decLen = drm_decodeBase64(decBuf, decLen, encBuf, &encLen)))
- return DRM_MEDIA_DATA_INVALID;
-
- if (leftLen >= decLen) {
- memcpy(mediaBuf + readBytes, decBuf, decLen);
- readBytes += decLen;
- leftLen -= decLen;
- } else {
- if (leftLen > 0) {
- memcpy(mediaBuf + readBytes, decBuf, leftLen);
- readBytes += leftLen;
- }
- break;
- }
- }
- memcpy(((T_DRM_DM_Base64_Node *)(s->infoStruct))->b64DecodeData, decBuf, DRM_B64_DEC_BLOCK);
-
- return readBytes;
-}
-
-static int32_t drm_readBase64Content(T_DRM_Session_Node* s, int32_t offset, uint8_t* mediaBuf, int32_t mediaBufLen)
-{
- int32_t readBytes;
-
- /* when the content length has been well-known */
- if (s->contentLength >= 0)
- readBytes = drm_readContentFromBuf(s, offset, mediaBuf, mediaBufLen);
- else /* else when the content length has not been well-known yet */
- if (offset < ((T_DRM_DM_Base64_Node *)(s->infoStruct))->b64DecodeDataLen)
- if (offset + mediaBufLen <= ((T_DRM_DM_Base64_Node *)(s->infoStruct))->b64DecodeDataLen) {
- readBytes = mediaBufLen;
- memcpy(mediaBuf, s->rawContent + offset, readBytes);
- } else
- readBytes = drm_readB64ContentFromInputStream(s, offset, mediaBuf, mediaBufLen);
- else
- readBytes = drm_readB64ContentFromInputStream(s, offset, mediaBuf, mediaBufLen);
-
- return readBytes;
-}
-
-static int32_t drm_readBinaryContentFromInputStream(T_DRM_Session_Node* s, int32_t offset, uint8_t* mediaBuf, int32_t mediaBufLen)
-{
- int32_t res = 0, readBytes = 0;
- int32_t leftLen;
-
- if (s->contentOffset + offset < DRM_MAX_MALLOC_LEN) {
- readBytes = DRM_MAX_MALLOC_LEN - s->contentOffset - offset;
- memcpy(mediaBuf, s->rawContent + s->contentOffset + offset, readBytes);
- } else
- if (s->bEndData)
- return DRM_MEDIA_EOF;
-
- leftLen = mediaBufLen - readBytes;
-
- if (NULL != s->readBuf && s->readBufLen > 0) { /* read from backup buffer */
- if (leftLen <= s->readBufLen) {
- memcpy(mediaBuf, s->readBuf + s->readBufOff, leftLen);
- s->readBufOff += leftLen;
- s->readBufLen -= leftLen;
- readBytes += leftLen;
- leftLen = 0;
- } else {
- memcpy(mediaBuf, s->readBuf + s->readBufOff, s->readBufLen);
- s->readBufOff += s->readBufLen;
- leftLen -= s->readBufLen;
- readBytes += s->readBufLen;
- s->readBufLen = 0;
- }
- }
-
- if (leftLen > 0) {
- res = s->readInputDataFunc(s->inputHandle, mediaBuf + readBytes, mediaBufLen - readBytes);
- if (-1 == res)
- return DRM_MEDIA_DATA_INVALID;
- }
-
- readBytes += res;
- res = drm_scanEndBoundary(mediaBuf, readBytes, ((T_DRM_DM_Binary_Node *)(s->infoStruct))->boundary);
- if (-1 == res)
- return DRM_MEDIA_DATA_INVALID;
- if (-2 == res) { /* may be the boundary is split */
- int32_t boundaryLen, len, off, k;
- char* pTmp = memrchr(mediaBuf, '\r', readBytes);
-
- if (NULL == pTmp)
- return DRM_FAILURE; /* conflict */
-
- boundaryLen = strlen((char *)((T_DRM_DM_Binary_Node *)(s->infoStruct))->boundary) + 2; /* 2 means: '\r''\n' */
- if (NULL == s->readBuf) {
- s->readBuf = (uint8_t *)malloc(boundaryLen);
- if (NULL == s->readBuf)
- return DRM_FAILURE;
- }
-
- off = readBytes - ((uint8_t *)pTmp - mediaBuf);
- len = boundaryLen - off;
- memcpy(s->readBuf, pTmp, off);
- for (k = 0; k < boundaryLen - off; k++) {
- if (NULL != s->readBuf && s->readBufLen > 0) { /* read from backup buffer */
- *(s->readBuf + k + off) = s->readBuf[s->readBufOff];
- s->readBufOff++;
- s->readBufLen--;
- } else { /* read from InputStream */
- if (-1 == s->readInputDataFunc(s->inputHandle, s->readBuf + k + off, 1))
- return DRM_MEDIA_DATA_INVALID;
- }
- }
- s->readBufOff = off;
- s->readBufLen = len;
-
- if (0 == drm_scanEndBoundary(s->readBuf, boundaryLen, ((T_DRM_DM_Binary_Node *)(s->infoStruct))->boundary)) {
- readBytes = (uint8_t *)pTmp - mediaBuf; /* yes, it is the end boundary */
- s->bEndData = TRUE;
- }
- } else {
- if (res >= 0 && res < readBytes) {
- readBytes = res;
- s->bEndData = TRUE;
- }
- }
-
- if (s->bEndData) {
- if (0 == readBytes)
- return DRM_MEDIA_EOF;
- }
-
- return readBytes;
-}
-
-static int32_t drm_readBinaryContent(T_DRM_Session_Node* s, int32_t offset, uint8_t* mediaBuf, int32_t mediaBufLen)
-{
- int32_t readBytes;
-
- if (s->contentLength >= 0)
- readBytes = drm_readContentFromBuf(s, offset, mediaBuf, mediaBufLen);
- else /* else when the content length has not been well-known yet */
- if (s->contentOffset + offset < DRM_MAX_MALLOC_LEN)
- if (s->contentOffset + offset + mediaBufLen <= DRM_MAX_MALLOC_LEN) {
- readBytes = mediaBufLen;
- memcpy(mediaBuf, s->rawContent + s->contentOffset + offset, readBytes);
- } else
- readBytes = drm_readBinaryContentFromInputStream(s, offset, mediaBuf, mediaBufLen);
- else
- readBytes = drm_readBinaryContentFromInputStream(s, offset, mediaBuf, mediaBufLen);
-
- return readBytes;
-}
-
-static int32_t drm_readAesContent(T_DRM_Session_Node* s, int32_t offset, uint8_t* mediaBuf, int32_t mediaBufLen)
-{
- uint8_t keyValue[DRM_KEY_LEN];
- uint8_t buf[DRM_TWO_AES_BLOCK_LEN];
- int32_t readBytes = 0;
- int32_t bufLen, piece, i, copyBytes, leftBytes;
- int32_t aesStart, mediaStart, mediaBufOff;
- aes_decrypt_ctx ctx[1];
-
- if (FALSE == drm_getKey(s->contentID, keyValue))
- return DRM_NO_RIGHTS;
-
- /* when the content length has been well-known */
- if (s->contentLength > 0) {
- if (offset > s->contentLength)
- return DRM_FAILURE;
-
- if (offset == s->contentLength)
- return DRM_MEDIA_EOF;
-
- if (offset + mediaBufLen > s->contentLength)
- readBytes = s->contentLength - offset;
- else
- readBytes = mediaBufLen;
-
- aesStart = s->contentOffset + (offset / DRM_ONE_AES_BLOCK_LEN * DRM_ONE_AES_BLOCK_LEN);
- piece = (offset + readBytes - 1) / DRM_ONE_AES_BLOCK_LEN - offset / DRM_ONE_AES_BLOCK_LEN + 2;
- mediaStart = offset % DRM_ONE_AES_BLOCK_LEN;
-
- aes_decrypt_key128(keyValue, ctx);
- mediaBufOff = 0;
- leftBytes = readBytes;
-
- for (i = 0; i < piece - 1; i++) {
- memcpy(buf, s->rawContent + aesStart + i * DRM_ONE_AES_BLOCK_LEN, DRM_TWO_AES_BLOCK_LEN);
- bufLen = DRM_TWO_AES_BLOCK_LEN;
-
- if (drm_aesDecBuffer(buf, &bufLen, ctx) < 0)
- return DRM_MEDIA_DATA_INVALID;
-
- if (0 != i)
- mediaStart = 0;
-
- if (bufLen - mediaStart <= leftBytes)
- copyBytes = bufLen - mediaStart;
- else
- copyBytes = leftBytes;
-
- memcpy(mediaBuf + mediaBufOff, buf + mediaStart, copyBytes);
- leftBytes -= copyBytes;
- mediaBufOff += copyBytes;
- }
- } else {
- int32_t res;
-
- if (s->bEndData)
- return DRM_MEDIA_EOF;
-
- if (((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataLen > ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataOff) {
- if (mediaBufLen < ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataLen - ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataOff)
- copyBytes = mediaBufLen;
- else
- copyBytes = ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataLen - ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataOff;
-
- memcpy(mediaBuf, ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecData + ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataOff, copyBytes);
- ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataOff += copyBytes;
- readBytes += copyBytes;
- }
-
- leftBytes = mediaBufLen - readBytes;
- if (0 == leftBytes)
- return readBytes;
- if (leftBytes < 0)
- return DRM_FAILURE;
-
- offset += readBytes;
- aesStart = s->contentOffset + (offset / DRM_ONE_AES_BLOCK_LEN * DRM_ONE_AES_BLOCK_LEN);
- piece = (offset + leftBytes - 1) / DRM_ONE_AES_BLOCK_LEN - offset / DRM_ONE_AES_BLOCK_LEN + 2;
- mediaBufOff = readBytes;
-
- aes_decrypt_key128(keyValue, ctx);
-
- for (i = 0; i < piece - 1; i++) {
- if (-1 == (res = drm_readAesData(buf, s, aesStart, DRM_TWO_AES_BLOCK_LEN)))
- return DRM_MEDIA_DATA_INVALID;
-
- if (-2 == res)
- break;
-
- bufLen = DRM_TWO_AES_BLOCK_LEN;
- aesStart += DRM_ONE_AES_BLOCK_LEN;
-
- if (drm_aesDecBuffer(buf, &bufLen, ctx) < 0)
- return DRM_MEDIA_DATA_INVALID;
-
- drm_discardPaddingByte(buf, &bufLen);
-
- if (bufLen <= leftBytes)
- copyBytes = bufLen;
- else
- copyBytes = leftBytes;
-
- memcpy(mediaBuf + mediaBufOff, buf, copyBytes);
- leftBytes -= copyBytes;
- mediaBufOff += copyBytes;
- readBytes += copyBytes;
- }
-
- memcpy(((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecData, buf, DRM_ONE_AES_BLOCK_LEN);
- ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataLen = bufLen;
- ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataOff = copyBytes;
-
- if (aesStart - s->contentOffset > ((T_DRM_Dcf_Node *)(s->infoStruct))->encContentLength - DRM_TWO_AES_BLOCK_LEN && ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataOff == ((T_DRM_Dcf_Node *)(s->infoStruct))->aesDecDataLen) {
- s->bEndData = TRUE;
- if (0 == readBytes)
- return DRM_MEDIA_EOF;
- }
- }
-
- return readBytes;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_getContent(int32_t session, int32_t offset, uint8_t* mediaBuf, int32_t mediaBufLen)
-{
- T_DRM_Session_Node* s;
- int32_t readBytes;
-
- if (session < 0 || offset < 0 || NULL == mediaBuf || mediaBufLen <= 0)
- return DRM_FAILURE;
-
- s = getSession(session);
- if (NULL == s)
- return DRM_SESSION_NOT_OPENED;
-
- if (0 >= s->getInputDataLengthFunc(s->inputHandle))
- return DRM_MEDIA_DATA_INVALID;
-
- switch(s->deliveryMethod) {
- case FORWARD_LOCK:
- case COMBINED_DELIVERY:
- if (DRM_MESSAGE_CODING_BASE64 == s->transferEncoding)
- readBytes = drm_readBase64Content(s, offset, mediaBuf, mediaBufLen);
- else /* binary */
- readBytes = drm_readBinaryContent(s, offset, mediaBuf, mediaBufLen);
- break;
- case SEPARATE_DELIVERY:
- case SEPARATE_DELIVERY_FL:
- readBytes = drm_readAesContent(s, offset, mediaBuf, mediaBufLen);
- break;
- default:
- return DRM_FAILURE;
- }
-
- return readBytes;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_getRightsIssuer(int32_t session, uint8_t* rightsIssuer)
-{
- T_DRM_Session_Node* s;
-
- if (session < 0 || NULL == rightsIssuer)
- return DRM_FAILURE;
-
- s = getSession(session);
- if (NULL == s)
- return DRM_SESSION_NOT_OPENED;
-
- if (SEPARATE_DELIVERY == s->deliveryMethod || SEPARATE_DELIVERY_FL == s->deliveryMethod) {
- strcpy((char *)rightsIssuer, (char *)((T_DRM_Dcf_Node *)(s->infoStruct))->rightsIssuer);
- return DRM_SUCCESS;
- }
-
- return DRM_NOT_SD_METHOD;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_getRightsInfo(int32_t session, T_DRM_Rights_Info* rights)
-{
- T_DRM_Session_Node* s;
- T_DRM_Rights rightsInfo;
- int32_t roAmount, id;
-
- if (session < 0 || NULL == rights)
- return DRM_FAILURE;
-
- s = getSession(session);
- if (NULL == s)
- return DRM_SESSION_NOT_OPENED;
-
- if (FORWARD_LOCK == s->deliveryMethod) {
- strcpy((char *)rights->roId, "ForwardLock");
- rights->displayRights.indicator = DRM_NO_CONSTRAINT;
- rights->playRights.indicator = DRM_NO_CONSTRAINT;
- rights->executeRights.indicator = DRM_NO_CONSTRAINT;
- rights->printRights.indicator = DRM_NO_CONSTRAINT;
- return DRM_SUCCESS;
- }
-
- if (FALSE == drm_readFromUidTxt(s->contentID, &id, GET_ID))
- return DRM_NO_RIGHTS;
-
- if (FALSE == drm_writeOrReadInfo(id, NULL, &roAmount, GET_ROAMOUNT))
- return DRM_FAILURE;
-
- if (roAmount < 0)
- return DRM_NO_RIGHTS;
-
- /* some rights has been installed, but now there is no valid rights */
- if (0 == roAmount) {
- strcpy((char *)rights->roId, s->contentID);
- rights->displayRights.indicator = DRM_NO_PERMISSION;
- rights->playRights.indicator = DRM_NO_PERMISSION;
- rights->executeRights.indicator = DRM_NO_PERMISSION;
- rights->printRights.indicator = DRM_NO_PERMISSION;
- return DRM_SUCCESS;
- }
-
- roAmount = 1;
- memset(&rightsInfo, 0, sizeof(T_DRM_Rights));
- if (FALSE == drm_writeOrReadInfo(id, &rightsInfo, &roAmount, GET_A_RO))
- return DRM_FAILURE;
-
- memset(rights, 0, sizeof(T_DRM_Rights_Info));
- drm_getLicenseInfo(&rightsInfo, rights);
- return DRM_SUCCESS;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_closeSession(int32_t session)
-{
- if (session < 0)
- return DRM_FAILURE;
-
- if (NULL == getSession(session))
- return DRM_SESSION_NOT_OPENED;
-
- removeSession(session);
-
- return DRM_SUCCESS;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_updateRights(uint8_t* contentID, int32_t permission)
-{
- int32_t id;
-
- if (NULL == contentID)
- return DRM_FAILURE;
-
- if (FALSE == drm_readFromUidTxt(contentID, &id, GET_ID))
- return DRM_FAILURE;
-
- return drm_checkRoAndUpdate(id, permission);
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_viewAllRights(T_DRM_Rights_Info_Node **ppRightsInfo)
-{
- T_DRM_Rights_Info_Node rightsNode;
- int32_t maxId, id, roAmount, j;
- T_DRM_Rights rights;
-
- memset(&rights, 0, sizeof(T_DRM_Rights));
-
- if (NULL == ppRightsInfo)
- return DRM_FAILURE;
-
- *ppRightsInfo = NULL;
-
- maxId = drm_getMaxIdFromUidTxt();
- if (-1 == maxId)
- return DRM_FAILURE;
-
- for (id = 1; id <= maxId; id++) {
- drm_writeOrReadInfo(id, NULL, &roAmount, GET_ROAMOUNT);
- if (roAmount <= 0) /* this means there is not any rights */
- continue;
-
- for (j = 1; j <= roAmount; j++) {
- if (FALSE == drm_writeOrReadInfo(id, &rights, &j, GET_A_RO))
- continue;
-
- memset(&rightsNode, 0, sizeof(T_DRM_Rights_Info_Node));
-
- drm_getLicenseInfo(&rights, &(rightsNode.roInfo));
-
- if (FALSE == drm_addRightsNodeToList(ppRightsInfo, &rightsNode))
- continue;
- }
- }
- return DRM_SUCCESS;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_freeRightsInfoList(T_DRM_Rights_Info_Node *pRightsHeader)
-{
- T_DRM_Rights_Info_Node *pNode, *pTmp;
-
- if (NULL == pRightsHeader)
- return DRM_FAILURE;
-
- pNode = pRightsHeader;
-
- while (NULL != pNode) {
- pTmp = pNode;
- pNode = pNode->next;
- free(pTmp);
- }
- return DRM_SUCCESS;
-}
-
-/* see svc_drm.h */
-int32_t SVC_drm_deleteRights(uint8_t* roId)
-{
- int32_t maxId, id, roAmount, j;
- T_DRM_Rights rights;
-
- memset(&rights, 0, sizeof(T_DRM_Rights));
-
- if (NULL == roId)
- return DRM_FAILURE;
-
- maxId = drm_getMaxIdFromUidTxt();
- if (-1 == maxId)
- return DRM_NO_RIGHTS;
-
- for (id = 1; id <= maxId; id++) {
- drm_writeOrReadInfo(id, NULL, &roAmount, GET_ROAMOUNT);
- if (roAmount <= 0) /* this means there is not any rights */
- continue;
-
- for (j = 1; j <= roAmount; j++) {
- if (FALSE == drm_writeOrReadInfo(id, &rights, &j, GET_A_RO))
- continue;
-
- /* here find the RO which will be deleted */
- if (0 == strcmp((char *)rights.uid, (char *)roId)) {
- T_DRM_Rights *pAllRights;
-
- pAllRights = (T_DRM_Rights *)malloc(roAmount * sizeof(T_DRM_Rights));
- if (NULL == pAllRights)
- return DRM_FAILURE;
-
- drm_writeOrReadInfo(id, pAllRights, &roAmount, GET_ALL_RO);
- roAmount--;
- if (0 == roAmount) { /* this means it is the last one rights */
- drm_removeIdInfoFile(id); /* delete the id.info file first */
- drm_updateUidTxtWhenDelete(id); /* update uid.txt file */
- free(pAllRights);
- return DRM_SUCCESS;
- } else /* using the last one rights instead of the deleted one */
- memcpy(pAllRights + (j - 1), pAllRights + roAmount, sizeof(T_DRM_Rights));
-
- /* delete the id.info file first */
-// drm_removeIdInfoFile(id);
-
- if (FALSE == drm_writeOrReadInfo(id, pAllRights, &roAmount, SAVE_ALL_RO)) {
- free(pAllRights);
- return DRM_FAILURE;
- }
-
- free(pAllRights);
- return DRM_SUCCESS;
- }
- }
- }
-
- return DRM_FAILURE;
-}
diff --git a/media/libdrm/mobile1/src/objmng/drm_decoder.c b/media/libdrm/mobile1/src/objmng/drm_decoder.c
deleted file mode 100644
index 82c7efb..0000000
--- a/media/libdrm/mobile1/src/objmng/drm_decoder.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <objmng/drm_decoder.h>
-
-/* global variables */
-static const uint8_t * base64_alphabet = (const uint8_t *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-#define SKIP_CRLF(p) while('\r' == *(p) || '\n' == *(p)) \
- p++
-
-static int8_t get_alphabet_index(int8_t ch)
-{
- uint8_t * tmp;
-
- if ('=' == ch)
- return 64;
-
- tmp = (uint8_t *)strchr((const char *)base64_alphabet, ch);
- if (NULL == tmp)
- return -1;
-
- return (int8_t)(tmp - base64_alphabet);
-}
-
-/* See drm_decoder.h */
-int32_t drm_decodeBase64(uint8_t * dest, int32_t destLen, uint8_t * src, int32_t * srcLen)
-{
- int32_t maxDestSize, i, maxGroup;
- uint8_t *pDest, *pSrc;
- int8_t tpChar;
-
- if (NULL == src || NULL == srcLen || *srcLen <= 0 || destLen < 0)
- return -1;
-
- maxDestSize = (*srcLen) * 3/4;
- if (NULL == dest || 0 == destLen)
- return maxDestSize;
-
- if (destLen < maxDestSize)
- maxDestSize = destLen;
- maxGroup = maxDestSize/3;
-
- pDest = dest; /* start to decode src to dest */
- pSrc = src;
- for (i = 0; i < maxGroup && *srcLen - (pSrc - src) >= 4; i++) {
- SKIP_CRLF(pSrc);
- if (pSrc - src >= *srcLen)
- break;
- tpChar = get_alphabet_index(*pSrc); /* to first byte */
- if (-1 == tpChar || 64 == tpChar)
- return -1;
- pDest[0] = tpChar << 2;
- pSrc++;
- SKIP_CRLF(pSrc);
- tpChar = get_alphabet_index(*pSrc);
- if (-1 == tpChar || 64 == tpChar)
- return -1;
- pDest[0] |= (tpChar >> 4);
- pDest[1] = tpChar << 4; /* to second byte */
- pSrc++;
- SKIP_CRLF(pSrc);
- tpChar = get_alphabet_index(*pSrc);
- if (-1 == tpChar)
- return -1;
- if (64 == tpChar) /* end */
- return pDest - dest + 1;
- pDest[1] |= (tpChar >> 2);
- pDest[2] = tpChar << 6; /* to third byte */
- pSrc++;
- SKIP_CRLF(pSrc);
- tpChar = get_alphabet_index(*pSrc);
- if (-1 == tpChar)
- return -1;
- if (64 == tpChar) /* end */
- return pDest - dest + 2;
- pDest[2] |= tpChar;
- pDest += 3;
- pSrc++;
- }
- *srcLen = pSrc - src;
- return pDest - dest;
-}
diff --git a/media/libdrm/mobile1/src/objmng/drm_file.c b/media/libdrm/mobile1/src/objmng/drm_file.c
deleted file mode 100644
index e6c303e..0000000
--- a/media/libdrm/mobile1/src/objmng/drm_file.c
+++ /dev/null
@@ -1,694 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <objmng/drm_file.h>
-
-#include <unistd.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <errno.h>
-#include <string.h>
-
-/**
- * Fails on zaurus?
- #define DEVICE_FILESYSTEM
-*/
-#define DEFAULT_TOTAL_SPACE (4L * 1024L * 1024L) /* 4 Meg. */
-
-#ifndef DEVICE_FILESYSTEM
-/* Store the total space on FS VM can use. */
-static int32_t totalSpace;
-/* how many remain space can VM use. */
-static int32_t availableSize;
-#endif
-
-extern char* getStorageRoot(void);
-
-static char tmpPathBuf1[MAX_FILENAME_LEN];
-static char tmpPathBuf2[MAX_FILENAME_LEN];
-
-static int32_t
-convertFilename(const uint16_t *strData, int32_t strLength, char *buffer);
-
-static int calcDirSize(char *path, int len, uint8_t includeSubdirs);
-
-#ifndef DEVICE_FILESYSTEM
-static void initFsVariables(void);
-#endif
-
-/**
- * Convert a Java string into a nul terminated ascii string to pass to posix
- * @param strData first character of name
- * @param strLength number of characters in name
- * @param buffer Buffer to store terminated string in (at least MAXPATHLEN)
- * @return Length of filename in characters (excl. nul), or -1 on failure.
- */
-static int32_t
-convertFilename(const uint16_t *strData, int32_t strLength, char *buffer)
-{
- int idx;
-
- if (strLength >= (MAXPATHLEN-1))
- {
- Trace("convertFilename '%.*S' too long", strLength, strData);
- return -1;
- }
-
- for (idx = 0; idx < strLength; ++idx)
- *buffer++ = (char)*strData++;
-
- *buffer = 0;
- return strLength;
-}
-
-
-/**
- * Perform a stat() call on the given filename.
- * Helper for getFileLength and exists
- * @param name unicode name
- * @param nameLen number of unicode characters in name
- * @param sbuf stat buffer
- * @return TRUE on success, FALSE on failure
- */
-static int32_t
-getFileStat(const uint16_t *name, int32_t nameLen, struct stat *sbuf)
-{
- Trace("getFileStat: %.*S", nameLen, name);
-
- if (convertFilename(name, nameLen, tmpPathBuf1) <= 0)
- {
- Trace("getFileStat: bad filename");
- }
- else if (stat(tmpPathBuf1, sbuf) != 0)
- {
- Trace("getFileStat %s: stat() errno=%d", tmpPathBuf1, errno);
- }
- else /* Successful */
- {
- return TRUE;
- }
-
- return FALSE;
-}
-
-#ifndef DEVICE_FILESYSTEM
-/**
- * initial the variables like totalSpace, availableSize...
- */
-static void initFsVariables(void)
-{
- totalSpace = DEFAULT_TOTAL_SPACE;
-
- availableSize = totalSpace;
-}
-#endif /* DEVICE_FILESYSTEM */
-
-/**
- * calculate the size of everything inside path pointed directory
- * this function will use path pointed buffer to store some extra info
- * so param len is needed.
- * @param path the directory path need to calculate
- * @param len length of the path buffer, not the path string length
- * @param includeSubdirs also calculate all the subdirs in path holds?
- * @return the calculated size, DRM_FILE_FAILURE on failure.
- */
-static int calcDirSize(char *path, int len, uint8_t includeSubdirs)
-{
- struct dirent *ent;
- struct stat stat_buf;
-
- DIR *dir = NULL;
- int size = 0;
- int exists = -1;
- int dirPathLen = strlen(path);
-
- /* Ensure space for wildcard */
- if((dirPathLen + 2) >= MAXPATHLEN || (dirPathLen + 2) >= len)
- {
- return DRM_FILE_FAILURE;
- }
-
- if(path[dirPathLen - 1] != '/')
- {
- path[dirPathLen++] = '/';
- path[dirPathLen] = '\0';
- }
-
- dir = opendir(path);
- if (dir == NULL)
- {
- return DRM_FILE_FAILURE;
- }
-
- while ((ent = readdir(dir)) != NULL )
- {
- if (strcmp(ent->d_name, ".") == 0 ||
- strcmp(ent->d_name, "..") == 0)
- {
- continue;
- }
-
- path[dirPathLen] = '\0';
- if ((int)(strlen(ent->d_name) + dirPathLen + 1) < len)
- {
- strcat(path, ent->d_name);
- }
- else
- {
- continue;
- }
-
- exists = stat(path, &stat_buf);
- if (exists != -1)
- {
- /* exclude the storage occupied by directory itself */
- if (stat_buf.st_mode & S_IFDIR)
- {
- if(includeSubdirs)
- {
- /* calculate the size recursively */
- int ret;
- ret = calcDirSize(path, len, includeSubdirs);
- /* ignore failure in subdirs */
- if( DRM_FILE_FAILURE != ret )
- {
- size += ret;
- }
- }
- }
- else
- {
- size += stat_buf.st_size;
- }
- }
- }
-
- closedir(dir);
- return size;
-}
-
-/* see drm_file.h */
-int32_t DRM_file_startup(void)
-{
- Trace("DRM_file_startup");
-
-#ifndef DEVICE_FILESYSTEM
- availableSize = -1;
-
- initFsVariables();
-#endif
-
- return DRM_FILE_SUCCESS; /* Nothing to do */
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_listOpen(const uint16_t *prefix,
- int32_t prefixLen,
- int32_t* session,
- int32_t* iteration)
-{
- Trace("DRM_file_listOpen: %.*S", prefixLen, prefix);
-
- if (convertFilename(prefix, prefixLen, tmpPathBuf1) <= 0)
- {
- Trace("DRM_file_listOpen: bad filename");
- }
- else
- {
- DIR *dir;
-
- /* find the last /, and store the offset to the leaf prefix in
- * *iteration
- */
-
- char *sep = strrchr(tmpPathBuf1, '/');
- /* Root "/" is a leaf */
- if (sep == NULL || ((sep != NULL) && (sep == tmpPathBuf1)))
- {
- *iteration = prefixLen;
-
-#ifdef TRACE_ON
- sep = " <empty>"; /* trace will show sep+1 */
-#endif
- }
- else
- {
- *iteration = sep - tmpPathBuf1 + 1;
- *sep = 0;
- }
-
- dir = opendir(tmpPathBuf1);
-
- if (dir == NULL)
- {
- Trace("DRM_file_listOpen: opendir %s: errno=%d", tmpPathBuf1, errno);
- }
- else
- {
- Trace("DRM_file_listOpen: dir %s, filter %s", tmpPathBuf1, sep+1);
- *session = (int32_t)dir;
- return DRM_FILE_SUCCESS;
- }
- }
-
- return DRM_FILE_FAILURE;
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_listNextEntry(const uint16_t *prefix, int32_t prefixLen,
- uint16_t* entry, int32_t entrySize,
- int32_t *session, int32_t* iteration)
-{
- struct dirent *ent;
-
- /* We stored the offset of the leaf part of the prefix (if any)
- * in *iteration
- */
- const uint16_t* strData = prefix + *iteration;
- int32_t strLength = prefixLen - *iteration;
-
- /* entrySize is bytes for some reason. Convert to ucs chars */
- entrySize /= 2;
-
- /* Now we want to filter for files which start with the (possibly empty)
- * sequence at strData. We have to return fully-qualified filenames,
- * which means *iteration characters from prefix, plus the
- * leaf name.
- */
-
- while ( (ent = readdir((DIR *)*session)) != NULL)
- {
- int len = strlen(ent->d_name);
-
- if ( (len + *iteration) > entrySize)
- {
- Trace("DRM_file_listNextEntry: %s too long", ent->d_name);
- }
- else if (strcmp(ent->d_name, ".") != 0 &&
- strcmp(ent->d_name, "..") != 0)
- {
- int idx;
- struct stat sinfo;
-
- /* check against the filter */
-
- for (idx = 0; idx < strLength; ++idx)
- {
- if (ent->d_name[idx] != strData[idx])
- goto next_name;
- }
-
- Trace("DRM_file_listNextEntry: matched %s", ent->d_name);
-
- /* Now generate the fully-qualified name */
-
- for (idx = 0; idx < *iteration; ++idx)
- entry[idx] = prefix[idx];
-
- for (idx = 0; idx < len; ++idx)
- entry[*iteration + idx] = (unsigned char)ent->d_name[idx];
-
- /*add "/" at the end of a DIR file entry*/
- if (getFileStat(entry, idx + *iteration, &sinfo)){
- if (S_ISDIR(sinfo.st_mode) &&
- (idx + 1 + *iteration) < entrySize) {
- entry[*iteration + idx] = '/';
- ++idx;
- }
- }
- else
- {
- Trace("DRM_file_listNextEntry: stat FAILURE on %.*S",
- idx + *iteration, entry);
- }
- Trace("DRM_file_listNextEntry: got %.*S", idx + *iteration, entry);
-
- return idx + *iteration;
- }
-
- next_name:
- Trace("DRM_file_listNextEntry: rejected %s", ent->d_name);
- }
-
- Trace("DRM_file_listNextEntry: end of list");
- return 0;
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_listClose(int32_t session, int32_t iteration)
-{
- closedir( (DIR *)session);
- return DRM_FILE_SUCCESS;
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_getFileLength(const uint16_t *name, int32_t nameLen)
-{
- struct stat sbuf;
-
- if (getFileStat(name, nameLen, &sbuf))
- {
- if (sbuf.st_size >= INT32_MAX)
- {
- Trace("DRM_file_getFileLength: file too big");
- }
- else /* Successful */
- {
- Trace("DRM_file_getFileLength: %.*S -> %d",
- nameLen, name, (int32_t)sbuf.st_size);
- return (int32_t)sbuf.st_size;
- }
- }
-
- return DRM_FILE_FAILURE;
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_delete(const uint16_t *name, int32_t nameLen)
-{
- Trace("DRM_file_delete: %.*S", nameLen, name);
-
- if (convertFilename(name, nameLen, tmpPathBuf1) <= 0)
- {
- Trace("DRM_file_delete: bad filename");
- return DRM_FILE_FAILURE;
- }
- else
- {
- struct stat sinfo;
- if (stat(tmpPathBuf1, &sinfo) != 0){
- Trace("DRM_file_delete: stat failed, errno=%d", errno);
- return DRM_FILE_FAILURE;
- }
-#ifndef DEVICE_FILESYSTEM
- if (S_ISDIR(sinfo.st_mode)){
- /* it's a dir */
- if (rmdir(tmpPathBuf1) != 0){
- Trace("DRM_file_delete: dir remove failed, errno=%d", errno);
- return DRM_FILE_FAILURE;
- }
- else
- {
- return DRM_FILE_SUCCESS;
- }
- }
-#endif
- /* it's a file */
- if (unlink(tmpPathBuf1) != 0)
- {
- Trace("DRM_file_delete: file remove failed, errno=%d", errno);
- return DRM_FILE_FAILURE;
- }
- else
- {
-#ifndef DEVICE_FILESYSTEM
- availableSize += sinfo.st_size;
-#endif
- return DRM_FILE_SUCCESS;
- }
- }
- return DRM_FILE_FAILURE;
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_rename(const uint16_t *oldName, int32_t oldNameLen,
- const uint16_t *newName, int32_t newNameLen)
-{
- Trace("DRM_file_rename %.*S -> %.*S",
- oldNameLen, oldName, newNameLen, newName);
- if (DRM_file_exists(newName, newNameLen) != DRM_FILE_FAILURE)
- {
- Trace("DRM_file_rename: filename:%s exist",newName);
- return DRM_FILE_FAILURE;
- }
-
- if (convertFilename(oldName, oldNameLen, tmpPathBuf1) <= 0 ||
- convertFilename(newName, newNameLen, tmpPathBuf2) <= 0)
- {
- Trace("DRM_file_rename: bad filename");
- }
- else if (rename(tmpPathBuf1, tmpPathBuf2) != 0)
- {
- Trace("DRM_file_rename: failed errno=%d", errno);
- }
- else /* Success */
- {
- return DRM_FILE_SUCCESS;
- }
-
- return DRM_FILE_FAILURE;
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_exists(const uint16_t *name, int32_t nameLen)
-{
- struct stat sbuf;
-
- Trace("DRM_file_exists: %.*S", nameLen, name);
-
- /*remove trailing "/" separators, except the first "/" standing for root*/
- while ((nameLen > 1) && (name[nameLen -1] == '/'))
- --nameLen;
-
- if (getFileStat(name, nameLen, &sbuf))
- {
- Trace("DRM_file_exists: stat returns mode 0x%x", sbuf.st_mode);
-
- if (S_ISDIR(sbuf.st_mode))
- return DRM_FILE_ISDIR;
- if (S_ISREG(sbuf.st_mode))
- return DRM_FILE_ISREG;
- }
-
- return DRM_FILE_FAILURE;
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_open(const uint16_t *name, int32_t nameLen, int32_t mode,
- int32_t* handle)
-{
- int res;
-
-#if DRM_FILE_MODE_READ != 1 || DRM_FILE_MODE_WRITE != 2
-#error constants changed
-#endif
-
- /* Convert DRM file modes to posix modes */
- static const int modes[4] =
- { 0,
- O_RDONLY,
- O_WRONLY | O_CREAT,
- O_RDWR | O_CREAT
- };
-
- Trace("DRM_file_open %.*S mode 0x%x", nameLen, name, mode);
-
- assert((mode & ~(DRM_FILE_MODE_READ|DRM_FILE_MODE_WRITE)) == 0);
-
- if (convertFilename(name, nameLen, tmpPathBuf1) <= 0)
- {
- Trace("DRM_file_open: bad filename");
- return DRM_FILE_FAILURE;
- }
-
- if ((res = open(tmpPathBuf1, modes[mode], 0777)) == -1)
- {
- Trace("DRM_file_open: open failed errno=%d", errno);
- return DRM_FILE_FAILURE;
- }
-
- Trace("DRM_file_open: open '%s; returned %d", tmpPathBuf1, res);
- *handle = res;
-
- return DRM_FILE_SUCCESS;
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_read(int32_t handle, uint8_t* dst, int32_t length)
-{
- int n;
-
- assert(length > 0);
-
- /* TODO: Make dst a void *? */
-
- n = read((int)handle, dst, (size_t)length);
- if (n > 0)
- {
- Trace("DRM_file_read handle=%d read %d bytes", handle, n);
- return n;
- }
- else if (n == 0)
- {
- Trace("DRM_file_read read EOF: handle=%d", handle);
- return DRM_FILE_EOF;
- }
- else
- {
- Trace("DRM_file_read failed handle=%d, errno=%d", handle, errno);
- return DRM_FILE_FAILURE;
- }
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_write(int32_t handle, const uint8_t* src, int32_t length)
-{
- /* TODO: Make dst a void *? */
- int n;
-#ifndef DEVICE_FILESYSTEM
- int delta;
- off_t prevPos;
- struct stat sbuf;
- int prevFileSize;
-#endif
-
- assert(length >= 0);
-
-#ifndef DEVICE_FILESYSTEM
- if ( -1 == fstat((int)handle, &sbuf) )
- {
- Trace("DRM_file_write: fstat error %d", errno);
- return DRM_FILE_FAILURE;
- }
- prevFileSize = (int)(sbuf.st_size);
- prevPos = lseek( (int)handle, 0, SEEK_CUR);
- if ( (off_t)-1 == prevPos )
- {
- Trace("DRM_file_write: get current pos error %d", errno);
- return DRM_FILE_FAILURE;
- }
- delta = (int)prevPos + length - prevFileSize;
- if (delta > availableSize)
- {
- Trace("DRM_file_write: not enough size!");
- return DRM_FILE_FAILURE;
- }
-#endif
- n = write((int)handle, src, (size_t)length);
- if (n < 0)
- {
- Trace("DRM_file_write failed errno=%d", errno);
- return DRM_FILE_FAILURE;
- }
-#ifndef DEVICE_FILESYSTEM
- delta = prevPos + n - prevFileSize;
-
- if ( delta > 0 )
- {
- availableSize -= delta;
- }
-#endif
- Trace("DRM_file_write handle=%d wrote %d/%d bytes", handle, n, length);
-
- return n;
-}
-
-/* see drm_file.h */
-int32_t DRM_file_close(int32_t handle)
-{
- if (close((int)handle) == 0)
- {
- Trace("DRM_file_close handle=%d success", handle);
- return DRM_FILE_SUCCESS;
- }
-
- Trace("DRM_file_close handle=%d failed", handle);
- return DRM_FILE_FAILURE;
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_setPosition(int32_t handle, int32_t value)
-{
-#ifndef DEVICE_FILESYSTEM
- struct stat sbuf;
-#endif
- off_t newPos;
-
- if (value < 0)
- {
- Trace("DRM_file_setPosition: handle=%d negative value (%d)",
- handle, value);
- return DRM_FILE_FAILURE;
- }
-
-#ifndef DEVICE_FILESYSTEM
- if ( fstat((int)handle, &sbuf) == -1 )
- {
- Trace("DRM_file_setPosition: fstat fail errno=%d", errno);
- return DRM_FILE_FAILURE;
- }
-
- if ( ((off_t)value > sbuf.st_size) &&
- (availableSize < (value - (int)(sbuf.st_size))) )
- {
- Trace("DRM_file_setPosition: not enough space");
- return DRM_FILE_FAILURE;
- }
-#endif
-
- newPos = lseek( (int)handle, (off_t)value, SEEK_SET);
- if ( newPos == (off_t)-1 )
- {
- Trace("DRM_file_setPosition: seek failed: errno=%d", errno);
- }
- else
- {
-#ifndef DEVICE_FILESYSTEM
- if ( newPos > sbuf.st_size )
- {
- availableSize -= (int)(newPos - sbuf.st_size);
- }
-#endif
- return DRM_FILE_SUCCESS;
- }
-
- return DRM_FILE_FAILURE;
-}
-
-/* see drm_file.h */
-int32_t
-DRM_file_mkdir(const uint16_t* name, int32_t nameChars)
-{
- Trace("DRM_file_mkdir started!..");
-
- if (convertFilename(name, nameChars, tmpPathBuf1) <= 0)
- {
- Trace("DRM_file_mkdir: bad filename");
- return DRM_FILE_FAILURE;
- }
-
- if (mkdir(tmpPathBuf1,0777) != 0)
- {
- Trace("DRM_file_mkdir failed!errno=%d",errno);
- return DRM_FILE_FAILURE;
- }
-
- return DRM_FILE_SUCCESS;
-}
diff --git a/media/libdrm/mobile1/src/objmng/drm_i18n.c b/media/libdrm/mobile1/src/objmng/drm_i18n.c
deleted file mode 100644
index b1118a9..0000000
--- a/media/libdrm/mobile1/src/objmng/drm_i18n.c
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <objmng/drm_i18n.h>
-
-#define IS_GB2312_HIGH_BYTE(c) ((c) >= 0xA1 && (c) <= 0xF7)
-#define IS_GB2312_LOW_BYTE(c) ((c) >= 0xA1 && (c) <= 0xFE)
-#define IS_GBK_HIGH_BYTE(c) ((c) >= 0x81 && (c) <= 0xFE)
-#define IS_GBK_LOW_BYTE(c) ((c) >= 0x40 && (c) <= 0xFE && (c) != 0x7F)
-#define IS_BIG5_HIGH_BYTE(c) ((c) >= 0xA1 && (c) <= 0xF9)
-#define IS_BIG5_LOW_BYTE(c) (((c) >= 0x40 && (c) <= 0x7E) \
- || ((c) >= 0xA1 && (c) <= 0xFE))
-#define IS_ASCII(c) ((c) <= 127)
-
-#define INVALID_UNICODE 0xFFFD
-
-#define I18N_LATIN1_SUPPORT
-#define I18N_UTF8_UTF16_SUPPORT
-
-
-/**
- * Simply convert ISO 8859-1 (latin1) to unicode
- */
-static int32_t latin1ToWcs(const uint8_t *mbs, int32_t mbsLen,
- uint16_t *wcsBuf, int32_t bufSizeInWideChar,
- int32_t *bytesConsumed);
-
-/**
- * Convert one unicode char to ISO 8859-1 (latin1) byte
- */
-static int32_t wcToLatin1(uint16_t wc, uint8_t * mbs, int32_t bufSize);
-
-/**
- * Convert UTF-8 to unicode
- */
-static int32_t utf8ToWcs(const uint8_t *mbs, int32_t mbsLen,
- uint16_t *wcsBuf, int32_t bufSizeInWideChar,
- int32_t *bytesConsumed);
-
-/**
- * Convert one unicode char to UTF-8 bytes
- */
-static int32_t wcToUtf8(uint16_t wc, uint8_t * mbs, int32_t bufSize);
-
-/**
- * Convert UTF-16 BE to unicode
- */
-static int32_t utf16beToWcs(const uint8_t *mbs, int32_t mbsLen,
- uint16_t *wcsBuf, int32_t bufSizeInWideChar,
- int32_t *bytesConsumed);
-
-/**
- * Convert one unicode char to UTF-16 BE bytes
- */
-static int32_t wcToUtf16be(uint16_t wc, uint8_t * mbs, int32_t bufSize);
-
-/**
- * Convert UTF-16 LE to unicode
- */
-static int32_t utf16leToWcs(const uint8_t *mbs, int32_t mbsLen,
- uint16_t *wcsBuf, int32_t bufSizeInWideChar,
- int32_t *bytesConsumed);
-
-/**
- * Convert one unicode char to UTF-16 LE bytes
- */
-static int32_t wcToUtf16le(uint16_t wc, uint8_t * mbs, int32_t bufSize);
-
-/*
- * see drm_i18n.h
- */
-int32_t DRM_i18n_mbsToWcs(DRM_Charset_t charset,
- const uint8_t *mbs, int32_t mbsLen,
- uint16_t *wcsBuf, int32_t bufSizeInWideChar,
- int32_t *bytesConsumed)
-{
- switch (charset)
- {
-#ifdef I18N_GB2312_SUPPORT
- case DRM_CHARSET_GB2312:
- return gb2312ToWcs(mbs, mbsLen, wcsBuf, bufSizeInWideChar, bytesConsumed);
-#endif
-#ifdef I18N_GBK_SUPPORT
- case DRM_CHARSET_GBK:
- return gbkToWcs(mbs, mbsLen, wcsBuf, bufSizeInWideChar, bytesConsumed);
-#endif
-#ifdef I18N_BIG5_SUPPORT
- case DRM_CHARSET_BIG5:
- return big5ToWcs(mbs, mbsLen, wcsBuf, bufSizeInWideChar, bytesConsumed);
-#endif
-#ifdef I18N_LATIN1_SUPPORT
- case DRM_CHARSET_LATIN1:
- return latin1ToWcs(mbs, mbsLen, wcsBuf, bufSizeInWideChar, bytesConsumed);
-#endif
-#ifdef I18N_ISO8859X_SUPPORT
- case DRM_CHARSET_LATIN2:
- case DRM_CHARSET_LATIN3:
- case DRM_CHARSET_LATIN4:
- case DRM_CHARSET_CYRILLIC:
- case DRM_CHARSET_ARABIC:
- case DRM_CHARSET_GREEK:
- case DRM_CHARSET_HEBREW:
- case DRM_CHARSET_LATIN5:
- case DRM_CHARSET_LATIN6:
- case DRM_CHARSET_THAI:
- case DRM_CHARSET_LATIN7:
- case DRM_CHARSET_LATIN8:
- case DRM_CHARSET_LATIN9:
- case DRM_CHARSET_LATIN10:
- return iso8859xToWcs(charset, mbs, mbsLen, wcsBuf, bufSizeInWideChar, bytesConsumed);
-#endif
-#ifdef I18N_UTF8_UTF16_SUPPORT
- case DRM_CHARSET_UTF8:
- return utf8ToWcs(mbs, mbsLen, wcsBuf, bufSizeInWideChar, bytesConsumed);
- case DRM_CHARSET_UTF16BE:
- return utf16beToWcs(mbs, mbsLen, wcsBuf, bufSizeInWideChar, bytesConsumed);
- case DRM_CHARSET_UTF16LE:
- return utf16leToWcs(mbs, mbsLen, wcsBuf, bufSizeInWideChar, bytesConsumed);
-#endif
- default:
- return -1;
- }
-}
-
-/*
- * see drm_i18n.h
- */
-int32_t DRM_i18n_wcsToMbs(DRM_Charset_t charset,
- const uint16_t *wcs, int32_t wcsLen,
- uint8_t *mbsBuf, int32_t bufSizeInByte)
-{
- int32_t (* wcToMbFunc)(uint16_t, uint8_t *, int32_t);
- int32_t charIndex = 0;
- int32_t numMultiBytes = 0;
-
- switch (charset)
- {
-#ifdef I18N_LATIN1_SUPPORT
- case DRM_CHARSET_LATIN1:
- wcToMbFunc = wcToLatin1;
- break;
-#endif
-#ifdef I18N_UTF8_UTF16_SUPPORT
- case DRM_CHARSET_UTF8:
- wcToMbFunc = wcToUtf8;
- break;
- case DRM_CHARSET_UTF16BE:
- wcToMbFunc = wcToUtf16be;
- break;
- case DRM_CHARSET_UTF16LE:
- wcToMbFunc = wcToUtf16le;
- break;
-#endif
-#ifdef I18N_ISO8859X_SUPPORT
- case DRM_CHARSET_LATIN2:
- case DRM_CHARSET_LATIN3:
- case DRM_CHARSET_LATIN4:
- case DRM_CHARSET_CYRILLIC:
- case DRM_CHARSET_ARABIC:
- case DRM_CHARSET_GREEK:
- case DRM_CHARSET_HEBREW:
- case DRM_CHARSET_LATIN5:
- case DRM_CHARSET_LATIN6:
- case DRM_CHARSET_THAI:
- case DRM_CHARSET_LATIN7:
- case DRM_CHARSET_LATIN8:
- case DRM_CHARSET_LATIN9:
- case DRM_CHARSET_LATIN10:
- return wcsToIso8859x(charset, wcs, wcsLen, mbsBuf, bufSizeInByte);
-#endif
- default:
- return -1;
- }
-
- if (mbsBuf) {
- while (numMultiBytes < bufSizeInByte && charIndex < wcsLen) {
- /* TODO: handle surrogate pair values here */
- int32_t mbLen = wcToMbFunc(wcs[charIndex],
- &mbsBuf[numMultiBytes], bufSizeInByte - numMultiBytes);
-
- if (numMultiBytes + mbLen > bufSizeInByte) {
- /* Insufficient buffer. Don't update numMultiBytes */
- break;
- }
- charIndex++;
- numMultiBytes += mbLen;
- }
- } else {
- while (charIndex < wcsLen) {
- /* TODO: handle surrogate pair values here */
- numMultiBytes += wcToMbFunc(wcs[charIndex], NULL, 0);
- charIndex++;
- }
- }
-
- return numMultiBytes;
-}
-
-
-#ifdef I18N_LATIN1_SUPPORT
-
-int32_t latin1ToWcs(const uint8_t *mbs, int32_t mbsLen,
- uint16_t *wcsBuf, int32_t bufSizeInWideChar,
- int32_t *bytesConsumed)
-{
- int32_t charsToConvert;
- int32_t len;
-
- if (wcsBuf == NULL) {
- return mbsLen;
- }
-
- len = charsToConvert = mbsLen > bufSizeInWideChar ? bufSizeInWideChar : mbsLen;
- if (len < 0)
- return 0;
- while (len--) {
- *wcsBuf++ = *mbs++;
- }
-
- if (bytesConsumed)
- *bytesConsumed = charsToConvert;
-
- return charsToConvert;
-}
-
-int32_t wcToLatin1(uint16_t wc, uint8_t * mbs, int32_t bufSize)
-{
- uint8_t ch;
-
- if (wc < 0x100) {
- ch = (uint8_t)(wc & 0xff);
- } else {
- ch = '?';
- }
- if (mbs && bufSize > 0)
- *mbs = ch;
- return 1;
-}
-
-#endif /* I18N_LATIN1_SUPPORT */
-
-#ifdef I18N_UTF8_UTF16_SUPPORT
-
-int32_t utf8ToWcs(const uint8_t *mbs, int32_t mbsLen,
- uint16_t *wcsBuf, int32_t bufSizeInWideChar,
- int32_t *bytesConsumed)
-{
- int32_t charsConverted = 0;
- int32_t i = 0;
- int32_t wideChar;
-
- if (wcsBuf == NULL) {
- /* No conversion but we're still going to calculate bytesConsumed */
- bufSizeInWideChar = mbsLen * 2;
- }
-
- while((i < mbsLen) && (charsConverted < bufSizeInWideChar)) {
- uint8_t ch = mbs[i];
- uint8_t ch2, ch3, ch4;
-
- wideChar = -1;
-
- if(IS_ASCII(ch)) {
- wideChar = ch;
- i++;
- } else if ((ch & 0xc0) == 0xc0) {
- int utfStart = i;
- if ((ch & 0xe0) == 0xc0) {
- /* 2 byte sequence */
- if (i + 1 < mbsLen && ((ch2 = mbs[i + 1]) & 0xc0) == 0x80) {
- wideChar = (uint16_t)(((ch & 0x1F) << 6) | (ch2 & 0x3F));
- i += 2;
- } else {
- /* skip incomplete sequence */
- i++;
- }
- } else if ((ch & 0xf0) == 0xe0) {
- /* 3 byte sequence */
- if (i + 2 < mbsLen
- && ((ch2 = mbs[i + 1]) & 0xc0) == 0x80
- && ((ch3 = mbs[i + 2]) & 0xc0) == 0x80) {
- wideChar = (uint16_t)(((ch & 0x0F) << 12) | ((ch2 & 0x3F) << 6) | (ch3 & 0x3F));
- i += 3;
- } else {
- /* skip incomplete sequence (up to 2 bytes) */
- i++;
- if (i < mbsLen && (mbs[i] & 0xc0) == 0x80)
- i++;
- }
- } else if ((ch & 0xf8) == 0xf0) {
- /* 4 byte sequence */
- if (i + 3 < mbsLen
- && ((ch2 = mbs[i + 1]) & 0xc0) == 0x80
- && ((ch3 = mbs[i + 2]) & 0xc0) == 0x80
- && ((ch4 = mbs[i + 3]) & 0xc0) == 0x80) {
- /* FIXME: we do NOT support U+10000 - U+10FFFF for now.
- * leave it as 0xFFFD. */
- wideChar = INVALID_UNICODE;
- i += 4;
- } else {
- /* skip incomplete sequence (up to 3 bytes) */
- i++;
- if (i < mbsLen && (mbs[i] & 0xc0) == 0x80) {
- i++;
- if (i < mbsLen && (mbs[i] & 0xc0) == 0x80) {
- i++;
- }
- }
- }
- } else {
- /* invalid */
- i++;
- }
- if (i >= mbsLen && wideChar == -1) {
- /* Possible incomplete UTF-8 sequence at the end of mbs.
- * Leave it to the caller.
- */
- i = utfStart;
- break;
- }
- } else {
- /* invalid */
- i++;
- }
- if(wcsBuf) {
- if (wideChar == -1)
- wideChar = INVALID_UNICODE;
- wcsBuf[charsConverted] = (uint16_t)wideChar;
- }
- charsConverted++;
- }
-
- if (bytesConsumed)
- *bytesConsumed = i;
-
- return charsConverted;
-}
-
-int32_t wcToUtf8(uint16_t wc, uint8_t * mbs, int32_t bufSize)
-{
- if (wc <= 0x7f) {
- if (mbs && (bufSize >= 1)) {
- *mbs = (uint8_t)wc;
- }
- return 1;
- } else if (wc <= 0x7ff) {
- if (mbs && (bufSize >= 2)) {
- *mbs++ = (uint8_t)((wc >> 6) | 0xc0);
- *mbs = (uint8_t)((wc & 0x3f) | 0x80);
- }
- return 2;
- } else {
- if (mbs && (bufSize >= 3)) {
- *mbs++ = (uint8_t)((wc >> 12) | 0xe0);
- *mbs++ = (uint8_t)(((wc >> 6) & 0x3f)| 0x80);
- *mbs = (uint8_t)((wc & 0x3f) | 0x80);
- }
- return 3;
- }
-}
-
-int32_t utf16beToWcs(const uint8_t *mbs, int32_t mbsLen,
- uint16_t *wcsBuf, int32_t bufSizeInWideChar,
- int32_t *bytesConsumed)
-{
- int32_t charsToConvert;
- int32_t len;
-
- if (wcsBuf == NULL) {
- return mbsLen / 2;
- }
-
- len = charsToConvert = (mbsLen / 2) > bufSizeInWideChar ? bufSizeInWideChar : (mbsLen / 2);
- while (len--) {
- /* TODO: handle surrogate pair values */
- *wcsBuf++ = (uint16_t)((*mbs << 8) | *(mbs + 1));
- mbs += 2;
- }
-
- if (bytesConsumed)
- *bytesConsumed = charsToConvert * 2;
-
- return charsToConvert;
-}
-
-int32_t wcToUtf16be(uint16_t wc, uint8_t * mbs, int32_t bufSize)
-{
- if (mbs && bufSize >= 2) {
- /* TODO: handle surrogate pair values */
- *mbs = (uint8_t)(wc >> 8);
- *(mbs + 1) = (uint8_t)(wc & 0xff);
- }
- return 2;
-}
-
-int32_t utf16leToWcs(const uint8_t *mbs, int32_t mbsLen,
- uint16_t *wcsBuf, int32_t bufSizeInWideChar,
- int32_t *bytesConsumed)
-{
- int32_t charsToConvert;
- int32_t len;
-
- if (wcsBuf == NULL) {
- return mbsLen / 2;
- }
-
- len = charsToConvert = (mbsLen / 2) > bufSizeInWideChar ? bufSizeInWideChar : (mbsLen / 2);
- while (len--) {
- /* TODO: handle surrogate pair values */
- *wcsBuf++ = (uint16_t)(*mbs | (*(mbs + 1) << 8));
- mbs += 2;
- }
-
- if (bytesConsumed)
- *bytesConsumed = charsToConvert * 2;
-
- return charsToConvert;
-}
-
-int32_t wcToUtf16le(uint16_t wc, uint8_t * mbs, int32_t bufSize)
-{
- if (mbs && bufSize >= 2) {
- /* TODO: handle surrogate pair values */
- *mbs = (uint8_t)(wc & 0xff);
- *(mbs + 1) = (uint8_t)(wc >> 8);
- }
- return 2;
-}
-
-#endif /* I18N_UTF8_UTF16_SUPPORT */
-
diff --git a/media/libdrm/mobile1/src/objmng/drm_rights_manager.c b/media/libdrm/mobile1/src/objmng/drm_rights_manager.c
deleted file mode 100644
index 80901f5..0000000
--- a/media/libdrm/mobile1/src/objmng/drm_rights_manager.c
+++ /dev/null
@@ -1,688 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <drm_rights_manager.h>
-#include <drm_inner.h>
-#include <drm_file.h>
-#include <drm_i18n.h>
-
-static int32_t drm_getString(uint8_t* string, int32_t len, int32_t handle)
-{
- int32_t i;
-
- for (i = 0; i < len; i++) {
- if (DRM_FILE_FAILURE == DRM_file_read(handle, &string[i], 1))
- return FALSE;
- if (string[i] == '\n') {
- string[i + 1] = '\0';
- break;
- }
- }
- return TRUE;
-}
-
-static int32_t drm_putString(uint8_t* string, int32_t handle)
-{
- int32_t i = 0;
-
- for (i = 0;; i++) {
- if (string[i] == '\0')
- break;
- if (DRM_FILE_FAILURE == DRM_file_write(handle, &string[i], 1))
- return FALSE;
- }
- return TRUE;
-}
-
-static int32_t drm_writeToUidTxt(uint8_t* Uid, int32_t* id)
-{
- int32_t length;
- int32_t i;
- uint8_t idStr[8];
- int32_t idMax;
- uint8_t(*uidStr)[256];
- uint16_t nameUcs2[MAX_FILENAME_LEN];
- int32_t nameLen;
- int32_t bytesConsumed;
- int32_t handle;
- int32_t fileRes;
-
- if (*id < 1)
- return FALSE;
-
- /* convert in ucs2 */
- nameLen = strlen(DRM_UID_FILE_PATH);
- nameLen = DRM_i18n_mbsToWcs(DRM_CHARSET_UTF8,
- (uint8_t *)DRM_UID_FILE_PATH,
- nameLen,
- nameUcs2,
- MAX_FILENAME_LEN,
- &bytesConsumed);
- fileRes = DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_READ,
- &handle);
- if (DRM_FILE_SUCCESS != fileRes) {
- DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_WRITE,
- &handle);
- DRM_file_write(handle, (uint8_t *)"0\n", 2);
- DRM_file_close(handle);
- DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_READ,
- &handle);
- }
-
- if (!drm_getString(idStr, 8, handle)) {
- DRM_file_close(handle);
- return FALSE;
- }
- idMax = atoi((char *)idStr);
-
- if (idMax < *id)
- uidStr = malloc((idMax + 1) * 256);
- else
- uidStr = malloc(idMax * 256);
-
- for (i = 0; i < idMax; i++) {
- if (!drm_getString(uidStr[i], 256, handle)) {
- DRM_file_close(handle);
- free(uidStr);
- return FALSE;
- }
- }
- length = strlen((char *)Uid);
- strcpy((char *)uidStr[*id - 1], (char *)Uid);
- uidStr[*id - 1][length] = '\n';
- uidStr[*id - 1][length + 1] = '\0';
- if (idMax < (*id))
- idMax++;
- DRM_file_close(handle);
-
- DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_WRITE,
- &handle);
- sprintf((char *)idStr, "%d", idMax);
-
- if (!drm_putString(idStr, handle)) {
- DRM_file_close(handle);
- free(uidStr);
- return FALSE;
- }
- if (DRM_FILE_FAILURE == DRM_file_write(handle, (uint8_t *)"\n", 1)) {
- DRM_file_close(handle);
- free(uidStr);
- return FALSE;
- }
- for (i = 0; i < idMax; i++) {
- if (!drm_putString(uidStr[i], handle)) {
- DRM_file_close(handle);
- free(uidStr);
- return FALSE;
- }
- }
- if (DRM_FILE_FAILURE == DRM_file_write(handle, (uint8_t *)"\n", 1)) {
- DRM_file_close(handle);
- free(uidStr);
- return FALSE;
- }
- DRM_file_close(handle);
- free(uidStr);
- return TRUE;
-}
-
-/* See objmng_files.h */
-int32_t drm_readFromUidTxt(uint8_t* Uid, int32_t* id, int32_t option)
-{
- int32_t i;
- uint8_t p[256] = { 0 };
- uint8_t idStr[8];
- int32_t idMax = 0;
- uint16_t nameUcs2[MAX_FILENAME_LEN];
- int32_t nameLen = 0;
- int32_t bytesConsumed;
- int32_t handle;
- int32_t fileRes;
-
- if (NULL == id || NULL == Uid)
- return FALSE;
-
- DRM_file_startup();
-
- /* convert in ucs2 */
- nameLen = strlen(DRM_UID_FILE_PATH);
- nameLen = DRM_i18n_mbsToWcs(DRM_CHARSET_UTF8,
- (uint8_t *)DRM_UID_FILE_PATH,
- nameLen,
- nameUcs2,
- MAX_FILENAME_LEN,
- &bytesConsumed);
- fileRes = DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_READ,
- &handle);
- if (DRM_FILE_SUCCESS != fileRes) {
- DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_WRITE,
- &handle);
- DRM_file_write(handle, (uint8_t *)"0\n", 2);
- DRM_file_close(handle);
- DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_READ,
- &handle);
- }
-
- if (!drm_getString(idStr, 8, handle)) {
- DRM_file_close(handle);
- return FALSE;
- }
- idMax = atoi((char *)idStr);
-
- if (option == GET_UID) {
- if (*id < 1 || *id > idMax) {
- DRM_file_close(handle);
- return FALSE;
- }
- for (i = 1; i <= *id; i++) {
- if (!drm_getString(Uid, 256, handle)) {
- DRM_file_close(handle);
- return FALSE;
- }
- }
- DRM_file_close(handle);
- return TRUE;
- }
- if (option == GET_ID) {
- *id = -1;
- for (i = 1; i <= idMax; i++) {
- if (!drm_getString(p, 256, handle)) {
- DRM_file_close(handle);
- return FALSE;
- }
- if (strstr((char *)p, (char *)Uid) != NULL
- && strlen((char *)p) == strlen((char *)Uid) + 1) {
- *id = i;
- DRM_file_close(handle);
- return TRUE;
- }
- if ((*id == -1) && (strlen((char *)p) < 3))
- *id = i;
- }
- if (*id != -1) {
- DRM_file_close(handle);
- return FALSE;
- }
- *id = idMax + 1;
- DRM_file_close(handle);
- return FALSE;
- }
- DRM_file_close(handle);
- return FALSE;
-}
-
-static int32_t drm_acquireId(uint8_t* uid, int32_t* id)
-{
- if (TRUE == drm_readFromUidTxt(uid, id, GET_ID))
- return TRUE;
-
- drm_writeToUidTxt(uid, id);
-
- return FALSE; /* The Uid is not exit, then return FALSE indicate it */
-}
-
-int32_t drm_writeOrReadInfo(int32_t id, T_DRM_Rights* Ro, int32_t* RoAmount, int32_t option)
-{
- uint8_t fullname[MAX_FILENAME_LEN] = {0};
- int32_t tmpRoAmount;
- uint16_t nameUcs2[MAX_FILENAME_LEN];
- int32_t nameLen = 0;
- int32_t bytesConsumed;
- int32_t handle;
- int32_t fileRes;
-
- sprintf((char *)fullname, ANDROID_DRM_CORE_PATH"%d"EXTENSION_NAME_INFO, id);
-
- /* convert in ucs2 */
- nameLen = strlen((char *)fullname);
- nameLen = DRM_i18n_mbsToWcs(DRM_CHARSET_UTF8,
- fullname,
- nameLen,
- nameUcs2,
- MAX_FILENAME_LEN,
- &bytesConsumed);
- fileRes = DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_READ,
- &handle);
- if (DRM_FILE_SUCCESS != fileRes) {
- if (GET_ALL_RO == option || GET_A_RO == option)
- return FALSE;
-
- if (GET_ROAMOUNT == option) {
- *RoAmount = -1;
- return TRUE;
- }
- }
-
- DRM_file_close(handle);
- DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_READ | DRM_FILE_MODE_WRITE,
- &handle);
-
- switch(option) {
- case GET_ROAMOUNT:
- if (DRM_FILE_FAILURE == DRM_file_read(handle, (uint8_t*)RoAmount, sizeof(int32_t))) {
- DRM_file_close(handle);
- return FALSE;
- }
- break;
- case GET_ALL_RO:
- DRM_file_setPosition(handle, sizeof(int32_t));
-
- if (DRM_FILE_FAILURE == DRM_file_read(handle, (uint8_t*)Ro, (*RoAmount) * sizeof(T_DRM_Rights))) {
- DRM_file_close(handle);
- return FALSE;
- }
- break;
- case SAVE_ALL_RO:
- if (DRM_FILE_FAILURE == DRM_file_write(handle, (uint8_t*)RoAmount, sizeof(int32_t))) {
- DRM_file_close(handle);
- return FALSE;
- }
-
- if (NULL != Ro && *RoAmount >= 1) {
- if (DRM_FILE_FAILURE == DRM_file_write(handle, (uint8_t*) Ro, (*RoAmount) * sizeof(T_DRM_Rights))) {
- DRM_file_close(handle);
- return FALSE;
- }
- }
- break;
- case GET_A_RO:
- DRM_file_setPosition(handle, sizeof(int32_t) + (*RoAmount - 1) * sizeof(T_DRM_Rights));
-
- if (DRM_FILE_FAILURE == DRM_file_read(handle, (uint8_t*)Ro, sizeof(T_DRM_Rights))) {
- DRM_file_close(handle);
- return FALSE;
- }
- break;
- case SAVE_A_RO:
- DRM_file_setPosition(handle, sizeof(int32_t) + (*RoAmount - 1) * sizeof(T_DRM_Rights));
-
- if (DRM_FILE_FAILURE == DRM_file_write(handle, (uint8_t*)Ro, sizeof(T_DRM_Rights))) {
- DRM_file_close(handle);
- return FALSE;
- }
-
- DRM_file_setPosition(handle, 0);
- if (DRM_FILE_FAILURE == DRM_file_read(handle, (uint8_t*)&tmpRoAmount, sizeof(int32_t))) {
- DRM_file_close(handle);
- return FALSE;
- }
- if (tmpRoAmount < *RoAmount) {
- DRM_file_setPosition(handle, 0);
- DRM_file_write(handle, (uint8_t*)RoAmount, sizeof(int32_t));
- }
- break;
- default:
- DRM_file_close(handle);
- return FALSE;
- }
-
- DRM_file_close(handle);
- return TRUE;
-}
-
-int32_t drm_appendRightsInfo(T_DRM_Rights* rights)
-{
- int32_t id;
- int32_t roAmount;
-
- if (NULL == rights)
- return FALSE;
-
- drm_acquireId(rights->uid, &id);
-
- if (FALSE == drm_writeOrReadInfo(id, NULL, &roAmount, GET_ROAMOUNT))
- return FALSE;
-
- if (-1 == roAmount)
- roAmount = 0;
-
- /* The RO amount increase */
- roAmount++;
-
- /* Save the rights information */
- if (FALSE == drm_writeOrReadInfo(id, rights, &roAmount, SAVE_A_RO))
- return FALSE;
-
- return TRUE;
-}
-
-int32_t drm_getMaxIdFromUidTxt()
-{
- uint8_t idStr[8];
- int32_t idMax = 0;
- uint16_t nameUcs2[MAX_FILENAME_LEN] = {0};
- int32_t nameLen = 0;
- int32_t bytesConsumed;
- int32_t handle;
- int32_t fileRes;
-
- /* convert in ucs2 */
- nameLen = strlen(DRM_UID_FILE_PATH);
- nameLen = DRM_i18n_mbsToWcs(DRM_CHARSET_UTF8,
- (uint8_t *)DRM_UID_FILE_PATH,
- nameLen,
- nameUcs2,
- MAX_FILENAME_LEN,
- &bytesConsumed);
- fileRes = DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_READ,
- &handle);
-
- /* this means the uid.txt file is not exist, so there is not any DRM object */
- if (DRM_FILE_SUCCESS != fileRes)
- return 0;
-
- if (!drm_getString(idStr, 8, handle)) {
- DRM_file_close(handle);
- return -1;
- }
- DRM_file_close(handle);
-
- idMax = atoi((char *)idStr);
- return idMax;
-}
-
-int32_t drm_removeIdInfoFile(int32_t id)
-{
- uint8_t filename[MAX_FILENAME_LEN] = {0};
- uint16_t nameUcs2[MAX_FILENAME_LEN];
- int32_t nameLen = 0;
- int32_t bytesConsumed;
-
- if (id <= 0)
- return FALSE;
-
- sprintf((char *)filename, ANDROID_DRM_CORE_PATH"%d"EXTENSION_NAME_INFO, id);
-
- /* convert in ucs2 */
- nameLen = strlen((char *)filename);
- nameLen = DRM_i18n_mbsToWcs(DRM_CHARSET_UTF8,
- filename,
- nameLen,
- nameUcs2,
- MAX_FILENAME_LEN,
- &bytesConsumed);
- if (DRM_FILE_SUCCESS != DRM_file_delete(nameUcs2, nameLen))
- return FALSE;
-
- return TRUE;
-}
-
-int32_t drm_updateUidTxtWhenDelete(int32_t id)
-{
- uint16_t nameUcs2[MAX_FILENAME_LEN];
- int32_t nameLen = 0;
- int32_t bytesConsumed;
- int32_t handle;
- int32_t fileRes;
- int32_t bufferLen;
- uint8_t *buffer;
- uint8_t idStr[8];
- int32_t idMax;
-
- if (id <= 0)
- return FALSE;
-
- nameLen = strlen(DRM_UID_FILE_PATH);
- nameLen = DRM_i18n_mbsToWcs(DRM_CHARSET_UTF8,
- (uint8_t *)DRM_UID_FILE_PATH,
- nameLen,
- nameUcs2,
- MAX_FILENAME_LEN,
- &bytesConsumed);
- bufferLen = DRM_file_getFileLength(nameUcs2, nameLen);
- if (bufferLen <= 0)
- return FALSE;
-
- buffer = (uint8_t *)malloc(bufferLen);
- if (NULL == buffer)
- return FALSE;
-
- fileRes = DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_READ,
- &handle);
- if (DRM_FILE_SUCCESS != fileRes) {
- free(buffer);
- return FALSE;
- }
-
- drm_getString(idStr, 8, handle);
- idMax = atoi((char *)idStr);
-
- bufferLen -= strlen((char *)idStr);
- fileRes = DRM_file_read(handle, buffer, bufferLen);
- buffer[bufferLen] = '\0';
- DRM_file_close(handle);
-
- /* handle this buffer */
- {
- uint8_t *pStart, *pEnd;
- int32_t i, movLen;
-
- pStart = buffer;
- pEnd = pStart;
- for (i = 0; i < id; i++) {
- if (pEnd != pStart)
- pStart = ++pEnd;
- while ('\n' != *pEnd)
- pEnd++;
- if (pStart == pEnd)
- pStart--;
- }
- movLen = bufferLen - (pEnd - buffer);
- memmove(pStart, pEnd, movLen);
- bufferLen -= (pEnd - pStart);
- }
-
- if (DRM_FILE_SUCCESS != DRM_file_delete(nameUcs2, nameLen)) {
- free(buffer);
- return FALSE;
- }
-
- fileRes = DRM_file_open(nameUcs2,
- nameLen,
- DRM_FILE_MODE_WRITE,
- &handle);
- if (DRM_FILE_SUCCESS != fileRes) {
- free(buffer);
- return FALSE;
- }
- sprintf((char *)idStr, "%d", idMax);
- drm_putString(idStr, handle);
- DRM_file_write(handle, (uint8_t*)"\n", 1);
- DRM_file_write(handle, buffer, bufferLen);
- free(buffer);
- DRM_file_close(handle);
- return TRUE;
-}
-
-int32_t drm_getKey(uint8_t* uid, uint8_t* KeyValue)
-{
- T_DRM_Rights ro;
- int32_t id, roAmount;
-
- if (NULL == uid || NULL == KeyValue)
- return FALSE;
-
- if (FALSE == drm_readFromUidTxt(uid, &id, GET_ID))
- return FALSE;
-
- if (FALSE == drm_writeOrReadInfo(id, NULL, &roAmount, GET_ROAMOUNT))
- return FALSE;
-
- if (roAmount <= 0)
- return FALSE;
-
- memset(&ro, 0, sizeof(T_DRM_Rights));
- roAmount = 1;
- if (FALSE == drm_writeOrReadInfo(id, &ro, &roAmount, GET_A_RO))
- return FALSE;
-
- memcpy(KeyValue, ro.KeyValue, DRM_KEY_LEN);
- return TRUE;
-}
-
-void drm_discardPaddingByte(uint8_t *decryptedBuf, int32_t *decryptedBufLen)
-{
- int32_t tmpLen = *decryptedBufLen;
- int32_t i;
-
- if (NULL == decryptedBuf || *decryptedBufLen < 0)
- return;
-
- /* Check whether the last several bytes are padding or not */
- for (i = 1; i < decryptedBuf[tmpLen - 1]; i++) {
- if (decryptedBuf[tmpLen - 1 - i] != decryptedBuf[tmpLen - 1])
- break; /* Not the padding bytes */
- }
- if (i == decryptedBuf[tmpLen - 1]) /* They are padding bytes */
- *decryptedBufLen = tmpLen - i;
- return;
-}
-
-int32_t drm_aesDecBuffer(uint8_t * Buffer, int32_t * BufferLen, aes_decrypt_ctx ctx[1])
-{
- uint8_t dbuf[3 * DRM_ONE_AES_BLOCK_LEN], buf[DRM_ONE_AES_BLOCK_LEN];
- uint64_t i, len, wlen = DRM_ONE_AES_BLOCK_LEN, curLen, restLen;
- uint8_t *pTarget, *pTargetHead;
-
- pTargetHead = Buffer;
- pTarget = Buffer;
- curLen = 0;
- restLen = *BufferLen;
-
- if (restLen > 2 * DRM_ONE_AES_BLOCK_LEN) {
- len = 2 * DRM_ONE_AES_BLOCK_LEN;
- } else {
- len = restLen;
- }
- memcpy(dbuf, Buffer, (size_t)len);
- restLen -= len;
- Buffer += len;
-
- if (len < 2 * DRM_ONE_AES_BLOCK_LEN) { /* The original file is less than one block in length */
- len -= DRM_ONE_AES_BLOCK_LEN;
- /* Decrypt from position len to position len + DRM_ONE_AES_BLOCK_LEN */
- aes_decrypt((dbuf + len), (dbuf + len), ctx);
-
- /* Undo the CBC chaining */
- for (i = 0; i < len; ++i)
- dbuf[i] ^= dbuf[i + DRM_ONE_AES_BLOCK_LEN];
-
- /* Output the decrypted bytes */
- memcpy(pTarget, dbuf, (size_t)len);
- pTarget += len;
- } else {
- uint8_t *b1 = dbuf, *b2 = b1 + DRM_ONE_AES_BLOCK_LEN, *b3 = b2 + DRM_ONE_AES_BLOCK_LEN, *bt;
-
- for (;;) { /* While some ciphertext remains, prepare to decrypt block b2 */
- /* Read in the next block to see if ciphertext stealing is needed */
- b3 = Buffer;
- if (restLen > DRM_ONE_AES_BLOCK_LEN) {
- len = DRM_ONE_AES_BLOCK_LEN;
- } else {
- len = restLen;
- }
- restLen -= len;
- Buffer += len;
-
- /* Decrypt the b2 block */
- aes_decrypt((uint8_t *)b2, buf, ctx);
-
- if (len == 0 || len == DRM_ONE_AES_BLOCK_LEN) { /* No ciphertext stealing */
- /* Unchain CBC using the previous ciphertext block in b1 */
- for (i = 0; i < DRM_ONE_AES_BLOCK_LEN; ++i)
- buf[i] ^= b1[i];
- } else { /* Partial last block - use ciphertext stealing */
- wlen = len;
- /* Produce last 'len' bytes of plaintext by xoring with */
- /* The lowest 'len' bytes of next block b3 - C[N-1] */
- for (i = 0; i < len; ++i)
- buf[i] ^= b3[i];
-
- /* Reconstruct the C[N-1] block in b3 by adding in the */
- /* Last (DRM_ONE_AES_BLOCK_LEN - len) bytes of C[N-2] in b2 */
- for (i = len; i < DRM_ONE_AES_BLOCK_LEN; ++i)
- b3[i] = buf[i];
-
- /* Decrypt the C[N-1] block in b3 */
- aes_decrypt((uint8_t *)b3, (uint8_t *)b3, ctx);
-
- /* Produce the last but one plaintext block by xoring with */
- /* The last but two ciphertext block */
- for (i = 0; i < DRM_ONE_AES_BLOCK_LEN; ++i)
- b3[i] ^= b1[i];
-
- /* Write decrypted plaintext blocks */
- memcpy(pTarget, b3, DRM_ONE_AES_BLOCK_LEN);
- pTarget += DRM_ONE_AES_BLOCK_LEN;
- }
-
- /* Write the decrypted plaintext block */
- memcpy(pTarget, buf, (size_t)wlen);
- pTarget += wlen;
-
- if (len != DRM_ONE_AES_BLOCK_LEN) {
- *BufferLen = pTarget - pTargetHead;
- return 0;
- }
-
- /* Advance the buffer pointers */
- bt = b1, b1 = b2, b2 = b3, b3 = bt;
- }
- }
- return 0;
-}
-
-int32_t drm_updateDcfDataLen(uint8_t* pDcfLastData, uint8_t* keyValue, int32_t* moreBytes)
-{
- aes_decrypt_ctx ctx[1];
- int32_t len = DRM_TWO_AES_BLOCK_LEN;
-
- if (NULL == pDcfLastData || NULL == keyValue)
- return FALSE;
-
- aes_decrypt_key128(keyValue, ctx);
-
- if (drm_aesDecBuffer(pDcfLastData, &len, ctx) < 0)
- return FALSE;
-
- drm_discardPaddingByte(pDcfLastData, &len);
-
- *moreBytes = DRM_TWO_AES_BLOCK_LEN - len;
-
- return TRUE;
-}
diff --git a/media/libdrm/mobile1/src/objmng/drm_time.c b/media/libdrm/mobile1/src/objmng/drm_time.c
deleted file mode 100644
index fceb4952..0000000
--- a/media/libdrm/mobile1/src/objmng/drm_time.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @file
- * DRM 1.0 Reference Port: linux implementation of drm_time.c.
- */
-
-#include <objmng/drm_time.h>
-#include <unistd.h>
-
-/* See drm_time.h */
-uint32_t DRM_time_getElapsedSecondsFrom1970(void)
-{
- return time(NULL);
-}
-
-/* See drm_time.h */
-void DRM_time_sleep(uint32_t ms)
-{
- usleep(ms * 1000);
-}
-
-/* See drm_time.h */
-void DRM_time_getSysTime(T_DB_TIME_SysTime *time_ptr)
-{
- time_t t;
- struct tm *tm_t;
-
- time(&t);
- tm_t = gmtime(&t);
-
- time_ptr->year = tm_t->tm_year + 1900;
- time_ptr->month = tm_t->tm_mon + 1;
- time_ptr->day = tm_t->tm_mday;
- time_ptr->hour = tm_t->tm_hour;
- time_ptr->min = tm_t->tm_min;
- time_ptr->sec = tm_t->tm_sec;
-}
diff --git a/media/libdrm/mobile1/src/parser/parser_dcf.c b/media/libdrm/mobile1/src/parser/parser_dcf.c
deleted file mode 100644
index 06aa830..0000000
--- a/media/libdrm/mobile1/src/parser/parser_dcf.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <parser_dcf.h>
-#include <svc_drm.h>
-
-static int32_t drm_parseUintVar(uint8_t * buffer, uint8_t * len)
-{
- int32_t i;
- int32_t byteLen;
- int32_t sum;
-
- if (NULL == buffer)
- return DRM_UINT_VAR_ERR;
-
- byteLen = 0;
- while ((buffer[byteLen] & UINT_VAR_FLAG) > 0 && byteLen < MAX_UINT_VAR_BYTE) /* UINT_VAR_FLAG == 0x80 */
- byteLen++;
-
- if (byteLen >= MAX_UINT_VAR_BYTE) /* MAX_UINT_VAR_BYTE == 5 */
- return DRM_UINT_VAR_ERR; /* The var int is too large, and that is impossible */
-
- *len = (uint8_t)(byteLen + 1);
- sum = buffer[byteLen];
- for (i = byteLen - 1; i >= 0; i--)
- sum += ((buffer[i] & UINT_VAR_DATA) << 7 * (byteLen - i)); /* UINT_VAR_DATA == 0x7F */
-
- return sum;
-}
-
-/* See parser_dcf.h */
-int32_t drm_dcfParser(uint8_t *buffer, int32_t bufferLen, T_DRM_DCF_Info *pDcfInfo,
- uint8_t **ppEncryptedData)
-{
- uint8_t *tmpBuf;
- uint8_t *pStart, *pEnd;
- uint8_t *pHeader, *pData;
- uint8_t varLen;
-
- if (NULL == buffer || bufferLen <= 0 || NULL == pDcfInfo)
- return FALSE;
-
- tmpBuf = buffer;
- /* 1. Parse the version, content-type and content-url */
- pDcfInfo->Version = *(tmpBuf++);
- if (0x01 != pDcfInfo->Version) /* Because it is OMA DRM v1.0, the vension must be 1 */
- return FALSE;
- pDcfInfo->ContentTypeLen = *(tmpBuf++);
- pDcfInfo->ContentURILen = *(tmpBuf++);
- strncpy((char *)pDcfInfo->ContentType, (char *)tmpBuf, pDcfInfo->ContentTypeLen);
- tmpBuf += pDcfInfo->ContentTypeLen;
- strncpy((char *)pDcfInfo->ContentURI, (char *)tmpBuf, pDcfInfo->ContentURILen);
- tmpBuf += pDcfInfo->ContentURILen;
-
- /* 2. Get the headers length and data length */
- pDcfInfo->HeadersLen = drm_parseUintVar(tmpBuf, &varLen);
- if (DRM_UINT_VAR_ERR == pDcfInfo->HeadersLen)
- return FALSE;
- tmpBuf += varLen;
- pDcfInfo->DecryptedDataLen = DRM_UNKNOWN_DATA_LEN;
- pDcfInfo->EncryptedDataLen = drm_parseUintVar(tmpBuf, &varLen);
- if (DRM_UINT_VAR_ERR == pDcfInfo->EncryptedDataLen)
- return FALSE;
- tmpBuf += varLen;
- pHeader = tmpBuf;
- tmpBuf += pDcfInfo->HeadersLen;
- pData = tmpBuf;
-
- /* 3. Parse the headers */
- pStart = pHeader;
- while (pStart < pData) {
- pEnd = pStart;
- while ('\r' != *pEnd && pEnd < pData)
- pEnd++;
-
- if (0 == strncmp((char *)pStart, HEADER_ENCRYPTION_METHOD, HEADER_ENCRYPTION_METHOD_LEN))
- strncpy((char *)pDcfInfo->Encryption_Method,
- (char *)(pStart + HEADER_ENCRYPTION_METHOD_LEN),
- pEnd - pStart - HEADER_ENCRYPTION_METHOD_LEN);
- else if (0 == strncmp((char *)pStart, HEADER_RIGHTS_ISSUER, HEADER_RIGHTS_ISSUER_LEN))
- strncpy((char *)pDcfInfo->Rights_Issuer,
- (char *)(pStart + HEADER_RIGHTS_ISSUER_LEN),
- pEnd - pStart - HEADER_RIGHTS_ISSUER_LEN);
- else if (0 == strncmp((char *)pStart, HEADER_CONTENT_NAME, HEADER_CONTENT_NAME_LEN))
- strncpy((char *)pDcfInfo->Content_Name,
- (char *)(pStart + HEADER_CONTENT_NAME_LEN),
- pEnd - pStart - HEADER_CONTENT_NAME_LEN);
- else if (0 == strncmp((char *)pStart, HEADER_CONTENT_DESCRIPTION, HEADER_CONTENT_DESCRIPTION_LEN))
- strncpy((char *)pDcfInfo->ContentDescription,
- (char *)(pStart + HEADER_CONTENT_DESCRIPTION_LEN),
- pEnd - pStart - HEADER_CONTENT_DESCRIPTION_LEN);
- else if (0 == strncmp((char *)pStart, HEADER_CONTENT_VENDOR, HEADER_CONTENT_VENDOR_LEN))
- strncpy((char *)pDcfInfo->ContentVendor,
- (char *)(pStart + HEADER_CONTENT_VENDOR_LEN),
- pEnd - pStart - HEADER_CONTENT_VENDOR_LEN);
- else if (0 == strncmp((char *)pStart, HEADER_ICON_URI, HEADER_ICON_URI_LEN))
- strncpy((char *)pDcfInfo->Icon_URI,
- (char *)(pStart + HEADER_ICON_URI_LEN),
- pEnd - pStart - HEADER_ICON_URI_LEN);
-
- if ('\n' == *(pEnd + 1))
- pStart = pEnd + 2; /* Two bytes: a '\r' and a '\n' */
- else
- pStart = pEnd + 1;
- }
-
- /* 4. Give out the location of encrypted data */
- if (NULL != ppEncryptedData)
- *ppEncryptedData = pData;
-
- return TRUE;
-}
diff --git a/media/libdrm/mobile1/src/parser/parser_dm.c b/media/libdrm/mobile1/src/parser/parser_dm.c
deleted file mode 100644
index 567e650..0000000
--- a/media/libdrm/mobile1/src/parser/parser_dm.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <parser_dm.h>
-#include <parser_dcf.h>
-#include <svc_drm.h>
-#include "log.h"
-
-#define DRM_SKIP_SPACE_TAB(p) while( (*(p) == ' ') || (*(p) == '\t') ) \
- p++
-
-typedef enum _DM_PARSE_STATUS {
- DM_PARSE_START,
- DM_PARSING_RIGHTS,
- DM_PARSING_CONTENT,
- DM_PARSE_END
-} DM_PARSE_STATUS;
-
-static int drm_strnicmp(const uint8_t* s1, const uint8_t* s2, int32_t n)
-{
- if (n < 0 || NULL == s1 || NULL == s2)
- return -1;
-
- if (n == 0)
- return 0;
-
- while (n-- != 0 && tolower(*s1) == tolower(*s2))
- {
- if (n == 0 || *s1 == '\0' || *s2 == '\0')
- break;
- s1++;
- s2++;
- }
-
- return tolower(*s1) - tolower(*s2);
-}
-
-const uint8_t * drm_strnstr(const uint8_t * str, const uint8_t * strSearch, int32_t len)
-{
- int32_t i, stringLen;
-
- if (NULL == str || NULL == strSearch || len <= 0)
- return NULL;
-
- stringLen = strlen((char *)strSearch);
- for (i = 0; i < len - stringLen + 1; i++) {
- if (str[i] == *strSearch && 0 == memcmp(str + i, strSearch, stringLen))
- return str + i;
- }
- return NULL;
-}
-
-/* See parser_dm.h */
-int32_t drm_parseDM(const uint8_t *buffer, int32_t bufferLen, T_DRM_DM_Info *pDmInfo)
-{
- const uint8_t *pStart = NULL, *pEnd = NULL;
- const uint8_t *pBufferEnd;
- int32_t contentLen, leftLen;
- DM_PARSE_STATUS status = DM_PARSE_START;
- int32_t boundaryLen;
-
- if (NULL == buffer || bufferLen <= 0 || NULL == pDmInfo)
- return FALSE;
-
- /* Find the end of the input buffer */
- pBufferEnd = buffer + bufferLen;
- leftLen = bufferLen;
-
- /* Find out the boundary */
- pStart = drm_strnstr(buffer, (uint8_t *)"--", bufferLen);
- if (NULL == pStart)
- return FALSE; /* No boundary error */
- pEnd = pStart;
-
- /* Record the boundary */
- pEnd = drm_strnstr(pStart, (uint8_t *)DRM_NEW_LINE_CRLF, leftLen);
- /* if can not find the CRLF, return FALSE */
- if (NULL == pEnd)
- return FALSE;
- strncpy((char *)pDmInfo->boundary, (char *)pStart, pEnd - pStart);
- boundaryLen = strlen((char *)pDmInfo->boundary) + 2; /* 2 means: '\r' and '\n' */
-
- pEnd += 2; /* skip the '\r' and '\n' */
- pStart = pEnd;
- leftLen = pBufferEnd - pStart;
- do {
- pDmInfo->transferEncoding = DRM_MESSAGE_CODING_7BIT; /* According RFC2045 chapter 6.1, the default value should be 7bit.*/
- strcpy((char *)pDmInfo->contentType, "text/plain"); /* According RFC2045 chapter 5.2, the default value should be "text/plain". */
-
- /* Deal the header information */
- while ((('\r' != *pStart) || ('\n' != *(pStart + 1))) && pStart < pBufferEnd) {
- pEnd = drm_strnstr(pStart, (uint8_t *)DRM_NEW_LINE_CRLF, leftLen);
- if (NULL == pEnd)
- return FALSE;
-
- if (0 != pDmInfo->deliveryType) { /* This means the delivery type has been confirmed */
- if (0 == strncmp((char *)pStart, HEADERS_TRANSFER_CODING, HEADERS_TRANSFER_CODING_LEN)) {
- pStart += HEADERS_TRANSFER_CODING_LEN;
- DRM_SKIP_SPACE_TAB(pStart);
-
- if (0 == strncmp((char *)pStart, TRANSFER_CODING_TYPE_7BIT, pEnd - pStart))
- pDmInfo->transferEncoding = DRM_MESSAGE_CODING_7BIT;
- else if (0 == strncmp((char *)pStart, TRANSFER_CODING_TYPE_8BIT, pEnd - pStart))
- pDmInfo->transferEncoding = DRM_MESSAGE_CODING_8BIT;
- else if (0 == strncmp((char *)pStart, TRANSFER_CODING_TYPE_BINARY, pEnd - pStart))
- pDmInfo->transferEncoding = DRM_MESSAGE_CODING_BINARY;
- else if (0 == strncmp((char *)pStart, TRANSFER_CODING_TYPE_BASE64, pEnd - pStart))
- pDmInfo->transferEncoding = DRM_MESSAGE_CODING_BASE64;
- else
- return FALSE; /* Unknown transferCoding error */
- } else if (0 == drm_strnicmp(pStart, (uint8_t *)HEADERS_CONTENT_TYPE, HEADERS_CONTENT_TYPE_LEN)) {
- pStart += HEADERS_CONTENT_TYPE_LEN;
- DRM_SKIP_SPACE_TAB(pStart);
-
- if (pEnd - pStart > 0) {
- strncpy((char *)pDmInfo->contentType, (char *)pStart, pEnd - pStart);
- pDmInfo->contentType[pEnd - pStart] = '\0';
- }
- } else if (0 == drm_strnicmp(pStart, (uint8_t *)HEADERS_CONTENT_ID, HEADERS_CONTENT_ID_LEN)) {
- uint8_t tmpBuf[MAX_CONTENT_ID] = {0};
- uint8_t *pTmp;
-
- pStart += HEADERS_CONTENT_ID_LEN;
- DRM_SKIP_SPACE_TAB(pStart);
-
- /* error: more than one content id */
- if(drm_strnstr(pStart, (uint8_t*)HEADERS_CONTENT_ID, pBufferEnd - pStart)){
- LOGD("drm_dmParser: error: more than one content id\r\n");
- return FALSE;
- }
-
- status = DM_PARSING_CONTENT; /* can go here means that the rights object has been parsed. */
-
- /* Change the format from <...> to cid:... */
- if (NULL != (pTmp = (uint8_t *)memchr((char *)pStart, '<', pEnd - pStart))) {
- strncpy((char *)tmpBuf, (char *)(pTmp + 1), pEnd - pTmp - 1);
-
- if (NULL != (pTmp = (uint8_t *)memchr((char *)tmpBuf, '>', pEnd - pTmp - 1))) {
- *pTmp = '\0';
-
- memset(pDmInfo->contentID, 0, MAX_CONTENT_ID);
- sprintf((char *)pDmInfo->contentID, "%s%s", "cid:", (int8_t *)tmpBuf);
- }
- }
- }
- } else { /* First confirm delivery type, Forward_Lock, Combined Delivery or Separate Delivery */
- if (0 == drm_strnicmp(pStart, (uint8_t *)HEADERS_CONTENT_TYPE, HEADERS_CONTENT_TYPE_LEN)) {
- pStart += HEADERS_CONTENT_TYPE_LEN;
- DRM_SKIP_SPACE_TAB(pStart);
-
- if (pEnd - pStart > 0) {
- strncpy((char *)pDmInfo->contentType, (char *)pStart, pEnd - pStart);
- pDmInfo->contentType[pEnd - pStart] = '\0';
- }
-
- if (0 == strcmp((char *)pDmInfo->contentType, DRM_MIME_TYPE_RIGHTS_XML)) {
- pDmInfo->deliveryType = COMBINED_DELIVERY;
- status = DM_PARSING_RIGHTS;
- }
- else if (0 == strcmp((char *)pDmInfo->contentType, DRM_MIME_TYPE_CONTENT)) {
- pDmInfo->deliveryType = SEPARATE_DELIVERY_FL;
- status = DM_PARSING_CONTENT;
- }
- else if (0 == pDmInfo->deliveryType) {
- pDmInfo->deliveryType = FORWARD_LOCK;
- status = DM_PARSING_CONTENT;
- }
- }
- }
- pEnd += 2; /* skip the '\r' and '\n' */
- pStart = pEnd;
- leftLen = pBufferEnd - pStart;
- }
- pStart += 2; /* skip the second CRLF: "\r\n" */
- pEnd = pStart;
-
- /* Deal the content part, including rel or real content */
- while (leftLen > 0) {
- if (NULL == (pEnd = memchr(pEnd, '\r', leftLen))) {
- pEnd = pBufferEnd;
- break; /* no boundary found */
- }
-
- leftLen = pBufferEnd - pEnd;
- if (leftLen < boundaryLen) {
- pEnd = pBufferEnd;
- break; /* here means may be the boundary has been split */
- }
-
- if (('\n' == *(pEnd + 1)) && (0 == memcmp(pEnd + 2, pDmInfo->boundary, strlen((char *)pDmInfo->boundary))))
- break; /* find the boundary here */
-
- pEnd++;
- leftLen--;
- }
-
- if (pEnd >= pBufferEnd)
- contentLen = DRM_UNKNOWN_DATA_LEN;
- else
- contentLen = pEnd - pStart;
-
- switch(pDmInfo->deliveryType) {
- case FORWARD_LOCK:
- pDmInfo->contentLen = contentLen;
- pDmInfo->contentOffset = pStart - buffer;
- status = DM_PARSE_END;
- break;
- case COMBINED_DELIVERY:
- if (DM_PARSING_RIGHTS == status) {
- pDmInfo->rightsLen = contentLen;
- pDmInfo->rightsOffset = pStart - buffer;
- } else {
- pDmInfo->contentLen = contentLen;
- pDmInfo->contentOffset = pStart - buffer;
- status = DM_PARSE_END;
- }
- break;
- case SEPARATE_DELIVERY_FL:
- {
- T_DRM_DCF_Info dcfInfo;
- uint8_t* pEncData = NULL;
-
- memset(&dcfInfo, 0, sizeof(T_DRM_DCF_Info));
- if (DRM_UNKNOWN_DATA_LEN == contentLen)
- contentLen = pEnd - pStart;
- if (FALSE == drm_dcfParser(pStart, contentLen, &dcfInfo, &pEncData))
- return FALSE;
-
- pDmInfo->contentLen = dcfInfo.EncryptedDataLen;
- pDmInfo->contentOffset = pEncData - buffer;
- strcpy((char *)pDmInfo->contentType, (char *)dcfInfo.ContentType);
- strcpy((char *)pDmInfo->contentID, (char *)dcfInfo.ContentURI);
- strcpy((char *)pDmInfo->rightsIssuer, (char *)dcfInfo.Rights_Issuer);
- status = DM_PARSE_END;
- }
- break;
- default:
- return FALSE;
- }
-
- if (DM_PARSING_RIGHTS == status) {
- /* Here means the rights object data has been completed, boundary must exist */
- leftLen = pBufferEnd - pEnd;
- pStart = drm_strnstr(pEnd, pDmInfo->boundary, leftLen);
- if (NULL == pStart)
- return FALSE;
- leftLen = pBufferEnd - pStart;
- pEnd = drm_strnstr(pStart, (uint8_t *)DRM_NEW_LINE_CRLF, leftLen);
- if (NULL == pEnd)
- return FALSE; /* only rights object, no media object, error */
-
- pEnd += 2; /* skip the "\r\n" */
- pStart = pEnd;
- }
- } while (DM_PARSE_END != status);
-
- return TRUE;
-}
diff --git a/media/libdrm/mobile1/src/parser/parser_rel.c b/media/libdrm/mobile1/src/parser/parser_rel.c
deleted file mode 100644
index 537fa9c..0000000
--- a/media/libdrm/mobile1/src/parser/parser_rel.c
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <parser_rel.h>
-#include <parser_dm.h>
-#include <xml_tinyParser.h>
-#include <wbxml_tinyparser.h>
-#include <drm_decoder.h>
-#include <svc_drm.h>
-
-/* See parser_rel.h */
-int32_t drm_monthDays(int32_t year, int32_t month)
-{
- switch (month) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- return 31;
- case 4:
- case 6:
- case 9:
- case 11:
- return 30;
- case 2:
- if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
- return 29;
- else
- return 28;
- default:
- return -1;
- }
-}
-
-int32_t drm_checkDate(int32_t year, int32_t month, int32_t day,
- int32_t hour, int32_t min, int32_t sec)
-{
- if (month >= 1 && month <= 12 &&
- day >= 1 && day <= drm_monthDays(year, month) &&
- hour >= 0 && hour <= 23 &&
- min >= 0 && min <= 59 && sec >= 0 && sec <= 59)
- return 0;
- else
- return -1;
-}
-
-static int32_t drm_getStartEndTime(uint8_t * pValue, int32_t valueLen,
- T_DRM_DATETIME * dateTime)
-{
- int32_t year, mon, day, hour, min, sec;
- uint8_t pTmp[64] = {0};
-
- strncpy((char *)pTmp, (char *)pValue, valueLen);
- {
- uint8_t * pHead = pTmp;
- uint8_t * pEnd = NULL;
- uint8_t tmpByte;
-
- /** get year */
- pEnd = (uint8_t *)strstr((char *)pHead, "-");
- if(NULL == pEnd)
- return FALSE;
- tmpByte = *pEnd;
- *pEnd = '\0';
- year = atoi((char *)pHead);
- pHead = pEnd + 1;
- *pEnd = tmpByte;
-
- /** get month */
- pEnd = (uint8_t *)strstr((char *)pHead, "-");
- if(NULL == pEnd)
- return FALSE;
- tmpByte = *pEnd;
- *pEnd = '\0';
- mon = atoi((char *)pHead);
- pHead = pEnd + 1;
- *pEnd = tmpByte;
-
- /** get day */
- pEnd = (uint8_t *)strstr((char *)pHead, "T");
- if(NULL == pEnd)
- return FALSE;
- tmpByte = *pEnd;
- *pEnd = '\0';
- day = atoi((char *)pHead);
- pHead = pEnd + 1;
- *pEnd = tmpByte;
-
- /** get hour */
- pEnd = (uint8_t *)strstr((char *)pHead, ":");
- if(NULL == pEnd)
- return FALSE;
- tmpByte = *pEnd;
- *pEnd = '\0';
- hour = atoi((char *)pHead);
- pHead = pEnd + 1;
- *pEnd = tmpByte;
-
- /** get minute */
- pEnd = (uint8_t *)strstr((char *)pHead, ":");
- if(NULL == pEnd)
- return FALSE;
- tmpByte = *pEnd;
- *pEnd = '\0';
- min = atoi((char *)pHead);
- pHead = pEnd + 1;
- *pEnd = tmpByte;
-
- /** get second */
- sec = atoi((char *)pHead);
- }
- if (0 != drm_checkDate(year, mon, day, hour, min, sec))
- return FALSE;
-
- YMD_HMS_2_INT(year, mon, day, dateTime->date, hour, min, sec,
- dateTime->time);
- return TRUE;
-}
-
-static int32_t drm_checkWhetherHasUnknowConstraint(uint8_t* drm_constrain)
-{
- char* begin_constrain = "<o-ex:constraint>";
- char* end_constrain = "</o-ex:constraint>";
- char* constrain_begin = strstr((char*)drm_constrain,begin_constrain);
- char* constrain_end = strstr((char*)drm_constrain,end_constrain);
- uint32_t constrain_len = 0;
-
- if(NULL == constrain_begin)
- return FALSE;
-
- if(NULL == constrain_end)
- return TRUE;
-
- /* compute valid characters length */
- {
- uint32_t constrain_begin_len = strlen(begin_constrain);
- char* cur_pos = constrain_begin + constrain_begin_len;
-
- constrain_len = (constrain_end - constrain_begin) - constrain_begin_len;
-
- while(cur_pos < constrain_end){
- if(isspace(*cur_pos))
- constrain_len--;
-
- cur_pos++;
- }
- }
-
- /* check all constraints */
- {
- #define DRM_ALL_CONSTRAINT_COUNT 5
-
- int32_t i = 0;
- int32_t has_datetime = FALSE;
- int32_t has_start_or_end = FALSE;
-
- char* all_vaild_constraints[DRM_ALL_CONSTRAINT_COUNT][2] = {
- {"<o-dd:count>","</o-dd:count>"},
- {"<o-dd:interval>","</o-dd:interval>"},
- {"<o-dd:datetime>","</o-dd:datetime>"},
- {"<o-dd:start>","</o-dd:start>"},
- {"<o-dd:end>","</o-dd:end>"}
- };
-
- for(i = 0; i < DRM_ALL_CONSTRAINT_COUNT; i++){
- char*start = strstr((char*)drm_constrain,all_vaild_constraints[i][0]);
-
- if(start && (start < constrain_end)){
- char* end = strstr((char*)drm_constrain,all_vaild_constraints[i][1]);
-
- if(end && (end < constrain_end)){
- if(0 == strncmp(all_vaild_constraints[i][0],"<o-dd:datetime>",strlen("<o-dd:datetime>"))){
- constrain_len -= strlen(all_vaild_constraints[i][0]);
- constrain_len -= strlen(all_vaild_constraints[i][1]);
-
- if(0 == constrain_len)
- return TRUE;
-
- has_datetime = TRUE;
- continue;
- }
-
- if((0 == strncmp(all_vaild_constraints[i][0],"<o-dd:start>",strlen("<o-dd:start>")))
- || (0 == strncmp(all_vaild_constraints[i][0],"<o-dd:end>",strlen("<o-dd:end>")))){
- if(FALSE == has_datetime)
- return TRUE;
- else
- has_start_or_end = TRUE;
- }
-
- constrain_len -= (end - start);
- constrain_len -= strlen(all_vaild_constraints[i][1]);
-
- if(0 == constrain_len)
- if(has_datetime != has_start_or_end)
- return TRUE;
- else
- return FALSE;
- }
- else
- return TRUE;
- }
- }
-
- if(has_datetime != has_start_or_end)
- return TRUE;
-
- if(constrain_len)
- return TRUE;
- else
- return FALSE;
- }
-}
-
-static int32_t drm_getRightValue(uint8_t * buffer, int32_t bufferLen,
- T_DRM_Rights * ro, uint8_t * operation,
- uint8_t oper_char)
-{
- uint8_t *pBuf, *pValue;
- uint8_t sProperty[256];
- int32_t valueLen;
- int32_t year, mon, day, hour, min, sec;
- T_DRM_Rights_Constraint *pConstraint;
- int32_t *bIsAble;
- uint8_t *ret = NULL;
- int32_t flag = 0;
-
- if (operation == NULL) {
- switch (oper_char) {
- case REL_TAG_PLAY:
- pConstraint = &(ro->PlayConstraint);
- bIsAble = &(ro->bIsPlayable);
- break;
- case REL_TAG_DISPLAY:
- pConstraint = &(ro->DisplayConstraint);
- bIsAble = &(ro->bIsDisplayable);
- break;
- case REL_TAG_EXECUTE:
- pConstraint = &(ro->ExecuteConstraint);
- bIsAble = &(ro->bIsExecuteable);
- break;
- case REL_TAG_PRINT:
- pConstraint = &(ro->PrintConstraint);
- bIsAble = &(ro->bIsPrintable);
- break;
- default:
- return FALSE; /* The input parm is err */
- }
- } else {
- if (strcmp((char *)operation, "play") == 0) {
- pConstraint = &(ro->PlayConstraint);
- bIsAble = &(ro->bIsPlayable);
- } else if (strcmp((char *)operation, "display") == 0) {
- pConstraint = &(ro->DisplayConstraint);
- bIsAble = &(ro->bIsDisplayable);
- } else if (strcmp((char *)operation, "execute") == 0) {
- pConstraint = &(ro->ExecuteConstraint);
- bIsAble = &(ro->bIsExecuteable);
- } else if (strcmp((char *)operation, "print") == 0) {
- pConstraint = &(ro->PrintConstraint);
- bIsAble = &(ro->bIsPrintable);
- } else
- return FALSE; /* The input parm is err */
- }
-
- if (operation == NULL) {
- sprintf((char *)sProperty, "%c%c%c%c", REL_TAG_RIGHTS,
- REL_TAG_AGREEMENT, REL_TAG_PERMISSION, oper_char);
- ret = WBXML_DOM_getNode(buffer, bufferLen, sProperty);
- } else {
- sprintf((char *)sProperty,
- "o-ex:rights\\o-ex:agreement\\o-ex:permission\\o-dd:%s",
- operation);
- ret = XML_DOM_getNode(buffer, sProperty);
- }
- CHECK_VALIDITY(ret);
- if (NULL == ret)
- return TRUE;
- WRITE_RO_FLAG(*bIsAble, 1, pConstraint->Indicator, DRM_NO_CONSTRAINT); /* If exit first assume have utter rights */
- flag = 1;
-
- if (operation == NULL) { /* If father element node is not exit then return */
- sprintf((char *)sProperty, "%c%c%c%c%c", REL_TAG_RIGHTS,
- REL_TAG_AGREEMENT, REL_TAG_PERMISSION, oper_char,
- REL_TAG_CONSTRAINT);
- ret = WBXML_DOM_getNode(buffer, bufferLen, sProperty);
- } else {
- sprintf((char *)sProperty,
- "o-ex:rights\\o-ex:agreement\\o-ex:permission\\o-dd:%s\\o-ex:constraint",
- operation);
- ret = XML_DOM_getNode(buffer, sProperty);
- }
-
- CHECK_VALIDITY(ret);
- if (ret == NULL)
- return TRUE;
-
- if(TRUE == drm_checkWhetherHasUnknowConstraint(ret))
- return FALSE;
-
- *bIsAble = 0;
- pConstraint->Indicator = DRM_NO_PERMISSION; /* If exit constraint assume have no rights */
- flag = 2;
-
- if (operation == NULL) {
- sprintf((char *)sProperty, "%c%c%c%c%c%c", REL_TAG_RIGHTS,
- REL_TAG_AGREEMENT, REL_TAG_PERMISSION, oper_char,
- REL_TAG_CONSTRAINT, REL_TAG_INTERVAL);
- pBuf =
- WBXML_DOM_getNodeValue(buffer, bufferLen, sProperty, (uint8_t **)&pValue,
- &valueLen);
- } else {
- sprintf((char *)sProperty,
- "o-ex:rights\\o-ex:agreement\\o-ex:permission\\o-dd:%s\\o-ex:constraint\\o-dd:interval",
- operation);
- pBuf = XML_DOM_getNodeValue(buffer, sProperty, &pValue, &valueLen);
- }
- CHECK_VALIDITY(pBuf);
- if (pBuf) { /* If interval element exit then get the value */
- uint8_t pTmp[64] = {0};
-
- strncpy((char *)pTmp, (char *)pValue, valueLen);
- {
- uint8_t * pHead = pTmp + 1;
- uint8_t * pEnd = NULL;
- uint8_t tmpChar;
-
- /** get year */
- pEnd = (uint8_t *)strstr((char *)pHead, "Y");
- if(NULL == pEnd)
- return FALSE;
- tmpChar = *pEnd;
- *pEnd = '\0';
- year = atoi((char *)pHead);
- pHead = pEnd + 1;
- *pEnd = tmpChar;
-
- /** get month */
- pEnd = (uint8_t *)strstr((char *)pHead, "M");
- if(NULL == pEnd)
- return FALSE;
- tmpChar = *pEnd;
- *pEnd = '\0';
- mon = atoi((char *)pHead);
- pHead = pEnd + 1;
- *pEnd = tmpChar;
-
- /** get day */
- pEnd = (uint8_t *)strstr((char *)pHead, "D");
- if(NULL == pEnd)
- return FALSE;
- tmpChar = *pEnd;
- *pEnd = '\0';
- day = atoi((char *)pHead);
- pHead = pEnd + 2;
- *pEnd = tmpChar;
-
- /** get hour */
- pEnd = (uint8_t *)strstr((char *)pHead, "H");
- if(NULL == pEnd)
- return FALSE;
- tmpChar = *pEnd;
- *pEnd = '\0';
- hour = atoi((char *)pHead);
- pHead = pEnd + 1;
- *pEnd = tmpChar;
-
- /** get minute */
- pEnd = (uint8_t *)strstr((char *)pHead, "M");
- if(NULL == pEnd)
- return FALSE;
- tmpChar = *pEnd;
- *pEnd = '\0';
- min = atoi((char *)pHead);
- pHead = pEnd + 1;
- *pEnd = tmpChar;
-
- /** get second */
- pEnd = (uint8_t *)strstr((char *)pHead, "S");
- if(NULL == pEnd)
- return FALSE;
- tmpChar = *pEnd;
- *pEnd = '\0';
- sec = atoi((char *)pHead);
- pHead = pEnd + 1;
- *pEnd = tmpChar;
- }
-
- if (year < 0 || mon < 0 || day < 0 || hour < 0
- || min < 0 || sec < 0)
- return FALSE;
- YMD_HMS_2_INT(year, mon, day, pConstraint->Interval.date, hour,
- min, sec, pConstraint->Interval.time);
- WRITE_RO_FLAG(*bIsAble, 1, pConstraint->Indicator,
- DRM_INTERVAL_CONSTRAINT);
- flag = 3;
- }
-
- if (operation == NULL) {
- sprintf((char *)sProperty, "%c%c%c%c%c%c", REL_TAG_RIGHTS,
- REL_TAG_AGREEMENT, REL_TAG_PERMISSION, oper_char,
- REL_TAG_CONSTRAINT, REL_TAG_COUNT);
- pBuf =
- WBXML_DOM_getNodeValue(buffer, bufferLen, sProperty, (uint8_t **)&pValue,
- &valueLen);
- } else {
- sprintf((char *)sProperty,
- "o-ex:rights\\o-ex:agreement\\o-ex:permission\\o-dd:%s\\o-ex:constraint\\o-dd:count",
- operation);
- pBuf = XML_DOM_getNodeValue(buffer, sProperty, &pValue, &valueLen);
- }
- CHECK_VALIDITY(pBuf);
- if (pBuf) { /* If count element exit the get the value */
- uint8_t pTmp[16] = {0};
- int32_t i;
-
- for (i = 0; i < valueLen; i++) { /* Check the count format */
- if (0 == isdigit(*(pValue + i)))
- return FALSE;
- }
-
- strncpy((char *)pTmp, (char *)pValue, valueLen);
- pConstraint->Count = atoi((char *)pTmp);
-
- if(0 == pConstraint->Count)
- {
- WRITE_RO_FLAG(*bIsAble, 0, pConstraint->Indicator, DRM_NO_PERMISSION);
- }
- else if( pConstraint->Count > 0)
- {
- WRITE_RO_FLAG(*bIsAble, 1, pConstraint->Indicator, DRM_COUNT_CONSTRAINT);
- }
- else /* < 0 */
- {
- return FALSE;
- }
-
- flag = 3;
- }
-
- if (operation == NULL) {
- sprintf((char *)sProperty, "%c%c%c%c%c%c%c", REL_TAG_RIGHTS,
- REL_TAG_AGREEMENT, REL_TAG_PERMISSION, oper_char,
- REL_TAG_CONSTRAINT, REL_TAG_DATETIME, REL_TAG_START);
- pBuf =
- WBXML_DOM_getNodeValue(buffer, bufferLen, sProperty, (uint8_t **)&pValue,
- &valueLen);
- } else {
- sprintf((char *)sProperty,
- "o-ex:rights\\o-ex:agreement\\o-ex:permission\\o-dd:%s\\o-ex:constraint\\o-dd:datetime\\o-dd:start",
- operation);
- pBuf = XML_DOM_getNodeValue(buffer, sProperty, &pValue, &valueLen);
- }
- CHECK_VALIDITY(pBuf);
- if (pBuf) { /* If start element exit then get the value */
- if (FALSE ==
- drm_getStartEndTime(pValue, valueLen, &pConstraint->StartTime))
- return FALSE;
- WRITE_RO_FLAG(*bIsAble, 1, pConstraint->Indicator, DRM_START_TIME_CONSTRAINT);
- flag = 3;
- }
-
- if (operation == NULL) {
- sprintf((char *)sProperty, "%c%c%c%c%c%c%c", REL_TAG_RIGHTS,
- REL_TAG_AGREEMENT, REL_TAG_PERMISSION, oper_char,
- REL_TAG_CONSTRAINT, REL_TAG_DATETIME, REL_TAG_END);
- pBuf =
- WBXML_DOM_getNodeValue(buffer, bufferLen, sProperty, (uint8_t **)&pValue,
- &valueLen);
- } else {
- sprintf((char *)sProperty,
- "o-ex:rights\\o-ex:agreement\\o-ex:permission\\o-dd:%s\\o-ex:constraint\\o-dd:datetime\\o-dd:end",
- operation);
- pBuf = XML_DOM_getNodeValue(buffer, sProperty, &pValue, &valueLen);
- }
- CHECK_VALIDITY(pBuf);
- if (pBuf) {
- if (FALSE ==
- drm_getStartEndTime(pValue, valueLen, &pConstraint->EndTime))
- return FALSE;
- WRITE_RO_FLAG(*bIsAble, 1, pConstraint->Indicator, DRM_END_TIME_CONSTRAINT);
- flag = 3;
- }
-
- if (2 == flag)
- WRITE_RO_FLAG(*bIsAble, 1, pConstraint->Indicator, DRM_NO_CONSTRAINT); /* If exit first assume have utter rights */
- return TRUE;
-}
-
-/* See parser_rel.h */
-int32_t drm_relParser(uint8_t* buffer, int32_t bufferLen, int32_t Format, T_DRM_Rights* pRights)
-{
- uint8_t *pBuf, *pValue;
- uint8_t sProperty[256];
- int32_t valueLen;
-
- if (TYPE_DRM_RIGHTS_WBXML != Format && TYPE_DRM_RIGHTS_XML != Format) /* It is not the support parse format */
- return FALSE;
-
- if (TYPE_DRM_RIGHTS_XML == Format) {
- /* Check whether it is a CD, and parse it using TYPE_DRM_RIGHTS_XML */
- if (NULL != drm_strnstr(buffer, (uint8_t *)HEADERS_CONTENT_ID, bufferLen))
- return FALSE;
-
- pBuf =
- XML_DOM_getNodeValue(buffer,
- (uint8_t *)"o-ex:rights\\o-ex:context\\o-dd:version",
- &pValue, &valueLen);
- CHECK_VALIDITY(pBuf);
-
- if (pBuf) {
- if (valueLen > 8) /* Check version lenth */
- return FALSE;
-
- /* error version */
- if(strncmp(pValue,"1.0",valueLen))
- return FALSE;
-
- strncpy((char *)pRights->Version, (char *)pValue, valueLen);
- } else
- return FALSE;
-
- /* this means there is more than one version label in rights */
- if(strstr((char*)pBuf, "<o-dd:version>"))
- return FALSE;
-
- pBuf =
- XML_DOM_getNodeValue(buffer,
- (uint8_t *)"o-ex:rights\\o-ex:agreement\\o-ex:asset\\ds:KeyInfo\\ds:KeyValue",
- &pValue, &valueLen);
- CHECK_VALIDITY(pBuf);
- if (pBuf) { /* Get keyvalue */
- int32_t keyLen;
-
- if (24 != valueLen)
- return FALSE;
-
- keyLen = drm_decodeBase64(NULL, 0, pValue, &valueLen);
- if (keyLen < 0)
- return FALSE;
-
- if (DRM_KEY_LEN != drm_decodeBase64(pRights->KeyValue, keyLen, pValue, &valueLen))
- return FALSE;
- }
-
- pBuf =
- XML_DOM_getNodeValue(buffer,
- (uint8_t *)"o-ex:rights\\o-ex:agreement\\o-ex:asset\\o-ex:context\\o-dd:uid",
- &pValue, &valueLen);
- CHECK_VALIDITY(pBuf);
- if (pBuf) {
- if (valueLen > DRM_UID_LEN)
- return FALSE;
- strncpy((char *)pRights->uid, (char *)pValue, valueLen);
- pRights->uid[valueLen] = '\0';
- } else
- return FALSE;
-
- /* this means there is more than one uid label in rights */
- if(strstr((char*)pBuf, "<o-dd:uid>"))
- return FALSE;
-
- if (FALSE ==
- drm_getRightValue(buffer, bufferLen, pRights, (uint8_t *)"play", 0))
- return FALSE;
-
- if (FALSE ==
- drm_getRightValue(buffer, bufferLen, pRights, (uint8_t *)"display", 0))
- return FALSE;
-
- if (FALSE ==
- drm_getRightValue(buffer, bufferLen, pRights, (uint8_t *)"execute", 0))
- return FALSE;
-
- if (FALSE ==
- drm_getRightValue(buffer, bufferLen, pRights, (uint8_t *)"print", 0))
- return FALSE;
- } else if (TYPE_DRM_RIGHTS_WBXML == Format) {
- if (!REL_CHECK_WBXML_HEADER(buffer))
- return FALSE;
-
- sprintf((char *)sProperty, "%c%c%c", REL_TAG_RIGHTS, REL_TAG_CONTEXT,
- REL_TAG_VERSION);
- pBuf =
- WBXML_DOM_getNodeValue(buffer, bufferLen, sProperty, (uint8_t **)&pValue,
- &valueLen);
- CHECK_VALIDITY(pBuf);
-
- if (pBuf) {
- if (valueLen > 8) /* Check version lenth */
- return FALSE;
- strncpy((char *)pRights->Version, (char *)pValue, valueLen);
- } else
- return FALSE;
-
- sprintf((char *)sProperty, "%c%c%c%c%c",
- REL_TAG_RIGHTS, REL_TAG_AGREEMENT, REL_TAG_ASSET,
- REL_TAG_KEYINFO, REL_TAG_KEYVALUE);
- pBuf =
- WBXML_DOM_getNodeValue(buffer, bufferLen, sProperty, (uint8_t **)&pValue,
- &valueLen);
- CHECK_VALIDITY(pBuf);
- if (pBuf) {
- if (DRM_KEY_LEN != valueLen)
- return FALSE;
- memcpy(pRights->KeyValue, pValue, DRM_KEY_LEN);
- memset(pValue, 0, DRM_KEY_LEN); /* Clean the KeyValue */
- }
-
- sprintf((char *)sProperty, "%c%c%c%c%c",
- REL_TAG_RIGHTS, REL_TAG_AGREEMENT, REL_TAG_ASSET,
- REL_TAG_CONTEXT, REL_TAG_UID);
- pBuf =
- WBXML_DOM_getNodeValue(buffer, bufferLen, sProperty, (uint8_t **)&pValue,
- &valueLen);
- CHECK_VALIDITY(pBuf);
- if (pBuf) {
- if (valueLen > DRM_UID_LEN)
- return FALSE;
- strncpy((char *)pRights->uid, (char *)pValue, valueLen);
- pRights->uid[valueLen] = '\0';
- } else
- return FALSE;
-
- if (FALSE ==
- drm_getRightValue(buffer, bufferLen, pRights, NULL,
- REL_TAG_PLAY))
- return FALSE;
-
- if (FALSE ==
- drm_getRightValue(buffer, bufferLen, pRights, NULL,
- REL_TAG_DISPLAY))
- return FALSE;
-
- if (FALSE ==
- drm_getRightValue(buffer, bufferLen, pRights, NULL,
- REL_TAG_EXECUTE))
- return FALSE;
-
- if (FALSE ==
- drm_getRightValue(buffer, bufferLen, pRights, NULL,
- REL_TAG_PRINT))
- return FALSE;
- }
-
- return TRUE;
-}
diff --git a/media/libdrm/mobile1/src/xml/xml_tinyparser.c b/media/libdrm/mobile1/src/xml/xml_tinyparser.c
deleted file mode 100644
index 7580312..0000000
--- a/media/libdrm/mobile1/src/xml/xml_tinyparser.c
+++ /dev/null
@@ -1,834 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <xml/xml_tinyParser.h>
-
-int32_t xml_errno;
-
-#ifdef XML_DOM_PARSER
-
-#define XML_IS_WHITESPACE(x) ((x) == '\t' || (x) == '\n' || (x) == ' ' || (x) == '\r')
-#define XML_IS_NAMECHAR(ch) (isalpha(ch) || isdigit(ch) || ch ==':' || \
- ch == '_' || ch == '-' || ch =='.')
-
-static uint8_t *xml_ignore_blank(uint8_t *buffer)
-{
- if (NULL == buffer)
- return NULL;
-
- while (XML_IS_WHITESPACE(*buffer))
- buffer++;
-
- return buffer;
-}
-
-static uint8_t *xml_goto_tagend(uint8_t *buffer)
-{
- int32_t nameLen, valueLen;
- uint8_t *name, *value;
-
- if (NULL == buffer)
- return NULL;
-
- /* Ignore the start-tag */
- if (*buffer == '<') {
- buffer++;
- while (buffer != NULL && XML_IS_NAMECHAR(*buffer))
- buffer++;
- if (NULL == buffer)
- return NULL;
- }
-
- do {
- if (NULL == (buffer = xml_ignore_blank(buffer)))
- return NULL;
-
- if (*buffer == '>' || (*buffer == '/' && *(buffer + 1) == '>'))
- return buffer;
-
- if (NULL ==
- XML_DOM_getAttr(buffer, &name, &nameLen, &value, &valueLen))
- return NULL;
-
- buffer = value + valueLen + 1;
- } while (*buffer != '\0');
-
- return NULL;
-}
-
-static uint8_t *xml_match_tag(uint8_t *buffer)
-{
- int32_t tagLen, tagType, bal;
-
- if (NULL == buffer)
- return NULL;
-
- bal = 0;
- do {
- if (NULL == (buffer = XML_DOM_getTag(buffer, &tagLen, &tagType)))
- return NULL;
-
- switch (tagType) {
- case XML_TAG_SELF:
- case XML_TAG_START:
- if (NULL == (buffer = xml_goto_tagend(buffer + tagLen + 1)))
- return NULL;
- if (strncmp((char *)buffer, "/>", 2) == 0) {
- buffer += 2;
- } else {
- bal++;
- }
- break;
-
- case XML_TAG_END:
- if (bal <= 0)
- return NULL;
- buffer = buffer + tagLen + 2;
- bal--;
- break;
- }
- } while (bal != 0);
-
- return buffer;
-}
-
-uint8_t *XML_DOM_getAttr(uint8_t *buffer, uint8_t **pName, int32_t *nameLen,
- uint8_t **pValue, int32_t *valueLen)
-{
- uint8_t charQuoted;
-
- if (NULL == buffer) {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
-
- /* Ignore the tag */
- if (*buffer == '<') {
- buffer++;
- /* Ignore the STag */
- while (buffer != NULL && XML_IS_NAMECHAR(*buffer))
- buffer++;
- if (NULL == buffer)
- return NULL;
- }
-
- if (NULL == (buffer = xml_ignore_blank(buffer))) {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
-
- /* Name */
- *pName = buffer;
- while (buffer != NULL && XML_IS_NAMECHAR(*buffer))
- buffer++;
- if (NULL == buffer) {
- XML_ERROR(XML_ERROR_ATTR_NAME);
- return NULL;
- }
- *nameLen = buffer - *pName;
- if (*nameLen <= 0) {
- XML_ERROR(XML_ERROR_ATTR_NAME);
- return NULL;
- }
-
- /* '=' */
- buffer = xml_ignore_blank(buffer);
- if (NULL == buffer || *buffer != '=') {
- XML_ERROR(XML_ERROR_ATTR_MISSED_EQUAL);
- return NULL;
- }
-
- /* Value */
- buffer++;
- buffer = xml_ignore_blank(buffer);
- if (NULL == buffer || (*buffer != '"' && *buffer != '\'')) {
- XML_ERROR(XML_ERROR_ATTR_VALUE);
- return NULL;
- }
- charQuoted = *buffer++;
- *pValue = buffer;
- while (*buffer != '\0' && *buffer != charQuoted)
- buffer++;
- if (*buffer != charQuoted) {
- XML_ERROR(XML_ERROR_ATTR_VALUE);
- return NULL;
- }
- *valueLen = buffer - *pValue;
-
- XML_ERROR(XML_ERROR_OK);
-
- return buffer + 1;
-}
-
-uint8_t *XML_DOM_getValue(uint8_t *buffer, uint8_t **pValue, int32_t *valueLen)
-{
- uint8_t *pEnd;
-
- if (NULL == buffer) {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
-
- /* Ignore the STag */
- if (*buffer == '<') {
- buffer++;
- /* If it's an end_tag, no value should be returned */
- if (*buffer == '/') {
- *valueLen = 0;
- XML_ERROR(XML_ERROR_NOVALUE);
- return NULL;
- }
-
- while (buffer != NULL && XML_IS_NAMECHAR(*buffer))
- buffer++;
- if (NULL == buffer) {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
-
- if (NULL == (buffer = xml_goto_tagend(buffer))) {
- XML_ERROR(XML_ERROR_PROPERTY_END);
- return NULL;
- }
- }
-
- /* <test/> node found */
- if (*buffer == '/') {
- if (*(buffer + 1) != '>') {
- XML_ERROR(XML_ERROR_PROPERTY_END);
- return NULL;
- }
- XML_ERROR(XML_ERROR_OK);
- *valueLen = 0;
- return buffer;
- }
-
- if (*buffer == '>')
- buffer++;
-
- if (NULL == (buffer = xml_ignore_blank(buffer))) {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
-
- /* the following is a tag instead of the value */
- if (*buffer == '<') { /* nono value, such as <test></test> */
- buffer++;
- if (*buffer != '/') {
- XML_ERROR(XML_ERROR_ENDTAG);
- return NULL;
- }
- *valueLen = 0;
- XML_ERROR(XML_ERROR_OK);
- return NULL;
- }
-
- *pValue = buffer;
- pEnd = NULL;
- while (*buffer != '\0' && *buffer != '<') {
- if (!XML_IS_WHITESPACE(*buffer))
- pEnd = buffer;
- buffer++;
- }
- if (*buffer != '<' || pEnd == NULL) {
- XML_ERROR(XML_ERROR_VALUE);
- return NULL;
- }
-
- *valueLen = pEnd - *pValue + 1;
-
- buffer++;
- if (*buffer != '/') {
- XML_ERROR(XML_ERROR_ENDTAG);
- return NULL;
- }
-
- XML_ERROR(XML_ERROR_OK);
-
- return buffer - 1;
-}
-
-uint8_t *XML_DOM_getTag(uint8_t *buffer, int32_t *tagLen, int32_t *tagType)
-{
- uint8_t *pStart;
-
- /* WARNING: <!-- --> comment is not supported in this verison */
- if (NULL == buffer) {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
-
- do {
- while (*buffer != '<') {
- if (*buffer == '\0') {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
-
- if (*buffer == '\"' || *buffer == '\'') {
- uint8_t charQuoted = *buffer;
- buffer++;
- while (*buffer != '\0' && *buffer != charQuoted)
- buffer++;
- if (*buffer == '\0') {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
- }
- buffer++;
- }
- buffer++;
- } while (*buffer == '!' || *buffer == '?');
-
- pStart = buffer - 1;
-
- if (*buffer == '/') {
- buffer++;
- *tagType = XML_TAG_END;
- } else {
- /* check here if it is self-end-tag */
- uint8_t *pCheck = xml_goto_tagend(pStart);
- if (pCheck == NULL) {
- XML_ERROR(XML_ERROR_PROPERTY_END);
- return NULL;
- }
-
- if (*pCheck == '>')
- *tagType = XML_TAG_START;
- else if (strncmp((char *)pCheck, "/>", 2) == 0)
- *tagType = XML_TAG_SELF;
- else {
- XML_ERROR(XML_ERROR_PROPERTY_END);
- return NULL;
- }
- }
-
- while (buffer != NULL && XML_IS_NAMECHAR(*buffer))
- buffer++;
- if (NULL == buffer) {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
-
- if (*tagType == XML_TAG_END)
- *tagLen = buffer - pStart - 2;
- else
- *tagLen = buffer - pStart - 1;
-
- XML_ERROR(XML_ERROR_OK);
-
- return pStart;
-}
-
-uint8_t *XML_DOM_getNode(uint8_t *buffer, const uint8_t *const node)
-{
- uint8_t *pStart;
- uint8_t buf[XML_MAX_PROPERTY_LEN + 2];
- uint8_t *nodeStr = buf;
- uint8_t *retPtr = NULL;
- int32_t tagLen, tagType;
- uint8_t *lastNode = (uint8_t *)"";
-
- if (NULL == buffer) {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
-
- strncpy((char *)nodeStr, (char *)node, XML_MAX_PROPERTY_LEN);
- strcat((char *)nodeStr, "\\");
- pStart = (uint8_t *)strchr((char *)nodeStr, '\\');
-
- while (pStart != NULL) {
- *pStart = '\0';
-
- /* get the first start_tag from buffer */
- if (NULL == (buffer = XML_DOM_getTag(buffer, &tagLen, &tagType))) {
- XML_ERROR(XML_ERROR_NO_SUCH_NODE);
- return NULL;
- }
-
- if (tagType == XML_TAG_END) {
- if (0 ==
- strncmp((char *)lastNode, (char *)(buffer + 2), strlen((char *)lastNode)))
- XML_ERROR(XML_ERROR_NO_SUCH_NODE);
- else
- XML_ERROR(XML_ERROR_NO_START_TAG);
- return NULL;
- }
-
- /* wrong node, contiue to fetch the next node */
- if ((int32_t) strlen((char *)nodeStr) != tagLen
- || strncmp((char *)nodeStr, (char *)(buffer + 1), tagLen) != 0) {
- /* we should ignore all the middle code */
- buffer = xml_match_tag(buffer);
- continue;
- }
-
- retPtr = buffer; /* retPtr starts with '<xxx>' */
- buffer += (tagLen + 1);
-
- if (tagType == XML_TAG_SELF) {
- nodeStr = pStart + 1;
- break;
- }
-
- lastNode = nodeStr;
- nodeStr = pStart + 1;
- pStart = (uint8_t *)strchr((char *)nodeStr, '\\');
- }
-
- /* Check 5: nodeStr should be empty here */
- if (*nodeStr != '\0') {
- XML_ERROR(XML_ERROR_NO_SUCH_NODE);
- return NULL;
- }
-
- XML_ERROR(XML_ERROR_OK);
-
- return retPtr;
-}
-
-uint8_t *XML_DOM_getNodeValue(uint8_t *buffer, uint8_t *node,
- uint8_t **value, int32_t *valueLen)
-{
- uint8_t *pStart;
- uint8_t *lastTag;
-
- if (NULL == node || NULL == buffer) {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
-
- lastTag = node + strlen((char *)node) - 1;
- while (lastTag >= node && *lastTag != '\\')
- lastTag--;
- lastTag++;
-
- if (NULL == (pStart = XML_DOM_getNode(buffer, node)))
- return NULL;
-
- pStart += (strlen((char *)lastTag) + 1);
-
- if (NULL == (pStart = xml_goto_tagend(pStart))) {
- XML_ERROR(XML_ERROR_PROPERTY_END);
- return NULL;
- }
-
- if (NULL == (pStart = XML_DOM_getValue(pStart, value, valueLen)))
- return NULL;
-
- /* Check the end tag */
-#ifdef XML_DOM_CHECK_ENDTAG
- if (strncmp((char *)pStart, "/>", 2) == 0) {
-
- } else if (strncmp((char *)lastTag, (char *)(pStart + 2), strlen((char *)lastTag)) !=
- 0) {
- XML_ERROR(XML_ERROR_ENDTAG);
- return NULL;
- }
-#endif
-
- XML_ERROR(XML_ERROR_OK);
-
- return *value;
-}
-
-uint8_t *XML_DOM_getNextNode(uint8_t *buffer, uint8_t **pNodeName, int32_t *nodenameLen)
-{
- int32_t tagType;
-
- if (NULL == buffer)
- return NULL;
-
- do {
- if (NULL ==
- (buffer = XML_DOM_getTag(buffer + 1, nodenameLen, &tagType))) {
- XML_ERROR(XML_ERROR_NO_SUCH_NODE);
- return NULL;
- }
- } while (tagType == XML_TAG_END);
-
- *pNodeName = buffer + 1;
-
- XML_ERROR(XML_ERROR_OK);
-
- return buffer;
-}
-
-#endif /* XML_DOM_PARSER */
-
-#ifdef WBXML_DOM_PARSER
-
-#ifdef WBXML_OLD_VERSION
-uint8_t *WBXML_DOM_getNode(uint8_t *buffer, int32_t bufferLen,
- uint8_t *node)
-{
- int32_t i = 0, j = 0;
-
- if (NULL == buffer || node == NULL) {
- XML_ERROR(XML_ERROR_BUFFER_NULL);
- return NULL;
- }
-
- while (i < bufferLen) {
- if (WBXML_GET_TAG(buffer[i]) == WBXML_GET_TAG(node[j])) {
- j++;
- if (node[j] == '\0')
- break;
-
- /* Check if there is the content(it should have content) */
- if (!WBXML_HAS_CONTENT(buffer[i])) {
- /*XML_ERROR(WBXML_ERROR_MISSED_CONTENT); */
- XML_ERROR(XML_ERROR_NO_SUCH_NODE);
- return NULL;
- }
-
- /* Ignore the attrib filed */
- if (WBXML_HAS_ATTR(buffer[i])) {
- while (i < bufferLen && buffer[i] != WBXML_ATTR_END)
- i++;
- if (i >= bufferLen)
- break;
- }
- }
- i++;
-
- /* Ignore the content filed */
- if (buffer[i] == WBXML_STR_I) {
- while (i < bufferLen && buffer[i] != WBXML_END)
- i++;
- if (i >= bufferLen)
- break;
- i++;
- }
- }
-
- if (i >= bufferLen) {
- XML_ERROR(XML_ERROR_NO_SUCH_NODE);
- return NULL;
- }
-
- XML_ERROR(XML_ERROR_OK);
-
- return buffer + i + 1;
-}
-
-uint8_t *WBXML_DOM_getNodeValue(uint8_t *buffer, int32_t bufferLen,
- uint8_t *node,
- uint8_t **value, int32_t *valueLen)
-{
- int32_t i;
- uint8_t *pEnd;
-
- *value = NULL;
- *valueLen = 0;
-
- pEnd = buffer + bufferLen;
- buffer = WBXML_DOM_getNode(buffer, bufferLen, node);
- if (NULL == buffer) {
- XML_ERROR(XML_ERROR_NO_SUCH_NODE);
- return NULL;
- }
-
- if (*buffer == WBXML_OPAUE) {
- buffer++;
- *valueLen = WBXML_GetUintVar(buffer, &i);
- if (*valueLen < 0) {
- XML_ERROR(WBXML_ERROR_MBUINT32);
- return NULL;
- }
- buffer += i;
- *value = buffer;
- return *value;
- }
-
- if (*buffer != WBXML_STR_I) {
- XML_ERROR(WBXML_ERROR_MISSED_STARTTAG);
- return NULL;
- }
-
- buffer++;
-
- i = 0;
- while ((buffer + i) < pEnd && buffer[i] != WBXML_END)
- i++;
-
- if (buffer[i] != WBXML_END) {
- XML_ERROR(WBXML_ERROR_MISSED_ENDTAG);
- return NULL;
- }
-
- *value = buffer;
- *valueLen = i;
- XML_ERROR(XML_ERROR_OK);
-
- return *value;
-}
-#endif /* WBXML_OLD_VERSION */
-
-#define MAX_UINT_VAR_BYTE 4
-#define UINTVAR_INVALID -1
-int32_t WBXML_GetUintVar(const uint8_t *const buffer, int32_t *len)
-{
- int32_t i, byteLen;
- int32_t sum;
-
- byteLen = 0;
- while ((buffer[byteLen] & 0x80) > 0 && byteLen < MAX_UINT_VAR_BYTE)
- byteLen++;
-
- if (byteLen > MAX_UINT_VAR_BYTE)
- return UINTVAR_INVALID;
-
- *len = byteLen + 1;
- sum = buffer[byteLen];
- for (i = byteLen - 1; i >= 0; i--)
- sum += ((buffer[i] & 0x7F) << 7 * (byteLen - i));
-
- return sum;
-}
-
-XML_BOOL WBXML_DOM_Init(WBXML * pWbxml, uint8_t *buffer,
- int32_t bufferLen)
-{
- int32_t num, len;
-
- pWbxml->End = buffer + bufferLen;
- pWbxml->version = *buffer++;
- if (UINTVAR_INVALID == (num = WBXML_GetUintVar(buffer, &len)))
- return XML_FALSE;
- buffer += len;
- pWbxml->publicid = num;
- if (UINTVAR_INVALID == (num = WBXML_GetUintVar(buffer, &len)))
- return XML_FALSE;
- buffer += len;
- pWbxml->charset = num;
- if (UINTVAR_INVALID == (num = WBXML_GetUintVar(buffer, &len)))
- return XML_FALSE;
- buffer += len;
- pWbxml->strTable = buffer;
- pWbxml->strTableLen = num;
- buffer += num;
- pWbxml->curPtr = pWbxml->Content = buffer;
- pWbxml->depth = 0;
-
- return XML_TRUE;
-}
-
-void WBXML_DOM_Rewind(WBXML * pWbxml)
-{
- pWbxml->curPtr = pWbxml->Content;
-}
-
-XML_BOOL WBXML_DOM_Eof(WBXML * pWbxml)
-{
- if (pWbxml->curPtr > pWbxml->End)
- return XML_TRUE;
-
- return XML_FALSE;
-}
-
-uint8_t WBXML_DOM_GetTag(WBXML * pWbxml)
-{
- uint8_t tagChar;
-
- if (pWbxml->curPtr > pWbxml->End)
- return XML_EOF;
-
- tagChar = *pWbxml->curPtr;
- pWbxml->curPtr++;
-
- if (WBXML_GET_TAG(tagChar) == WBXML_CONTENT_END)
- pWbxml->depth--;
- else
- pWbxml->depth++;
-
- return tagChar;
-}
-
-uint8_t WBXML_DOM_GetChar(WBXML * pWbxml)
-{
- return *pWbxml->curPtr++;
-}
-
-void WBXML_DOM_Seek(WBXML * pWbxml, int32_t offset)
-{
- pWbxml->curPtr += offset;
-}
-
-uint8_t WBXML_DOM_GetUIntVar(WBXML * pWbxml)
-{
- int32_t num, len;
-
- num = WBXML_GetUintVar(pWbxml->curPtr, &len);
- pWbxml->curPtr += len;
-
- return (uint8_t)num;
-}
-
-#ifdef XML_TREE_STRUCTURE
-
-#ifdef DEBUG_MODE
-static int32_t malloc_times = 0;
-static int32_t free_times = 0;
-void XML_PrintMallocInfo()
-{
- printf("====XML_PrintMallocInfo====\n");
- printf(" Total malloc times:%d\n", malloc_times);
- printf(" Total free times:%d\n", free_times);
- printf("===========================\n");
-}
-#endif
-
-void *xml_malloc(int32_t size)
-{
-#ifdef DEBUG_MODE
- malloc_times++;
-#endif
- return malloc(size);
-}
-
-void xml_free(void *buffer)
-{
-#ifdef DEBUG_MODE
- free_times++;
-#endif
- free(buffer);
-}
-
-XML_TREE *xml_tree_fillnode(uint8_t **buf, int32_t tagLen)
-{
- XML_TREE *Tree;
- uint8_t *pAttr, *pName, *pValue;
- int32_t nameLen, valueLen;
- uint8_t *buffer = *buf;
-
- if (NULL == (Tree = (XML_TREE *) xml_malloc(sizeof(XML_TREE))))
- return NULL;
- memset(Tree, 0, sizeof(XML_TREE));
-
- strncpy((char *)Tree->tag, (char *)++buffer, tagLen);
- buffer += tagLen;
- pAttr = buffer;
-
- /* attribute */
- while (NULL !=
- (pAttr =
- XML_DOM_getAttr(pAttr, &pName, &nameLen, &pValue,
- &valueLen))) {
- XML_TREE_ATTR *attr;
- if (NULL ==
- (attr = (XML_TREE_ATTR *) xml_malloc(sizeof(XML_TREE_ATTR))))
- return NULL;
- memset(attr, 0, sizeof(XML_TREE_ATTR));
- strncpy((char *)attr->name, (char *)pName, nameLen);
- strncpy((char *)attr->value, (char *)pValue, valueLen);
- buffer = pValue + valueLen + 1;
-
- if (NULL != Tree->attr) // no attribute now
- Tree->last_attr->next = attr;
- else
- Tree->attr = attr;
- Tree->last_attr = attr;
- }
-
- /* value */
- pAttr = XML_DOM_getValue(buffer, &pValue, &valueLen);
- if (pAttr != NULL && valueLen > 0) {
- strncpy((char *)Tree->value, (char *)pValue, valueLen);
- buffer = pValue + valueLen;
- }
-
- *buf = buffer;
- return Tree;
-}
-
-XML_TREE *XML_makeTree(uint8_t **buf)
-{
- uint8_t *pBuf;
- int32_t valueLen, tagType;
- uint8_t *buffer = *buf;
- XML_TREE *TreeHead = NULL;
-
- if (NULL == (buffer = XML_DOM_getTag(buffer, &valueLen, &tagType)))
- return NULL;
- if (XML_TAG_END == tagType)
- return NULL;
- if (NULL == (TreeHead = xml_tree_fillnode(&buffer, valueLen)))
- return NULL;
- if (XML_TAG_SELF == tagType) {
- *buf = buffer;
- return TreeHead;
- }
-
- do {
- if (NULL == (pBuf = XML_DOM_getTag(buffer, &valueLen, &tagType)))
- return NULL;
-
- switch (tagType) {
- case XML_TAG_SELF:
- case XML_TAG_START:
- if (NULL == TreeHead->child)
- TreeHead->child = XML_makeTree(&buffer);
- else if (NULL == TreeHead->child->last_brother) {
- TreeHead->child->brother = XML_makeTree(&buffer);
- TreeHead->child->last_brother = TreeHead->child->brother;
- } else {
- TreeHead->child->last_brother->brother =
- XML_makeTree(&buffer);
- TreeHead->child->last_brother =
- TreeHead->child->last_brother->brother;
- }
- break;
- case XML_TAG_END:
- *buf = pBuf;
- return TreeHead;
- }
- buffer++;
- } while (1);
-}
-
-void XML_freeTree(XML_TREE * pTree)
-{
- XML_TREE *p, *pNext;
- XML_TREE_ATTR *pa, *lastpa;
-
- if (NULL == pTree)
- return;
-
- p = pTree->brother;
- while (NULL != p) {
- pNext = p->brother;
- p->brother = NULL;
- XML_freeTree(p);
- p = pNext;
- }
-
- if (NULL != pTree->child)
- XML_freeTree(pTree->child);
-
- pa = pTree->attr;
- while (NULL != pa) {
- lastpa = pa;
- pa = pa->next;
- xml_free(lastpa);
- }
- xml_free(pTree);
-}
-
-#endif /* XML_TREE_STRUCTURE */
-
-#endif /* WBXML_DOM_PARSER */
diff --git a/media/libdrm/mobile2/Android.mk b/media/libdrm/mobile2/Android.mk
deleted file mode 100644
index e187139..0000000
--- a/media/libdrm/mobile2/Android.mk
+++ /dev/null
@@ -1,79 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-# ---------------------------------------
-# First project
-#
-# Build DRM2 core library
-#
-# Output: libdrm2.so
-# ---------------------------------------
-include $(CLEAR_VARS)
-
-common_SRC_FILES := \
- src/util/ustl-1.0/bktrace.cpp \
- src/util/ustl-1.0/memblock.cpp \
- src/util/ustl-1.0/ofstream.cpp \
- src/util/ustl-1.0/ualgobase.cpp \
- src/util/ustl-1.0/unew.cpp \
- src/util/ustl-1.0/cmemlink.cpp \
- src/util/ustl-1.0/memlink.cpp \
- src/util/ustl-1.0/sistream.cpp \
- src/util/ustl-1.0/ubitset.cpp \
- src/util/ustl-1.0/ustdxept.cpp \
- src/util/ustl-1.0/fstream.cpp \
- src/util/ustl-1.0/mistream.cpp \
- src/util/ustl-1.0/sostream.cpp \
- src/util/ustl-1.0/uexception.cpp \
- src/util/ustl-1.0/ustring.cpp \
- src/util/xml/DomExpatAgent.cpp \
- src/util/xml/ExpatWrapper.cpp \
- src/util/xml/XMLDocumentImpl.cpp \
- src/util/xml/XMLElementImpl.cpp \
- src/util/domcore/CharacterDataImpl.cpp \
- src/util/domcore/ElementImpl.cpp \
- src/util/domcore/NodeListImpl.cpp \
- src/util/domcore/DocumentImpl.cpp \
- src/util/domcore/NodeImpl.cpp \
- src/util/domcore/TextImpl.cpp \
- src/util/domcore/DOMException.cpp \
- src/util/domcore/NodeIterator.cpp \
- src/util/crypto/DrmCrypto.cpp \
- src/rights/RoManager.cpp \
- src/rights/Asset.cpp \
- src/rights/Ro.cpp \
- src/rights/OperationPermission.cpp \
- src/rights/Right.cpp \
- src/rights/Constraint.cpp \
- src/drmmanager/DrmManager.cpp \
- src/dcf/DrmDcfCommon.cpp \
- src/dcf/DrmDcfContainer.cpp \
- src/dcf/DrmIStream.cpp \
- src/dcf/DrmRawContent.cpp \
- src/roap/RoapMessageHandler.cpp \
- src/roap/Registration.cpp
-
-ifeq ($(TARGET_ARCH),arm)
- LOCAL_CFLAGS += -fstrict-aliasing -fomit-frame-pointer
-endif
-
-common_CFLAGS := -W -g -DPLATFORM_ANDROID
-
-common_C_INCLUDES +=\
- $(LOCAL_PATH)/include \
- $(LOCAL_PATH)/src/util/ustl-1.0 \
- external/expat/lib \
- external/openssl \
- external/openssl/include
-
-LOCAL_SRC_FILES := $(common_SRC_FILES)
-LOCAL_CFLAGS += $(common_CFLAGS)
-LOCAL_C_INCLUDES += $(common_C_INCLUDES)
-
-LOCAL_SHARED_LIBRARIES := libexpat libcrypto
-LOCAL_MODULE := libdrm2
-
-ifeq ($(TARGET_OS)-$(TARGET_ARCH),linux-x86)
-LOCAL_CFLAGS += -DUSTL_ANDROID_X86
-endif
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/media/libdrm/mobile2/include/Drm2CommonTypes.h b/media/libdrm/mobile2/include/Drm2CommonTypes.h
deleted file mode 100644
index 8ad3a73..0000000
--- a/media/libdrm/mobile2/include/Drm2CommonTypes.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _DRM2COMMONTYPES_H_
-#define _DRM2COMMONTYPES_H_
-#include <stdint.h>
-
-#ifdef DRM2_UT
-#define PROTECTED public
-#define PRIVATE public
-#else
-#define PROTECTED protected
-#define PRIVATE private
-#endif
-
-#endif
diff --git a/media/libdrm/mobile2/include/dcf/DrmDcfCommon.h b/media/libdrm/mobile2/include/dcf/DrmDcfCommon.h
deleted file mode 100644
index 9ca7b3f..0000000
--- a/media/libdrm/mobile2/include/dcf/DrmDcfCommon.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __DCF_COMM_H__
-#define __DCF_COMM_H__
-
-#include <Drm2CommonTypes.h>
-#include <arpa/inet.h>
-#include <mistream.h>
-#include <ustring.h>
-
-using namespace ustl;
-
-////DCF box type list
-const uint32_t DCF_CONTAINER_BOX = uint32_t('m' << 24 | 'r' << 16 | 'd' << 8 | 'o');
-const uint32_t DCF_USER_TYPE = uint32_t('d' << 24 | 'i' << 16 | 'u' << 8 | 'u');
-const uint32_t DCF_FILE_TYPE = uint32_t('p' << 24 | 'y' << 16 | 't' << 8 | 'f');
-const uint32_t DCF_FILE_BRAND = uint32_t('f' << 24 | 'c' << 16 | 'd' << 8 | 'o');
-
-
-/**
- * The basic box class.
- */
-class Box
-{
-public:
- /**
- * constructor for Box, used to parse Box
- * \param box Box data
- */
- Box(const uint8_t* box);
-
- /**
- * copy constructor for Box
- * \param dcfBox Box object used to init a new Box object
- */
- Box(const Box& dcfBox);
-
- /**
- * assignment operator for Box
- * \param other Box object used to assign to a exist Box object
- */
- Box& operator=(const Box& other);
-
- /** Destructor for Box */
- virtual ~Box();
-
- /**
- * get the size of Box
- * \param none
- * \return
- * the size
- */
- uint64_t getSize(void) const;
-
- /**
- * get the type of Box
- * \param none
- * \return
- * the type
- */
- uint32_t getType(void) const;
-
- /**
- * get the user type of Box
- * \param none
- * \return
- * the user type
- */
- const uint8_t* getUsertype(void) const;
-
- /**
- * get the length of Box
- * \param none
- * \return
- * the length
- */
- virtual uint32_t getLen(void) const;
-PRIVATE:
- static const uint32_t USER_TYPE_LEN = 16;
-
- uint32_t mSize;
- uint32_t mType;
- uint64_t mLargeSize;
- uint8_t* mUserType;
- uint32_t mBoxLength;
-};
-
-/**
- * The fullBox class.
- */
-class FullBox : public Box
-{
-public:
- /**
- * constructor for FullBox, used to parse FullBox
- * \param fullBox FullBox data
- */
- FullBox(const uint8_t* fullBox);
-
- /** Destructor for FullBox */
- virtual ~FullBox(){}
-
- /**
- * get the version of FullBox
- * \param none
- * \return
- * the version
- */
- uint8_t getVersion(void) const;
-
- /**
- * get the flag of FullBox
- * \param none
- * \return
- * the flag
- */
- const uint8_t* getFlag(void) const;
-
- /**
- * get the length of FullBox
- * \param none
- * \return
- * the length
- */
- virtual uint32_t getLen(void) const;
-PRIVATE:
- static const uint32_t FLAG_LEN = 3;
-
- uint8_t mVersion;
- uint8_t mFlag[FLAG_LEN];
- uint32_t mFullBoxLength;
-};
-
-////// textal header class
-class TextualHeader
-{
-public:
- /** default constructor of DrmInStream */
- TextualHeader(){};
-
- /**
- * constructor for TextualHeader, used to parse textal header
- * \param inData textal header data
- */
- TextualHeader(const string& inData);
-
- /**
- * get the name of textal header
- * \param none
- * \return
- * the name
- */
- string getName() const;
-
- /**
- * get the value of textal header
- * \param none
- * \return
- * the value
- */
- string getValue() const;
-
- /**
- * get the parameter of textal header
- * \param none
- * \return
- * the parameter
- */
- string getParam() const;
-PRIVATE:
- string name;
- string value;
- string param;
-};
-
-extern int64_t ntoh_int64(int64_t in);
-
-#endif
diff --git a/media/libdrm/mobile2/include/dcf/DrmDcfContainer.h b/media/libdrm/mobile2/include/dcf/DrmDcfContainer.h
deleted file mode 100644
index 14da450..0000000
--- a/media/libdrm/mobile2/include/dcf/DrmDcfContainer.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __DCF_CONTAINER_H__
-#define __DCF_CONTAINER_H__
-
-#include <Drm2CommonTypes.h>
-#include <uvector.h>
-#include <dcf/DrmIStream.h>
-#include <dcf/DrmDcfCommon.h>
-
-class DrmInStream;
-
-/////////dcf container
-class DcfContainer : public FullBox
-{
-public:
- friend class DrmInStream;
-
- /** default constructor of DcfContainer */
- DcfContainer(istream& inRawData):FullBox(NULL),mConStream(inRawData){}
-
- /**
- * constructor for DcfContainer, used to parse DCF container
- * \param data DCF container data
- * \param len DCF container data len
- * \param off the offset from the start of DCF container
- */
- DcfContainer(const uint8_t* data,istream& inRawData,uint64_t conOff);
-
- /** Destructor for DcfContainer */
- ~DcfContainer();
-
- /**
- * get the content type of one content
- * \param none
- * \return
- * the content type
- */
- string getContentType(void) const;
-
- /**
- * get the encryption method apply to content
- * \param none
- * \return
- * the encryption method
- */
- uint8_t getEncryptionMethod(void) const;
-
- /**
- * get the padding scheme apply to content
- * \param none
- * \return
- * the padding scheme
- */
- uint8_t getPaddingScheme(void) const;
-
- /**
- * get the length of plain content
- * \param none
- * \return
- * the length of plain content
- */
- uint64_t getPlaintextLength(void) const;
-
- /**
- * get the length of content ID
- * \param none
- * \return
- * the length of content ID
- */
- uint16_t getContentIDLength(void) const;
-
- /**
- * get the length of rights issuer URL
- * \param none
- * \return
- * the length of rights issuer URL
- */
- uint16_t getRightsIssuerURLLength(void) const;
-
- /**
- * get the length of textal header
- * \param none
- * \return
- * the length of textal header
- */
- uint16_t getTextualHeadersLength(void) const;
-
- /**
- * get the content ID of one content
- * \param none
- * \return
- * the content ID
- */
- string getContentID(void) const;
-
- /**
- * get the rights issuer URL
- * \param none
- * \return
- * the rights issuer URL
- */
- string getRightsIssuerURL(void) const;
-
- /**
- * get the preview method
- * \param none
- * \return
- * the preview method
- */
- string getPreviewMethod(void) const;
-
- /**
- * get the location of content
- * \param none
- * \return
- * the location of content
- */
- string getContentLocation(void) const;
-
- /**
- * get the URL of content
- * \param none
- * \return
- * the URL of content
- */
- string getContentURL(void) const;
-
- /**
- * get the customer head
- * \param none
- * \return
- * the customer head
- */
- vector<string> getCustomerHead(void) const;
-
- /**
- * get the preview element data
- * \param none
- * \return
- * the DRM Instream of preview element data
- */
- DrmInStream getPreviewElementData(void) const;
-
- /**
- * get the plain content
- * \param none
- * \return
- * the DRM Instream of plain content
- */
- DrmInStream getDecryptContent(uint8_t* decryptKey) const;
-
- /**
- * get the istream of DCF
- * \param none
- * \return
- * the istream of DCF
- */
- istream& getStream(void) const;
-
-PRIVATE:
- static const uint32_t USER_DATA_FLAG = 0x01;
-
- uint8_t mContentTypeLen;
- string mContentType;
- uint8_t mEncryptionMethod;
- uint8_t mPaddingScheme;
- uint64_t mPlaintextLength;
- uint16_t mContentIDLength;
- uint16_t mRightsIssuerURLLength;
- uint16_t mTextualHeadersLength;
- string mContentID;
- string mRightsIssuerURL;
- vector<TextualHeader*> mTextualHeaders;
- bool mSilentFirst;
- string mSlientMethod;
- string mSilentRightsURL;
- string mPreviewMethod;
- string mPreviewElementURI;
- string mPreviewRightsURL;
- string mContentURL;
- string mContentVersion;
- string mContentLocation;
- vector<string> mCustomHeader;
- bool mHasUserData;
- uint64_t mDataLen;
- istream& mConStream;
- uint64_t mDecOffset;
-
-PRIVATE:
- // parse text header
- bool parseTextualHeaders(const uint8_t* data, uint32_t len);
- void copy(const DcfContainer& container);
- DcfContainer(const DcfContainer& container):FullBox(NULL),mConStream(container.mConStream){}
- DcfContainer& operator=(const DcfContainer& other){return *this;}
-};
-
-
-#endif
diff --git a/media/libdrm/mobile2/include/dcf/DrmIStream.h b/media/libdrm/mobile2/include/dcf/DrmIStream.h
deleted file mode 100644
index 10e264e..0000000
--- a/media/libdrm/mobile2/include/dcf/DrmIStream.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __DRM_ISTREAM_H__
-#define __DRM_ISTREAM_H__
-
-#include <Drm2CommonTypes.h>
-#include <util/crypto/DrmCrypto.h>
-#include <dcf/DrmDcfContainer.h>
-#include <ustring.h>
-
-using namespace ustl;
-
-class DcfContainer;
-
-class DrmInStream
-{
-public:
- /** default constructor of DrmInStream */
- DrmInStream():mDecryptPos(0){}
-
- /**
- * constructor for DrmInStream, used to read DCF content
- * \param encFile DCF container data
- * \param len DCF container data len
- * \param off the offset from the start of DCF container
- */
- DrmInStream(const DcfContainer* container,uint8_t* Key);
-
- /**
- * get the size of DRM Instream
- * \param none
- * \return
- * the size of DRM Instream
- */
- uint64_t size() const;
-
- /**
- * read data from DRM Instream
- * \param data the buffer to store read data
- * \param len how much data need to read
- * \return
- * the actual len of read data
- */
- uint64_t read(uint8_t* data,uint64_t len);
-
-PRIVATE:
- static const uint32_t AES_IV_LEN = 16;
- static const uint32_t AES_KEY_LEN = 16;
- static const uint32_t AES_BLOCK_LEN = 16;
-
- const DcfContainer* mDcfCon;
- uint64_t mDecryptPos;
- uint8_t mAesKey[AES_KEY_LEN];
-};
-
-
-
-#endif
-
-
-
-
-
diff --git a/media/libdrm/mobile2/include/dcf/DrmRawContent.h b/media/libdrm/mobile2/include/dcf/DrmRawContent.h
deleted file mode 100644
index 2d433af..0000000
--- a/media/libdrm/mobile2/include/dcf/DrmRawContent.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __DRM_CONTENT_H__
-#define __DRM_CONTENT_H__
-
-#include <Drm2CommonTypes.h>
-#include <dcf/DrmDcfContainer.h>
-
-/////////////raw content
-class DrmRawContent
-{
-public:
- /**
- * constructor for DrmRawContent, used to parse DCF
- * \param inRawData input stream of raw data.
- */
- DrmRawContent(istream& inRawData);
-
- /** Destructor for DrmRawContent */
- ~DrmRawContent();
-
- /**
- * get DCF container
- * \param none
- * \return
- * the DCF container
- */
- vector<DcfContainer*> getContents(void) const;
-
- /**
- * get the length of DCF hash
- * \param none
- * \return
- * the length of DCF hash
- */
- uint32_t getDcfHashLen() const;
-
- /**
- * get DCF hash
- * \param outDcfHash the buffer to store DCF hash
- * \return
- * none
- */
- void getDcfHash(uint8_t* outDcfHash) const;
-
-PRIVATE:
- static const uint32_t DCF_HASH_LEN = 20;
- static const uint32_t FIX_HEADER_LEN = 20;
- static const uint32_t MAX_PIECE_LEN = (100 * 1024);
-
- uint8_t mDcfHash[DCF_HASH_LEN];
- vector<DcfContainer*> mContainer;
-
-PRIVATE:
- bool parseDcfHeader(const uint8_t* dcfHead);
- DrmRawContent(const DrmRawContent& rawContent){}
- DrmRawContent& operator=(const DrmRawContent& other){return *this;}
-};
-
-#endif
diff --git a/media/libdrm/mobile2/include/drmmanager/DrmManager.h b/media/libdrm/mobile2/include/drmmanager/DrmManager.h
deleted file mode 100644
index c8bfbc1..0000000
--- a/media/libdrm/mobile2/include/drmmanager/DrmManager.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _DRMMANAGER_
-#define _DRMMANAGER_
-
-#include <Drm2CommonTypes.h>
-#include <ofstream.h>
-#include <sostream.h>
-#include <ustring.h>
-#include <sistream.h>
-#include <uvector.h>
-
-using namespace ustl;
-
-/** It should be removed after real DcfContainer is ready */
-#define DcfContainer string
-static const int16_t DRM_OK = 1;
-
-class DrmManager
-{
-public:
- /**
- * Error definition
- */
- static const int16_t DRM_MANAGER_BASE = 100;
- static const int16_t ERR_DCFSTREAM_NOT_INITIALIZED = DRM_MANAGER_BASE+1;
- static const int16_t ERR_WRONG_DCFDATA = DRM_MANAGER_BASE+2;
- static const int16_t ERR_WRONG_RIGHTS = DRM_MANAGER_BASE+3;
-
- /**
- * Constructor for DrmManager,used to open local dcf file.
- * @param inRawData input stream of raw data.
- */
- DrmManager(istream *inRawData);
-
- /**
- * Constructor for DrmManager,used to separate dcf file and trig message when upper
- * application downloading one multipart message from CI.
- * @param inRawData input stream of raw data.
- */
- DrmManager(istream * inRawData, string mimeType);
-
- /** Destructor for DomExpatAgent. */
- ~DrmManager();
- /**
- * Config DRM engine
- * Fix me later
- */
- bool config();
-
- /**
- * Consume rights according to specified operation, DrmManager will check.
- * @param operationType the type of operation.
- * @return the operation result.
- */
- int16_t consumeRights(int16_t operationType);
-
- /**
- * Get the list of all dcf containers object reference in the dcf file.
- * @param the vector of the dcf objects list returned.
- * @return the operation result.
- */
- int16_t getListOfDcfObjects(vector<DcfContainer*> **outDcfList);
-
- /**
- * Open one Dcf container to read the decrypted data according to specified
- * operation.
- * @param oneDcfObject the reference of the DcfContainer.
- * @param operationType the type of operation.
- * @param decrypted data returned.
- * @return the operation result.
- */
- int16_t openDecryptedContent(DcfContainer *oneDcfObject,
- int16_t operationType,
- istream *outDecryptedData);
-
- /**
- * Get the separated Dcf raw data from multipart message.
- * @return the ifstream of the dcf raw data which should be stored by upper
- * application.
- */
- ifstream* getOriginalMediaData(void);
-
- /**
- * Handle DRM2.0 push message
- */
- bool handlePushMsg(uint8_t* data, string mimeType);
-
-PRIVATE:
- istream *mDcfStream; /**< the handler of dcf stream. */
- vector<DcfContainer*> mDcfs; /**< all the dcf containers included in one dcf file. */
-};
-
-#endif //_DRMMANAGER_
diff --git a/media/libdrm/mobile2/include/rights/Asset.h b/media/libdrm/mobile2/include/rights/Asset.h
deleted file mode 100644
index 66696dd..0000000
--- a/media/libdrm/mobile2/include/rights/Asset.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _ASSET_H
-#define _ASSET_H
-
-#include <ustring.h>
-#include <uvector.h>
-#include <Drm2CommonTypes.h>
-#include <rights/Right.h>
-using namespace ustl;
-
-class Asset {
-public:
- /**
- * Constructor for asset.
- */
- Asset();
-
- /**
- * Destructor for asset.
- */
- ~Asset();
-
- /**
- * Test whether asset has parent or not.
- * @return true/false to indicate the result.
- */
- bool hasParent();
-
- /**
- * Set id of asset.
- * @param id the id of asset.
- */
- void setID(const string &id);
-
- /**
- * Get the id of content.
- * @return asset id.
- */
- const string& getID() const;
-
- /**
- * Set contend id related to asset.
- * @param id the id of content.
- */
- void setContentID(const string &id);
-
- /**
- * Get content id.
- * @return content id.
- */
- const string& getContentID() const;
-
- /**
- * Set digest value of DCF.
- * @param value the DCF digest value.
- */
- void setDCFDigest(const string &value);
-
- /**
- * Get the DCF digest value.
- * @return the digest value of DCF.
- */
- const string& getDCFDigest() const;
-
- /**
- * Set encrypted key in asset.
- * @param the encrypted key.
- */
- void setEncryptedKey(const string &key);
-
- /**
- * Get encrypted key.
- * @return encypted key.
- */
- const string& getEncrytedKey() const;
-
- /**
- * Get cek.
- * @return cek.
- */
- const char* getCek() const;
-
- /**
- * Set the retrieval method of key.
- * @param rm the retrieval method of the key.
- */
- void setKeyRetrievalMethod(const string &rm);
-
- /**
- * Set parent content id for asset.
- * @param id the parent content id.
- */
- void setParentContentID(const string &id);
-
- /**
- * Get the parent content id of the asset.
- * @return the parent content id.
- */
- const string& getParentContentID() const;
-
- /**
- * Recover the CEK using private key.
- */
- void recoverCek();
-
-PRIVATE:
- string mAssetID;
- string mContentID;
- string mDigestMethod;
- string mDigestValue;
- string mEncryptedMethod;
- string mEncryptedKey;
- string mRetrievalMethod;
- string mParentContentID;
- string mCek;
-};
-
-#endif
diff --git a/media/libdrm/mobile2/include/rights/Constraint.h b/media/libdrm/mobile2/include/rights/Constraint.h
deleted file mode 100644
index bcf5afe..0000000
--- a/media/libdrm/mobile2/include/rights/Constraint.h
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _CONSTRAINT_H
-#define _CONSTRAINT_H
-
-#include <Drm2CommonTypes.h>
-#include <ustring.h>
-#include <uvector.h>
-using namespace ustl;
-
-struct Context {
- string id;
- string version;
-};
-
-const int INIT_VALUE = -1;
-
-class Constraint {
-public:
- enum MODE {NONE, MOVE, COPY}; /**< export mode type. */
-
- /**
- * Construtor for constraint.
- */
- Constraint();
-
- /**
- * Destructor for constraint.
- */
- ~Constraint();
-
-public:
- /**
- * Test whether constraint is valid or not
- * @param time the specitic time to test.
- * @return true/false to indicate the result.
- */
- bool isValid(long time) const;
-
- /**
- * Test whether constraint is unconstraint or not
- * @return true/false to indicate the result.
- */
- bool isUnConstraint() const;
-
- /**
- * Test whether constraint is datetime related or not.
- * @return true/false to indicate the result.
- */
- bool isDateTimeConstraint() const;
-
- /**
- * Test whether constraint contain interval or not
- * @return true/false to indicate the result.
- */
- bool isIntervalConstraint() const;
-
- /**
- * Test whether constraint is timed count or not
- * @return true/false to indicate the result.
- */
- bool isTimedCountConstraint() const;
-
- /**
- * Set the start time value of constraint.
- * @param time the specific time value.
- */
- void setStartTime(long time);
-
- /**
- * Get the start time.
- * @return value of start time.
- */
- long getStartTime() const;
-
- /**
- * Set the end time.
- * @param time the value of end time.
- */
- void setEndTime(long time);
-
- /**
- * Get the end time.
- * @param return the value of end time.
- */
- long getEndTime() const;
-
- /**
- * Set the accumulated .
- * @param time the specific time.
- */
- void setAccumulated(long time);
-
- /**
- * Get the accumulated.
- * @return the value of accumulated
- */
- long getAccumulated() const;
-
- /**
- * Set the count.
- * @param count the value of count.
- */
- void setCount(int count);
-
- /**
- * Get the count.
- * @return value of count.
- */
- int getCount() const;
-
- /**
- * Set the value of timer.
- * @param timer the value of the timer.
- */
- void setTimer(int timer);
-
- /**
- * Get the timer.
- * @return value of time.
- */
- int getTimer() const;
-
- /**
- * Set the timedCount.
- * @param timedCount the value of timedCount.
- */
- void setTimedCount(int timedCount);
-
- /**
- * Get the timedCount.
- * @return the value of timedCount.
- */
- int getTimedCount() const;
-
- /**
- * Set the interval.
- * @param interval the value of interval.
- */
- void setInterval(int interval);
-
- /**
- * Get the interval.
- * @return the value of interval.
- */
- int getInterval() const;
-
- /**
- * set export mode.
- * @param mode the mode type of export.
- */
- void setExportMode(MODE mode);
-
- /**
- * Get the export mode.
- * @return the export mode.
- */
- MODE getExportMode() const;
-
- /**
- * Consume the constraint.
- * @return true/false to indicate whether consume succesfully or not.
- */
- bool consume();
-
-PRIVATE:
- int mCount; /**< the count. */
- int mTimedCount; /**< timed count. */
- int mTimer; /**< timer for timed count. */
- long mStart; /**< start time. */
- long mEnd; /**< end time. */
- int mInterval; /**< interval. */
- long mAccumulated; /**< accumlated. */
- vector<Context> mSystemList; /**< system list. */
- MODE mExport; /**< export mode. */
-};
-#endif
diff --git a/media/libdrm/mobile2/include/rights/OperationPermission.h b/media/libdrm/mobile2/include/rights/OperationPermission.h
deleted file mode 100644
index 28cba7b..0000000
--- a/media/libdrm/mobile2/include/rights/OperationPermission.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _OPERATIONPERMISSION_H
-#define _OPERATIONPERMISSION_H
-
-#include <Drm2CommonTypes.h>
-#include <rights/Constraint.h>
-
-class OperationPermission {
-public:
- enum OPERATION {NONE, PLAY, DISPLAY, EXECUTE, PRINT, EXPORT, COMMON};
-
- /**
- * Construtor of OperationPermission.
- */
- OperationPermission();
-
- /**
- * Construtor of OperationPermission.
- * @param type the specific operation type.
- * @param cst the constraint related with operation permission.
- */
- OperationPermission(OPERATION type, Constraint* cst=NULL);
-
- /**
- * Destrutor of OperationPermission.
- */
- ~OperationPermission();
-
- /**
- * Set the type for operation permission.
- * @param type the specific type.
- */
- void setType(OPERATION type);
-
- /**
- * Get the type of operation permission.
- * @return operation type.
- */
- OPERATION getType() const;
-
- /**
- * Add constraint for operation permission.
- * @param constraint the constraint related with operation permission.
- */
- void addConstraint(Constraint* constraint);
-
- /**
- * Add constraint for operation permission.
- * @return constraint related with operation permission.
- */
- Constraint* getConstraint() const;
-
-PRIVATE:
- OPERATION mType;
- Constraint* mConstraint;
-
-PRIVATE:
- /**
- * Disable the assignment between OperationPermissions.
- */
- OperationPermission& operator=(const OperationPermission &op);
-
- /**
- * Disable copy construtor.
- */
- OperationPermission(const OperationPermission &op);
-};
-
-#endif
diff --git a/media/libdrm/mobile2/include/rights/Right.h b/media/libdrm/mobile2/include/rights/Right.h
deleted file mode 100644
index 347e484..0000000
--- a/media/libdrm/mobile2/include/rights/Right.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _RIGHT_H
-#define _RIGHT_H
-
-#include <Drm2CommonTypes.h>
-#include <uvector.h>
-#include <ustring.h>
-#include <rights/Constraint.h>
-#include <rights/OperationPermission.h>
-using namespace ustl;
-
-class Right {
-public:
- /**
- * Constructor for Right.
- */
- Right();
-
- /**
- * Destructor for Right.
- */
- ~Right();
-
- /**
- * Add the asset id related with right into asset name list.
- * @param id the id of the asset.
- */
- void addAssetID(const string& id);
-
- /**
- * Add a operation permission into right's operation permission list.
- * @param op a pointer of operation permission.
- */
- void addOperationPermission(OperationPermission* op);
-
- /**
- * Get the constraint related with operation type.
- * @param type the specific operation type.
- * @return NULL if not found otherwise the constraint pointer.
- */
- Constraint* getConstraint(OperationPermission::OPERATION type);
-
- /**
- * Test whether the right has specific operation type or not.
- * @param type the specific type.
- * @return true/false to indicate the result.
- */
- bool checkPermission(OperationPermission::OPERATION type);
-
-public:
- vector<string> mAssetNameList;
-
-PRIVATE:
- vector<OperationPermission*> mOpList;
-
-PRIVATE:
-
- /**
- * Disable the assignment between rights.
- */
- Right& operator=(const Right& right);
-
- /**
- * Disable copy constructor.
- */
- Right(const Right& right);
- };
-
-#endif
diff --git a/media/libdrm/mobile2/include/rights/Ro.h b/media/libdrm/mobile2/include/rights/Ro.h
deleted file mode 100644
index 0bf0a97..0000000
--- a/media/libdrm/mobile2/include/rights/Ro.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _RO_H_
-#define _RO_H_
-
-#include <rights/Asset.h>
-#include <rights/Right.h>
-#include <uvector.h>
-#include <ustring.h>
-#include <sistream.h>
-using namespace ustl;
-
-class Asset;
-class XMLDocumentImpl;
-class XMLElementImpl;
-class NodeImpl;
-
-class Ro {
-public:
- enum ERRCODE { RO_NULL_STREAM, RO_ERR_BAD_XML, RO_OK, RO_BAD };
-
- /**
- * Constructor for Ro.
- */
- Ro();
-
- /**
- * Destructor for Ro.
- */
- ~Ro();
-
- /**
- * Set id for Ro.
- * @param id the id of Ro.
- */
- void setRoID(string &id);
-
- /**
- * Get the id of Ro.
- * @return the id of Ro.
- */
- const string& getRoID() const;
-
- /**
- * Set version for Ro.
- */
- void setRoVersion(string &version);
-
- /**
- * Add a asset into ro's asset list.
- * @param asset the pointer of asset.
- */
- void addAsset(Asset* asset);
-
- /**
- * Add a right into ro's right list.
- * @param right the pointer of right.
- */
- void addRight(Right* right);
-
- /**
- * Save the Ro.
- */
- bool save();
-
- /**
- * Verify the Ro.
- */
- bool verify();
-
- /**
- * Parse the ro from stream.
- * @param roStream the input ro stream.
- * @return RO_OK if parse successfully otherwise return error code.
- */
- ERRCODE parse(istringstream *roStream);
-
- /**
- * Check the permission of the content.
- * @param type the operation type.
- * @param contentID the specific contentID.
- * @return true/false to indicate result.
- */
- bool checkPermission(OperationPermission::OPERATION type,
- const string& contentID);
-
- /**
- * Consume the right related to content.
- * @param type the operation type.
- * @param contentID the specific contentID.
- * @return the status of consume.
- */
- ERRCODE consume(OperationPermission::OPERATION type,
- const string& contentID);
-
- /**
- * Get CEK of content.
- * @param contentID the specific content id.
- * @return "" if not found otherwise return CEK.
- */
- string getContentCek(const string& contentID);
-
- /**
- * Get Digest value of content.
- * @param contentID the specific content id.
- * @return "" if not found otherwise return digest value.
- */
- string getContentHash(const string& contentID);
-
-PRIVATE:
- /**
- * Handle the xml dom document.
- * @param doc the pointer to the dom document.
- * @return true/false to indicate the result.
- */
- bool handleDocument(const XMLDocumentImpl* doc);
-
- /**
- * Handle the xml dom node which contains <right> element.
- * @param curNode the dom node which contains <right> element.
- * @return true/false to indicate the result.
- */
- bool handleRights(const NodeImpl *curNode);
-
- /**
- * Handle the xml dom node which contains the <agreement> element.
- * @param curNode the dom node which contains <agreement> element.
- * @return true/false to indicate the result.
- */
- bool handleAgreement(const NodeImpl *curNode);
-
- /**
- * Handle the xml dom node which contains the <asset> element.
- * @param curNode the dom node which contains <asset> element.
- * @return true/false to indicate the result.
- */
- bool handleAsset(const NodeImpl *curNode);
-
- /**
- * Handle the xml dom node which contains the <permission> element.
- * @param curNode the dom node which contains <permission> element.
- * @return true/false to indicate the result.
- */
- bool handlePermission(const NodeImpl *curNode);
-
- /**
- * Get the constraint in xml dom node.
- * @param curNode the dom node which contains constraint.
- * @return the constraint.
- */
- Constraint* getConstraint(const NodeImpl *curNode);
-
- /**
- * Convert ISO8601 time to long.
- * @param ts the string with ISO8601 time.
- * @return the result value.
- */
- long convertISO8601DateTimeToLong(const char* ts);
-
- /**
- * Convert ISO8601 period to long.
- * @param ts the string with ISO8601 period.
- * @return the result value.
- */
- long convertISO8601PeriodToLong(const char* ts);
-
- /**
- * Load the rights related with specific contentinto content rights list.
- * @param contentID the specific content id.
- */
- void loadRights(const string& contentID);
-
- /**
- * Free the current content rights list.
- */
- void freeRights();
-
-PRIVATE:
- /**
- * Disable the assignment between rights.
- */
- Ro& operator=(const Ro& ro);
-
- /**
- * Disable copy constructor.
- */
- Ro(const Ro& ro);
-
-public:
- vector<Asset*> mAssetList;
- vector<Right*> mRightList;
-
-PRIVATE:
- string mRoID; /** the Ro id. */
- string mRoVersion; /** the Ro version. */
- XMLDocumentImpl *mDoc; /**< the xml document handle. */
- vector<Right*> mContentRightList; /**< the right list to store the result related with specific content. */
- Right* mProperRight; /**< the right to consume. */
-};
-#endif
diff --git a/media/libdrm/mobile2/include/rights/RoManager.h b/media/libdrm/mobile2/include/rights/RoManager.h
deleted file mode 100644
index cf398b3..0000000
--- a/media/libdrm/mobile2/include/rights/RoManager.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _ROMANAGER_H
-#define _ROMANAGER_H
-
-#include <Drm2CommonTypes.h>
-#include <ustring.h>
-#include <rights/Ro.h>
-
-using namespace ustl;
-
-class RoManager {
-
-public:
- /**
- * Singleton instance function.
- * @return the singleton pointer.
- */
- static RoManager* Instance();
-
- /**
- * Destructor for ExpatWrapper.
- */
- ~RoManager();
-
- /**
- * Install Ro from stream.
- * @param roStream the input ro stream.
- * @return the status of installaltion.
- */
- Ro::ERRCODE installRo(istringstream *roStream);
-
- /**
- * Check whether Ro in cache or not.
- * @param roID the specific roID.
- * @return true/false to indicate result.
- */
- bool checkRoInCache(const string& roID);
-
- /**
- * Get the ro.
- * @param roID the specific id of ro.
- * @return NULL if not found otherwise return ro.
- */
- Ro* getRo(const string& roID);
-
- /**
- * Get all the Ro.
- * @return ro list.
- */
- vector<Ro*> getAllRo();
-
- /**
- * Get the private key of the device.
- * @return the private key.
- */
- const string& getDevicePrivateKey() const;
-
- /**
- * Get ro which contained rights of specific content.
- * @param contentID the specific id of content.
- * @return NULL if not fount otherwise the related ro.
- */
- Ro* getRoByContentID(const string& contentID);
-
- /**
- * Delete Ro by its id.
- * @param roID the specific roID.
- * @return true/false to indicate the result.
- */
- bool deleteRo(const string& roID);
-
-
-PRIVATE:
- /**
- * Constructor for RoManager.
- */
- RoManager();
-
-PRIVATE:
- static RoManager* msInstance; /**< singleton instance pointer. */
- vector<Ro*> mRoList; /**< the ro list. */
-};
-
-#endif
diff --git a/media/libdrm/mobile2/include/roap/Registration.h b/media/libdrm/mobile2/include/roap/Registration.h
deleted file mode 100644
index 0beed8e..0000000
--- a/media/libdrm/mobile2/include/roap/Registration.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _REGISTRATION_
-#define _REGISTRATION_
-
-#include <roap/RoapMessageHandler.h>
-
-class Registration : public RoapMessageHandler
-{
-public:
- /**
- * Constructor for Registration.
- * @param type the address of RI.
- */
- Registration(string riAddres);
-
- /**
- * Registration with the RI.
- * @return the result of registration.
- */
- int16_t registerWithRI();
-
- /**
- * Create one specified client message based on message template xml file.
- * @param type the message type.
- * @return the pointer of the document object of the message if successful,otherwise
- * return NULL.
- */
- XMLDocumentImpl* createClientMsg(int16_t type);
-}
-#endif _REGISTRATION_
diff --git a/media/libdrm/mobile2/include/roap/RoapMessageHandler.h b/media/libdrm/mobile2/include/roap/RoapMessageHandler.h
deleted file mode 100644
index c31047f..0000000
--- a/media/libdrm/mobile2/include/roap/RoapMessageHandler.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _ROAPMESSAGEHADLER_
-#define _ROAPMESSAGEHADLER_
-
-#include <Drm2CommonTypes.h>
-#include <util/xml/XMLDocumentImpl.h>
-
-class RoapMessageHandler
-{
-public:
- /**
- * define all the client message types.
- */
- enum msgType {DeviceHello=1,RegistrationRequest,RORequest};
-
- /**
- * Constructor for DrmManager,used to open local dcf file.
- * @param type the message type.
- */
- RoapMessageHandler();
-
- /**
- * Create one specified client message based on message template xml file.
- * @param type the message type.
- * @return the pointer of the document object of the message if successful,otherwise
- * return NULL.
- */
- XMLDocumentImpl* createClientMsg(msgType type);
-
- /**
- * Handle received message from RI.
- * @return true if successful, otherwise return false.
- */
- bool handlePeerMsg();
-
- /**
- * Send the client message to RI
- */
- int16_t send();
-
- /**
- * Receive message from RI and parse it
- * @return the pointer of the parsed document.
- */
- XMLDocumentImpl* receive();
-
-PROTECTED:
- XMLDocumentImpl * mDoc;
-PRIVATE:
- int16_t mMsgType;
-};
-#endif //_ROAPMESSAGEHADLER_
diff --git a/media/libdrm/mobile2/include/util/crypto/DrmCrypto.h b/media/libdrm/mobile2/include/util/crypto/DrmCrypto.h
deleted file mode 100644
index 10e7bc1..0000000
--- a/media/libdrm/mobile2/include/util/crypto/DrmCrypto.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DRMCRYPTO_H_
-#define _DRMCRYPTO_H_
-
-#include <Drm2CommonTypes.h>
-#include <openssl/aes.h>
-#include <openssl/hmac.h>
-#include <openssl/sha.h>
-#include <openssl/rsa.h>
-
-// AES encrypt mode
-typedef enum {AES_128_CBC = 0x01,AES_128_CTR = 0x02}AesMode;
-
-// aes crypto for decrypt
-class AesAgent
-{
- public:
- AesAgent(const AesMode method,const unsigned char* decryptedKey)
- :mode(method),AesKey(decryptedKey){};
-
- /**
- * decrypt data using AES, now only support 128 bits CBC
- * \param iv 128 bits initialization vector/counter
- * prefixing the ciphertext
- * \param encData encrypted data
- * \param encLen the length of encData
- * \param decData the buffer to store decrypted data
- * \param decLen the actual length of decrypted data
- * \return
- * >= succeed, the padding length
- * < 0 failed
- */
- int32_t decContent( unsigned char* iv,
- const unsigned char* encData,
- const unsigned long encLen,
- unsigned char* decData);
- static const int32_t AES_DEC_FAILED = -1;
-
- PRIVATE:
- static const uint32_t AES_KEY_BITS = 128;
- const AesMode mode;
- const unsigned char* AesKey;
-
- PRIVATE:
- // get the actual length of decrypt data
- void discardPaddingByte(unsigned char* decryptedBuf,unsigned long* decryptedBufLen);
-};
-
-// Sha1 crypto for hash
-class Sha1Agent
-{
- public:
- /**
- * compute hash using Sha1
- * \param inData the data to be hashed
- * \param inLen the length of inData
- * \param outHash the hash of inData
- * \return none
- */
- void computeHash( const unsigned char* inData,
- unsigned long inLen,
- unsigned char* outHash) const;
-
- /**
- * get the length of SHA1 hash
- * \param none
- * \return
- * the length of SHA1 hash
- */
- unsigned long getShaLen(void) const
- {
- return SHA_DIGEST_LENGTH;
- }
-};
-
-// Hmac-Sha1 crypto for MAC
-class HmacSha1Agent
-{
- public:
- HmacSha1Agent(const unsigned char* Key, int key_len)
- :macKey(Key),keyLen(key_len){};
-
- /**
- * compute MAC using Hmac-Sha1
- * \param inData the data to be MAC
- * \param inLen the length of inData
- * \param outMac the MAC of inData
- * \return none
- */
- void computeMac( const unsigned char* inData,
- unsigned long inLen,
- unsigned char* outMac) const;
-
- /**
- * get the length of HMAC-SHA1 MAC
- * \param none
- * \return
- * the length of HMAC-SHA1 MAC
- */
- unsigned long getHmacLen(void) const
- {
- return SHA_DIGEST_LENGTH;
- }
-
- PRIVATE:
- const unsigned char* macKey;
- const int keyLen;
-};
-
-// Rsa crypto for signature,verify signature and key transport
-class RsaAgent
-{
- public:
- RsaAgent(RSA& Key):rsaKey(Key)
- {
- rsaSize = (unsigned int)RSA_size(&Key);
- };
-
- // signature algorithm
- typedef enum {RSA_PSS,RSA_SHA1}RsaAlg;
-
- /**
- * Do signature using RSA-PSS
- * \param rawData the data to be signature
- * \param rawLen the length of inData
- * \param sigData the buffer to store the signature of rawData
- * \param sigAlg signature algorithm
- * \return
- * true succeed
- * false failed
- */
- bool signature( const unsigned char* rawData,
- const unsigned long rawLen,
- unsigned char* sigData,
- const RsaAlg sigAlg);
-
- /**
- * get the length of signature
- * \param none
- * \return
- * the length of signature
- */
- unsigned int getSigLen(void) const
- {
- return rsaSize;
- }
-
- /**
- * Verify signature using RSA-PSS
- * \param sigData the data to be verify
- * \param sigLen the length of sigData
- * \param rawData the data from which the sigData generated
- * \param rawLen the length of rawData
- * \param sigAlg signature algorithm
- * \return
- * true succeed
- * false failed
- */
- bool sigVerify(unsigned char* sigData,
- unsigned long sigLen,
- const unsigned char* rawData,
- const unsigned long rawLen,
- const RsaAlg sigAlg);
-
-
- /**
- * Decrypt data using RSA
- * \param encData encrypted data
- * \param encLen the length of encData
- * \param decData the buffer to store decrypted data
- * \return
- * -1 decrypted failed
- * >0 the actual length of decrypted data
- */
- int decrypt( const unsigned char* encData,
- const unsigned long encLen,
- unsigned char* decData);
-
- /**
- * get the length of decrypted data
- * \param none
- * \return
- * the length of decrypted data
- */
- unsigned int getDecLen(void) const
- {
- return rsaSize;
- }
-
- PRIVATE:
- RSA& rsaKey;
- unsigned int rsaSize;
-};
-
-
-#endif /* _DRMCRYPTO_H_ */
diff --git a/media/libdrm/mobile2/include/util/domcore/CharacterDataImpl.h b/media/libdrm/mobile2/include/util/domcore/CharacterDataImpl.h
deleted file mode 100644
index d1ab31e..0000000
--- a/media/libdrm/mobile2/include/util/domcore/CharacterDataImpl.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __CHARACTER_IMPL__
-#define __CHARACTER_IMPL__
-
-#include "NodeImpl.h"
-#include "DOMString.h"
-
-class CharacterDataImpl : public NodeImpl
-{
-private:
- DOMString* charData;
-public:
-
- /**
- * Default Constructor for CharacterDataImpl.
- */
- CharacterDataImpl();
-
- /**
- * Constructor for CharacterDataImpl.
- * @param data The specify character data.
- */
- CharacterDataImpl(const DOMString* data);
-
- /**
- * The character data of the node that implements this interface. The DOM
- * implementation may not put arbitrary limits on the amount of data
- * that may be stored in a <code>CharacterData</code> node. However,
- * implementation limits may mean that the entirety of a node's data may
- * not fit into a single <code>DOMString</code>. In such cases, the user
- * may call <code>substringData</code> to retrieve the data in
- * appropriately sized pieces.
- * @exception DOMException
- * NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
- * @exception DOMException
- * DOMSTRING_SIZE_ERR: Raised when it would return more characters than
- * fit in a <code>DOMString</code> variable on the implementation
- * platform.
- * @return the character data.
- */
- const DOMString* getData() const throw (DOMException);
-
- /**
- * The character data of the node that implements this interface. The DOM
- * implementation may not put arbitrary limits on the amount of data
- * that may be stored in a <code>CharacterData</code> node. However,
- * implementation limits may mean that the entirety of a node's data may
- * not fit into a single <code>DOMString</code>. In such cases, the user
- * may call <code>substringData</code> to retrieve the data in
- * appropriately sized pieces.
- * @param data the specify character data.
- * @exception DOMException
- * NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
- * @exception DOMException
- * DOMSTRING_SIZE_ERR: Raised when it would return more characters than
- * fit in a <code>DOMString</code> variable on the implementation
- * platform.
- */
- void setData(const DOMString* data) throw (DOMException);
-
- /**
- * The number of 16-bit units that are available through <code>data</code>
- * and the <code>substringData</code> method below. This may have the
- * value zero, i.e., <code>CharacterData</code> nodes may be empty.
- * @return the size of characters data.
- */
- int getLength() const;
-
- /**
- * Append the string to the end of the character data of the node. Upon
- * success, <code>data</code> provides access to the concatenation of
- * <code>data</code> and the <code>DOMString</code> specified.
- * @param arg The <code>DOMString</code> to append.
- * @exception DOMException
- * NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
- */
- void appendData(const DOMString* arg) throw(DOMException);
-
- /** Override getNodeValue() method in NodeImpl.h.*/
- const DOMString* getNodeValue() const throw(DOMException);
-
- /** Override setNodeValue() method in NodeImpl.h */
- void setNodeValue(DOMString* nodeValue) throw(DOMException);
-
- ~CharacterDataImpl();
-};
-#endif /*__CHARACTER_IMPL__*/
-
diff --git a/media/libdrm/mobile2/include/util/domcore/DOMException.h b/media/libdrm/mobile2/include/util/domcore/DOMException.h
deleted file mode 100644
index 416519b..0000000
--- a/media/libdrm/mobile2/include/util/domcore/DOMException.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __DOM_EXCEPTION__
-#define __DOM_EXCEPTION__
-
-#include <uexception.h>
-using namespace ustl;
-
-/**
- * DOM operations only raise exceptions in "exceptional" circumstances, i.e.,
- * when an operation is impossible to perform (either for logical reasons, because data is lost,
- * or because the implementation has become unstable). In general, DOM methods return specific error
- * values in ordinary processing situations, such as out-of-bound errors when using <code>NodeList</code>.
- * <p>Implementations should raise other exceptions under other circumstances. For example, implementations
- * should raise an implementation-dependent exception if a null argument is passed.
- * Some languages and object systems do not support the concept of exceptions.
- * For such systems, error conditions may be indicated using native error reporting mechanisms.
- * For some bindings, for example, methods may return error codes similar to those listed in the corresponding
- * method descriptions.
- */
-class DOMException : public exception {
-
- private:
- short code;
- public:
- DOMException(short code)
- {
- this->code = code;
- }
- public:
-
- enum ExceptionReason {
- /**
- * If index or size is negative, or greater than the allowed value
- */
- INDEX_SIZE_ERR = 1,
-
- /**
- * If the specified range of text does not fit into a DOMString
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- DOMSTRING_SIZE_ERR = 2,
- /**
- * If any node is inserted somewhere it doesn't belong
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- HIERARCHY_REQUEST_ERR = 3,
-
- /**
- * If a node is used in a different document than the one that created it
- * (that doesn't support it)
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- WRONG_DOCUMENT_ERR = 4,
-
- /**
- * If an invalid or illegal character is specified, such as in a name. See
- * production 2 in the XML specification for the definition of a legal
- * character, and production 5 for the definition of a legal name
- * character.
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- INVALID_CHARACTER_ERR = 5,
-
- /**
- * If data is specified for a node which does not support data
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- NO_DATA_ALLOWED_ERR = 6,
-
- /**
- * If an attempt is made to modify an object where modifications are not
- * allowed
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- NO_MODIFICATION_ALLOWED_ERR = 7,
-
- /**
- * If an attempt is made to reference a node in a context where it does
- * not exist
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- NOT_FOUND_ERR = 8,
-
- /**
- * If the implementation does not support the requested type of object or
- * operation.
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- NOT_SUPPORTED_ERR = 9,
-
- /**
- * If an attempt is made to add an attribute that is already in use
- * elsewhere
- */
- INUSE_ATTRIBUTE_ERR = 10,
-
- /**
- * If an attempt is made to use an object that is not, or is no longer,
- * usable.
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- INVALID_STATE_ERR = 11,
-
- /**
- * If an invalid or illegal string is specified.
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- SYNTAX_ERR = 12,
-
- /**
- * If an attempt is made to modify the type of the underlying object.
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- INVALID_MODIFICATION_ERR = 13,
-
- /**
- * If an attempt is made to create or change an object in a way which is
- * incorrect with regard to namespaces.
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- NAMESPACE_ERR = 14,
-
- /**
- * If a parameter or an operation is not supported by the underlying
- * object.
- * @since http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
- */
- INVALID_ACCESS_ERR = 15,
- };
-public:
- /**
- * Return the exception reason.
- * @return the exception reason.
- */
- short getCode() const
- {
- return code;
- }
-};
-#endif /*__DOMEXCEPTION__*/
-
diff --git a/media/libdrm/mobile2/include/util/domcore/DOMString.h b/media/libdrm/mobile2/include/util/domcore/DOMString.h
deleted file mode 100644
index f6f2b14..0000000
--- a/media/libdrm/mobile2/include/util/domcore/DOMString.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __DOM_STRING_H__
-#define __DOM_STRING_H__
-
-#include <ustring.h>
-using namespace ustl;
-typedef string DOMString;
-
-const DOMString emptyString = DOMString("");
-
-#endif /*__DOM_STRING_H_*/
-
diff --git a/media/libdrm/mobile2/include/util/domcore/DocumentImpl.h b/media/libdrm/mobile2/include/util/domcore/DocumentImpl.h
deleted file mode 100644
index b003e2a..0000000
--- a/media/libdrm/mobile2/include/util/domcore/DocumentImpl.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __DOM_DOCUMENT_IMPL__
-#define __DOM_DOCUMENT_IMPL__
-#include "DOMString.h"
-#include "NodeImpl.h"
-#include "ElementImpl.h"
-#include "NodeType.h"
-#include "TextImpl.h"
-#include "NodeListImpl.h"
-#include "DOMException.h"
-
-class DocumentImpl : public NodeImpl
-{
-private:
- const static DOMString nodeName;
-public:
- /**
- * Default constructor for DocumentImpl.
- */
- DocumentImpl();
- /**
- * This is a convenience attribute that allows direct access to the child
- * node that is the root element of the document. For HTML documents,
- * this is the element with the tagName "HTML".
- * @return the pointer to element.
- */
- virtual ElementImpl* getDocumentElement() const;
-
- /**
- * Creates an element of the type specified. Note that the instance
- * returned implements the <code>Element</code> interface, so attributes
- * can be specified directly on the returned object.
- * <br>In addition, if there are known attributes with default values,
- * <code>Attr</code> nodes representing them are automatically created
- * and attached to the element.
- * <br>To create an element with a qualified name and namespace URI, use
- * the <code>createElementNS</code> method.
- * @param tagName The name of the element type to instantiate. For XML,
- * this is case-sensitive. For HTML, the <code>tagName</code>
- * parameter may be provided in any case, but it must be mapped to the
- * canonical uppercase form by the DOM implementation.
- * @return A new <code>Element</code> object with the
- * <code>nodeName</code> attribute set to <code>tagName</code>, and
- * <code>localName</code>, <code>prefix</code>, and
- * <code>namespaceURI</code> set to <code>null</code>.
- * @exception DOMException
- * INVALID_CHARACTER_ERR: Raised if the specified name contains an
- * illegal character.
- */
- virtual ElementImpl* createElement(const DOMString* tagName) const throw (DOMException);
-
- /**
- * Creates a <code>Text</code> node given the specified string.
- * @param data The data for the node.
- * @return The new <code>Text</code> object.
- */
- virtual TextImpl* createTextNode(const DOMString* data) const;
-
- /**
- * Returns a <code>NodeList</code> of all the <code>Elements</code> with a
- * given tag name in the order in which they are encountered in a
- * preorder traversal of the <code>Document</code> tree.
- * @param tagname The name of the tag to match on. The special value "*"
- * matches all tags.
- * @return A new <code>NodeList</code> object containing all the matched
- * <code>Elements</code>.
- */
- NodeListImpl* getElementsByTagName(const DOMString* tagname) const;
-
- /** Override getNodeName method in NodeImpl.h.*/
- const DOMString* getNodeName() const;
-
- /** Override getNodeType method in NodeImpl.h.*/
- NodeType getNodeType() const;
-
- /**
- *
- * Event Triggered after loaded the document.
- */
- virtual bool onLoad(){return true;}
-
- /**
- *
- * Event Triggered when close or switch the document.
- */
- virtual bool onUnLoad(){return true;}
-
- ~DocumentImpl();
-};
-#endif /*__DOM_DOCUMENT_IMPL__*/
diff --git a/media/libdrm/mobile2/include/util/domcore/ElementImpl.h b/media/libdrm/mobile2/include/util/domcore/ElementImpl.h
deleted file mode 100644
index 2b0bc45..0000000
--- a/media/libdrm/mobile2/include/util/domcore/ElementImpl.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __DOM_ELEMENT_IMPL__
-#define __DOM_ELEMENT_IMPL__
-#include "NodeImpl.h"
-#include "NodeListImpl.h"
-#include "NodeType.h"
-
-class ElementImpl : public NodeImpl
-{
-public:
-
- /**
- * The name of the element. For example, in:
- * <pre> &lt;elementExample
- * id="demo"&gt; ... &lt;/elementExample&gt; , </pre>
- * <code>tagName</code> has
- * the value <code>"elementExample"</code>. Note that this is
- * case-preserving in XML, as are all of the operations of the DOM. The
- * HTML DOM returns the <code>tagName</code> of an HTML element in the
- * canonical uppercase form, regardless of the case in the source HTML
- * document.
- * @return the element's tag name.
- */
- virtual const DOMString* getTagName() const;
-
- /**
- * Retrieves an attribute value by name.
- * @param name The name of the attribute to retrieve.
- * @return The <code>Attr</code> value as a string, or the empty string
- * if that attribute does not have a specified or default value.
- */
- virtual const DOMString* getAttribute(const DOMString* name) const;
-
- /**
- * Adds a new attribute. If an attribute with that name is already present
- * in the element, its value is changed to be that of the value
- * parameter. This value is a simple string; it is not parsed as it is
- * being set. So any markup (such as syntax to be recognized as an
- * entity reference) is treated as literal text, and needs to be
- * appropriately escaped by the implementation when it is written out.
- * In order to assign an attribute value that contains entity
- * references, the user must create an <code>Attr</code> node plus any
- * <code>Text</code> and <code>EntityReference</code> nodes, build the
- * appropriate subtree, and use <code>setAttributeNode</code> to assign
- * it as the value of an attribute.
- * <br>To set an attribute with a qualified name and namespace URI, use
- * the <code>setAttributeNS</code> method.
- * @param name The name of the attribute to create or alter.
- * @param value Value to set in string form.
- * @exception DOMException
- * INVALID_CHARACTER_ERR: Raised if the specified name contains an
- * illegal character.
- * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
- */
- virtual void setAttribute(const DOMString* name, const DOMString* value) throw (DOMException);
-
- /**
- * Removes an attribute by name. If the removed attribute is known to have
- * a default value, an attribute immediately appears containing the
- * default value as well as the corresponding namespace URI, local name,
- * and prefix when applicable.
- * <br>To remove an attribute by local name and namespace URI, use the
- * <code>removeAttributeNS</code> method.
- * @param name The name of the attribute to remove.
- * @exception DOMException
- * NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
- */
- virtual void removeAttribute(const DOMString* name) throw (DOMException);
-
- /**
- * Returns a <code>NodeList</code> of all descendant <code>Elements</code>
- * with a given tag name, in the order in which they are encountered in
- * a preorder traversal of this <code>Element</code> tree.
- * @param name The name of the tag to match on. The special value "*"
- * matches all tags.
- * @return A list of matching <code>Element</code> nodes.
- */
- NodeListImpl* getElementsByTagName(const DOMString* name) const;
-
- /** Override getNodeType() method in NodeImpl.h.*/
- virtual bool hasAttributes() const;
-
- /** Override getNodeName() method in NodeImpl.h.*/
- const DOMString* getNodeName() const;
-
- /** Override getNodeType() method in NodeImpl.h.*/
- NodeType getNodeType() const;
-
- /** Defining "click()" method*/
- virtual void click(){}
-
- /** Defining "blur()" method,*/
- virtual void blur(){}
-
- /** Defining "focus()" method*/
- virtual void focus(){}
-
- /** Defining "change()" method*/
- virtual void change(){}
-
- /** Defining "select()" method*/
- virtual void select(){}
-
- /** Defining "onClick()" event input,textarea,button, and anchor*/
- virtual bool onClick(){return true;}
-
- /** Defining "onBlur()" event,for input,textarea,button,anchor and select */
- virtual bool onBlur(){return true;}
-
- /** Defining "onFocus()" event,for input,textarea,button,anchor and select*/
- virtual bool onFocus(){return true;}
-
- /** Defining "onChange()" event,for input,textarea and select tag*/
- virtual bool onChange(){return true;}
-
- /** Defining "onSelect()" event,for textarea and input*/
- virtual bool onSelect(){return true;}
-
- /**
- * when the end tag of one element is found,this method would be called.The basic action is call seCompleted().
- **/
- virtual void endElement() {}
-
-private:
- /**
- * Get elements whose name match on <code>name</code>,than keep they into <code>nodeList</code>.
- * @param name The tag name of the elements to match on.
- * @param nodeList keep all the matched element.
- */
- void getElementsByTagName(const DOMString* name,NodeListImpl* nodeList) const;
-};
-#endif /*__DOM_ELEMENT_IMPL__*/
-
diff --git a/media/libdrm/mobile2/include/util/domcore/NodeImpl.h b/media/libdrm/mobile2/include/util/domcore/NodeImpl.h
deleted file mode 100644
index 10423c3..0000000
--- a/media/libdrm/mobile2/include/util/domcore/NodeImpl.h
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __DOM_NODE_IMPL__
-#define __DOM_NODE_IMPL__
-
-#include "DOMException.h"
-#include "NodeType.h"
-#include "DOMString.h"
-class LayoutAttr;
-class DocumentImpl;
-class NodeImpl {
-private:
- /** The pointer to first children */
- NodeImpl* firstChild;
-
- /** The pointer to lastChild children */
- NodeImpl* lastChild;
-
- /** The pointer to previous sibling children */
- NodeImpl* previousSibling;
-
- /** The pointer to next sibling children */
- NodeImpl* nextSibling;
-
- /** The pointer to parent */
- NodeImpl* parent;
-
- /** Current node's document context */
- const DocumentImpl* document;
-
- /**
- * Add next slibing node
- * @param node the node to be add.
- */
- void appendNextSibling(NodeImpl* node);
-
-public:
- /**
- * Default constuctor.
- */
- NodeImpl(): firstChild(NULL),lastChild(NULL),previousSibling(NULL),nextSibling(NULL),parent(NULL),document(NULL) {};
-
- /**
- * Set <code>parentNode</code> as current node's parent.
- *
- * @param parentNode The specify parent node.
- */
- void setParent(NodeImpl* parentNode);
-
- /**
- * Set the node immediately following node.
- *
- * @param siblingNode The special node be insert after current node.
- */
- void setNextSibling(NodeImpl* siblingNode);
-
- /**
- * Returns the node immediately preceding this node.
- *
- * @param siblingNode The special node be insert before current node.
- */
- void setPreviousSibling(NodeImpl* siblingNode);
-
- /**
- * Set <code>childNode</code> as current node's first children. If current
- * node have first child node,it will replace with the <code>childNode</code>.
- *
- * @param childNode The special node be set as the first children node of current
- * node.
- */
- void setFirstChild(NodeImpl* childNode);
-
- /**
- * Set <code>childNode</code> as current node's last children. If current
- * node have last child node,it will replace with the <code>childNode</code>.
- *
- * @param childNode The special node be set as the last children node of current
- * node.
- */
- void setLastChild(NodeImpl* childNode);
-
- /**
- * The name of this node, depending on its type;
- * @return the node's name.
- */
- virtual const DOMString* getNodeName() const = 0;
-
- /**
- * The value of this node, depending on its type;
- * When it is defined to be <code>null</code>, setting it has no effect.
- * @return the value of node.
- * @exception DOMException
- * DOMSTRING_SIZE_ERR: Raised when it would return more characters than
- * fit in a <code>DOMString</code> variable on the implementation
- * platform.
- */
- virtual const DOMString* getNodeValue() const throw (DOMException);
-
- /**
- * Set the node value.
- * @param nodeValue the node value
- * @exception DOMException
- * NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
- */
- virtual void setNodeValue(DOMString* nodeValue) throw (DOMException);
-
- /**
- * A code representing the type of the underlying object, as defined above.
- * @return the node's type.
- */
- virtual NodeType getNodeType() const = 0;
-
- /**
- * Returns whether this node (if it is an element) has any attributes.
- * @return <code>true</code> if this node has any attributes,
- * <code>false</code> otherwise.
- * @since DOM Level 2
- */
- virtual bool hasAttributes() const;
-
- /**
- * The parent of this node. All nodes, except <code>Attr</code>,
- * <code>Document</code>, <code>DocumentFragment</code>,
- * <code>Entity</code>, and <code>Notation</code> may have a parent.
- * However, if a node has just been created and not yet added to the
- * tree, or if it has been removed from the tree, this is
- * <code>NULL</code>.
- * @return return current node's parent.
- */
- NodeImpl* getParentNode() const;
-
- /**
- * The first child of this node. If there is no such node, this returns
- * <code>NULL</code>.
- * @return current node first children.
- */
- NodeImpl* getFirstChild() const;
-
- /**
- * The last child of this node. If there is no such node, this returns
- * <code>NULL</code>.
- * @return current node last children.
- */
- NodeImpl* getLastChild() const;
-
- /**
- * The node immediately preceding this node. If there is no such node,
- * this returns <code>NULL</code>.
- * @return current node previous sibling children.
- */
- NodeImpl* getPreviousSibling() const;
-
- /**
- * The node immediately following this node. If there is no such node,
- * this returns <code>NULL</code>.
- * @return return current node next sibling children.
- */
- NodeImpl* getNextSibling() const;
-
- /**
- * Inserts the node <code>newChild</code> before the existing child node
- * <code>refChild</code>. If <code>refChild</code> is <code>NULL</code>,
- * insert <code>newChild</code> at the end of the list of children.
- * <br>If <code>newChild</code> is a <code>DocumentFragment</code> object,
- * all of its children are inserted, in the same order, before
- * <code>refChild</code>. If the <code>newChild</code> is already in the
- * tree, it is first removed.
- * @param newChild The node to insert.
- * @param refChild The reference node, i.e., the node before which the
- * new node must be inserted.
- * @return The node being inserted.
- * @exception DOMException
- * HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not
- * allow children of the type of the <code>newChild</code> node, or if
- * the node to insert is one of this node's ancestors or this node
- * itself.
- * <br>WRONG_DOCUMENT_ERR: Raised if <code>newChild</code> was created
- * from a different document than the one that created this node.
- * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly or
- * if the parent of the node being inserted is readonly.
- * <br>NOT_FOUND_ERR: Raised if <code>refChild</code> is not a child of
- * this node.
- */
- NodeImpl* insertBefore(NodeImpl* newChild, NodeImpl* refChild) throw (DOMException);
-
- /**
- * Removes the child node indicated by <code>oldChild</code> from the list
- * of children, and returns it.
- * @param oldChild The node being removed.
- * @return The node removed.
- * @exception DOMException
- * NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
- * <br>NOT_FOUND_ERR: Raised if <code>oldChild</code> is not a child of
- * this node.
- */
- NodeImpl* removeChild(NodeImpl* oldChild) throw (DOMException);
-
- /**
- * Adds the node <code>newChild</code> to the end of the list of children
- * of this node. If the <code>newChild</code> is already in the tree, it
- * is first removed.
- * @param newChild The node to add.If it is a
- * <code>DocumentFragment</code> object, the entire contents of the
- * document fragment are moved into the child list of this node
- * @return The node added.
- * @exception DOMException
- * HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not
- * allow children of the type of the <code>newChild</code> node, or if
- * the node to append is one of this node's ancestors or this node
- * itself.
- * <br>WRONG_DOCUMENT_ERR: Raised if <code>newChild</code> was created
- * from a different document than the one that created this node.
- * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly or
- * if the previous parent of the node being inserted is readonly.
- */
- NodeImpl* appendChild(NodeImpl* newChild) throw (DOMException);
-
- /**
- * Returns whether this node has any children.
- * @return <code>true</code> if this node has any children,
- * <code>false</code> otherwise.
- */
- bool hasChildNodes() const;
-
- virtual ~NodeImpl() {};
-
- /**
- * Get the LayoutAttr of this node
- * @return the pointer to LayoutAttr
- */
- virtual LayoutAttr* getLayoutAttr() const { return NULL;}
-
- /**
- * Set the LayoutAttr of this node
- * @param attr the attributes to be set
- * @return void
- */
- virtual void setLayoutAttr(LayoutAttr* attr) { return;}
-
- /**
- * Set document context.
- * @param document The specify document context.
- */
- void setDocument(const DocumentImpl* document);
-
- /**
- * Get document context.
- * @return the current node's document context.
- */
- const DocumentImpl* getDocument() const;
-};
-#endif /*__DOM_NODE_IMPL__*/
-
diff --git a/media/libdrm/mobile2/include/util/domcore/NodeIterator.h b/media/libdrm/mobile2/include/util/domcore/NodeIterator.h
deleted file mode 100644
index 06fda28..0000000
--- a/media/libdrm/mobile2/include/util/domcore/NodeIterator.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __DOM_NODE_ITERATOR__
-#define __DOM_NODE_ITERATOR__
-class NodeImpl;
-/**
- * The Iterator is used to visit DOM_TREE.
- * <code>Attention</code>:The Iterator is not safe.
- * When the caller using the Iterator to access the tree,
- * the underlying data was modified, the next() or prev() may not return the right result.
- * means we have a <code>restriction</code>: the Iterator can only be used in the case that the tree structure will
- * not be modified before the end of iteration.
- */
-class NodeIterator {
-private:
- NodeImpl* scopeNode;/** The specify the range of iterating */
- NodeImpl* endNode; /** The specify the end position of iterating */
- NodeImpl* curNode; /** The position of current node.*/
-
- /**
- * Find the specify node's next order node.
- * @param node The specify node.
- * @return The next order node when success.
- * NULL when has an error.
- */
- NodeImpl* findNextOrderNode(NodeImpl* node);
-
- /**
- * Find the specify node's previous order node.
- * @param node The specify node.
- * @return The previous order node when success.
- * NULL when has an error.
- */
- NodeImpl* findPreviousOrderNode(NodeImpl* node);
-public:
- /**
- * Construct for NodeIterator.
- * we must specify <code>start</code> value when we want iterate the DOM_TREE.
- * and we also can specify the <code>scope</code> if want restrict the range of iterator.
- * (eg: restrict the range of iterating at a subtree).otherwise it will iterate the whole DOM_TREE.
- * @param start The start position.
- * @param scope The scope of iterating.
- * @param end The end position of iterating.
- */
- NodeIterator(NodeImpl* start, NodeImpl* scope = NULL, NodeImpl* end = NULL);
-
- /**
- * Get next order node at current position in DOM_TREE.
- * @return NULL On there is not node can be get.
- * The pointer of node On can get next node.
- */
- NodeImpl* next();
-
- /**
- * Get next order node at current position in DOM_TREE.
- * @return NULL On there is not node can be get.
- * The pointer of node On can get previous node.
- */
- NodeImpl* prev();
-};
-#endif /* __DOM_NODE_ITERATOR__ */
diff --git a/media/libdrm/mobile2/include/util/domcore/NodeListImpl.h b/media/libdrm/mobile2/include/util/domcore/NodeListImpl.h
deleted file mode 100644
index 07c0a6a..0000000
--- a/media/libdrm/mobile2/include/util/domcore/NodeListImpl.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __NODE_LIST_IMPL__
-#define __NODE_LIST_IMPL__
-
-#include "NodeImpl.h"
-#include "Vector.h"
-class NodeListImpl {
-private:
- vector<const NodeImpl*> nodeList;
-public:
- /**
- * Add a special node into list.
- * @param newNode specify component.
- */
- void append(const NodeImpl* newNode);
-
- /**
- * Return The special position node pointer.
- * @param index The special position.
- * @return The node's pointer on success.
- * NULL when out of list's boundary.
- */
- const NodeImpl* item(int index) const;
-
- /**
- * Return the length of list.
- * @return the length of list.
- */
- int getLength() const;
-
- ~NodeListImpl();
-};
-#endif /*__NODE_LIST_IMPL__ */
-
diff --git a/media/libdrm/mobile2/include/util/domcore/NodeType.h b/media/libdrm/mobile2/include/util/domcore/NodeType.h
deleted file mode 100644
index 0e51a63..0000000
--- a/media/libdrm/mobile2/include/util/domcore/NodeType.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __DOM_NODE_TYPE__
-#define __DOM_NODE_TYPE__
-enum NodeType {
- /**
- * The node is an <code>Element</code>.
- */
- ELEMENT_NODE = 1,
- /**
- * The node is an <code>Attr</code>.
- */
- ATTRIBUTE_NODE = 2,
- /**
- * The node is a <code>Text</code> node.
- */
- TEXT_NODE = 3,
- /**
- * The node type is CDATASection.
- */
- CDATA_SECTION_NODE = 4,
- /**
- * The node type is an EntityReference.
- */
- ENTITY_REFERENCE_NODE = 5,
- /**
- * The node type is an <code>Entity</code>.
- */
- ENTITY_NODE = 6,
- /**
- * The node type is a ProcessingInstruction.
- */
- PROCESSING_INSTRUCTION_NODE = 7,
- /**
- * The node is a Comment
- */
- COMMENT_NODE = 8,
- /**
- * The node is a Document.
- */
- DOCUMENT_NODE = 9,
- /**
- * The node is a DocumentType.
- */
- DOCUMENT_TYPE_NODE = 10,
- /**
- * The node is a DocumentFragment.
- */
- DOCUMENT_FRAGMENT_NODE = 11,
- /**
- * The node is a Notation.
- */
- NOTATION_NODE = 12,
-};
-#endif
diff --git a/media/libdrm/mobile2/include/util/domcore/TextImpl.h b/media/libdrm/mobile2/include/util/domcore/TextImpl.h
deleted file mode 100644
index fc55fcd..0000000
--- a/media/libdrm/mobile2/include/util/domcore/TextImpl.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __DOM_TEXT_IMPL__
-#define __DOM_TEXT_IMPL__
-#include "CharacterDataImpl.h"
-class TextImpl:public CharacterDataImpl
-{
-private:
- const static DOMString nodeName;
-public:
- /** Text default constructor for TextImpl.*/
- TextImpl();
-
- /**
- * Constructor for TextImpl
- * @param data The specify data to be set.
- */
- TextImpl(const DOMString* data);
-
- /** Override getNodeType method in NodeImpl.h */
- NodeType getNodeType() const;
-
- /** Override getNodeName method in NodeImpl.h */
- const DOMString* getNodeName() const;
-};
-#endif /*__DOM_TEXT_IMPL__*/
-
diff --git a/media/libdrm/mobile2/include/util/domcore/Vector.h b/media/libdrm/mobile2/include/util/domcore/Vector.h
deleted file mode 100644
index 8ceae3b..0000000
--- a/media/libdrm/mobile2/include/util/domcore/Vector.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __VECTOR_H__
-#define __VECTOR_H__
-#include <uvector.h>
-using namespace ustl;
-#endif /*__VECTOR_H__*/
-
diff --git a/media/libdrm/mobile2/include/util/domcore/stack.h b/media/libdrm/mobile2/include/util/domcore/stack.h
deleted file mode 100644
index cfcf4e5..0000000
--- a/media/libdrm/mobile2/include/util/domcore/stack.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __STACK_H__
-#define __STACK_H__
-#include <ustack.h>
-using namespace ustl;
-#endif /*__STACK_H__*/
-
diff --git a/media/libdrm/mobile2/include/util/xml/DomExpatAgent.h b/media/libdrm/mobile2/include/util/xml/DomExpatAgent.h
deleted file mode 100644
index 9972d5b..0000000
--- a/media/libdrm/mobile2/include/util/xml/DomExpatAgent.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _DOMEXPATAGENT_
-#define _DOMEXPATAGENT_
-
-#include <Drm2CommonTypes.h>
-#include <ofstream.h>
-#include <sostream.h>
-#include <ustring.h>
-#include <sistream.h>
-#include <util/domcore/NodeImpl.h>
-#include <util/domcore/DOMString.h>
-#include "ExpatWrapper.h"
-#include "XMLElementImpl.h"
-#include "XMLDocumentImpl.h"
-using namespace ustl;
-
-class DomExpatAgent : public ExpatWrapper {
-public:
- /**
- * Constructor for DomExpatAgent.
- * @param xmlDocPtr XMLDocument pointer.
- */
- DomExpatAgent(XMLDocumentImpl* xmlDocPtr);
-
- /** Destructor for DomExpatAgent. */
- ~DomExpatAgent();
-
- /**
- * Generate XML DOM Document from XML source.
- * @param <code>xmlStream</code> the XML source stream.
- * @return ture or false to indicate whether generate successfully.
- */
- bool generateDocumentFromXML(istringstream *xmlStream);
-
- /**
- * Generate XML stream from XML DOM document.
- * @return xml stream.
- */
- ostringstream* generateXMLFromDocument();
-
- /**
- * deal with start element in Expat.
- */
- virtual void startElement(const XML_Char *name,
- const XML_Char **atts);
-
- /**
- * deal with end element for Expat.
- */
- virtual void endElement(const XML_Char *name);
-
- /**
- * deal with data handler for Expat.
- */
- virtual void dataHandler(const XML_Char *s, int len);
-
-PRIVATE:
- /**
- * Push a xml element with the specific tag name into stack.
- * @param name The name of tag.
- * @param atts The attributes of related tag.
- */
- void pushTag(const DOMString *name, const XML_Char **atts);
-
- /**
- * Append text into top element of stack.
- * @param text The data related to the present tag.
- */
- void appendText(const DOMString *text);
-
- /**
- * Pop the xml element with the specific tag name.
- * @param name The name of tag.
- */
- void popTag(const DOMString *name);
-
- /**
- * Traverse the XML DOM document starting from specific element.
- * @param root The specific element start to traverse.
- */
- void traverse(ElementImpl *root);
-
-PRIVATE:
- vector<NodeImpl*> mStack; /**< the stack to manage the tag. */
- XMLElementImpl* mTopElementPtr; /**< the top element of the stack. */
- XMLDocumentImpl* mXMLDocumentPtr; /**< XML DOM document pointer. */
- ostringstream mXMLostream; /**< xml output stream. */
-};
-
-#endif
diff --git a/media/libdrm/mobile2/include/util/xml/ExpatWrapper.h b/media/libdrm/mobile2/include/util/xml/ExpatWrapper.h
deleted file mode 100644
index 5a2d7fe..0000000
--- a/media/libdrm/mobile2/include/util/xml/ExpatWrapper.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _XML_H_
-#define _XML_H_
-
-#include <expat.h>
-#include <ustring.h>
-#include <Drm2CommonTypes.h>
-
-using namespace ustl;
-
-class ExpatWrapper {
-public:
- /**
- * Constructor for ExpatWrapper.
- */
- ExpatWrapper();
-
- /**
- * Destructor for ExpatWrapper.
- */
- virtual ~ExpatWrapper();
-
- /**
- * decode call expat to parse the xml.
- * @param buf The buffer to be parsed.
- * @param len The length of the buffer.
- * @param isFinal The flag to indicate whether the buffer
- * is a fragment or whole xml.
- */
- int decode(const char* buf, int len, int isFinal);
-
- /**
- * virtual funtion to deal with the start element in expat, need implement by child class.
- */
- virtual void startElement(const XML_Char *name, const XML_Char **atts);
-
- /**
- * virtual funtion to deal with the end element in expat, need implement by child class.
- */
- virtual void endElement(const XML_Char *name);
-
- /**
- * virtual funtion to deal with the data handler in expat, need implement by child class.
- */
- virtual void dataHandler(const XML_Char *s, int len);
-
-PRIVATE:
- /**
- * Callback for Expat startElement.
- */
- static void startElementCallback(void *userData, const XML_Char *name, const XML_Char **atts);
-
- /**
- * Callback for Expat endElement.
- */
- static void endElementCallback(void *userData, const XML_Char *name);
-
- /**
- * Callback for Expat dataHandler.
- */
- static void dataHandlerCallback(void *userData, const XML_Char *s, int len);
-
-PRIVATE:
- XML_Parser mParser; /**< The expat parser object. */
-};
-
-#endif
diff --git a/media/libdrm/mobile2/include/util/xml/XMLDocumentImpl.h b/media/libdrm/mobile2/include/util/xml/XMLDocumentImpl.h
deleted file mode 100644
index c29b87d..0000000
--- a/media/libdrm/mobile2/include/util/xml/XMLDocumentImpl.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _XMLDOCUMENTIMPL_H_
-#define _XMLDOCUMENTIMPL_H_
-
-#include <Drm2CommonTypes.h>
-#include <util/domcore/DocumentImpl.h>
-
-class XMLDocumentImpl : public DocumentImpl {
-public:
- /** Constructor for XMLDocumentImpl. */
- XMLDocumentImpl();
-
- /** Destructor for XMLDocumentImpl. */
- ~XMLDocumentImpl();
-
- /**
- * Get the first child element of the document.
- * @return the first child <code>Element</code> of document.
- */
- virtual ElementImpl* getDocumentElement() const;
-
- /**
- * Create a XML element with the specific name.
- * @param tagName The specific tag name.
- * @return a new xml <code>Element</code>
- * @exception DOMException
- */
- virtual ElementImpl* createElement(const DOMString* tagName) const throw (DOMException);
-
- /**
- * Create a text node with the specific data.
- * @param data The specific data.
- * @return a new <code>Text</code> node.
- */
- virtual TextImpl* createTextNode(const DOMString* data) const;
-};
-
-#endif
diff --git a/media/libdrm/mobile2/include/util/xml/XMLElementImpl.h b/media/libdrm/mobile2/include/util/xml/XMLElementImpl.h
deleted file mode 100644
index a0c95ec..0000000
--- a/media/libdrm/mobile2/include/util/xml/XMLElementImpl.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _XMLELEMENTIMPL_H_
-#define _XMLELEMENTIMPL_H_
-
-#include <Drm2CommonTypes.h>
-#include <util/domcore/ElementImpl.h>
-#include <util/domcore/DOMString.h>
-#include <umap.h>
-#include <ustring.h>
-using namespace ustl;
-
-typedef map<DOMString, DOMString> DOMStringMap;
-
-class XMLElementImpl : public ElementImpl {
-public:
- /**
- * Constructor for XMLElementImpl.
- * @param tag The name of the tag.
- */
- XMLElementImpl(const DOMString *tag);
-
- /** Destructor for XMLElementImpl. */
- ~XMLElementImpl();
-
- /**
- * Get the attribute map of the XML element.
- * @return <code>DOMStringMap</code>
- */
- const DOMStringMap* getAttributeMap() const;
-
- /**
- * Get the tag name of the element.
- * return tag name.
- */
- virtual const DOMString* getTagName() const;
-
- /**
- * Set the attribute of the element.
- * @param name The key of the attribute.
- * @param value The value of the attribute.
- */
- virtual void setAttribute(const DOMString* name, const DOMString* value) throw (DOMException);
-
- /**
- * Remove the specific attribute.
- * @param name The key of the attribute.
- * @exception DOMException.
- */
- virtual void removeAttribute(const DOMString* name) throw (DOMException);
-
- /**
- * Get the specific attribute.
- * @param name The key of the attribute.
- * @return the value of the attribute.
- */
- virtual const DOMString* getAttribute(const DOMString* name) const;
-
- /**
- * Detect whether element has attributes or not.
- * @return true or false to indicate the result.
- */
- virtual bool hasAttributes() const;
-
- /**
- * Find the first child node in element by its tag name.
- * @param element the specific element to be found.
- * @param tag the specific tag name to be searched.
- * @return NULL if not found otherwise the child node.
- */
- const NodeImpl* findSoloChildNode(const char* tag) const;
-
- /**
- * Get the first text containted in first child of the element.
- * @param tag the specific tag name to be searched.
- * @return NULL if not found otherwise the text.
- */
- const string* getSoloText(const char* tag) const;
-
- /**
- * Get the first child xml element containted in the element.
- * @param tag the specific tag name to be searched.
- * @return NULL if not found otherwise the element.
- */
- const XMLElementImpl* getSoloElement(const char* tag) const;
-
-PRIVATE:
- DOMString mTagName; /**< The tag name. */
- DOMStringMap mAttributeMap; /** The map of attributes. */
-};
-
-#endif
diff --git a/media/libdrm/mobile2/src/dcf/DrmDcfCommon.cpp b/media/libdrm/mobile2/src/dcf/DrmDcfCommon.cpp
deleted file mode 100644
index 0f5e4ac..0000000
--- a/media/libdrm/mobile2/src/dcf/DrmDcfCommon.cpp
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <dcf/DrmDcfCommon.h>
-
-int64_t ntoh_int64(int64_t x)
-{
- return (((int64_t)(ntohl((int32_t)((x << 32) >> 32))) << 32) | (uint32_t)ntohl(((int32_t)(x >> 32))));
-}
-
-/**
- * Class: Box
- */
-Box::Box(const uint8_t* box):mLargeSize(0),mUserType(NULL)
-{
- if(!box)
- {
- return ;
- }
-
- const uint8_t* p = box;
-
- /* Get the size value */
- mSize = ntohl(*(uint32_t *)p);
- p += sizeof(mSize);
-
- /* Get the type value */
- mType = *((uint32_t *)p);
- p += sizeof(mType);
-
- if (1 == mSize)
- {
- mLargeSize = ntoh_int64(*(uint64_t *)p);
- p += sizeof(mLargeSize);
- }
-
- if (DCF_USER_TYPE == mType)
- {
- mUserType = new uint8_t[USER_TYPE_LEN];
- memcpy(mUserType, p, USER_TYPE_LEN);
- p += USER_TYPE_LEN;
- }
-
- mBoxLength = p - box;
-}
-
-Box::Box(const Box& other)
-{
- mSize = other.mSize;
- mType = other.mType;
- mLargeSize = other.mLargeSize;
- mUserType = NULL;
-
- if(other.mUserType)
- {
- mUserType = new uint8_t[USER_TYPE_LEN];
- memcpy(mUserType,other.mUserType,USER_TYPE_LEN);
- }
-}
-
-Box& Box::operator=(const Box& other)
-{
- if(this == &other)
- {
- return *this;
- }
-
- if(mUserType)
- {
- delete []mUserType;
- mUserType = NULL;
- }
-
- if(other.mUserType)
- {
- mUserType = new uint8_t[USER_TYPE_LEN];
- memcpy(mUserType, other.mUserType, USER_TYPE_LEN);
- }
-
- return *this;
-}
-
-Box::~Box()
-{
- if(mUserType)
- {
- delete []mUserType;
- mUserType = NULL;
- }
-}
-
-uint64_t Box::getSize(void) const
-{
- if(1 == mSize)
- {
- return mLargeSize;
- }
-
- return mSize;
-}
-
-uint32_t Box::getType(void) const
-{
- return mType;
-}
-
-const uint8_t* Box::getUsertype(void) const
-{
- return mUserType;
-}
-
-uint32_t Box::getLen(void) const
-{
- return mBoxLength;
-}
-
-
-/**
- * Class: FullBox
- */
-FullBox::FullBox(const uint8_t* fullBox) : Box(fullBox)
-{
- if(!fullBox)
- {
- return ;
- }
-
- const uint8_t* p = fullBox;
-
- p += Box::getLen();
-
- mVersion = *p;
- p++;
-
- memcpy(mFlag, p,FLAG_LEN);
- p += FLAG_LEN;
-
- mFullBoxLength = p - fullBox;
-}
-
-uint8_t FullBox::getVersion(void) const
-{
- return mVersion;
-}
-
-const uint8_t* FullBox::getFlag(void) const
-{
- return mFlag;
-}
-
-uint32_t FullBox::getLen(void) const
-{
- return mFullBoxLength;
-}
-
-///// class TextualHeader implementation
-TextualHeader::TextualHeader(const string& inData)
-{
- string::size_type loc1 = inData.find(":", 0);
-
- if (loc1 != string::npos)
- {
- name.assign(inData, 0, loc1);
- }
-
- string::size_type loc2 = inData.find(";", loc1 + 1);
-
- if (loc2 != string::npos)
- {
- value.assign(inData, loc1 + 1, loc2 - loc1 - 1);
- param.assign(inData, loc2 + 1, inData.length() - loc2 - 1);
- }
- else
- {
- value.assign(inData, loc1 + 1, inData.length() - loc1 - 1);
- }
-}
-
-string TextualHeader::getName() const
-{
- return name;
-}
-
-string TextualHeader::getValue() const
-{
- return value;
-}
-
-string TextualHeader::getParam() const
-{
- return param;
-}
-
diff --git a/media/libdrm/mobile2/src/dcf/DrmDcfContainer.cpp b/media/libdrm/mobile2/src/dcf/DrmDcfContainer.cpp
deleted file mode 100644
index 517c930..0000000
--- a/media/libdrm/mobile2/src/dcf/DrmDcfContainer.cpp
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <dcf/DrmDcfContainer.h>
-
-DcfContainer::DcfContainer(const uint8_t* data,istream& inRawData,uint64_t conOff)
- : FullBox(data),mConStream(inRawData)
-{
- if(!data)
- {
- return;
- }
-
- const uint8_t* p = data;
- const uint8_t* flag = this->getFlag();
-
- if(flag[0] & USER_DATA_FLAG)
- {
- mHasUserData = true;
- }
- else
- {
- mHasUserData = false;
- }
-
- p += this->getLen();
-
- FullBox fullBoxDiscrete(p);
-
- p += fullBoxDiscrete.getLen();
-
- mContentTypeLen = *p;
- p++;
-
- mContentType.assign((const char*)p,0,mContentTypeLen);
- p += mContentTypeLen;
-
- // parse common header
- FullBox fullBoxComm(p);
- p += fullBoxComm.getLen();
-
- mEncryptionMethod = *p;
- p++;
-
- mPaddingScheme = *p;
- p++;
-
- mPlaintextLength = ntoh_int64(*((uint64_t *)p));
- p += sizeof(mPlaintextLength);
-
- mContentIDLength = ntohs(*(uint16_t *)p);
- p += sizeof(mContentIDLength);
-
- mRightsIssuerURLLength = ntohs(*(uint16_t *)p);
- p += sizeof(mRightsIssuerURLLength);
-
- mTextualHeadersLength = ntohs(*(uint16_t *)p);
- p += sizeof(mTextualHeadersLength);
-
- mContentID.assign((const char *)p,0,mContentIDLength);
- p += mContentIDLength;
-
- mRightsIssuerURL.assign((const char *)p,0,mRightsIssuerURLLength);
- p += mRightsIssuerURLLength;
-
- // parse textual header
- if (mTextualHeadersLength > 0)
- {
- if(false == parseTextualHeaders(p,mTextualHeadersLength))
- {
- return;
- }
-
- p += mTextualHeadersLength;
- }
-
- ////////////// parser group id
-
- ///parse content
- p = data + this->getLen() + fullBoxDiscrete.getSize();
- FullBox fullBoxContetn(p);
- p += fullBoxContetn.getLen();
- mDataLen = ntoh_int64(*((uint64_t *)p));
- p += sizeof(mDataLen);
-
- mDecOffset = conOff + (p - data);
- p += mDataLen;
-
- /////////////// parser user data
-}
-
-DcfContainer::~DcfContainer()
-{
- uint32_t size = mTextualHeaders.size();
-
- for(uint32_t i = 0; i < size; i++)
- {
- delete mTextualHeaders[i];
- }
-
- mTextualHeaders.clear();
- mCustomHeader.clear();
-}
-
-
-string DcfContainer::getContentType(void) const
-{
- return mContentType;
-}
-
-uint8_t DcfContainer::getEncryptionMethod(void) const
-{
- return mEncryptionMethod;
-}
-
-uint8_t DcfContainer::getPaddingScheme(void) const
-{
- return mPaddingScheme;
-}
-
-uint64_t DcfContainer::getPlaintextLength(void) const
-{
- return mPlaintextLength;
-}
-
-uint16_t DcfContainer::getContentIDLength(void) const
-{
- return mContentIDLength;
-}
-
-uint16_t DcfContainer::getRightsIssuerURLLength(void) const
-{
- return mRightsIssuerURLLength;
-}
-
-uint16_t DcfContainer::getTextualHeadersLength(void) const
-{
- return mTextualHeadersLength;
-}
-
-string DcfContainer::getContentID(void) const
-{
- return mContentID;
-}
-
-string DcfContainer::getRightsIssuerURL(void) const
-{
- return mRightsIssuerURL;
-}
-
-string DcfContainer::getPreviewMethod(void) const
-{
- return mSlientMethod;
-}
-
-string DcfContainer::getContentLocation(void) const
-{
- return mContentLocation;
-}
-
-string DcfContainer::getContentURL(void) const
-{
- return mContentURL;
-}
-
-vector<string> DcfContainer::getCustomerHead(void) const
-{
- return mCustomHeader;
-}
-
-istream& DcfContainer::getStream(void) const
-{
- return mConStream;
-}
-
-DrmInStream DcfContainer::getPreviewElementData(void) const
-{
- // get data based on mPreviewElementURI
- //encryptedData = ;
-
- DrmInStream inStream;
- return inStream;
-}
-
-DrmInStream DcfContainer::getDecryptContent(uint8_t* decryptKey) const
-{
- DrmInStream inStream(this,decryptKey);
- return inStream;
-}
-
-bool DcfContainer::parseTextualHeaders(const uint8_t* data, uint32_t len)
-{
- if(!data)
- {
- return false;
- }
-
- const uint8_t* p = data;
-
- while (len > (uint32_t)(p - data))
- {
- uint32_t l = strlen((const char*)p);
-
- string str((const char*)p, l);
- TextualHeader* tmp = new TextualHeader(str);
-
- if(!tmp)
- {
- return false;
- }
-
- mTextualHeaders.push_back(tmp);
-
- p += l + 1;
- }
-
- uint32_t size = mTextualHeaders.size();
- uint32_t silentpos = 0;
- uint32_t previewpos = 0;
-
- for( uint32_t i = 0; i < size; i++)
- {
- string tempStr = mTextualHeaders[i]->getName();
-
- if(tempStr == "Silent")
- {
- silentpos = i;
- mSlientMethod = mTextualHeaders[i]->getValue();
- mSilentRightsURL = mTextualHeaders[i]->getParam();
- }
- else if(tempStr == "Preview")
- {
- previewpos = i;
- mPreviewMethod = mTextualHeaders[i]->getValue();
-
- if(mPreviewMethod == "instant")
- {
- mPreviewElementURI = mTextualHeaders[i]->getParam();
- }
- else
- {
- mPreviewRightsURL = mTextualHeaders[i]->getParam();
- }
- }
- else if(tempStr == "ContentURL")
- {
- mContentURL = mTextualHeaders[i]->getValue();
- }
- else if(tempStr == "ContentVersion")
- {
- mContentVersion = mTextualHeaders[i]->getValue();
- }
- if(tempStr == "Content-Location")
- {
- mContentLocation = mTextualHeaders[i]->getValue();
- }
- else
- {
- string str = mTextualHeaders[i]->getName();
- str += ":";
- str += mTextualHeaders[i]->getValue();
- mCustomHeader.push_back(str);
- }
- }
-
- if(silentpos < previewpos)
- {
- mSilentFirst = true;
- }
- else
- {
- mSilentFirst = false;
- }
-
- return true;
-}
-
-
-
-
-
diff --git a/media/libdrm/mobile2/src/dcf/DrmIStream.cpp b/media/libdrm/mobile2/src/dcf/DrmIStream.cpp
deleted file mode 100644
index 1bcc16a..0000000
--- a/media/libdrm/mobile2/src/dcf/DrmIStream.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <dcf/DrmIStream.h>
-
-
-DrmInStream::DrmInStream(const DcfContainer* container,uint8_t* Key)
-:mDcfCon(container),mDecryptPos(0)
-{
- memcpy(mAesKey,Key,AES_KEY_LEN);
-}
-
-uint64_t DrmInStream::size() const
-{
- return mDcfCon->mPlaintextLength;
-}
-
-uint64_t DrmInStream::read(uint8_t* data, uint64_t len)
-{
- if(!data)
- {
- return 0;
- }
-
- if(mDecryptPos >= mDcfCon->mPlaintextLength)
- {
- return 0;
- }
-
- uint64_t readLen = len;
-
- // come to the end of decrypted data
- if(mDecryptPos + len > mDcfCon->mPlaintextLength)
- {
- readLen = mDcfCon->mPlaintextLength - mDecryptPos;
- }
-
- uint64_t encLen = mDcfCon->mDataLen;
- uint8_t* encData = new uint8_t[encLen];
-
- if(!encData)
- {
- return 0;
- }
-
- mDcfCon->mConStream.seek(mDcfCon->mDecOffset);
- mDcfCon->mConStream.read(encData,encLen);
-
- uint8_t iv[AES_IV_LEN] = {0};
-
- memcpy(iv,encData,AES_IV_LEN);
- encLen -= AES_IV_LEN;
-
- if(AES_128_CBC != mDcfCon->mEncryptionMethod)
- {
- delete []encData;
- return 0;
- }
-
- AesAgent drmAesDecrypt(AES_128_CBC,mAesKey);
- int32_t padLen = drmAesDecrypt.decContent( iv,
- encData + AES_IV_LEN,
- encLen,
- data);
-
- delete []encData;
-
- if(padLen >= 0)
- {
- return readLen;
- }
- else
- {
- return 0;
- }
-}
-
-
-
-
-
diff --git a/media/libdrm/mobile2/src/dcf/DrmRawContent.cpp b/media/libdrm/mobile2/src/dcf/DrmRawContent.cpp
deleted file mode 100644
index 8813e3c..0000000
--- a/media/libdrm/mobile2/src/dcf/DrmRawContent.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <dcf/DrmRawContent.h>
-
-
-DrmRawContent::DrmRawContent(istream& inRawData)
-{
- uint32_t count = inRawData.stream_size();
-
- if (count <= MAX_PIECE_LEN)
- {
- uint8_t* data = new uint8_t[count];
-
- if(!data)
- {
- return;
- }
-
- inRawData.read(data,count);
-
- const uint8_t* dcf = data;
-
- //parse DCF file header
- if(false == parseDcfHeader(dcf))
- {
- delete []data;
- return;
- }
-
- dcf = data;
- dcf += FIX_HEADER_LEN;
-
- if(dcf >= (data + count))
- {
- return;
- }
-
- // parse container box
- FullBox conFullBox(dcf);
-
- if(DCF_CONTAINER_BOX != conFullBox.getType())
- {
- return;
- }
-
- //check whether it is multipart DCF or not
- do
- {
- uint64_t size = conFullBox.getSize();
-
- mContainer.push_back(new DcfContainer(dcf,inRawData,dcf-data));
-
- dcf += size;
-
- // come to the end of raw content
- if(dcf >= (data + count))
- {
- break;
- }
-
- conFullBox = FullBox(dcf);
- }while(DCF_CONTAINER_BOX == conFullBox.getType());
-
- // compute DCF hash using Sha1Agent
- Sha1Agent drmSha1Hash;
- drmSha1Hash.computeHash(data,dcf-data,mDcfHash);
-
- //// parse mutable box
-
- delete []data;
- }
-}
-
-DrmRawContent::~DrmRawContent()
-{
- uint32_t size = mContainer.size();
-
- for(uint32_t i = 0; i < size; i++)
- {
- delete mContainer[i];
- }
-
- mContainer.clear();
-}
-
-vector<DcfContainer*> DrmRawContent::getContents(void) const
-{
- return mContainer;
-}
-
-uint32_t DrmRawContent::getDcfHashLen() const
-{
- return DCF_HASH_LEN;
-}
-
-void DrmRawContent::getDcfHash(uint8_t* outDcfHash) const
-{
- if(outDcfHash)
- {
- memcpy(outDcfHash,mDcfHash,DCF_HASH_LEN);
- }
-
- return;
-}
-
-bool DrmRawContent::parseDcfHeader(const uint8_t* dcfHead)
-{
- if(!dcfHead)
- {
- return false;
- }
-
- if(FIX_HEADER_LEN != ntohl(*(uint32_t *)dcfHead))
- {
- return false;
- }
-
- dcfHead += 4;
- uint32_t type = *(uint32_t *)dcfHead;
-
- if(DCF_FILE_TYPE != type)
- {
- return false;
- }
-
- dcfHead += 4;
- type = *(uint32_t *)dcfHead;
-
- if(DCF_FILE_BRAND != type)
- {
- return false;
- }
-
- dcfHead += 4;
- if(2 != ntohl(*(uint32_t *)dcfHead))
- {
- return false;
- }
-
- dcfHead += 4;
- type = *(uint32_t *)dcfHead;
-
- if(DCF_FILE_BRAND != type)
- {
- return false;
- }
-
- dcfHead += 4;
- return true;
-}
diff --git a/media/libdrm/mobile2/src/drmmanager/DrmManager.cpp b/media/libdrm/mobile2/src/drmmanager/DrmManager.cpp
deleted file mode 100644
index 599526f..0000000
--- a/media/libdrm/mobile2/src/drmmanager/DrmManager.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <drmmanager/DrmManager.h>
-#include <ustring.h>
-#include <ofstream.h>
-#include <sostream.h>
-#include <sistream.h>
-using namespace ustl;
-
-/**see DrmManager.h */
-DrmManager::DrmManager(istream * inRawData)
-{
- mDcfStream = NULL;
- if (inRawData != NULL)
- {
- mDcfStream = inRawData;
- }
-}
-
-/**see DrmManager.h */
-DrmManager::DrmManager(istream * inRawData, string mimeType)
-{
- mDcfStream = inRawData;
-}
-
-/**see DrmManager.h */
-int16_t DrmManager::getListOfDcfObjects(vector<DcfContainer*> **outDcfList)
-{
- /** call dcf functions to parse the dcf file*/
- if (NULL == mDcfStream)
- {
- return ERR_DCFSTREAM_NOT_INITIALIZED;
- }
- if (NULL == outDcfList)
- {
- return ERR_DCFSTREAM_NOT_INITIALIZED;
- }
- *outDcfList=&mDcfs;
- return DRM_OK;
-}
-
-/**see DrmManager.h */
-int16_t DrmManager::openDecryptedContent(DcfContainer *oneDcfObject,
- int16_t operationType,
- istream *outDecryptedData)
-{
- return 1;
-}
-
-/**see DrmManager.h */
-DrmManager::~DrmManager()
-{
-
-}
diff --git a/media/libdrm/mobile2/src/rights/Asset.cpp b/media/libdrm/mobile2/src/rights/Asset.cpp
deleted file mode 100644
index 120b465..0000000
--- a/media/libdrm/mobile2/src/rights/Asset.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <rights/Asset.h>
-
-/** see Asset.h */
-Asset::Asset()
-{}
-
-/** see Asset.h */
-Asset::~Asset()
-{}
-
-/** see Asset.h */
-bool Asset::hasParent()
-{
- return false;
-}
-
-/** see Asset.h */
-void Asset::setID(const string &id)
-{
- mAssetID = id;
-}
-
-/** see Asset.h */
-const string& Asset::getID() const
-{
- return mAssetID;
-}
-
-/** see Asset.h */
-void Asset::setContentID(const string &id)
-{
- mContentID = id;
-}
-
-/** see Asset.h */
-const string& Asset::getContentID() const
-{
- return mContentID;
-}
-
-/** see Asset.h */
-void Asset::setEncryptedKey(const string &key)
-{
- mEncryptedKey = key;
-}
-
-/** see Asset.h */
-void Asset::setDCFDigest(const string &value)
-{
- mDigestValue = value;
-}
-
-/** see Asset.h */
-const string& Asset::getDCFDigest() const
-{
- return mDigestValue;
-}
-
-/** see Asset.h */
-void Asset::setKeyRetrievalMethod(const string &rm)
-{
- mRetrievalMethod = rm;
-}
-
-/** see Asset.h */
-void Asset::setParentContentID(const string &id)
-{
- mParentContentID = id;
-}
-
-/** see Asset.h */
-const string& Asset::getEncrytedKey() const
-{
- return mEncryptedKey;
-}
-
-/** see Asset.h */
-const char* Asset::getCek() const
-{
- return NULL;
-}
-
-/** see Asset.h */
-void Asset::recoverCek()
-{
-//fix later.
-
-}
-
-/** see Asset.h */
-const string& Asset::getParentContentID() const
-{
- return mParentContentID;
-}
diff --git a/media/libdrm/mobile2/src/rights/Constraint.cpp b/media/libdrm/mobile2/src/rights/Constraint.cpp
deleted file mode 100644
index 2cb4311..0000000
--- a/media/libdrm/mobile2/src/rights/Constraint.cpp
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <rights/Constraint.h>
-
-/** see Constraint.h */
-Constraint::Constraint()
-{
- mCount = INIT_VALUE;
- mTimedCount = INIT_VALUE;
- mTimer = INIT_VALUE;
- mStart = INIT_VALUE;
- mEnd = INIT_VALUE;
- mInterval = INIT_VALUE;
- mAccumulated = INIT_VALUE;
- mExport = NONE;
-}
-
-/** see Constraint.h */
-Constraint::~Constraint()
-{}
-
-/** see Constraint.h */
-bool Constraint::isUnConstraint() const
-{
- return (mCount == INIT_VALUE && mTimedCount == INIT_VALUE &&
- mTimer == INIT_VALUE && mStart == INIT_VALUE &&
- mEnd == INIT_VALUE && mInterval == INIT_VALUE &&
- mAccumulated == INIT_VALUE && mExport == NONE &&
- mSystemList.empty());
-}
-
-/** see Constraint.h */
-bool Constraint::isDateTimeConstraint() const
-{
- return !(mStart == INIT_VALUE && mEnd == INIT_VALUE);
-}
-
-/** see Constraint.h */
-bool Constraint::isIntervalConstraint() const
-{
- return !(mInterval == INIT_VALUE);
-}
-
-/** see Constraint.h */
-bool Constraint::isTimedCountConstraint() const
-{
- return !(mTimedCount == INIT_VALUE);
-}
-
-/** see Constraint.h */
-bool Constraint::isValid(long time) const
-{
- if (isUnConstraint())
- {
- return true;
- }
-
- if (isDateTimeConstraint())
- {
- if (time < mStart || time > mEnd)
- {
- return false;
- }
- }
-
- if (mInterval == 0 || mCount == 0 ||
- mTimedCount == 0 || mAccumulated == 0)
- {
- return false;
- }
-
- return true;
-}
-
-/** see Constraint.h */
-void Constraint::setStartTime(long time)
-{
- mStart = time;
-}
-
-/** see Constraint.h */
-long Constraint::getStartTime() const
-{
- return mStart;
-}
-
-/** see Constraint.h */
-void Constraint::setEndTime(long time)
-{
- mEnd = time;
-}
-
-/** see Constraint.h */
-long Constraint::getEndTime() const
-{
- return mEnd;
-}
-
-/** see Constraint.h */
-void Constraint::setAccumulated(long time)
-{
- mAccumulated = time;
-}
-
-/** see Constraint.h */
-long Constraint::getAccumulated() const
-{
- return mAccumulated;
-}
-
-/** see Constraint.h */
-void Constraint::setCount(int count)
-{
- mCount = count;
-}
-
-/** see Constraint.h */
-int Constraint::getCount() const
-{
- return mCount;
-}
-
-/** see Constraint.h */
-void Constraint::setTimer(int timer)
-{
- mTimer = timer;
-}
-
-/** see Constraint.h */
-int Constraint::getTimer() const
-{
- return mTimer;
-}
-
-/** see Constraint.h */
-void Constraint::setTimedCount(int timedCount)
-{
- mTimedCount = timedCount;
-}
-
-/** see Constraint.h */
-int Constraint::getTimedCount() const
-{
- return mTimedCount;
-}
-
-/** see Constraint.h */
-void Constraint::setInterval(int interval)
-{
- mInterval = interval;
-}
-
-/** see Constraint.h */
-int Constraint::getInterval() const
-{
- return mInterval;
-}
-
-/** see Constraint.h */
-void Constraint::setExportMode(MODE mode)
-{
- mExport = mode;
-}
-
-/** see Constraint.h */
-Constraint::MODE Constraint::getExportMode() const
-{
- return mExport;
-}
-
-/** see Constraint.h */
-bool Constraint::consume()
-{
- if (isUnConstraint())
- {
- return true;
- }
-
- if (mCount > 0)
- {
- mCount--;
- return true;
- }
-
- if (mAccumulated > 0)
- {
- mAccumulated--;
- return true;
- }
-
- if (mTimedCount > 0)
- {
-
- }
- return false;
-}
diff --git a/media/libdrm/mobile2/src/rights/OperationPermission.cpp b/media/libdrm/mobile2/src/rights/OperationPermission.cpp
deleted file mode 100644
index fc75fb1..0000000
--- a/media/libdrm/mobile2/src/rights/OperationPermission.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <rights/OperationPermission.h>
-#include <rights/Constraint.h>
-
-/** see OperationPermission.h */
-OperationPermission::OperationPermission() : mConstraint(NULL)
-{
-
-}
-
-/** see OperationPermission.h */
-OperationPermission::OperationPermission(OPERATION type, Constraint *cst) : mType(type), mConstraint(cst)
-{
-
-}
-
-/** see OperationPermission.h */
-OperationPermission::~OperationPermission()
-{
- delete mConstraint;
-}
-
-/** see OperationPermission.h */
-void OperationPermission::setType(OPERATION type)
-{
- mType = type;
-}
-
-/** see OperationPermission.h */
-OperationPermission::OPERATION OperationPermission::getType() const
-{
- return mType;
-}
-
-/** see OperationPermission.h */
-void OperationPermission::addConstraint(Constraint* constraint)
-{
- mConstraint = constraint;
-}
-
-/** see OperationPermission.h */
-Constraint* OperationPermission::getConstraint() const
-{
- return mConstraint;
-}
diff --git a/media/libdrm/mobile2/src/rights/Right.cpp b/media/libdrm/mobile2/src/rights/Right.cpp
deleted file mode 100644
index 6be9c70..0000000
--- a/media/libdrm/mobile2/src/rights/Right.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <rights/Right.h>
-#include <rights/OperationPermission.h>
-#include <rights/Constraint.h>
-
-/** see Right.h */
-Right::Right()
-{
-
-}
-
-/** see Right.h */
-Right::~Right()
-{
- vector<OperationPermission*>::iterator it;
-
- for (it = mOpList.begin(); it != mOpList.end(); it++)
- {
- delete(*it);
- }
-
- mOpList.clear();
-}
-
-/** see Right.h */
-void Right::addAssetID(const string& id)
-{
- mAssetNameList.push_back(id);
-}
-
-/** see Right.h */
-void Right::addOperationPermission(OperationPermission* op)
-{
- mOpList.push_back(op);
-}
-
-/** see Right.h */
-bool Right::checkPermission(OperationPermission::OPERATION type)
-{
- for (vector<OperationPermission*>::iterator it = mOpList.begin();
- it != mOpList.end(); it++)
- {
- if ((*it)->getType() == type)
- {
- return true;
- }
- }
-
- return false;
-}
-
-/** see Right.h */
-Constraint* Right::getConstraint(OperationPermission::OPERATION type)
-{
- for (vector<OperationPermission*>::iterator it = mOpList.begin();
- it != mOpList.end(); it++)
- {
- if ((*it)->getType() == type)
- {
- return (*it)->getConstraint();
- }
- }
-
- return NULL;
-}
diff --git a/media/libdrm/mobile2/src/rights/Ro.cpp b/media/libdrm/mobile2/src/rights/Ro.cpp
deleted file mode 100644
index 8141e17..0000000
--- a/media/libdrm/mobile2/src/rights/Ro.cpp
+++ /dev/null
@@ -1,831 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <rights/Ro.h>
-#include <rights/Constraint.h>
-#include <rights/OperationPermission.h>
-#include <util/xml/DomExpatAgent.h>
-#include <util/domcore/DOMString.h>
-#include <utils/Log.h>
-
-#include <uassert.h>
-#include <time.h>
-#include <ofstream.h>
-using namespace ustl;
-
-const char *STR_RO_RIGHTS = "o-ex:rights";
-const char *STR_RO_CONTEXT = "o-ex:context";
-const char *STR_RO_AGREEMENT = "o-ex:agreement";
-const char *STR_RO_ASSET = "o-ex:asset";
-const char *STR_RO_INHERIT = "o-ex:inherit";
-const char *STR_RO_DIGEST = "o-ex:digest";
-const char *STR_RO_KEYINFO = "ds:KeyInfo";
-const char *STR_RO_PERMISSION = "o-ex:permission";
-const char *STR_RO_ASSET_ID = "o-ex:id";
-const char *STR_RO_ASSET_IDREF = "o-ex:idref";
-const char *STR_RO_CONTEXT_ID = "o-dd:uid";
-const char *STR_RO_CONTEXT_VERSION = "o-dd:version";
-const char *STR_RO_DIGEST_VALUE = "ds:DigestValue";
-const char *STR_RO_CIPHER_VALUE = "xenc:CipherValue";
-const char *STR_RO_RETRIEVAL_METHOD = "ds:RetrievalMethod";
-const char *STR_RO_PLAY = "o-dd:play";
-const char *STR_RO_DISPLAY = "o-dd:display";
-const char *STR_RO_EXECUTE = "o-dd:execute";
-const char *STR_RO_PRINT = "o-dd:print";
-const char *STR_RO_EXPORT = "o-dd:export";
-const char *STR_RO_CONSTRAINT = "o-ex:constraint";
-const char *STR_RO_COUNT = "o-dd:count";
-const char *STR_RO_TIMEDCOUNT = "o-dd:timed-count";
-const char *STR_RO_TIMER = "oma-dd:timer";
-const char *STR_RO_INTERVAL = "o-dd:interval";
-const char *STR_RO_DATETIME = "o-dd:datetime";
-const char *STR_RO_START = "o-dd:start";
-const char *STR_RO_END = "o-dd:end";
-const char *STR_RO_ACCUMULATED = "o-dd:accumulated";
-const char *STR_RO_INDIVIDUAL = "o-dd:individual";
-const char *STR_RO_SYSTEM = "o-dd:system";
-
-/** see Ro.h */
-Ro::Ro()
-{
- mDoc = new XMLDocumentImpl();
- mProperRight = NULL;
-}
-
-/** see Ro.h */
-Ro::~Ro()
-{
- for (vector<Right*>::iterator itr = mRightList.begin(); itr != mRightList.end(); itr++)
- {
- delete(*itr);
- }
-
- mRightList.clear();
-
- for (vector<Asset*>::iterator ita = mAssetList.begin(); ita != mAssetList.end(); ita++)
- {
- delete(*ita);
- }
-
- mAssetList.clear();
-
- mProperRight = NULL;
- delete mDoc;
-
-}
-
-/** see Ro.h */
-void Ro::setRoID(string& id)
-{
- mRoID = id;
-}
-
-/** see Ro.h */
-const string& Ro::getRoID() const
-{
- return mRoID;
-}
-
-/** see Ro.h */
-void Ro::setRoVersion(string& version)
-{
- mRoVersion = version;
-}
-
-/** see Ro.h */
-void Ro::addAsset(Asset* asset)
-{
- mAssetList.push_back(asset);
-}
-
-/** see Ro.h */
-void Ro::addRight(Right* right)
-{
- mRightList.push_back(right);
-}
-
-/** see Ro.h */
-bool Ro::save()
-{
- LOGI("==============Ro save.=================");
-
- return true;
-}
-
-/** see Ro.h */
-Ro::ERRCODE Ro::parse(istringstream *roStream)
-{
- DomExpatAgent xmlAgent(mDoc);
-
- if (NULL == roStream)
- {
- LOGI("NULL stream");
- return RO_NULL_STREAM;
- }
-
- if (xmlAgent.generateDocumentFromXML(roStream) == false)
- {
- LOGI("generate xml doc error");
- return RO_ERR_BAD_XML;
- }
-
- handleDocument(mDoc);
-
- return RO_OK;
-}
-
-/** see Ro.h */
-bool Ro::handleDocument(const XMLDocumentImpl* doc)
-{
- assert(doc != NULL);
-
- NodeImpl* node = doc->getDocumentElement();
-
- return handleRights(node);
-}
-
-/** see Ro.h */
-bool Ro::handleRights(const NodeImpl *curNode)
-{
- assert(curNode != NULL);
-
- NodeImpl *node = curNode->getFirstChild();
-
- while (NULL != node)
- {
- const DOMString* name;
-
- name = static_cast<const XMLElementImpl*>(node)->getTagName();
-
- if (name->compare(STR_RO_CONTEXT) == 0)
- {
- LOGI("rights context");
- const DOMString *token = NULL;
- token = static_cast<const XMLElementImpl*>(node)->getSoloText(STR_RO_CONTEXT_ID);
-
- if (token)
- {
- LOGI(*token);
- mRoID = *token;
- }
-
- token = static_cast<const XMLElementImpl*>(node)->getSoloText(STR_RO_CONTEXT_VERSION);
- if (token)
- {
- LOGI(*token);
- mRoVersion = *token;
- }
- }
-
- if (name->compare(STR_RO_AGREEMENT) == 0)
- {
-
- LOGI("rights agreement");
- if (handleAgreement(node) == false)
- {
- return false;
- }
- }
-
- node = node->getNextSibling();
- }
- return true;
-}
-
-/** see Ro.h */
-bool Ro::handleAgreement(const NodeImpl *curNode)
-{
- assert(curNode != NULL);
-
- NodeImpl *node = curNode->getFirstChild();
-
- while (NULL != node)
- {
- const DOMString* name;
-
- name = static_cast<const XMLElementImpl*>(node)->getTagName();
-
- if (name->compare(STR_RO_ASSET) == 0)
- {
- // do something about asset.
- LOGI("asset");
-
- if (handleAsset(node) == false)
- {
- return false;
- }
- }
-
- if (name->compare(STR_RO_PERMISSION) == 0)
- {
- // do something about permission.
- LOGI("permission");
-
- if (handlePermission(node) == false)
- {
- return false;
- }
- }
-
- node = node->getNextSibling();
- }
-
- return true;
-}
-
-/** see Ro.h */
-bool Ro::handleAsset(const NodeImpl *curNode)
-{
- assert(curNode != NULL);
-
- Asset *asset = new Asset();
-
- const XMLElementImpl *curElement = static_cast<const XMLElementImpl*>(curNode);
-
- if (curElement->hasAttributes())
- {
- DOMString assetID(STR_RO_ASSET_ID);
- LOGI("asset id:");
-
- const DOMString *id = curElement->getAttribute(&assetID);
-
- if (id)
- {
- asset->setID(*id);
- }
-
- }
-
- NodeImpl* node = curNode->getFirstChild();
-
- const DOMString *name = NULL;
- const string *token = NULL;
-
- while (NULL != node)
- {
- curElement = static_cast<const XMLElementImpl*>(node);
- name = curElement->getTagName();
-
- if (name->compare(STR_RO_CONTEXT) == 0 ||
- name->compare(STR_RO_INHERIT) == 0)
- {
- LOGI("asset context");
-
- token = curElement->getSoloText(STR_RO_CONTEXT_ID);
- if (token)
- {
- LOGI(*token);
-
- if (name->compare(STR_RO_CONTEXT) == 0)
- {
- asset->setContentID(*token);
- }
- else
- {
- //parent ID.
- asset->setParentContentID(*token);
- }
- }
- }
-
- if (name->compare(STR_RO_DIGEST) == 0)
- {
- LOGI("asset digest");
- //digest method is fixed value:
- //http://www.w3.org/2000/09/xmldisig#sha1
- token = curElement->getSoloText(STR_RO_DIGEST_VALUE);
- if (token)
- {
- LOGI(*token);
- asset->setDCFDigest(*token);
- }
- }
-
- if (name->compare(STR_RO_KEYINFO) == 0)
- {
- LOGI("asset keyinfo");
-
- token = curElement->getSoloText(STR_RO_CIPHER_VALUE);
- if (token)
- {
- LOGI(*token);
- asset->setEncryptedKey(*token);
- }
-
- const XMLElementImpl *node = curElement->getSoloElement(STR_RO_RETRIEVAL_METHOD);
-
- if (node)
- {
- if (node->hasAttributes())
- {
- DOMString uri("URI");
- token = node->getAttribute(&uri);
- if (token)
- {
- LOGI(*token);
- asset->setKeyRetrievalMethod(*token);
- }
- }
- }
- }
-
- node = node->getNextSibling();
- }
-
- this->addAsset(asset);
- return true;
-}
-
-/** see Ro.h */
-bool Ro::handlePermission(const NodeImpl *curNode)
-{
- assert(curNode != NULL);
-
- Right *right = new Right();
-
- const XMLElementImpl *curElement = static_cast<const XMLElementImpl*>(curNode);
-
- NodeImpl* node = curNode->getFirstChild();
-
- while (NULL != node)
- {
- const DOMString *name = NULL;
- NodeListImpl *nodeList = NULL;
-
- const string *token = NULL;
- curElement = static_cast<const XMLElementImpl*>(node);
- name = curElement->getTagName();
-
- if (name->compare(STR_RO_ASSET) == 0)
- {
- LOGI("permission asset");
- if (curElement->hasAttributes())
- {
- DOMString assetID(STR_RO_ASSET_IDREF);
- const DOMString *id = curElement->getAttribute(&assetID);
- if (id)
- {
- right->addAssetID(*id);
- LOGI(*id);
- }
- }
- }
-
- OperationPermission::OPERATION type = OperationPermission::NONE;
-
- if (name->compare(STR_RO_PLAY) == 0)
- {
- LOGI("permission play constraint");
- type = OperationPermission::PLAY;
- }
-
- if (name->compare(STR_RO_DISPLAY) == 0)
- {
- LOGI("permission display costraint");
- type = OperationPermission::DISPLAY;
- }
-
- if (name->compare(STR_RO_EXECUTE) == 0)
- {
- LOGI("permission execute constraint");
- type = OperationPermission::EXECUTE;
- }
-
- if (name->compare(STR_RO_EXPORT) == 0)
- {
- LOGI("permission export constraint");
- type = OperationPermission::EXPORT;
- }
-
- if (name->compare(STR_RO_PRINT) == 0)
- {
- LOGI("permission print constraint");
- type = OperationPermission::PRINT;
- }
-
- Constraint *cst = NULL;
-
- if (name->compare(STR_RO_CONSTRAINT) == 0)
- {
- LOGI("permission common constraint");
- type = OperationPermission::COMMON;
- }
-
- cst = getConstraint(curElement);
- if (cst)
- {
- OperationPermission *op = new OperationPermission(type, cst);
- right->addOperationPermission(op);
- }
-
- node = node->getNextSibling();
- }
-
- this->addRight(right);
- return true;
-}
-
-/** see Ro.h */
-long Ro::convertISO8601DateTimeToLong(const char* ts)
-{
- if (NULL == ts)
- {
- return -1;
- }
-
- struct tm time;
- memset(&time, 0, sizeof(struct tm));
-
- strptime(ts, "%FT%T%z", &time);
-
-//need timezone support: return mktime(&time) - timezone;
-//It seems android-sooner doesn't support timezone function.
-//line below is just for building, value would be wrong if no timezone minus.
- return mktime(&time);
-}
-
-/** see Ro.h */
-long Ro::convertISO8601PeriodToLong(const char* ts)
-{
- if (NULL == ts)
- {
- return -1;
- }
-
- int date, hour, min, sec;
- sscanf(ts, "P%dDT%dH%dM%dS", &date, &hour, &min, &sec);
- LOGI("%d %d %d %d", date, hour, min, sec);
- return (date*24*60*60 + hour*60*60 + min*60 + sec);
-}
-
-/** see Ro.h */
-Constraint* Ro::getConstraint(const NodeImpl* curNode)
-{
- assert(curNode != NULL);
-
- Constraint *constraint = new Constraint();
-
- const XMLElementImpl *curElement = static_cast<const XMLElementImpl*>(curNode);
-
- const string *name = NULL;
- const string *token = NULL;
-
- if ((token = curElement->getSoloText(STR_RO_COUNT)))
- {
- LOGI(*token);
- constraint->setCount(atoi(token->c_str()));
- }
-
- if ((token = curElement->getSoloText(STR_RO_START)))
- {
- LOGI(*token);
- //start Time
- constraint->setStartTime(convertISO8601DateTimeToLong(token->c_str()));
- }
-
- if ((token = curElement->getSoloText(STR_RO_END)))
- {
- LOGI(*token);
- //end Time
- constraint->setEndTime(convertISO8601DateTimeToLong(token->c_str()));
- }
-
- if ((token = curElement->getSoloText(STR_RO_INTERVAL)))
- {
- LOGI(*token);
- constraint->setInterval(atoi(token->c_str()));
- }
-
- if ((token = curElement->getSoloText(STR_RO_ACCUMULATED)))
- {
- LOGI(*token);
- //Period
- constraint->setAccumulated(convertISO8601PeriodToLong(token->c_str()));
- }
-
- if ((token = curElement->getSoloText(STR_RO_TIMEDCOUNT)))
- {
- LOGI(*token);
- constraint->setTimedCount(atoi(token->c_str()));
-
- const XMLElementImpl *node = curElement->getSoloElement(STR_RO_TIMEDCOUNT);
-
- if (node)
- {
- if (node->hasAttributes())
- {
- DOMString timer(STR_RO_TIMER);
- token = node->getAttribute(&timer);
- if (token)
- {
- LOGI(*token);
- constraint->setTimer(atoi(token->c_str()));
- }
- }
- }
-
- }
-
- return constraint;
-}
-
-/** see Ro.h */
-void Ro::loadRights(const string& contentID)
-{
- for (vector<Right*>::iterator it = this->mRightList.begin();
- it != this->mRightList.end(); it++)
- {
- if ((*it)->mAssetNameList.empty())
- {
- mContentRightList.push_back(*it);
- }
- else
- {
- for (vector<Asset*>::iterator ita = this->mAssetList.begin();
- ita != this->mAssetList.end(); ita++)
- {
- for (vector<string>::iterator its = (*it)->mAssetNameList.begin();
- its != (*it)->mAssetNameList.end(); its++)
- {
- if ((*its).compare((*ita)->getID()) == 0)
- {
- if (contentID.compare((*ita)->getContentID()) == 0)
- {
- LOGI("find content right");
- mContentRightList.push_back(*it);
- }
- }
- }
- }
- }
-
-
- }
-
-}
-
-/** see Ro.h */
-void Ro::freeRights()
-{
- mContentRightList.clear();
-}
-
-/** see Ro.h */
-bool Ro::checkPermission(OperationPermission::OPERATION type,
- const string& contentID)
-{
- loadRights(contentID);
-
- for (vector<Right*>::iterator it = mContentRightList.begin(); it != mContentRightList.end(); it++)
- {
- if ((*it)->checkPermission(type))
- {
- freeRights();
- return true;
- }
-
- }
- freeRights();
- return false;
-}
-
-/** see Ro.h */
-Ro::ERRCODE Ro::consume(OperationPermission::OPERATION type,
- const string& contentID)
-{
- loadRights(contentID);
-
- //check in mRightList
- vector<Right*>::iterator it;
- vector<Right*> tmpList;
- vector<Right*> retList;
- Constraint *constraint = NULL;
- long ealiestEnd = -1;
- bool hasCommonConstraint = false;
- bool hasUnconstraint = false;
- bool hasDateTimeConstraint = false;
- bool hasTimedCountConstraint = false;
- bool hasIntervalConstraint = false;
-
-
- //apply the RO rule, if do not satisfy the constraint, .
- //proper right select process
-
- for (it = mContentRightList.begin(); it != mContentRightList.end(); it++)
- {
- if ((*it)->checkPermission(type))
- {
- constraint = (*it)->getConstraint(OperationPermission::COMMON);
- if (constraint)
- {
- if (!constraint->isValid(time(NULL)))
- {
- continue;
- }
-
- hasCommonConstraint = true;
- tmpList.push_back(*it);
- }
-
- constraint = (*it)->getConstraint(type);
- assert(constraint != NULL);
-
- if (!constraint->isValid(time(NULL)))
- {
- continue;
- }
-
- if (constraint->isUnConstraint())
- {
- //use uncontrainted firstly.
- hasUnconstraint = true;
- tmpList.push_back(*it);
- break;
- }
-
- if (constraint->isDateTimeConstraint())
- {
- //use datetime constraint in high priority.
- //if contain multipe constraints, use the earliest expire time.
- hasDateTimeConstraint = true;
- tmpList.push_back(*it);
- continue;
- }
-
- if (constraint->isTimedCountConstraint())
- {
- //illegal Operation when time counted
- if (type == OperationPermission::PRINT ||
- type == OperationPermission::EXPORT)
- {
- continue;
- }
-
- hasTimedCountConstraint = true;
- tmpList.push_back(*it);
- continue;
- }
-
- if (constraint->isIntervalConstraint())
- {
- hasIntervalConstraint = true;
- tmpList.push_back(*it);
- continue;
- }
-
- tmpList.push_back(*it);
- }
- }
-
-
- for (it = tmpList.begin(); it != tmpList.end(); it++)
- {
- if (hasUnconstraint == true)
- {
- //delete other constraint
- constraint = (*it)->getConstraint(type);
- if (constraint)
- {
- if (constraint->isUnConstraint())
- {
- retList.push_back(*it);
- break;
- }
- }
- continue;
- }
-
- if (hasDateTimeConstraint == true)
- {
- //delete other constraint
- constraint = (*it)->getConstraint(type);
- if (constraint)
- {
- if (constraint->isDateTimeConstraint())
- {
- long tt = constraint->getEndTime();
-
- if (ealiestEnd == -1)
- {
- ealiestEnd = tt;
- retList.push_back(*it);
- }
- else if (ealiestEnd > tt)
- {
- ealiestEnd = tt;
- retList.pop_back();
- retList.push_back(*it);
- }
- }
- }
- continue;
- }
-
- if (hasIntervalConstraint == true)
- {
- //delete other constraint
- constraint = (*it)->getConstraint(type);
- if (constraint)
- {
- if (constraint->isIntervalConstraint())
- {
- retList.push_back(*it);
- }
- }
- continue;
- }
-
- if (hasTimedCountConstraint == true)
- {
- constraint = (*it)->getConstraint(type);
- if (constraint)
- {
- if (constraint->isTimedCountConstraint())
- {
- retList.push_back(*it);
- }
- }
- continue;
- }
-
- retList.push_back(*it);
- }
-
- if (retList.size() == 0)
- {
- freeRights();
- return RO_BAD;
- }
-
- LOGI("Proper right has %d", retList.size());
-
- assert(retList.size() == 1);
-
- mProperRight = retList[0];
- constraint = retList[0]->getConstraint(OperationPermission::COMMON);
- if (constraint)
- {
- if (constraint->consume() == false)
- {
- freeRights();
- return RO_BAD;
- }
- }
-
- constraint = retList[0]->getConstraint(type);
- if (constraint)
- {
- if (constraint->consume() == false)
- {
- freeRights();
- return RO_BAD;
- }
- }
-
- //update the constraint
- freeRights();
- return RO_OK;
-}
-
-/** see Ro.h */
-string Ro::getContentCek(const string& contentID)
-{
- for (vector<Asset*>::iterator it = mAssetList.begin();
- it != mAssetList.end(); it++)
- {
- if (contentID.compare((*it)->getContentID()) == 0)
- {
- return (*it)->getCek();
- }
- }
-
- return "";
-}
-
-/** see Ro.h */
-string Ro::getContentHash(const string& contentID)
-{
- for (vector<Asset*>::iterator it = mAssetList.begin();
- it != mAssetList.end(); it++)
- {
- if (contentID.compare((*it)->getContentID()) == 0)
- {
- return (*it)->getDCFDigest();
- }
- }
-
- return "";
-}
diff --git a/media/libdrm/mobile2/src/rights/RoManager.cpp b/media/libdrm/mobile2/src/rights/RoManager.cpp
deleted file mode 100644
index 848c2ba..0000000
--- a/media/libdrm/mobile2/src/rights/RoManager.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <rights/RoManager.h>
-#include <rights/Asset.h>
-
-using namespace ustl;
-
-RoManager* RoManager::msInstance = NULL;
-
-/** see RoManager.h */
-RoManager* RoManager::Instance()
-{
- if (NULL == msInstance)
- {
- msInstance = new RoManager();
- }
-
- return msInstance;
-}
-
-/** see RoManager.h */
-RoManager::RoManager()
-{
-//load the ro list from local system.
-}
-
-/** see RoManager.h */
-RoManager::~RoManager()
-{
- msInstance = NULL;
-
- for (vector<Ro*>::iterator it = mRoList.begin();
- it != mRoList.end(); it++)
- {
- delete (*it);
- }
-
- mRoList.clear();
-}
-
-/** see RoManager.h */
-Ro::ERRCODE RoManager::installRo(istringstream *roStream)
-{
- Ro *ro = new Ro();
-
- Ro::ERRCODE ret = ro->parse(roStream);
-
- if (Ro::RO_OK == ret)
- {
- ro->save();
-
- mRoList.push_back(ro);
- }
-
- return ret;
-}
-
-/** see RoManager.h */
-Ro* RoManager::getRoByContentID(const string& contentID)
-{
- for (vector<Ro*>::iterator it = mRoList.begin();
- it != mRoList.end(); it++)
- {
- for (vector<Asset*>::iterator ita = (*it)->mAssetList.begin();
- ita != (*it)->mAssetList.end(); ita++)
- {
- if (contentID.compare((*ita)->getContentID()) == 0)
- {
- return *it;
- }
- }
- }
-
- return NULL;
-}
-
-/** see RoManager.h */
-Ro* RoManager::getRo(const string& roID)
-{
- for (vector<Ro*>::iterator it = mRoList.begin();
- it != mRoList.end(); it++)
- {
- if (roID.compare((*it)->getRoID()) == 0)
- {
- return (*it);
- }
- }
-
- return NULL;
-}
-
-/** see RoManager.h */
-vector<Ro*> RoManager::getAllRo()
-{
- return mRoList;
-}
-
-/** see RoManager.h */
-bool RoManager::deleteRo(const string& roID)
-{
- return true;
-}
-
-/** see RoManager.h */
-bool RoManager::checkRoInCache(const string& roID)
-{
- return true;
-}
-
-/** see RoManager.h */
-const string& RoManager::getDevicePrivateKey() const
-{
- string pk;
- return pk;
-}
diff --git a/media/libdrm/mobile2/src/roap/Registration.cpp b/media/libdrm/mobile2/src/roap/Registration.cpp
deleted file mode 100644
index 9d6f459..0000000
--- a/media/libdrm/mobile2/src/roap/Registration.cpp
+++ /dev/null
@@ -1 +0,0 @@
-/**/
diff --git a/media/libdrm/mobile2/src/roap/RoapMessageHandler.cpp b/media/libdrm/mobile2/src/roap/RoapMessageHandler.cpp
deleted file mode 100644
index 9d190ee..0000000
--- a/media/libdrm/mobile2/src/roap/RoapMessageHandler.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <roap/RoapMessageHandler.h>
-#include <util/xml/DomExpatAgent.h>
-#include <util/xml/XMLDocumentImpl.h>
-#include <util/domcore/NodeListImpl.h>
-#include <util/domcore/DOMString.h>
-#include <ofstream.h>
-using namespace ustl;
-
-/**see RoapMessageHandler.h */
-RoapMessageHandler::RoapMessageHandler()
-{
- mDoc = NULL;
-}
-
-/**see RoapMessageHandler.h */
-XMLDocumentImpl* RoapMessageHandler::createClientMsg(RoapMessageHandler::msgType type)
-{
- /* load template from files temporarily, FIX ME later */
- string msgTemplate;
- switch (type)
- {
- case RoapMessageHandler::DeviceHello:
- msgTemplate.append("deviceHello.xml");
- break;
- case RoapMessageHandler::RegistrationRequest:
- msgTemplate.append("deviceHello.xml");
- break;
- case RoapMessageHandler::RORequest:
- msgTemplate.append("deviceHello.xml");
- break;
- default:
- return NULL;
- }
- ifstream xmlStream(msgTemplate.c_str());
- XMLDocumentImpl* xmlDoc = new XMLDocumentImpl();
- DomExpatAgent domExpatAgent1(xmlDoc);
- if (domExpatAgent1.generateDocumentFromXML(&xmlStream))
- {
- return xmlDoc;
- }
- else
- {
- delete(xmlDoc);
- return NULL;
- }
-}
-
diff --git a/media/libdrm/mobile2/src/util/crypto/DrmCrypto.cpp b/media/libdrm/mobile2/src/util/crypto/DrmCrypto.cpp
deleted file mode 100644
index fbbefb8..0000000
--- a/media/libdrm/mobile2/src/util/crypto/DrmCrypto.cpp
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <util/crypto/DrmCrypto.h>
-#include <ustring.h>
-
-using namespace ustl;
-
-void AesAgent::discardPaddingByte( unsigned char* decryptedBuf,unsigned long* decryptedBufLen)
-{
- if(!decryptedBuf)
- {
- return;
- }
-
- int i;
- unsigned long tmpLen = *decryptedBufLen;
-
- // Check whether the last several bytes are padding or not
- for ( i = 1; i < decryptedBuf[tmpLen - 1]; i++)
- {
- if (decryptedBuf[tmpLen - 1 - i] != decryptedBuf[tmpLen - 1])
- break;
- }
-
- // They are padding bytes
- if (i == decryptedBuf[tmpLen - 1])
- {
- *decryptedBufLen = tmpLen - i;
- }
-
- return;
-}
-
-int32_t AesAgent::decContent( unsigned char* iv,
- const unsigned char* encData,
- unsigned long encLen,
- unsigned char* decData)
-{
- if(AES_128_CBC == mode)
- {
- AES_KEY key;
- AES_set_decrypt_key(AesKey,AES_KEY_BITS,&key);
-
- uint8_t *tmpBuf = new uint8_t[encLen];
-
- AES_cbc_encrypt( encData,
- tmpBuf,
- encLen,
- &key,
- iv,
- AES_DECRYPT);
-
- unsigned long tempLen = encLen;
- discardPaddingByte(tmpBuf,&tempLen);
-
- memcpy(decData, tmpBuf, tempLen);
-
- delete []tmpBuf;
- return encLen - tempLen;
- }
- else
- {
- return AES_DEC_FAILED;
- }
-}
-
-void Sha1Agent::computeHash( const unsigned char* inData,
- unsigned long inLen,
- unsigned char* outHash) const
-{
- EVP_Digest(inData,inLen,outHash,NULL,EVP_sha1(),NULL);
- return;
-}
-
-void HmacSha1Agent::computeMac( const unsigned char* inData,
- unsigned long inLen,
- unsigned char* outData) const
-{
- HMAC(EVP_sha1(),macKey,keyLen,inData,inLen,outData,NULL);
- return;
-}
-
-bool RsaAgent::signature( const unsigned char* rawData,
- unsigned long rawLen,
- unsigned char* sigData,
- RsaAlg sigAlg)
-{
- switch(sigAlg)
- {
- case RSA_PSS:
- {
- unsigned char mHash[SHA_DIGEST_LENGTH];
- Sha1Agent sha1;
- sha1.computeHash(rawData,rawLen,mHash);
-
- unsigned char EM[rsaSize];
- if( 0 == RSA_padding_add_PKCS1_PSS( &rsaKey,
- EM,
- mHash,
- EVP_sha1(),
- SHA_DIGEST_LENGTH))
- {
- return false;
- }
-
- if(0 > RSA_private_encrypt( SHA_DIGEST_LENGTH,
- EM,
- sigData,
- &rsaKey,
- RSA_PKCS1_PADDING))
- {
- return false;
- }
- else
- {
- return true;
- }
- }
- break;
- case RSA_SHA1:
- {
- unsigned char mHash[SHA_DIGEST_LENGTH];
- Sha1Agent sha1;
- sha1.computeHash(rawData,rawLen,mHash);
-
- if(0 != RSA_sign( NID_sha1WithRSA,
- mHash,
- SHA_DIGEST_LENGTH,
- sigData,
- &rsaSize,
- &rsaKey))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- break;
- default:
- return false;
- }
-
- return false;
-}
-
-bool RsaAgent::sigVerify( unsigned char* sigData,
- unsigned long sigLen,
- const unsigned char* rawData,
- unsigned long rawLen,
- RsaAlg sigAlg)
-{
- if( sigAlg == RSA_PSS)
- {
- unsigned char decSigData[rsaSize];
-
- if(0 > RSA_public_decrypt(sigLen,
- sigData,
- decSigData,
- &rsaKey,
- RSA_PKCS1_PADDING))
- {
- return false;
- }
- else
- {
- unsigned char mHash[SHA_DIGEST_LENGTH];
- Sha1Agent sha1;
- sha1.computeHash(rawData,rawLen,mHash);
-
- if( 0 == RSA_verify_PKCS1_PSS( &rsaKey,
- mHash,
- EVP_sha1(),
- decSigData,
- -1))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- else if(sigAlg == RSA_SHA1)
- {
- unsigned char mHash[SHA_DIGEST_LENGTH];
- Sha1Agent sha1;
- sha1.computeHash(rawData,rawLen,mHash);
-
- if(0 != RSA_verify( NID_sha1WithRSA,
- mHash,
- SHA_DIGEST_LENGTH,
- sigData,
- sigLen,
- &rsaKey))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return false;
- }
-}
-
-int RsaAgent::decrypt( const unsigned char* encData,
- unsigned long encLen,
- unsigned char* decData)
-{
- return RSA_private_decrypt( encLen,
- encData,
- decData,
- &rsaKey,
- RSA_PKCS1_PADDING);
-}
diff --git a/media/libdrm/mobile2/src/util/domcore/CharacterDataImpl.cpp b/media/libdrm/mobile2/src/util/domcore/CharacterDataImpl.cpp
deleted file mode 100644
index 0fe699a..0000000
--- a/media/libdrm/mobile2/src/util/domcore/CharacterDataImpl.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <util/domcore/CharacterDataImpl.h>
-
-/** see CharacterDataImpl.h */
-const DOMString* CharacterDataImpl::getData() const throw (DOMException)
-{
- return charData;
-}
-
-/** see CharacterDataImpl.h */
-CharacterDataImpl::CharacterDataImpl():charData(NULL)
-{
-}
-
-/** see CharacterDataImpl.h*/
-CharacterDataImpl::CharacterDataImpl(const DOMString* data):charData(NULL)
-{
- if (data != NULL)
- charData = new DOMString(*data);
-}
-
-/** see CharacterDataImpl.h */
-void CharacterDataImpl::setData(const DOMString* data) throw (DOMException)
-{
-
- if (charData != NULL)
- delete charData;
-
- if (data == NULL)
- charData = NULL;
- else
- charData = new DOMString(*data);
-}
-
-/** see CharacterDataImpl.h */
-int CharacterDataImpl::getLength() const
-{
- return charData != NULL ? charData->length() : 0;
-}
-
-/** see CharacterDataImpl.h */
-void CharacterDataImpl::appendData(const DOMString* arg) throw(DOMException)
-{
- if (arg != NULL) {
- if (charData != NULL)
- charData->append(*arg);
- else
- charData = new DOMString(*arg);
- }
-}
-
-/** see CharacterDataImpl.h */
-const DOMString* CharacterDataImpl::getNodeValue() const throw(DOMException)
-{
- return getData();
-}
-
-/** see CharacterDataImpl.h */
-void CharacterDataImpl::setNodeValue(DOMString* nodeValue) throw(DOMException)
-{
- setData(nodeValue);
-}
-
-/** see CharacterDataImpl.h */
-CharacterDataImpl::~CharacterDataImpl()
-{
- delete charData;
-}
-
diff --git a/media/libdrm/mobile2/src/util/domcore/DOMException.cpp b/media/libdrm/mobile2/src/util/domcore/DOMException.cpp
deleted file mode 100644
index da9d3ce..0000000
--- a/media/libdrm/mobile2/src/util/domcore/DOMException.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
diff --git a/media/libdrm/mobile2/src/util/domcore/DocumentImpl.cpp b/media/libdrm/mobile2/src/util/domcore/DocumentImpl.cpp
deleted file mode 100644
index ebf46fb..0000000
--- a/media/libdrm/mobile2/src/util/domcore/DocumentImpl.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <util/domcore/DocumentImpl.h>
-
-const DOMString DocumentImpl::nodeName = "#DOCUMENT";
-
-/** see DocumentImpl.h */
-DocumentImpl::DocumentImpl()
-{
-
-}
-
-/** see DocumentImpl.h */
-ElementImpl* DocumentImpl::getDocumentElement() const
-{
- return NULL;
-}
-
-/** see DocumentImpl.h */
-ElementImpl* DocumentImpl::createElement(const DOMString* tagName) const throw (DOMException)
-{
- return NULL;
-}
-
-/** see DocumentImpl.h */
-TextImpl* DocumentImpl::createTextNode(const DOMString* data) const
-{
- TextImpl* text = new TextImpl(data);
-
- if (text != NULL)
- text->setDocument(this);
-
- return text;
-}
-
-/** see DocumentImpl.h */
-NodeListImpl* DocumentImpl::getElementsByTagName(const DOMString* tagname) const
-{
- ElementImpl* element = getDocumentElement();
- NodeListImpl* list = NULL;
-
- if (element != NULL)
- list = element->getElementsByTagName(tagname);
-
- return list;
-}
-
-/** see DocumentImpl.h */
-const DOMString* DocumentImpl::getNodeName() const
-{
- return &nodeName;
-}
-
-/** see DocumentImpl.h */
-NodeType DocumentImpl::getNodeType() const
-{
- return DOCUMENT_NODE;
-}
-
-/** see DocumentImpl.h */
-DocumentImpl::~DocumentImpl()
-{
-
-}
-
diff --git a/media/libdrm/mobile2/src/util/domcore/ElementImpl.cpp b/media/libdrm/mobile2/src/util/domcore/ElementImpl.cpp
deleted file mode 100644
index df48831..0000000
--- a/media/libdrm/mobile2/src/util/domcore/ElementImpl.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <util/domcore/ElementImpl.h>
-
-/** see ElementImpl.h */
-NodeType ElementImpl::getNodeType() const
-{
- return ELEMENT_NODE;
-}
-
-/** see ElementImpl.h */
-const DOMString* ElementImpl::getNodeName() const
-{
- return getTagName();
-}
-
-/** see ElementImpl.h */
-const DOMString* ElementImpl::getTagName() const
-{
- return NULL;
-}
-
-/** see ElementImpl.h */
-void ElementImpl::setAttribute(const DOMString* name, const DOMString* value) throw (DOMException)
-{
-
-}
-
-/** see ElementImpl.h */
-void ElementImpl::removeAttribute(const DOMString* name) throw (DOMException)
-{
-
-}
-
-/** see ElementImpl.h */
-const DOMString* ElementImpl::getAttribute(const DOMString* name) const
-{
- return NULL;
-}
-
-/** see ElementImpl.h */
-void ElementImpl::getElementsByTagName(const DOMString* name, NodeListImpl* nodeList) const
-{
- NodeImpl* node = getFirstChild();
-
- if (node == NULL || name == NULL || nodeList == NULL)
- return;
-
- do {
-
- if (node->getNodeType() == ELEMENT_NODE) {
- ElementImpl* elementNode = static_cast<ElementImpl*>(node);
- if (*elementNode->getTagName() == *name)
- /* if current is element node and tag name is equal to <code>name</code>,put it into nodeList */
- nodeList->append(node);
- /*
- * visit DOM tree recursively,
- * get all Elements node whose tage name is equal to name.
- */
- elementNode->getElementsByTagName(name, nodeList);
- }
-
- /* set current node's next sibling node as current node.*/
- node = node->getNextSibling();
- } while(node != NULL);
-}
-
-/** see ElementImpl.h */
-NodeListImpl* ElementImpl::getElementsByTagName(const DOMString* name) const
-{
- NodeListImpl* nodeList = new NodeListImpl();
-
- if (nodeList == NULL || name == NULL)
- return NULL;
-
- getElementsByTagName(name,nodeList);
-
- return nodeList;
-}
-
-/** see ElementImpl.h */
-bool ElementImpl::hasAttributes() const
-{
- return false;
-}
diff --git a/media/libdrm/mobile2/src/util/domcore/NodeImpl.cpp b/media/libdrm/mobile2/src/util/domcore/NodeImpl.cpp
deleted file mode 100644
index 183c55e..0000000
--- a/media/libdrm/mobile2/src/util/domcore/NodeImpl.cpp
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <util/domcore/NodeImpl.h>
-#include <util/domcore/DocumentImpl.h>
-
-/** see NodeImpl.h. */
-void NodeImpl::setParent(NodeImpl* parentNode)
-{
- this->parent = parentNode;
-}
-
-/** see NodeImpl.h. */
-void NodeImpl::setNextSibling(NodeImpl* siblingNode)
-{
- this->nextSibling = siblingNode;
-}
-/** see NodeImpl.h. */
-void NodeImpl::setPreviousSibling(NodeImpl* siblingNode)
-{
- this->previousSibling = siblingNode;
-}
-
-/** see NodeImpl.h. */
-void NodeImpl::setFirstChild(NodeImpl* childNode)
-{
- this->firstChild = childNode;
-}
-
-/** see NodeImpl.h. */
-void NodeImpl::setLastChild(NodeImpl* childNode)
-{
- this->lastChild = childNode;
-}
-
-/** see NodeImpl.h. */
-NodeImpl* NodeImpl::getParentNode() const
-{
- return parent;
-}
-
-/** see NodeImpl.h. */
-NodeImpl* NodeImpl::getFirstChild() const
-{
- return firstChild;
-}
-
-/** see NodeImpl.h. */
-NodeImpl* NodeImpl::getLastChild() const
-{
- return lastChild;
-}
-
-/** see NodeImpl.h. */
-NodeImpl* NodeImpl::getPreviousSibling() const
-{
- return previousSibling;
-}
-
-/** see NodeImpl.h. */
-NodeImpl* NodeImpl::getNextSibling() const
-{
- return nextSibling;
-}
-
-/** see NodeImpl.h. */
-NodeImpl* NodeImpl::insertBefore(NodeImpl* newChild, NodeImpl* refChild) throw (DOMException)
-{
- if (newChild == NULL)
- #if PLATFORM_ANDROID
- return NULL;
- #else
- throw DOMException(DOMException::WRONG_DOCUMENT_ERR);
- #endif
- if (refChild == NULL || refChild->getParentNode() != this)
- #if PLATFORM_ANDROID
- return NULL;
- #else
- throw DOMException(DOMException::NOT_FOUND_ERR);
- #endif
-
- NodeImpl* parentNode = newChild->getParentNode();
-
- if (parentNode != NULL)
- parentNode->removeChild(newChild);
-
- NodeImpl* prevSiblingNode = refChild->getPreviousSibling();
-
- if (prevSiblingNode != NULL)
- prevSiblingNode->appendNextSibling(newChild);
- else
- setFirstChild(newChild);
-
- newChild->appendNextSibling(refChild);
- newChild->setParent(this);
-
- return newChild;
-}
-
-/** see NodeImpl.h. */
-NodeImpl* NodeImpl::removeChild(NodeImpl* oldChild) throw (DOMException)
-{
-
- if (oldChild == NULL || oldChild->getParentNode() != this )
- #if PLATFORM_ANDROID
- return NULL;
- #else
- throw DOMException(DOMException::NOT_FOUND_ERR);
- #endif
-
- NodeImpl* parentNode = oldChild->getParentNode();
- NodeImpl* nextSiblingNode = oldChild->getNextSibling();
- NodeImpl* prevSiblingNode = oldChild->getPreviousSibling();
-
- if (prevSiblingNode == NULL && nextSiblingNode != NULL) {
- /*
- * children's previous sibling node == NULL and next sibling node !=
- * NULL, means the children node is the first node of its parent.
- * so set the children's next sibling node as the first node of its parent.
- */
- parentNode->setFirstChild(nextSiblingNode);
- nextSiblingNode->setPreviousSibling(NULL);
-
- } else if (prevSiblingNode != NULL && nextSiblingNode == NULL) {
- /*
- * children's previous sibling node != NULL and next sibling node ==
- * NULL, means the child node is the last node of parent.so set the
- * last node of children's parent as children's previous sibling node.
- */
- prevSiblingNode->setNextSibling(NULL);
- parentNode->setLastChild(prevSiblingNode);
-
- } else if (prevSiblingNode != NULL && nextSiblingNode != NULL) {
- /*
- * children's previous sibling node != NULL and next sibling node !=
- * NULL,means the node is neither first child nor last children of its parent.
- */
- prevSiblingNode->appendNextSibling(nextSiblingNode);
-
- } else if (prevSiblingNode == NULL && nextSiblingNode == NULL) {
- /*
- * this means it's only one children node of its parent.
- * so adjust the first child and last child to NULL when remove the children node.
- */
- this->setFirstChild(NULL);
- this->setLastChild(NULL);
- }
-
- oldChild->setParent(NULL);
- oldChild->setNextSibling(NULL);
- oldChild->setPreviousSibling(NULL);
-
- return oldChild;
-}
-
-/** see NodeImpl.h. */
-void NodeImpl::appendNextSibling(NodeImpl* node)
-{
- if (node == NULL)
- return;
-
- setNextSibling(node);
- node->setPreviousSibling(this);
-}
-
-/** see NodeImpl.h. */
-NodeImpl* NodeImpl::appendChild(NodeImpl* newChild) throw (DOMException)
-{
- if (newChild == NULL)
- #if PLATFORM_ANDROID
- return NULL;
- #else
- throw DOMException(DOMException::WRONG_DOCUMENT_ERR);
- #endif
- /* If newChild have parent,remove it from its parent at first.*/
- NodeImpl* parent = newChild->getParentNode();
- if (parent != NULL)
- parent->removeChild(newChild);
-
- if (getFirstChild() == NULL && getLastChild() == NULL) {
- /* There are not any nodes in current node.*/
- setFirstChild(newChild);
- } else if (getLastChild() != NULL) {
- getLastChild()->appendNextSibling(newChild);
- }
-
- newChild->setParent(this);
- setLastChild(newChild);
-
-
- return newChild;
-}
-
-/** see NodeImpl.h. */
-bool NodeImpl::hasChildNodes() const
-{
- return getFirstChild() != NULL;
-}
-
-/** see NodeImpl.h. */
-const DOMString* NodeImpl::getNodeValue() const throw (DOMException)
-{
- return NULL;
-}
-
-/** see NodeImpl.h. */
-void NodeImpl::setNodeValue(DOMString* nodeValue) throw (DOMException)
-{
-}
-
-/** see NodeImpl.h. */
-bool NodeImpl::hasAttributes() const
-{
- return false;
-}
-
-/** see NodeImpl.h */
-const DocumentImpl* NodeImpl::getDocument() const
-{
- return document;
-}
-
-/** see NodeImpl.h */
-void NodeImpl::setDocument(const DocumentImpl* document)
-{
- this->document = document;
-}
diff --git a/media/libdrm/mobile2/src/util/domcore/NodeIterator.cpp b/media/libdrm/mobile2/src/util/domcore/NodeIterator.cpp
deleted file mode 100644
index f076cda..0000000
--- a/media/libdrm/mobile2/src/util/domcore/NodeIterator.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <util/domcore/NodeImpl.h>
-#include <util/domcore/NodeIterator.h>
-
-/** see NodeIterator.h */
-NodeIterator::NodeIterator(NodeImpl* start,NodeImpl* scope,NodeImpl* end): scopeNode(scope),endNode(end),curNode(start)
-{
-}
-
-/** see NodeIterator.h */
-NodeImpl* NodeIterator::findNextOrderNode(NodeImpl* node)
-{
- if (node == endNode)
- return NULL;
-
- if (node != NULL) {
- if (node->hasChildNodes() == true) {
- node = node->getFirstChild();
- }else if (node == scopeNode && node->hasChildNodes() == false) {
- node = NULL;
- } else if (node->getNextSibling() != NULL) {
- node = node->getNextSibling();
- } else {
- while (node != scopeNode && node != NULL && node->getNextSibling() == NULL) {
- node = node->getParentNode();
- }
- if (node == scopeNode)
- node = NULL;
- if (node != NULL)
- node = node->getNextSibling();
- }
- }
- if (node == endNode || node == scopeNode)
- node = NULL;
-
- return node;
-}
-
-/** see NodeIterator.h */
-NodeImpl* NodeIterator::next()
-{
- NodeImpl* node = NULL;
-
- node = findNextOrderNode(curNode);
-
- if (node != NULL)
- curNode = node;
-
- return node;
-}
-
-/** see NodeIterator.h */
-NodeImpl* NodeIterator::prev()
-{
- NodeImpl* node;
-
- node = findPreviousOrderNode(curNode);
-
- if (node != NULL)
- curNode = node;
-
- return node;
-}
-
-/** see NodeIterator.h */
-NodeImpl* NodeIterator::findPreviousOrderNode(NodeImpl* node)
-{
- if (node == NULL || node == endNode)
- return NULL;
-
- if (node->getPreviousSibling() != NULL) {
- node = node->getPreviousSibling();
- while(node != NULL && node->hasChildNodes() == true)
- node = node->getLastChild();
- } else {
- if (node == scopeNode)
- node == NULL;
- else
- node = node->getParentNode();
- }
-
- if (node == scopeNode || node == endNode)
- return NULL;
-
- return node;
-}
-
diff --git a/media/libdrm/mobile2/src/util/domcore/NodeListImpl.cpp b/media/libdrm/mobile2/src/util/domcore/NodeListImpl.cpp
deleted file mode 100644
index 710d62d..0000000
--- a/media/libdrm/mobile2/src/util/domcore/NodeListImpl.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <util/domcore/NodeListImpl.h>
-
-/** see NodeListImpl.h*/
-void NodeListImpl::append(const NodeImpl* newNode)
-{
- if (newNode == NULL)
- return;
-
- nodeList.push_back(newNode);
-}
-
-/** see NodeListImpl.h*/
-const NodeImpl* NodeListImpl::item(int index) const
-{
- int size = nodeList.size();
-
- if (size == 0 || index > size - 1 || index < 0)
- return NULL;
-
- return nodeList.at(index);
-}
-
-/** see NodeListImpl.h*/
-int NodeListImpl::getLength() const
-{
- return nodeList.size();
-}
-
-/** see NodeListImpl.h*/
-NodeListImpl::~NodeListImpl()
-{
- nodeList.clear();
-}
diff --git a/media/libdrm/mobile2/src/util/domcore/TextImpl.cpp b/media/libdrm/mobile2/src/util/domcore/TextImpl.cpp
deleted file mode 100644
index 5e421d5..0000000
--- a/media/libdrm/mobile2/src/util/domcore/TextImpl.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <util/domcore/TextImpl.h>
-
-const DOMString TextImpl::nodeName = "#TEXT";
-
-/** see TextImpl.h */
-TextImpl::TextImpl()
-{
-}
-
-/** see TextImpl.h */
-TextImpl::TextImpl(const DOMString* data):CharacterDataImpl(data)
-{
-}
-
-/** see TextImpl.h */
-NodeType TextImpl::getNodeType() const
-{
- return TEXT_NODE;
-}
-
-/** see TextImpl.h */
-const DOMString* TextImpl::getNodeName() const
-{
- return &nodeName;
-}
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/bktrace.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/bktrace.cpp
deleted file mode 100644
index ae66463..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/bktrace.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2006 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// bktrace.cc
-//
-
-#include "bktrace.h"
-#include "sostream.h"
-#include "mistream.h"
-#include "uassert.h"
-#if linux && __GNUC__ && !defined(HAVE_ANDROID_OS)
- #include <execinfo.h>
-#else
- static inline int backtrace (void**, int) { return (0); }
- static inline char** backtrace_symbols (void* const*, int) { return (NULL); }
-#endif
-#if __GNUC__ >= 3 && !PLATFORM_ANDROID
- #include <cxxabi.h>
-#endif
-
-namespace ustl {
-
-/// Default constructor. The backtrace is obtained here.
-CBacktrace::CBacktrace (void)
-: m_Symbols (NULL),
- m_nFrames (0),
- m_SymbolsSize (0)
-{
-#if !PLATFORM_ANDROID
- try {
-#endif
- m_nFrames = backtrace (VectorBlock (m_Addresses));
- GetSymbols();
-#if !PLATFORM_ANDROID
- } catch (...) {}
-#endif
-}
-
-/// Copy constructor.
-CBacktrace::CBacktrace (const CBacktrace& v)
-: m_Symbols (NULL),
- m_nFrames (0),
- m_SymbolsSize (0)
-{
- operator= (v);
-}
-
-/// Copy operator.
-const CBacktrace& CBacktrace::operator= (const CBacktrace& v)
-{
- memcpy (m_Addresses, v.m_Addresses, sizeof(m_Addresses));
- m_Symbols = strdup (v.m_Symbols);
- m_nFrames = v.m_nFrames;
- m_SymbolsSize = v.m_SymbolsSize;
- return (*this);
-}
-
-/// Converts a string returned by backtrace_symbols into readable form.
-static size_t ExtractAbiName (const char* isym, char* nmbuf)
-{
- // Prepare the demangled name, if possible
- size_t nmSize = 0;
- if (isym) {
- // Copy out the name; the strings are: "file(function+0x42) [0xAddress]"
- const char* mnStart = strchr (isym, '(');
- if (++mnStart == (const char*)(1))
- mnStart = isym;
- const char* mnEnd = strchr (isym, '+');
- const char* isymEnd = isym + strlen (isym);
- if (!mnEnd)
- mnEnd = isymEnd;
- nmSize = min (size_t (distance (mnStart, mnEnd)), 256U);
- memcpy (nmbuf, mnStart, nmSize);
- }
- nmbuf[nmSize] = 0;
- // Demangle
- demangle_type_name (nmbuf, 256U, &nmSize);
- return (nmSize);
-}
-
-/// Tries to get symbol information for the addresses.
-void CBacktrace::GetSymbols (void)
-{
- auto_ptr<char*> symbols (backtrace_symbols (m_Addresses, m_nFrames));
- if (!symbols.get())
- return;
- char nmbuf [256];
- size_t symSize = 1;
- for (uoff_t i = 0; i < m_nFrames; ++ i)
- symSize += ExtractAbiName (symbols.get()[i], nmbuf) + 1;
- if (!(m_Symbols = (char*) calloc (symSize, 1)))
- return;
- for (uoff_t i = 0; m_SymbolsSize < symSize - 1; ++ i) {
- size_t sz = ExtractAbiName (symbols.get()[i], nmbuf);
- memcpy (m_Symbols + m_SymbolsSize, nmbuf, sz);
- m_SymbolsSize += sz + 1;
- m_Symbols [m_SymbolsSize - 1] = '\n';
- }
-}
-
-/// Default destructor.
-CBacktrace::~CBacktrace (void)
-{
- free_nullok (m_Symbols);
-}
-
-#if SIZE_OF_LONG == 8
- #define ADDRESS_FMT "%16p "
-#else
- #define ADDRESS_FMT "%8p "
-#endif
-
-/// Prints the backtrace to \p os.
-void CBacktrace::text_write (ostringstream& os) const
-{
- const char *ss = m_Symbols, *se;
- for (uoff_t i = 0; i < m_nFrames; ++ i) {
- os.format (ADDRESS_FMT, m_Addresses[i]);
- se = strchr (ss, '\n') + 1;
- os.write (ss, distance (ss, se));
- ss = se;
- }
-}
-
-/// Reads the object from stream \p is.
-void CBacktrace::read (istream& is)
-{
- assert (is.aligned (alignof (m_Addresses[0])) && "Backtrace object contains pointers and must be void* aligned");
- is >> m_nFrames >> m_SymbolsSize;
- free_nullok (m_Symbols);
- m_Symbols = (char*) malloc (m_SymbolsSize + 1);
- is.read (m_Symbols, m_SymbolsSize);
- m_Symbols [m_SymbolsSize] = 0;
- is.align();
- is.read (m_Addresses, m_nFrames * sizeof(void*));
-}
-
-/// Writes the object to stream \p os.
-void CBacktrace::write (ostream& os) const
-{
- assert (os.aligned (alignof (m_Addresses[0])) && "Backtrace object contains pointers and must be void* aligned");
- os << m_nFrames << m_SymbolsSize;
- os.write (m_Symbols, m_SymbolsSize);
- os.align();
- os.write (m_Addresses, m_nFrames * sizeof(void*));
-}
-
-/// Returns the size of the written object.
-size_t CBacktrace::stream_size (void) const
-{
- return (Align (stream_size_of (m_nFrames) +
- stream_size_of (m_SymbolsSize) +
- m_nFrames * sizeof(void*) +
- m_SymbolsSize));
-}
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/bktrace.h b/media/libdrm/mobile2/src/util/ustl-1.0/bktrace.h
deleted file mode 100644
index 7b8c0ea..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/bktrace.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2006 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// bktrace.h
-//
-
-#ifndef BKTRACE_H_63ABB1E4388CEDD975DBE58B57DE474F
-#define BKTRACE_H_63ABB1E4388CEDD975DBE58B57DE474F
-
-#include "ulimits.h"
-
-namespace ustl {
-
-class ostringstream;
-class istream;
-class ostream;
-
-/// \class CBacktrace bktrace.h ustl.h
-///
-/// \brief Stores the backtrace from the point of construction.
-///
-/// The backtrace, or callstack, is the listing of functions called to
-/// reach the construction of this object. This is useful for debugging,
-/// to print the location of an error. To get meaningful output you'll
-/// need to use a debug build with symbols and with frame pointers. For
-/// GNU ld you will also need to link with the -rdynamic option to see
-/// actual function names instead of __gxx_personality0+0xF4800.
-///
-class CBacktrace {
-public:
- CBacktrace (void);
- CBacktrace (const CBacktrace& v);
- ~CBacktrace (void);
- const CBacktrace& operator= (const CBacktrace& v);
- void text_write (ostringstream& os) const;
- void read (istream& is);
- void write (ostream& os) const;
- size_t stream_size (void) const;
-private:
- void GetSymbols (void);
-private:
- void* m_Addresses [64]; ///< Addresses of each function on the stack.
- char* m_Symbols; ///< Symbols corresponding to each address.
- uint32_t m_nFrames; ///< Number of addresses in m_Addresses.
- uint32_t m_SymbolsSize; ///< Size of m_Symbols.
-};
-
-} // namespace ustl
-
-ALIGNOF(ustl::CBacktrace, sizeof(void*))
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/bsconf.h b/media/libdrm/mobile2/src/util/ustl-1.0/bsconf.h
deleted file mode 100644
index 79b4af1..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/bsconf.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/* This file is part of bsconf - a configure replacement.
- *
- * This is the configuration file used by bsconf.c to specify information
- * specific to your project that it needs to substitute into files listed
- * in g_Files. Being a configuration file, this file can be used or
- * modified entirely without restriction. You should change all values
- * appropriately to the name of your project and its requirements. The
- * bsconf license does not apply to this file. It can and should be
- * treated as a template for the creation of your own configuration file.
- *
- * All substituted variable names are given without enclosing @@. For
- * example: "CC" will match "@CC@" in config.h.in and replace it with
- * "gcc" in config.h.
-*/
-
-#include "uassert.h"
-
-#define BSCONF_VERSION 0x03
-
-#define PACKAGE_NAME "ustl"
-#define LIB_MAJOR "1"
-#define LIB_MINOR "0"
-#define LIB_BUILD "0"
-
-#define PACKAGE_VERSION LIB_MAJOR "." LIB_MINOR
-#define PACKAGE_TARNAME PACKAGE_NAME
-#define PACKAGE_STRING PACKAGE_NAME " " PACKAGE_VERSION
-#define PACKAGE_BUGREPORT "Mike Sharov <msharov@users.sourceforge.net>"
-
-static cpchar_t g_Files [] = {
- "Config.mk",
- "config.h",
- "ustl.spec"
-};
-
-/* Values substitute @VARNAME@ */
-static cpchar_t g_EnvVars [] = {
- "CC",
- "LD",
- "CXX",
- "CPP",
- "HOME",
- "CXXFLAGS",
- "LDFLAGS",
- "CPPFLAGS",
- "LDFLAGS",
- "CFLAGS"
-};
-
-/* VARIABLE PROGRAM HOW TO CALL IF NOT FOUND */
-static cpchar_t g_ProgVars [] = {
- "CC", "gcc", "gcc", "@CC@",
- "CC", "cc", "cc", "gcc",
- "CXX", "g++", "g++", "@CXX@",
- "CXX", "c++", "c++", "g++",
- "LD", "ld", "ld", "ld",
- "AR", "ar", "ar", "echo",
- "RANLIB", "ranlib", "ranlib", "touch",
- "DOXYGEN", "doxygen", "doxygen", "echo",
- "INSTALL", "install", "install -c", "cp"
-};
-
-/* NAME IF NOT FOUND IF FOUND */
-static cpchar_t g_Headers [] = {
- "assert.h", "#undef HAVE_ASSERT_H", "#define HAVE_ASSERT_H 1",
- "ctype.h", "#undef HAVE_CTYPE_H", "#define HAVE_CTYPE_H 1",
- "errno.h", "#undef HAVE_ERRNO_H", "#define HAVE_ERRNO_H 1",
- "fcntl.h", "#undef HAVE_FCNTL_H", "#define HAVE_FCNTL_H 1",
- "float.h", "#undef HAVE_FLOAT_H", "#define HAVE_FLOAT_H 1",
- "inttypes.h", "#undef HAVE_INTTYPES_H", "#define HAVE_INTTYPES_H 1",
- "limits.h", "#undef HAVE_LIMITS_H", "#define HAVE_LIMITS_H 1",
- "locale.h", "#undef HAVE_LOCALE_H", "#define HAVE_LOCALE_H 1",
- "malloc.h", "#undef HAVE_MALLOC_H", "#define HAVE_MALLOC_H 1",
- "alloca.h", "#undef HAVE_ALLOCA_H", "#define HAVE_ALLOCA_H 1",
- "memory.h", "#undef HAVE_MEMORY_H", "#define HAVE_MEMORY_H 1",
- "signal.h", "#undef HAVE_SIGNAL_H", "#define HAVE_SIGNAL_H 1",
- "stdarg.h", "#undef HAVE_STDARG_H", "#define HAVE_STDARG_H 1",
- "stddef.h", "#undef HAVE_STDDEF_H", "#define HAVE_STDDEF_H 1",
- "stdint.h", "#undef HAVE_STDINT_H", "#define HAVE_STDINT_H 1",
- "stdio.h", "#undef HAVE_STDIO_H", "#define HAVE_STDIO_H 1",
- "stdlib.h", "#undef HAVE_STDLIB_H", "#define HAVE_STDLIB_H 1",
- "string.h", "#undef HAVE_STRING_H", "#define HAVE_STRING_H 1",
- "strings.h", "#undef HAVE_STRINGS_H", "#define HAVE_STRINGS_H 1",
- "sys/stat.h", "#undef HAVE_SYS_STAT_H", "#define HAVE_SYS_STAT_H 1",
- "sys/types.h", "#undef HAVE_SYS_TYPES_H", "#define HAVE_SYS_TYPES_H 1",
- "sys/wait.h", "#undef HAVE_SYS_WAIT_H", "#define HAVE_SYS_WAIT_H 1",
- "time.h", "#undef HAVE_TIME_H", "#define HAVE_TIME_H 1",
- "unistd.h", "#undef HAVE_UNISTD_H", "#define HAVE_UNISTD_H 1",
- "math.h", "#undef HAVE_MATH_H", "#define HAVE_MATH_H 1",
- "stdlib.h", "#undef HAVE_STDLIB_H", "#define HAVE_STDLIB_H 1"
-};
-
-/* NAME IF NOT FOUND IF FOUND */
-static cpchar_t g_Libs [] = {
- "supc++", "", "-lsupc++",
-#if __GNUC__ >= 4
- "gcc", "-lgcc_s", "-lgcc_s",
- "gcc_eh", "", "",
-#elif __GNUC__ >= 3
- "gcc", "-lgcc_s", "-lgcc",
- "gcc_eh", "-lgcc_s", "-lgcc_eh",
-#else
- "gcc", "", "-lgcc",
- "gcc_eh", "", "",
-#endif
- "SystemStubs", "", "-lSystemStubs", /* For MacOS 10.4+ */
- "c", "", "-lc"
-};
-
-/* NAME IF NOT FOUND IF FOUND */
-static cpchar_t g_Functions [] = {
- "atexit", "#undef HAVE_ATEXIT", "#define HAVE_ATEXIT 1",
- "malloc", "#undef HAVE_MALLOC\n", "#define HAVE_MALLOC 1\n",
- "memchr", "#undef HAVE_MEMCHR", "#define HAVE_MEMCHR 1",
- "memmove", "#undef HAVE_MEMMOVE", "#define HAVE_MEMMOVE 1",
- "memset", "#undef HAVE_MEMSET", "#define HAVE_MEMSET 1",
- "ptrdiff_t", "#undef HAVE_PTRDIFF_T", "#define HAVE_PTRDIFF_T 1",
- "strerror", "#undef HAVE_STRERROR", "#define HAVE_STRERROR 1",
- "strsignal", "#undef HAVE_STRSIGNAL", "#define HAVE_STRSIGNAL 1",
- "strtol", "#undef HAVE_STRTOL", "#define HAVE_STRTOL 1",
-#if __GNUC__ >= 3
- "round", "#undef HAVE_ROUND", "#define HAVE_ROUND 1",
-#endif
- "strrchr", "#undef HAVE_STRRCHR", "#define HAVE_STRRCHR 1",
- "__va_copy", "#undef HAVE_VA_COPY", "#define HAVE_VA_COPY 1"
-};
-
-/* NAME WITHOUT TEXT WITH TEXT */
-static cpchar_t g_Components [] = {
- "shared", "#BUILD_SHARED\t= 1", "BUILD_SHARED\t= 1 ",
- "static", "#BUILD_STATIC\t= 1", "BUILD_STATIC\t= 1 ",
- "debug", "#DEBUG\t\t= 1", "DEBUG\t\t= 1 ",
- "bounds", "#undef WANT_STREAM_BOUNDS_CHECKING", "#define WANT_STREAM_BOUNDS_CHECKING 1 ",
- "fastcopy", "#undef WANT_UNROLLED_COPY", "#define WANT_UNROLLED_COPY 1 ",
-#if __GNUC__ >= 3 && (__i386__ || __x86_64__) && !sun
- "mmx", "#undef WANT_MMX", "#define WANT_MMX 1 ",
-#endif
- "libstdc++", "#define WITHOUT_LIBSTDCPP 1", "#undef WITHOUT_LIBSTDCPP",
- "libstdc++", "NOLIBSTDCPP\t= -nodefaultlibs ", "#NOLIBSTDCPP\t= -nodefaultlibs"
-};
-
-/* Parallel to g_Components */
-static SComponentInfo g_ComponentInfos [VectorSize(g_Components) / 3] = {
- { 1, "Builds the shared library (if supported by the OS)" },
- { 0, "Builds the static library" },
- { 0, "Compiles the library with debugging information" },
- { 1, "Disable runtime bounds checking on stream reads/writes" },
- { 1, "Disable specializations for copy/fill" },
-#if __GNUC__ >= 3 && (__i386__ || __x86_64__) && !sun
- { 1, "Disable use of MMX/SSE/3dNow! instructions" },
-#endif
-#if __GNUC__ >= 3
- { 0, "Link with libstdc++" },
- { 0, "" }
-#else
- { 1, "" },
- { 1, "" }
-#endif
-};
-
-/* Substitutes names like @PACKAGE_NAME@ with the second field */
-static cpchar_t g_CustomVars [] = {
- "PACKAGE_NAME", PACKAGE_NAME,
- "PACKAGE_VERSION", PACKAGE_VERSION,
- "PACKAGE_TARNAME", PACKAGE_TARNAME,
- "PACKAGE_STRING", PACKAGE_STRING,
- "PACKAGE_BUGREPORT", PACKAGE_BUGREPORT,
- "LIBNAME", PACKAGE_NAME,
- "LIB_MAJOR", LIB_MAJOR,
- "LIB_MINOR", LIB_MINOR,
- "LIB_BUILD", LIB_BUILD
-};
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/cmemlink.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/cmemlink.cpp
deleted file mode 100644
index 7250e9f..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/cmemlink.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// cmemlink.cc
-//
-// See cmemlink.h for documentation.
-//
-
-#include "cmemlink.h"
-#include "ofstream.h"
-#include "strmsize.h"
-#include "ualgo.h"
-#include "uassert.h"
-
-#if PLATFORM_ANDROID
-#include <stdio.h>
-#undef CPU_HAS_MMX
-#endif
-
-namespace ustl {
-
-/// \brief Attaches the object to pointer \p p of size \p n.
-///
-/// If \p p is NULL and \p n is non-zero, bad_alloc is thrown and current
-/// state remains unchanged.
-///
-void cmemlink::link (const void* p, size_type n)
-{
- if (!p && n)
-#if PLATFORM_ANDROID
- printf("bad alloc\n");
-#else /* !PLATFORM_ANDROID */
- throw bad_alloc (n);
-#endif
- unlink();
- relink (p, n);
-}
-
-/// Writes the object to stream \p os
-void cmemlink::write (ostream& os) const
-{
- const written_size_type sz (size());
- assert (sz == size() && "No support for writing memblocks larger than 4G");
- os << sz;
- os.write (cdata(), sz);
- os.align (alignof (sz));
-}
-
-/// Writes the object to stream \p os
-void cmemlink::text_write (ostringstream& os) const
-{
- os.write (begin(), readable_size());
-}
-
-/// Returns the number of bytes required to write this object to a stream.
-cmemlink::size_type cmemlink::stream_size (void) const
-{
- const written_size_type sz (size());
- return (Align (stream_size_of (sz) + sz, alignof(sz)));
-}
-
-/// Writes the data to file \p "filename".
-void cmemlink::write_file (const char* filename, int mode) const
-{
- fstream f;
- f.exceptions (fstream::allbadbits);
- f.open (filename, fstream::out | fstream::trunc, mode);
- f.write (cdata(), readable_size());
- f.close();
-}
-
-/// swaps the contents with \p l
-void cmemlink::swap (cmemlink& l)
-{
-#if CPU_HAS_MMX && SIZE_OF_POINTER == 4
- asm (
- "movq %0, %%mm0\n\t"
- "movq %2, %%mm1\n\t"
- "movq %%mm0, %2\n\t"
- "movq %%mm1, %0"
- : "=m"(m_Data), "=m"(m_Size), "=m"(l.m_Data), "=m"(l.m_Size)
- :
- : "mm0", "mm1", "st", "st(1)");
- simd::reset_mmx();
-#elif CPU_HAS_SSE && SIZE_OF_POINTER == 8
- asm (
- "movups %0, %%xmm0\n\t"
- "movups %2, %%xmm1\n\t"
- "movups %%xmm0, %2\n\t"
- "movups %%xmm1, %0"
- : "=m"(m_Data), "=m"(m_Size), "=m"(l.m_Data), "=m"(l.m_Size)
- :
- : "xmm0", "xmm1");
-#else
- ::ustl::swap (m_Data, l.m_Data);
- ::ustl::swap (m_Size, l.m_Size);
-#endif
-}
-
-/// Compares to memory block pointed by l. Size is compared first.
-bool cmemlink::operator== (const cmemlink& l) const
-{
- return (l.m_Size == m_Size &&
- (l.m_Data == m_Data || 0 == memcmp (l.m_Data, m_Data, m_Size)));
-}
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/cmemlink.h b/media/libdrm/mobile2/src/util/ustl-1.0/cmemlink.h
deleted file mode 100644
index 46a9388..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/cmemlink.h
+++ /dev/null
@@ -1,101 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// cmemlink.h
-//
-
-#ifndef CMEMLINK_H_7CFAB32C5C6732ED29B34EF00EA40A12
-#define CMEMLINK_H_7CFAB32C5C6732ED29B34EF00EA40A12
-
-#include "ualgobase.h"
-
-/// The ustl namespace contains all ustl classes and algorithms.
-namespace ustl {
-
-class istream;
-class ostream;
-class ostringstream;
-
-/// \class cmemlink cmemlink.h ustl.h
-/// \ingroup MemoryManagement
-///
-/// \brief A read-only pointer to a sized block of memory.
-///
-/// Use this class the way you would a const pointer to an allocated unstructured block.
-/// The pointer and block size are available through member functions and cast operator.
-///
-/// Example usage:
-///
-/// \code
-/// void* p = malloc (46721);
-/// cmemlink a, b;
-/// a.link (p, 46721);
-/// assert (a.size() == 46721));
-/// b = a;
-/// assert (b.size() == 46721));
-/// assert (b.DataAt(34) == a.DataAt(34));
-/// assert (0 == memcmp (a, b, 12));
-/// \endcode
-///
-class cmemlink {
-public:
- typedef char value_type;
- typedef const value_type* pointer;
- typedef const value_type* const_pointer;
- typedef value_type reference;
- typedef value_type const_reference;
- typedef size_t size_type;
- typedef uint32_t written_size_type;
- typedef ptrdiff_t difference_type;
- typedef const_pointer const_iterator;
- typedef const_iterator iterator;
- typedef const cmemlink& rcself_t;
-public:
- inline cmemlink (void) : m_Data (NULL), m_Size (0) { }
- inline cmemlink (const void* p, size_type n) : m_Data (const_pointer(p)), m_Size (n) { assert (p || !n); }
- inline cmemlink (const cmemlink& l) : m_Data (l.m_Data), m_Size (l.m_Size) {}
- inline virtual ~cmemlink (void) {}
- void link (const void* p, size_type n);
- OVERLOAD_POINTER_AND_SIZE_T_V2(link, const void*)
- inline void link (const cmemlink& l) { link (l.begin(), l.size()); }
- inline void link (const void* first, const void* last) { link (first, distance (first, last)); }
- inline void relink (const void* p, size_type n);
- inline virtual void unlink (void) { m_Data = NULL; m_Size = 0; }
- inline rcself_t operator= (const cmemlink& l) { link (l); return (*this); }
- bool operator== (const cmemlink& l) const;
- void swap (cmemlink& l);
- inline size_type size (void) const { return (m_Size); }
- inline size_type max_size (void) const { return (size()); }
- inline size_type readable_size (void) const { return (size()); }
- inline bool empty (void) const { return (!size()); }
- inline const_pointer cdata (void) const { return (m_Data); }
- inline iterator begin (void) const { return (iterator (cdata())); }
- inline iterator iat (size_type i) const { assert (i <= size()); return (begin() + i); }
- inline iterator end (void) const { return (iat (size())); }
- inline void resize (size_type n) { m_Size = n; }
- inline void read (istream&) { assert (!"ustl::cmemlink is a read-only object."); }
- void write (ostream& os) const;
- size_type stream_size (void) const;
- void text_write (ostringstream& os) const;
- void write_file (const char* filename, int mode = 0644) const;
-private:
- const_pointer m_Data; ///< Pointer to the data block (const)
- size_type m_Size; ///< size of the data block
-};
-
-/// A fast alternative to link which can be used when relinking to the same block (i.e. when it is resized)
-inline void cmemlink::relink (const void* p, size_type n)
-{
- m_Data = reinterpret_cast<const_pointer>(p);
- m_Size = n;
-}
-
-/// Use with cmemlink-derived classes to link to a static array
-#define static_link(v) link (VectorBlock(v))
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/config.h b/media/libdrm/mobile2/src/util/ustl-1.0/config.h
deleted file mode 100644
index e6e4b7f..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/config.h
+++ /dev/null
@@ -1,296 +0,0 @@
-// config.h
-//
-// Autogenerated from config.h.in by bsconf.
-//
-
-#ifndef CONFIG_H_01E33670634DAAC779EE5FF41CCBB36F
-#define CONFIG_H_01E33670634DAAC779EE5FF41CCBB36F
-
-#include "uassert.h"
-
-#if PLATFORM_ANDROID
-
-#include <utils/Endian.h>
-
-// Byte order macros, converted in utypes.h
-#define USTL_LITTLE_ENDIAN __LITTLE_ENDIAN
-#define USTL_BIG_ENDIAN __BIG_ENDIAN
-#define USTL_BYTE_ORDER __BYTE_ORDER
-
-#if !defined NDEBUG
-#define NDEBUG
-#endif
-#else /* !PLATFORM_ANDROID */
-// Byte order macros, converted in utypes.h
-#define USTL_LITTLE_ENDIAN 4321
-#define USTL_BIG_ENDIAN 1234
-#define USTL_BYTE_ORDER USTL_LITTLE_ENDIAN
-#endif
-
-// Define to the one symbol short name of this package.
-#define USTL_NAME "ustl"
-// Define to the full name and version of this package.
-#define USTL_STRING "ustl 1.0"
-// Define to the version of this package.
-#define USTL_VERSION 0x100
-// Define to the address where bug reports for this package should be sent.
-#define USTL_BUGREPORT "Mike Sharov <msharov@users.sourceforge.net>"
-
-/// Define to 1 if you want stream operations to throw exceptions on
-/// insufficient data or insufficient space. All these errors should
-/// be preventable in output code; the input code should verify the
-/// data in a separate step. It slows down stream operations a lot,
-/// but it's your call. By default only debug builds throw.
-///
-#undef WANT_STREAM_BOUNDS_CHECKING
-
-#if !defined(WANT_STREAM_BOUNDS_CHECKING) && !defined(NDEBUG)
- #define WANT_STREAM_BOUNDS_CHECKING 1
-#endif
-
-/// Define to 1 if you want to build without libstdc++
-#define WITHOUT_LIBSTDCPP 1
-
-/// Define GNU extensions if unavailable.
-#ifndef __GNUC__
- /// GCC (and some other compilers) define '__attribute__'; ustl is using this
- /// macro to alert the compiler to flag inconsistencies in printf/scanf-like
- /// function calls. Just in case '__attribute__' isn't defined, make a dummy.
- ///
- #ifndef __attribute__
- #define __attribute__(p)
- #endif
-#endif
-#if defined(__GNUC__) && __GNUC__ >= 4
- #define DLL_EXPORT __attribute__((visibility("default")))
- #define DLL_LOCAL __attribute__((visibility("hidden")))
-#else
- #define DLL_EXPORT
- #define DLL_LOCAL
-#endif
-#if defined(__GNUC__) && __GNUC__ >= 3 && __i386__
- /// GCC 3+ supports the prefetch directive, which some CPUs use to improve caching
- #define prefetch(p,rw,loc) __builtin_prefetch(p,rw,loc)
-#else
- #define prefetch(p,rw,loc)
-#endif
-#if !defined(__GNUC__) || __GNUC__ < 3
- /// __alignof__ returns the recommended alignment for the type
- #define __alignof__(v) min(sizeof(v), sizeof(void*))
-#endif
-
-/// Define to 1 if you have the `atexit' function.
-#define HAVE_ATEXIT 1
-
-/// Define to 1 if you have the <assert.h> header file.
-#define HAVE_ASSERT_H 1
-
-/// Define to 1 if you have the <ctype.h> header file.
-#define HAVE_CTYPE_H 1
-
-/// Define to 1 if you have the <errno.h> header file.
-#define HAVE_ERRNO_H 1
-
-/// Define to 1 if you have the <fcntl.h> header file.
-#define HAVE_FCNTL_H 1
-
-/// Define to 1 if you have the <float.h> header file.
-#define HAVE_FLOAT_H 1
-
-/// Define to 1 if you have the <inttypes.h> header file.
-#define HAVE_INTTYPES_H 1
-
-/// Define to 1 if you have the <limits.h> header file.
-#define HAVE_LIMITS_H 1
-
-/// Define to 1 if you have the <locale.h> header file.
-#define HAVE_LOCALE_H 1
-
-/// Define to 1 if your system has a working `malloc' function.
-#define HAVE_MALLOC 1
-
-// Define to 1 if you have the <malloc.h> header file.
-#undef HAVE_MALLOC_H
-
-// Define to 1 if you have the <alloca.h> header file.
-#define HAVE_ALLOCA_H 1
-
-// Define to 1 if you have the `memchr' function.
-#define HAVE_MEMCHR 1
-
-// Define to 1 if you have the `memmove' function.
-#define HAVE_MEMMOVE 1
-
-// Define to 1 if you have the <memory.h> header file.
-#define HAVE_MEMORY_H 1
-
-// Define to 1 if you have the `memset' function.
-#define HAVE_MEMSET 1
-
-// Define to 1 if the system has the type `ptrdiff_t'.
-#define HAVE_PTRDIFF_T 1
-
-// Define to 1 if you have the <signal.h> header file.
-#define HAVE_SIGNAL_H 1
-
-// Define to 1 if you have the __va_copy function
-#define HAVE_VA_COPY 1
-
-// Define to 1 if `stat' has the bug that it succeeds when given the
-// zero-length file name argument.
-/* #undef HAVE_STAT_EMPTY_STRING_BUG */
-
-// Define to 1 if you have the <stdarg.h> header file.
-#define HAVE_STDARG_H 1
-
-// Define to 1 if you have the <stddef.h> header file.
-#define HAVE_STDDEF_H 1
-
-// Define to 1 if you have the <stdint.h> header file.
-#define HAVE_STDINT_H 1
-
-// Define to 1 if you have the <stdio.h> header file.
-#define HAVE_STDIO_H 1
-
-// Define to 1 if you have the <stdlib.h> header file.
-#define HAVE_STDLIB_H 1
-
-// Define to 1 if you have the `strerror' function.
-#define HAVE_STRERROR 1
-
-// Define to 1 if you have the <strings.h> header file.
-#define HAVE_STRINGS_H 1
-
-// Define to 1 if you have the <string.h> header file.
-#define HAVE_STRING_H 1
-
-// Define to 1 if you have the `strrchr' function.
-#define HAVE_STRRCHR 1
-
-// Define to 1 if you have the `strsignal' function.
-#undef HAVE_STRSIGNAL
-
-// Define to 1 if you have the `strtol' function.
-#define HAVE_STRTOL 1
-
-// Define to 1 if you have the <sys/stat.h> header file.
-#define HAVE_SYS_STAT_H 1
-
-// Define to 1 if you have the <sys/types.h> header file.
-#define HAVE_SYS_TYPES_H 1
-
-// Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible.
-#define HAVE_SYS_WAIT_H 1
-
-// Define to 1 if you have the <time.h> header file.
-#define HAVE_TIME_H 1
-
-// Define to 1 if you have the <unistd.h> header file.
-#define HAVE_UNISTD_H 1
-
-// Define to 1 if you have the <math.h> header file.
-#define HAVE_MATH_H 1
-
-// Define to 1 if you have the rintf function. Will use rint otherwise.
-#undef HAVE_RINTF
-
-// STDC_HEADERS is defined to 1 on sane systems.
-#if defined(HAVE_ASSERT_H) && defined(HAVE_CTYPE_H) &&\
- defined(HAVE_ERRNO_H) && defined(HAVE_FLOAT_H) &&\
- defined(HAVE_LIMITS_H) && defined(HAVE_LOCALE_H) &&\
- defined(HAVE_MATH_H) && defined(HAVE_SIGNAL_H) &&\
- defined(HAVE_STDARG_H) && defined(HAVE_STDDEF_H) &&\
- defined(HAVE_STDIO_H) && defined(HAVE_STDLIB_H) &&\
- defined(HAVE_STRING_H) && defined(HAVE_TIME_H)
-#define STDC_HEADERS 1
-#endif
-
-// STDC_HEADERS is defined to 1 on unix systems.
-#if defined(HAVE_FCNTL_H) && defined(HAVE_SYS_STAT_H) && defined(HAVE_UNISTD_H)
-#define STDUNIX_HEADERS 1
-#endif
-
-// Define to 1 if `lstat' dereferences a symlink specified with a trailing slash.
-#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
-
-// Define to 1 if your compiler treats char as a separate type along with
-// signed char and unsigned char. This will create overloads for char.
-#define HAVE_THREE_CHAR_TYPES 1
-
-// Define as the return type of signal handlers (`int' or `void').
-#define RETSIGTYPE void
-
-// Define to 1 if you have 64 bit types available
-#define HAVE_INT64_T 1
-
-// Define to 1 if you have the long long type
-#undef HAVE_LONG_LONG
-
-// Define to 1 if you want unrolled specializations for fill and copy
-#define WANT_UNROLLED_COPY 1
-
-// Define to 1 if you want to use MMX/SSE/3dNow! processor instructions
-#undef WANT_MMX
-
-// Define to byte sizes of types
-#define SIZE_OF_CHAR 1
-#define SIZE_OF_SHORT 2
-#define SIZE_OF_INT 4
-#define SIZE_OF_LONG 4
-#define SIZE_OF_LONG_LONG 8
-#define SIZE_OF_POINTER 4
-#define SIZE_OF_SIZE_T 4
-#define SIZE_OF_BOOL SIZE_OF_LONG
-#if SIZE_OF_SIZE_T == SIZE_OF_LONG
-#define SIZE_T_IS_LONG 1
-#else
-#define SIZE_T_IS_LONG 0
-#endif
-
-// Extended CPU capabilities
-#undef CPU_HAS_FPU
-#undef CPU_HAS_EXT_DEBUG
-#undef CPU_HAS_TIMESTAMPC
-#undef CPU_HAS_MSR
-#undef CPU_HAS_CMPXCHG8
-#undef CPU_HAS_APIC
-#undef CPU_HAS_SYSCALL
-#undef CPU_HAS_MTRR
-#undef CPU_HAS_CMOV
-#undef CPU_HAS_FCMOV
-#if WANT_MMX
-#undef CPU_HAS_MMX
-#undef CPU_HAS_FXSAVE
-#undef CPU_HAS_SSE
-#undef CPU_HAS_SSE2
-#undef CPU_HAS_SSE3
-#undef CPU_HAS_EXT_3DNOW
-#undef CPU_HAS_3DNOW
-#endif
-
-// GCC vector extensions
-#if defined(CPU_HAS_MMX) || defined(CPU_HAS_SSE)
- #define HAVE_VECTOR_EXTENSIONS 1
-#endif
-
-#if CPU_HAS_SSE && defined(__GNUC__)
- #define __sse_align __attribute__((aligned(16)))
-#else
- #define __sse_align
-#endif
-
-// Define to empty if `const' does not conform to ANSI C.
-/* #define const */
-
-// Define as `__inline' if that's what the C compiler calls it, or to nothing
-// if it is not supported.
-/* #define inline __inline */
-
-// Define to `long' if <sys/types.h> does not define.
-/* typedef long off_t; */
-
-// Define to `unsigned' if <sys/types.h> does not define.
-/* typedef long size_t; */
-
-#endif // CONFIG_H_01E33670634DAAC779EE5FF41CCBB36F
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/fstream.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/fstream.cpp
deleted file mode 100644
index 06b9691..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/fstream.cpp
+++ /dev/null
@@ -1,282 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// file.cc
-//
-
-#include "fstream.h"
-#include "uassert.h"
-#include "uexception.h"
-#include "uutility.h"
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <sys/ioctl.h>
-
-#if PLATFORM_ANDROID
-#include <stdio.h>
-#endif
-
-namespace ustl {
-
-/// Default constructor.
-fstream::fstream (void)
-: ios_base (),
- m_fd (-1),
- m_Filename ()
-{
-}
-
-/// Opens \p filename in \p mode.
-fstream::fstream (const char* filename, openmode mode)
-: ios_base (),
- m_fd (-1),
- m_Filename ()
-{
- open (filename, mode);
-}
-
-/// Attaches to \p nfd of \p filename.
-fstream::fstream (int nfd, const char* filename)
-: ios_base (),
- m_fd (-1),
- m_Filename ()
-{
- attach (nfd, filename);
-}
-
-/// Destructor. Closes if still open, but without throwing.
-fstream::~fstream (void) throw()
-{
- clear (goodbit);
- exceptions (goodbit);
- close();
- assert (!(rdstate() & badbit) && "close failed in the destructor! This may lead to loss of user data. Please call close() manually and either enable exceptions or check the badbit.");
-}
-
-/// Sets state \p s and throws depending on the exception setting.
-void fstream::set_and_throw (iostate s, const char* op)
-{
- if (ios_base::set_and_throw (s))
-#if PLATFORM_ANDROID
- printf("file_exception\n");
-#else /* !PLATFORM_ANDROID */
- throw file_exception (op, name());
-#endif
-}
-
-/// Attaches to the given \p nfd.
-void fstream::attach (int nfd, const char* filename)
-{
- assert (filename && "Don't do that");
- clear (goodbit);
- if (nfd < 0 && ios_base::set_and_throw (badbit))
-#if PLATFORM_ANDROID
- printf("file exception\n");
-#else /* !PLATFORM_ANDROID */
- throw file_exception ("open", filename);
-#endif
- close();
- m_fd = nfd;
- m_Filename = filename;
-}
-
-/// Detaches from the current fd.
-void fstream::detach (void)
-{
- m_fd = -1;
- m_Filename.clear();
-}
-
-/// Converts openmode bits into libc open flags.
-/*static*/ int fstream::om_to_flags (openmode m)
-{
- static const int s_OMFlags [nombits] = {
- 0, // in
- O_CREAT, // out
- O_APPEND, // app
- O_APPEND, // ate
- 0, // binary
- O_TRUNC, // trunc
- O_NONBLOCK, // nonblock
- 0, // nocreate
- O_NOCTTY // noctty
- };
- int flags = (m - 1) & O_ACCMODE; // in and out
- for (uoff_t i = 0; i < VectorSize(s_OMFlags); ++ i)
- if (m & (1 << i))
- flags |= s_OMFlags[i];
- if (m & nocreate)
- flags &= ~O_CREAT;
- return (flags);
-}
-
-/// \brief Opens \p filename in the given mode.
-/// \warning The string at \p filename must exist until the object is closed.
-void fstream::open (const char* filename, openmode mode, mode_t perms)
-{
- int nfd = ::open (filename, om_to_flags(mode), perms);
- attach (nfd, filename);
-}
-
-/// Closes the file and throws on error.
-void fstream::close (void)
-{
- if (m_fd >= 0 && ::close(m_fd))
- set_and_throw (badbit | failbit, "close");
- detach();
-}
-
-/// Moves the current file position to \p n.
-off_t fstream::seek (off_t n, seekdir whence)
-{
- off_t p = lseek (m_fd, n, whence);
- if (p < 0)
- set_and_throw (failbit, "seek");
- return (p);
-}
-
-/// Returns the current file position.
-off_t fstream::pos (void) const
-{
- return (lseek (m_fd, 0, SEEK_CUR));
-}
-
-/// Reads \p n bytes into \p p.
-off_t fstream::read (void* p, off_t n)
-{
- off_t br (0);
- while (br < n && good())
- br += readsome (advance (p, br), n - br);
- return (br);
-}
-
-/// Reads at most \p n bytes into \p p, stopping when it feels like it.
-off_t fstream::readsome (void* p, off_t n)
-{
- ssize_t brn;
- do { brn = ::read (m_fd, p, n); } while (brn < 0 && errno == EINTR);
- if (brn > 0)
- return (brn);
- if (brn < 0 && errno != EAGAIN)
- set_and_throw (failbit, "read");
- if (!brn && ios_base::set_and_throw (eofbit | failbit))
-#if PLATFORM_ANDROID
- printf("stream_bounds_exception\n");
-#else /* !PLATFORM_ANDROID */
- throw stream_bounds_exception ("read", name(), pos(), n, 0);
-#endif
- return (0);
-}
-
-/// Writes \p n bytes from \p p.
-off_t fstream::write (const void* p, off_t n)
-{
- off_t btw (n);
- while (btw) {
- const off_t bw (n - btw);
- ssize_t bwn = ::write (m_fd, advance(p,bw), btw);
- if (bwn > 0)
- btw -= bwn;
- else if (!bwn) {
- if (ios_base::set_and_throw (eofbit | failbit))
-#if PLATFORM_ANDROID
- printf("stream_bounds_exception\n");
-#else /* !PLATFORM_ANDROID */
- throw stream_bounds_exception ("write", name(), pos() - bw, n, bw);
-#endif
- break;
- } else if (errno != EINTR) {
- if (errno != EAGAIN)
- set_and_throw (failbit, "write");
- break;
- }
- }
- return (n - btw);
-}
-
-/// Returns the file size.
-off_t fstream::size (void) const
-{
- struct stat st;
- st.st_size = 0;
- stat (st);
- return (st.st_size);
-}
-
-/// Synchronizes the file's data and status with the disk.
-void fstream::sync (void)
-{
- if (fsync (m_fd))
- set_and_throw (failbit, "sync");
-}
-
-/// Get the stat structure.
-void fstream::stat (struct stat& rs) const
-{
- if (fstat (m_fd, &rs))
-#if PLATFORM_ANDROID
- printf("file_exception\n");
-#else
- throw file_exception ("stat", name());
-#endif
-}
-
-/// Calls the given ioctl. Use IOCTLID macro to pass in both \p name and \p request.
-int fstream::ioctl (const char* rname, int request, long argument)
-{
- int rv = ::ioctl (m_fd, request, argument);
- if (rv < 0)
- set_and_throw (failbit, rname);
- return (rv);
-}
-
-/// Calls the given fcntl. Use FCNTLID macro to pass in both \p name and \p request.
-int fstream::fcntl (const char* rname, int request, long argument)
-{
- int rv = ::fcntl (m_fd, request, argument);
- if (rv < 0)
- set_and_throw (failbit, rname);
- return (rv);
-}
-
-/// Memory-maps the file and returns a link to it.
-memlink fstream::mmap (off_t n, off_t offset)
-{
- void* result = ::mmap (NULL, n, PROT_READ | PROT_WRITE, MAP_SHARED, m_fd, offset);
- if (result == MAP_FAILED)
- set_and_throw (failbit, "mmap");
- return (memlink (result, n));
-}
-
-/// Unmaps a memory-mapped area.
-void fstream::munmap (memlink& l)
-{
- if (::munmap (l.data(), l.size()))
- set_and_throw (failbit, "munmap");
- l.unlink();
-}
-
-/// Synchronizes a memory-mapped area.
-void fstream::msync (memlink& l)
-{
- if (::msync (l.data(), l.size(), MS_ASYNC | MS_INVALIDATE))
- set_and_throw (failbit, "msync");
-}
-
-void fstream::set_nonblock (bool v)
-{
- int curf = fcntl (FCNTLID (F_GETFL));
- if (curf < 0) return;
- if (v) curf |= O_NONBLOCK;
- else curf &= ~O_NONBLOCK;
- fcntl (FCNTLID (F_SETFL), curf);
-}
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/fstream.h b/media/libdrm/mobile2/src/util/ustl-1.0/fstream.h
deleted file mode 100644
index cf60bbd..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/fstream.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// fstream.h
-//
-
-#ifndef FSTREAM_H_056E10F70EAD416443E3B36A2D6B5FA3
-#define FSTREAM_H_056E10F70EAD416443E3B36A2D6B5FA3
-
-#include "uios.h"
-#include "ustring.h"
-
-struct stat;
-
-namespace ustl {
-
-/// \class fstream fstream.h ustl.h
-///
-/// \brief Implements file operations.
-///
-/// This is not implemented as a stream, but rather as a base for one. You
-/// should use ifstream or ofstream if you want flow operators. Otherwise
-/// this only implements functions for binary i/o.
-///
-class fstream : public ios_base {
-public:
- fstream (void);
- explicit fstream (const char* filename, openmode mode = in | out);
- explicit fstream (int nfd, const char* filename = string::empty_string);
- ~fstream (void) throw();
- void open (const char* filename, openmode mode, mode_t perms = 0644);
- void attach (int nfd, const char* filename = string::empty_string);
- void detach (void);
- void close (void);
- void sync (void);
- off_t read (void* p, off_t n);
- off_t readsome (void* p, off_t n);
- off_t write (const void* p, off_t n);
- off_t size (void) const;
- off_t seek (off_t n, seekdir whence = beg);
- off_t pos (void) const;
- void stat (struct stat& rs) const;
- int ioctl (const char* rname, int request, long argument = 0);
- inline int ioctl (const char* rname, int request, int argument) { return (fstream::ioctl (rname, request, long(argument))); }
- inline int ioctl (const char* rname, int request, void* argument) { return (fstream::ioctl (rname, request, intptr_t(argument))); }
- int fcntl (const char* rname, int request, long argument = 0);
- inline int fcntl (const char* rname, int request, int argument) { return (fstream::fcntl (rname, request, long(argument))); }
- inline int fcntl (const char* rname, int request, void* argument) { return (fstream::fcntl (rname, request, intptr_t(argument))); }
- memlink mmap (off_t n, off_t offset = 0);
- void munmap (memlink& l);
- void msync (memlink& l);
- void set_nonblock (bool v = true);
- inline int fd (void) const { return (m_fd); }
- inline bool is_open (void) const { return (fd() >= 0); }
- inline off_t tellg (void) const { return (pos()); }
- inline off_t tellp (void) const { return (pos()); }
- inline void seekg (off_t n, seekdir whence = beg) { seek (n, whence); }
- inline void seekp (off_t n, seekdir whence = beg) { seek (n, whence); }
- inline void flush (void) { sync(); }
- inline const string& name (void) const { return (m_Filename); }
-private:
- DLL_LOCAL static int om_to_flags (openmode m);
- DLL_LOCAL void set_and_throw (iostate s, const char* op);
-private:
- int m_fd; ///< Currently open file descriptor.
- string m_Filename; ///< Currently open filename.
-};
-
-/// Argument macro for fstream::ioctl. Use like fs.ioctl (IOCTLID (TCGETS), &ts).
-#define IOCTLID(r) "ioctl("#r")", r
-#define FCNTLID(r) "fcntl("#r")", r
-
-}
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/memblock.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/memblock.cpp
deleted file mode 100644
index 721433e..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/memblock.cpp
+++ /dev/null
@@ -1,216 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// memblock.cc
-//
-// Allocated memory block.
-//
-
-#include "fstream.h"
-#include "mistream.h"
-#include "memblock.h"
-#include "ualgo.h"
-#include "uassert.h"
-#include "umemory.h"
-
-#include <errno.h>
-
-namespace ustl {
-
-/// Allocates 0 bytes for the internal block.
-memblock::memblock (void)
-: memlink (),
- m_Capacity (0)
-{
-}
-
-/// Allocates \p n bytes for the internal block.
-memblock::memblock (size_type n)
-: memlink (),
- m_Capacity (0)
-{
- resize (n);
-}
-
-/// links to \p p, \p n. Data can not be modified and will not be freed.
-memblock::memblock (const void* p, size_type n)
-: memlink (),
- m_Capacity (0)
-{
- assign (p, n);
-}
-
-/// Links to what \p b is linked to.
-memblock::memblock (const cmemlink& b)
-: memlink (),
- m_Capacity (0)
-{
- assign (b);
-}
-
-/// Links to what \p b is linked to.
-memblock::memblock (const memlink& b)
-: memlink (),
- m_Capacity (0)
-{
- assign (b);
-}
-
-/// Links to what \p b is linked to.
-memblock::memblock (const memblock& b)
-: memlink (),
- m_Capacity (0)
-{
- assign (b);
-}
-
-/// Frees internal data, if appropriate
-/// Only if the block was allocated using resize, or linked to using Manage,
-/// will it be freed. Also, Derived classes should call DestructBlock from
-/// their destructor, because upstream virtual functions are unavailable at
-/// this point and will not be called automatically.
-///
-memblock::~memblock (void)
-{
- if (!is_linked())
- deallocate();
-}
-
-/// resizes the block to \p newSize bytes, reallocating if necessary.
-void memblock::resize (size_type newSize, bool bExact)
-{
- if (m_Capacity < newSize + minimumFreeCapacity())
- reserve (newSize, bExact);
- memlink::resize (newSize);
-}
-
-/// Frees internal data.
-void memblock::deallocate (void) throw()
-{
- if (m_Capacity) {
- assert (cdata() && "Internal error: space allocated, but the pointer is NULL");
- assert (data() && "Internal error: read-only block is marked as allocated space");
- free (data());
- }
- unlink();
-}
-
-/// Assumes control of the memory block \p p of size \p n.
-/// The block assigned using this function will be freed in the destructor.
-void memblock::manage (void* p, size_type n)
-{
- assert (p || !n);
- assert (!m_Capacity && "Already managing something. deallocate or unlink first.");
- link (p, n);
- m_Capacity = n;
-}
-
-/// "Instantiate" a linked block by allocating and copying the linked data.
-void memblock::copy_link (void)
-{
- const cmemlink l (*this);
- if (is_linked())
- unlink();
- assign (l);
-}
-
-/// Copies data from \p p, \p n.
-void memblock::assign (const void* p, size_type n)
-{
- assert ((p != (const void*) cdata() || size() == n) && "Self-assignment can not resize");
- resize (n);
- copy (p, n);
-}
-
-/// \brief Reallocates internal block to hold at least \p newSize bytes.
-///
-/// Additional memory may be allocated, but for efficiency it is a very
-/// good idea to call reserve before doing byte-by-byte edit operations.
-/// The block size as returned by size() is not altered. reserve will not
-/// reduce allocated memory. If you think you are wasting space, call
-/// deallocate and start over. To avoid wasting space, use the block for
-/// only one purpose, and try to get that purpose to use similar amounts
-/// of memory on each iteration.
-///
-void memblock::reserve (size_type newSize, bool bExact)
-{
- if ((newSize += minimumFreeCapacity()) <= m_Capacity)
- return;
- void* oldBlock (is_linked() ? NULL : data());
- if (!bExact)
- newSize = Align (newSize, c_PageSize);
- pointer newBlock = (pointer) realloc (oldBlock, newSize);
- if (!newBlock)
-#if PLATFORM_ANDROID
- printf("bad_alloc\n");
-#else
- throw bad_alloc (newSize);
-#endif
- if (!oldBlock && cdata())
- copy_n (cdata(), min (size() + 1, newSize), newBlock);
- link (newBlock, size());
- m_Capacity = newSize;
-}
-
-/// Swaps the contents with \p l
-void memblock::swap (memblock& l)
-{
- memlink::swap (l);
- ::ustl::swap (m_Capacity, l.m_Capacity);
-}
-
-/// Shifts the data in the linked block from \p start to \p start + \p n.
-memblock::iterator memblock::insert (iterator start, size_type n)
-{
- const uoff_t ip = start - begin();
- assert (ip <= size());
- resize (size() + n, false);
- memlink::insert (iat(ip), n);
- return (iat (ip));
-}
-
-/// Shifts the data in the linked block from \p start + \p n to \p start.
-memblock::iterator memblock::erase (iterator start, size_type n)
-{
- const uoff_t ep = start - begin();
- assert (ep + n <= size());
- memlink::erase (start, n);
- memlink::resize (size() - n);
- return (iat (ep));
-}
-
-/// Unlinks object.
-void memblock::unlink (void)
-{
- memlink::unlink();
- m_Capacity = 0;
-}
-
-/// Reads the object from stream \p s
-void memblock::read (istream& is)
-{
- written_size_type n;
- is >> n;
- is.verify_remaining ("read", "ustl::memblock", n);
- resize (n);
- is.read (data(), writable_size());
- is.align (alignof (n));
-}
-
-/// Reads the entire file \p "filename".
-void memblock::read_file (const char* filename)
-{
- fstream f;
- f.exceptions (fstream::allbadbits);
- f.open (filename, fstream::in);
- const off_t fsize (f.size());
- reserve (fsize);
- f.read (data(), fsize);
- f.close();
- resize (fsize);
-}
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/memblock.h b/media/libdrm/mobile2/src/util/ustl-1.0/memblock.h
deleted file mode 100644
index d85ea0e..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/memblock.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// memblock.h
-//
-
-#ifndef MEMBLOCK_H_7ED63A891164CC43578E63664D52A196
-#define MEMBLOCK_H_7ED63A891164CC43578E63664D52A196
-
-#include "memlink.h"
-
-namespace ustl {
-
-/// \class memblock memblock.h ustl.h
-/// \ingroup MemoryManagement
-///
-/// \brief Allocated memory block.
-///
-/// Adds memory management capabilities to memlink. Uses malloc and realloc to
-/// maintain the internal pointer, but only if allocated using members of this class,
-/// or if linked to using the Manage() member function. Managed memory is automatically
-/// freed in the destructor.
-///
-class memblock : public memlink {
-public:
- static const size_type c_PageSize = 64; ///< The default minimum allocation unit.
-public:
- memblock (void);
- memblock (const void* p, size_type n);
- explicit memblock (size_type n);
- explicit memblock (const cmemlink& b);
- explicit memblock (const memlink& b);
- memblock (const memblock& b);
- virtual ~memblock (void);
- virtual void unlink (void);
- inline void assign (const cmemlink& l) { assign (l.cdata(), l.readable_size()); }
- inline const memblock& operator= (const cmemlink& l) { assign (l); return (*this); }
- inline const memblock& operator= (const memlink& l) { assign (l); return (*this); }
- inline const memblock& operator= (const memblock& l) { assign (l); return (*this); }
- void assign (const void* p, size_type n);
- void swap (memblock& l);
- void reserve (size_type newSize, bool bExact = true);
- void resize (size_type newSize, bool bExact = true);
- iterator insert (iterator start, size_type size);
- iterator erase (iterator start, size_type size);
- inline void clear (void) { resize (0); }
- inline bool is_linked (void) const { return (!m_Capacity && cdata()); }
- inline size_type max_size (void) const { return (is_linked() ? memlink::max_size() : SIZE_MAX); }
- inline size_type capacity (void) const { return (m_Capacity); }
- inline void manage (memlink& l) { manage (l.begin(), l.size()); }
- void deallocate (void) throw();
- void manage (void* p, size_type n);
- void copy_link (void);
- void read (istream& is);
- void read_file (const char* filename);
-protected:
- inline virtual size_type minimumFreeCapacity (void) const { return (0); }
-private:
- size_type m_Capacity; ///< Number of bytes allocated by Resize.
-};
-
-/// Reads object \p l from stream \p is
-inline istream& operator>> (istream& is, memblock& l)
-{
- l.read (is);
- return (is);
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/memlink.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/memlink.cpp
deleted file mode 100644
index bed6601..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/memlink.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// memlink.cc
-//
-// A pointer to a sized block of memory.
-//
-
-#include "mistream.h"
-#include "uassert.h"
-#include "ustdxept.h"
-
-#if PLATFORM_ANDROID
-#include <stdio.h>
-#endif
-
-namespace ustl {
-
-/// Reads the object from stream \p s
-void memlink::read (istream& is)
-{
- written_size_type n;
- is >> n;
- is.verify_remaining ("read", "ustl::memlink", n);
- if (n > size())
-#if PLATFORM_ANDROID
- printf("length error\n");
-#else
- throw length_error ("memlink can not increase the size of the linked storage for reading");
-#endif
- resize (n);
- is.read (data(), n);
- is.align (alignof (n));
-}
-
-/// Copies data from \p p, \p n to the linked block starting at \p start.
-void memlink::copy (iterator start, const void* p, size_type n)
-{
- assert (data() || !n);
- assert (p || !n);
- assert (start >= begin() && start + n <= end());
- if (p)
- copy_n (const_iterator(p), n, start);
-}
-
-/// Fills the linked block with the given pattern.
-/// \arg start Offset at which to start filling the linked block
-/// \arg p Pointer to the pattern.
-/// \arg elSize Size of the pattern.
-/// \arg elCount Number of times to write the pattern.
-/// Total number of bytes written is \p elSize * \p elCount.
-///
-void memlink::fill (iterator start, const void* p, size_type elSize, size_type elCount)
-{
- assert (data() || !elCount || !elSize);
- assert (start >= begin() && start + elSize * elCount <= end());
- if (elSize == 1)
- fill_n (start, elCount, *reinterpret_cast<const uint8_t*>(p));
- else while (elCount--)
- start = copy_n (const_iterator(p), elSize, start);
-}
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/memlink.h b/media/libdrm/mobile2/src/util/ustl-1.0/memlink.h
deleted file mode 100644
index 25d9928..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/memlink.h
+++ /dev/null
@@ -1,115 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// memlink.h
-
-#ifndef MEMLINK_H_798D25827C8E322D2D7E734B169FF5FC
-#define MEMLINK_H_798D25827C8E322D2D7E734B169FF5FC
-
-#include "cmemlink.h"
-#include "ualgo.h"
-#include "uassert.h"
-
-namespace ustl {
-
-/// \class memlink memlink.h ustl.h
-/// \ingroup MemoryManagement
-///
-/// \brief Wrapper for pointer to block with size.
-///
-/// Use this class the way you would a pointer to an allocated unstructured block.
-/// The pointer and block size are available through member functions and cast operator.
-///
-/// Example usage:
-/// \code
-/// void* p = malloc (46721);
-/// memlink a, b;
-/// a.link (p, 46721);
-/// assert (a.size() == 46721));
-/// b = a;
-/// assert (b.size() == 46721));
-/// assert (b.begin() + 34 == a.begin + 34);
-/// assert (0 == memcmp (a, b, 12));
-/// a.fill (673, b, 42, 67);
-/// b.erase (87, 12);
-/// \endcode
-///
-class memlink : public cmemlink {
-public:
- typedef value_type* pointer;
- typedef cmemlink::pointer const_pointer;
- typedef cmemlink::const_iterator const_iterator;
- typedef pointer iterator;
- typedef const memlink& rcself_t;
-public:
- inline memlink (void) : cmemlink() {}
- inline memlink (void* p, size_type n) : cmemlink (p, n) {}
- inline memlink (const void* p, size_type n) : cmemlink (p, n) {}
- inline memlink (rcself_t l) : cmemlink (l) {}
- inline explicit memlink (const cmemlink& l) : cmemlink (l) {}
- inline pointer data (void) { return (const_cast<pointer>(cdata())); }
- inline iterator begin (void) { return (iterator (data())); }
- inline iterator iat (size_type i) { assert (i <= size()); return (begin() + i); }
- inline iterator end (void) { return (iat (size())); }
- inline const_iterator begin (void) const { return (cmemlink::begin()); }
- inline const_iterator end (void) const { return (cmemlink::end()); }
- inline const_iterator iat (size_type i) const { return (cmemlink::iat (i)); }
- size_type writable_size (void) const { return (size()); }
- inline rcself_t operator= (const cmemlink& l) { cmemlink::operator= (l); return (*this); }
- inline rcself_t operator= (rcself_t l) { cmemlink::operator= (l); return (*this); }
- inline void link (const void* p, size_type n) { cmemlink::link (p, n); }
- inline void link (void* p, size_type n) { cmemlink::link (p, n); }
- inline void link (const cmemlink& l) { cmemlink::link (l); }
- inline void link (memlink& l) { cmemlink::link (l); }
- OVERLOAD_POINTER_AND_SIZE_T_V2(link, void*)
- OVERLOAD_POINTER_AND_SIZE_T_V2(link, const void*)
- inline void link (const void* first, const void* last) { link (first, distance (first, last)); }
- inline void link (void* first, void* last) { link (first, distance (first, last)); }
- inline void relink (const void* p, size_type n) { cmemlink::relink (p, n); }
- inline void relink (void* p, size_type n) { cmemlink::relink (p, n); }
- inline void copy (const cmemlink& l) { copy (begin(), l.cdata(), l.size()); }
- inline void copy (const void* p, size_type n) { copy (begin(), p, n); }
- void copy (iterator offset, const void* p, size_type n);
- inline void swap (memlink& l) { cmemlink::swap (l); }
- void fill (iterator start, const void* p, size_type elsize, size_type elCount = 1);
- inline void insert (iterator start, size_type size);
- inline void erase (iterator start, size_type size);
- void read (istream& is);
-};
-
-/// Shifts the data in the linked block from \p start to \p start + \p n.
-/// The contents of the uncovered bytes is undefined.
-inline void memlink::insert (iterator start, size_type n)
-{
- assert (data() || !n);
- assert (cmemlink::begin() || !n);
- assert (start >= begin() && start + n <= end());
- rotate (start, end() - n, end());
-}
-
-/// Shifts the data in the linked block from \p start + \p n to \p start.
-/// The contents of the uncovered bytes is undefined.
-inline void memlink::erase (iterator start, size_type n)
-{
- assert (data() || !n);
- assert (cmemlink::begin() || !n);
- assert (start >= begin() && start + n <= end());
- rotate (start, start + n, end());
-}
-
-/// Reads object \p l from stream \p is
-inline istream& operator>> (istream& is, memlink& l)
-{
- l.read (is);
- return (is);
-}
-
-/// Use with memlink-derived classes to allocate and link to stack space.
-#define alloca_link(m,n) (m).link (alloca (n), (n))
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/mistream.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/mistream.cpp
deleted file mode 100644
index ad99828..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/mistream.cpp
+++ /dev/null
@@ -1,242 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// mstream.cpp
-//
-// Helper classes to read and write packed binary streams.
-//
-
-#include "mistream.h"
-#include "sostream.h"
-#include "ualgo.h"
-#include "uassert.h"
-#include "ustring.h"
-
-#if PLATFORM_ANDROID
-#include <stdio.h>
-#endif
-
-namespace ustl {
-
-//--------------------------------------------------------------------
-
-/// \brief Constructs a stream attached to nothing.
-/// A stream attached to nothing is not usable. Call Link() functions
-/// inherited from cmemlink to attach to some memory block.
-///
-istream::istream (void)
-: cmemlink (),
- m_Pos (0)
-{
-}
-
-/// Attaches the stream to a block at \p p of size \p n.
-istream::istream (const void* p, size_type n)
-: cmemlink (p, n),
- m_Pos (0)
-{
-}
-
-/// Attaches to the block pointed to by \p source.
-istream::istream (const cmemlink& source)
-: cmemlink (source),
- m_Pos (0)
-{
-}
-
-/// Attaches to the block pointed to by source of size source.pos()
-istream::istream (const ostream& source)
-: cmemlink (source.begin(), source.pos()),
- m_Pos (0)
-{
-}
-
-/// Swaps contents with \p is
-void istream::swap (istream& is)
-{
- cmemlink::swap (is);
- ::ustl::swap (m_Pos, is.m_Pos);
-}
-
-/// Checks that \p n bytes are available in the stream, or else throws.
-void istream::verify_remaining (const char* op, const char* type, size_t n) const
-{
- if (remaining() < n)
-#if PLATFORM_ANDROID
- printf("stream bounds exception\n");
-#else
- throw stream_bounds_exception (op, type, pos(), n, remaining());
-#endif
-}
-
-/// Reads \p n bytes into \p buffer.
-void istream::read (void* buffer, size_type n)
-{
-#ifdef WANT_STREAM_BOUNDS_CHECKING
- verify_remaining ("read", "binary data", n);
-#else
- assert (remaining() >= n && "Reading past end of buffer. Make sure you are reading the right format.");
-#endif
- copy_n (ipos(), n, reinterpret_cast<value_type*>(buffer));
- m_Pos += n;
-}
-
-/// Reads a null-terminated string into \p str.
-void istream::read_strz (string& str)
-{
- const_iterator zp = find (ipos(), end(), string::c_Terminator);
- if (zp == end())
- zp = ipos();
- const size_type strl = distance (ipos(), zp);
- str.resize (strl);
- copy (ipos(), zp, str.begin());
- m_Pos += strl + 1;
-}
-
-/// Reads at most \p n bytes into \p s.
-istream::size_type istream::readsome (void* s, size_type n)
-{
- if (remaining() < n)
- underflow (n);
- const size_type ntr (min (n, remaining()));
- read (s, ntr);
- return (ntr);
-}
-
-/// Writes all unread bytes into \p os.
-void istream::write (ostream& os) const
-{
- os.write (ipos(), remaining());
-}
-
-/// Writes the object to stream \p os.
-void istream::text_write (ostringstream& os) const
-{
- os.write (ipos(), remaining());
-}
-
-/// Links to \p p of size \p n
-void istream::unlink (void)
-{
- cmemlink::unlink();
- m_Pos = 0;
-}
-
-//--------------------------------------------------------------------
-
-/// \brief Constructs a stream attached to nothing.
-/// A stream attached to nothing is not usable. Call Link() functions
-/// inherited from memlink to attach to some memory block.
-///
-ostream::ostream (void)
-: memlink (),
- m_Pos (0)
-{
-}
-
-/// Attaches the stream to a block at \p p of size \p n.
-ostream::ostream (void* p, size_type n)
-: memlink (p, n),
- m_Pos (0)
-{
-}
-
-/// Attaches to the block pointed to by \p source.
-ostream::ostream (const memlink& source)
-: memlink (source),
- m_Pos (0)
-{
-}
-
-/// Links to \p p of size \p n
-void ostream::unlink (void)
-{
- memlink::unlink();
- m_Pos = 0;
-}
-
-/// Checks that \p n bytes are available in the stream, or else throws.
-void ostream::verify_remaining (const char* op, const char* type, size_t n) const
-{
- if (remaining() < n)
-#if PLATFORM_ANDROID
- printf("stream bounds exception\n");
-#else
- throw stream_bounds_exception (op, type, pos(), n, remaining());
-#endif
-}
-
-/// Aligns the write pointer on \p grain. The skipped bytes are zeroed.
-void ostream::align (size_type grain)
-{
- const size_t r = pos() % grain;
- size_t nb = grain - r;
- if (!r) nb = 0;
-#ifdef WANT_STREAM_BOUNDS_CHECKING
- verify_remaining ("align", "padding", nb);
-#else
- assert (remaining() >= nb && "Buffer overrun. Check your stream size calculations.");
-#endif
- fill_n (ipos(), nb, '\x0');
- m_Pos += nb;
-}
-
-/// Writes \p n bytes from \p buffer.
-void ostream::write (const void* buffer, size_type n)
-{
-#ifdef WANT_STREAM_BOUNDS_CHECKING
- verify_remaining ("write", "binary data", n);
-#else
- assert (remaining() >= n && "Buffer overrun. Check your stream size calculations.");
-#endif
- copy_n (const_iterator(buffer), n, ipos());
- m_Pos += n;
-}
-
-/// Writes \p str as a null-terminated string.
-void ostream::write_strz (const char* str)
-{
- write (str, strlen(str));
- iwrite (string::c_Terminator);
-}
-
-/// Writes all available data from \p is.
-void ostream::read (istream& is)
-{
- is.write (*this);
- is.seek (is.size());
-}
-
-/// Writes all written data to \p os.
-void ostream::text_write (ostringstream& os) const
-{
- os.write (begin(), pos());
-}
-
-/// Inserts an empty area of \p size, at \p start.
-void ostream::insert (iterator start, size_type s)
-{
- memlink::insert (start, s);
- m_Pos += s;
-}
-
-/// Erases an area of \p size, at \p start.
-void ostream::erase (iterator start, size_type s)
-{
- m_Pos -= s;
- memlink::erase (start, s);
-}
-
-/// Swaps with \p os
-void ostream::swap (ostream& os)
-{
- memlink::swap (os);
- ::ustl::swap (m_Pos, os.m_Pos);
-}
-
-//--------------------------------------------------------------------
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/mistream.h b/media/libdrm/mobile2/src/util/ustl-1.0/mistream.h
deleted file mode 100644
index 0a7aee7..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/mistream.h
+++ /dev/null
@@ -1,293 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// mistream.h
-//
-#ifndef MISTREAM_H_103AEF1F266C04AA1A817D38705983DA
-#define MISTREAM_H_103AEF1F266C04AA1A817D38705983DA
-
-#include "memlink.h"
-#include "uexception.h"
-#include "strmsize.h"
-#include "uassert.h"
-#include "utf8.h"
-#include "uios.h"
-#ifdef WANT_STREAM_BOUNDS_CHECKING
- #include <typeinfo>
-#endif
-
-namespace ustl {
-
-class ostream;
-class memlink;
-class string;
-
-/// \class istream mistream.h ustl.h
-/// \ingroup BinaryStreams
-///
-/// \brief Helper class to read packed binary streams.
-///
-/// This class contains a set of functions to read integral types from an
-/// unstructured memory block. Unpacking binary file data can be done this
-/// way, for instance. aligning the data is your responsibility, and can
-/// be accomplished by proper ordering of reads and by calling the align()
-/// function. Unaligned access is usually slower by orders of magnitude and,
-/// on some architectures, such as PowerPC, can cause your program to crash.
-/// Therefore, all read functions have asserts to check alignment.
-/// Overreading the end of the stream will also cause a crash (an assert in
-/// debug builds). Oh, and don't be intimidated by the size of the inlines
-/// here. In the assembly code the compiler will usually chop everything down
-/// to five instructions each.
-///
-/// Alignment rules for your objects:
-/// - Assume your writes start off 4-byte aligned.
-/// - After completion, \ref istream::align the stream to at least 4.
-/// - If data portability between 32bit and 64bit platforms is important
-/// (it often is not, in config files and the like), ensure you are always
-/// using fixed-size types and are aligning to a fixed grain. Avoid writing
-/// 8-byte types, and if you do, manually align before doing so.
-/// - Non-default alignment is allowed if you plan to frequently write this
-/// object in array form and alignment would be costly. For example, an
-/// array of uint16_t-sized objects may leave the stream uint16_t aligned
-/// as long as you know about it and will default-align the stream after
-/// writing the array (note: \ref vector will already do this for you)
-///
-/// Example code:
-/// \code
-/// memblock b;
-/// b.read_file ("test.file");
-/// ostream is (b);
-/// is >> boolVar >> ios::talign<int>();
-/// is >> intVar >> floatVar;
-/// is.read (binaryData, binaryDataSize);
-/// is.align();
-/// \endcode
-///
-class istream : public cmemlink, public ios_base {
-public:
- istream (void);
- istream (const void* p, size_type n);
- explicit istream (const cmemlink& source);
- explicit istream (const ostream& source);
- inline iterator end (void) const { return (cmemlink::end()); }
- inline void link (const void* p, size_type n) { cmemlink::link (p, n); }
- inline void link (const cmemlink& l) { cmemlink::link (l.cdata(), l.readable_size()); }
- inline void link (const void* f, const void* l) { cmemlink::link (f, l); }
- OVERLOAD_POINTER_AND_SIZE_T_V2(link, const void*)
- inline void relink (const void* p, size_type n) { cmemlink::relink (p, n); m_Pos = 0; }
- inline void relink (const cmemlink& l) { relink (l.cdata(), l.readable_size()); }
- virtual void unlink (void);
- inline virtual size_type underflow (size_type = 1) { return (remaining()); }
- inline uoff_t pos (void) const { return (m_Pos); }
- inline const_iterator ipos (void) const { return (begin() + pos()); }
- inline size_type remaining (void) const { return (size() - pos()); }
- inline void seek (uoff_t newPos);
- inline void iseek (const_iterator newPos);
- inline void skip (size_type nBytes);
- inline bool aligned (size_type grain = c_DefaultAlignment) const;
- void verify_remaining (const char* op, const char* type, size_t n) const;
- inline size_type align_size (size_type grain = c_DefaultAlignment) const;
- inline void align (size_type grain = c_DefaultAlignment);
- void swap (istream& is);
- void read (void* buffer, size_type size);
- inline void read (memlink& buf) { read (buf.begin(), buf.writable_size()); }
- void read_strz (string& str);
- size_type readsome (void* s, size_type n);
- inline void read (istream&) { }
- void write (ostream& os) const;
- void text_write (ostringstream& os) const;
- inline size_t stream_size (void) const { return (remaining()); }
- template <typename T>
- inline void iread (T& v);
- inline void ungetc (void) { seek (pos() - 1); }
- inline off_t tellg (void) const { return (pos()); }
- inline void seekg (off_t p, seekdir d = beg);
-private:
- uoff_t m_Pos; ///< The current read position.
-};
-
-//----------------------------------------------------------------------
-
-template <typename T, typename Stream>
-inline size_t required_stream_size (T, const Stream&) { return (1); }
-template <typename T>
-inline size_t required_stream_size (T v, const istream&) { return (stream_size_of(v)); }
-
-template <typename Stream>
-inline bool stream_at_eof (const Stream& stm) { return (stm.eof()); }
-template <>
-inline bool stream_at_eof (const istream&) { return (false); }
-
-/// \class istream_iterator
-/// \ingroup BinaryStreamIterators
-///
-/// \brief An iterator over an istream to use with uSTL algorithms.
-///
-template <typename T, typename Stream = istream>
-class istream_iterator {
-public:
- typedef T value_type;
- typedef ptrdiff_t difference_type;
- typedef const value_type* pointer;
- typedef const value_type& reference;
- typedef size_t size_type;
-public:
- istream_iterator (void) : m_pis (NULL), m_v() {}
- explicit istream_iterator (Stream& is) : m_pis (&is), m_v() { Read(); }
- istream_iterator (const istream_iterator& i) : m_pis (i.m_pis), m_v (i.m_v) {}
- /// Reads and returns the next value.
- inline const T& operator* (void) { return (m_v); }
- inline istream_iterator& operator++ (void) { Read(); return (*this); }
- inline istream_iterator& operator-- (void) { m_pis->seek (m_pis->pos() - 2 * stream_size_of(m_v)); return (operator++()); }
- inline istream_iterator operator++ (int) { istream_iterator old (*this); operator++(); return (old); }
- inline istream_iterator operator-- (int) { istream_iterator old (*this); operator--(); return (old); }
- inline istream_iterator& operator+= (size_type n) { while (n--) operator++(); return (*this); }
- inline istream_iterator& operator-= (size_type n) { m_pis->seek (m_pis->pos() - (n + 1) * stream_size_of(m_v)); return (operator++()); }
- inline istream_iterator operator- (size_type n) const { istream_iterator result (*this); return (result -= n); }
- inline difference_type operator- (const istream_iterator& i) const { return (distance (i.m_pis->pos(), m_pis->pos()) / stream_size_of(m_v)); }
- inline bool operator== (const istream_iterator& i) const { return ((!m_pis && !i.m_pis) || (m_pis && i.m_pis && m_pis->pos() == i.m_pis->pos())); }
- inline bool operator< (const istream_iterator& i) const { return (!i.m_pis || (m_pis && m_pis->pos() < i.m_pis->pos())); }
-private:
- void Read (void)
- {
- if (!m_pis)
- return;
- const size_t rs (required_stream_size (m_v, *m_pis));
- if (m_pis->remaining() < rs && m_pis->underflow (rs) < rs) {
- m_pis = NULL;
- return;
- }
- *m_pis >> m_v;
- if (stream_at_eof (*m_pis))
- m_pis = NULL;
- }
-private:
- Stream* m_pis; ///< The host stream.
- T m_v; ///< Last read value; cached to be returnable as a const reference.
-};
-
-//----------------------------------------------------------------------
-
-/// Sets the current read position to \p newPos
-inline void istream::seek (uoff_t newPos)
-{
-#ifdef WANT_STREAM_BOUNDS_CHECKING
- if (newPos > size())
- throw stream_bounds_exception ("seekg", "byte", pos(), newPos - pos(), size());
-#else
- assert (newPos <= size());
-#endif
- m_Pos = newPos;
-}
-
-/// Sets the current read position to \p newPos
-inline void istream::iseek (const_iterator newPos)
-{
- seek (distance (begin(), newPos));
-}
-
-/// Sets the current write position to \p p based on \p d.
-inline void istream::seekg (off_t p, seekdir d)
-{
- switch (d) {
- case beg: seek (p); break;
- case cur: seek (pos() + p); break;
- case ios_base::end: seek (size() - p); break;
- }
-}
-
-/// Skips \p nBytes without reading them.
-inline void istream::skip (size_type nBytes)
-{
- seek (pos() + nBytes);
-}
-
-/// Returns the number of bytes to skip to be aligned on \p grain.
-inline istream::size_type istream::align_size (size_type grain) const
-{
- return (Align (pos(), grain) - pos());
-}
-
-/// Returns \c true if the read position is aligned on \p grain
-inline bool istream::aligned (size_type grain) const
-{
- assert (uintptr_t(begin()) % grain == 0 && "Streams should be attached aligned at the maximum element grain to avoid bus errors.");
- return (pos() % grain == 0);
-}
-
-/// aligns the read position on \p grain
-inline void istream::align (size_type grain)
-{
- seek (Align (pos(), grain));
-}
-
-/// Reads type T from the stream via a direct pointer cast.
-template <typename T>
-inline void istream::iread (T& v)
-{
- assert (aligned (alignof (T())));
-#ifdef WANT_STREAM_BOUNDS_CHECKING
- verify_remaining ("read", typeid(v).name(), sizeof(T));
-#else
- assert (remaining() >= sizeof(T));
-#endif
- v = *reinterpret_cast<const T*>(ipos());
- m_Pos += sizeof(T);
-}
-
-#define ISTREAM_OPERATOR(type) \
-inline istream& operator>> (istream& is, type& v) { is.iread(v); return (is); }
-
-template <typename T>
-ISTREAM_OPERATOR(T*)
-ISTREAM_OPERATOR(int8_t)
-ISTREAM_OPERATOR(uint8_t)
-ISTREAM_OPERATOR(int16_t)
-ISTREAM_OPERATOR(uint16_t)
-ISTREAM_OPERATOR(int32_t)
-ISTREAM_OPERATOR(uint32_t)
-ISTREAM_OPERATOR(float)
-ISTREAM_OPERATOR(double)
-ISTREAM_OPERATOR(wchar_t)
-#if SIZE_OF_BOOL == SIZE_OF_CHAR
-ISTREAM_OPERATOR(bool)
-#else
-inline istream& operator>> (istream& is, bool& v)
-{ uint8_t v8; is.iread (v8); v = v8; return (is); }
-#endif
-#if HAVE_THREE_CHAR_TYPES
-ISTREAM_OPERATOR(char)
-#endif
-#if HAVE_INT64_T
-ISTREAM_OPERATOR(int64_t)
-ISTREAM_OPERATOR(uint64_t)
-#endif
-#if SIZE_OF_LONG == SIZE_OF_INT
-ISTREAM_OPERATOR(long)
-ISTREAM_OPERATOR(unsigned long)
-#endif
-#if HAVE_LONG_LONG && (!HAVE_INT64_T || SIZE_OF_LONG_LONG > 8)
-ISTREAM_OPERATOR(long long)
-ISTREAM_OPERATOR(unsigned long long)
-#endif
-
-//----------------------------------------------------------------------
-
-typedef istream_iterator<utf8subchar_t> istream_iterator_for_utf8;
-typedef utf8in_iterator<istream_iterator_for_utf8> utf8istream_iterator;
-
-/// Returns a UTF-8 adaptor reading from \p is.
-inline utf8istream_iterator utf8in (istream& is)
-{
- istream_iterator_for_utf8 si (is);
- return (utf8istream_iterator (si));
-}
-
-//----------------------------------------------------------------------
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/mostream.h b/media/libdrm/mobile2/src/util/ustl-1.0/mostream.h
deleted file mode 100644
index fb04196..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/mostream.h
+++ /dev/null
@@ -1,260 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// mostream.h
-
-#ifndef MOSTREAM_H_24A8C5397E0848216573E5670930FC9A
-#define MOSTREAM_H_24A8C5397E0848216573E5670930FC9A
-
-#include "memlink.h"
-#include "uassert.h"
-#include "uexception.h"
-#include "utf8.h"
-#include "uios.h"
-#include <typeinfo>
-
-namespace ustl {
-
-class istream;
-class string;
-
-/// \class ostream mostream.h ustl.h
-/// \ingroup BinaryStreams
-///
-/// \brief Helper class to write packed binary streams.
-///
-/// This class contains a set of functions to write integral types into an
-/// unstructured memory block. Packing binary file data can be done this
-/// way, for instance. aligning the data is your responsibility, and can
-/// be accomplished by proper ordering of writes and by calling \ref ostream::align.
-/// Unaligned access is usually slower by orders of magnitude and,
-/// on some architectures, such as PowerPC, can cause your program to crash.
-/// Therefore, all write functions have asserts to check alignment.
-/// See \ref istream documentation for rules on designing your data format.
-/// Overwriting the end of the stream will also cause a crash (an assert in
-/// debug builds). Oh, and don't be intimidated by the size of the inlines
-/// here. In the assembly code the compiler will usually chop everything down
-/// to five instructions each.
-///
-/// Example code:
-/// \code
-/// memblock b;
-/// ostream os (b);
-/// os << boolVar << ios::talign<int>();
-/// os << intVar << floatVar;
-/// os.write (binaryData, binaryDataSize);
-/// os.align();
-/// b.resize (os.pos());
-/// b.write_file ("test.file");
-/// \endcode
-///
-class ostream : public memlink, public ios_base {
-public:
- ostream (void);
- ostream (void* p, size_type n);
- explicit ostream (const memlink& source);
- inline iterator end (void) { return (memlink::end()); }
- inline const_iterator end (void) const { return (memlink::end()); }
- inline void seek (uoff_t newPos);
- inline void iseek (const_iterator newPos);
- inline void skip (size_type nBytes);
- inline uoff_t pos (void) const { return (m_Pos); }
- inline iterator ipos (void) { return (begin() + pos()); }
- inline const_iterator ipos (void) const { return (begin() + pos()); }
- inline size_type remaining (void) const;
- inline bool aligned (size_type grain = c_DefaultAlignment) const;
- void verify_remaining (const char* op, const char* type, size_t n) const;
- inline size_type align_size (size_type grain = c_DefaultAlignment) const;
- void align (size_type grain = c_DefaultAlignment);
- void write (const void* buffer, size_type size);
- inline void write (const cmemlink& buf);
- void write_strz (const char* str);
- void read (istream& is);
- inline void write (ostream& os) const { os.write (begin(), pos()); }
- void text_write (ostringstream& os) const;
- inline size_t stream_size (void) const { return (pos()); }
- void insert (iterator start, size_type size);
- void erase (iterator start, size_type size);
- void swap (ostream& os);
- template <typename T>
- inline void iwrite (const T& v);
- inline virtual size_type overflow (size_type = 1){ return (remaining()); }
- virtual void unlink (void);
- inline void link (void* p, size_type n) { memlink::link (p, n); }
- inline void link (memlink& l) { memlink::link (l.data(), l.writable_size()); }
- inline void link (void* f, void* l) { memlink::link (f, l); }
- OVERLOAD_POINTER_AND_SIZE_T_V2(link, void*)
- inline void relink (void* p, size_type n) { memlink::relink (p, n); m_Pos = 0; }
- inline void relink (memlink& l) { relink (l.data(), l.writable_size()); }
- inline void seekp (off_t p, seekdir d = beg);
- inline off_t tellp (void) const { return (pos()); }
-protected:
- inline void SetPos (uoff_t newPos) { m_Pos = newPos; }
-private:
- uoff_t m_Pos; ///< Current write position.
-};
-
-//----------------------------------------------------------------------
-
-/// \class ostream_iterator mostream.h ustl.h
-/// \ingroup BinaryStreamIterators
-///
-/// \brief An iterator over an ostream to use with uSTL algorithms.
-///
-template <typename T, typename Stream = ostream>
-class ostream_iterator {
-public:
- typedef T value_type;
- typedef ptrdiff_t difference_type;
- typedef value_type* pointer;
- typedef value_type& reference;
- typedef ostream::size_type size_type;
-public:
- inline explicit ostream_iterator (Stream& os)
- : m_Os (os) {}
- inline ostream_iterator (const ostream_iterator& iter)
- : m_Os (iter.m_Os) {}
- /// Writes \p v into the stream.
- inline ostream_iterator& operator= (const T& v)
- { m_Os << v; return (*this); }
- inline ostream_iterator& operator* (void) { return (*this); }
- inline ostream_iterator& operator++ (void) { return (*this); }
- inline ostream_iterator operator++ (int) { return (*this); }
- inline ostream_iterator& operator+= (size_type n) { m_Os.skip (n); return (*this); }
- inline bool operator== (const ostream_iterator& i) const
- { return (m_Os.pos() == i.m_Os.pos()); }
- inline bool operator< (const ostream_iterator& i) const
- { return (m_Os.pos() < i.m_Os.pos()); }
-private:
- Stream& m_Os;
-};
-
-//----------------------------------------------------------------------
-
-typedef ostream_iterator<utf8subchar_t> ostream_iterator_for_utf8;
-typedef utf8out_iterator<ostream_iterator_for_utf8> utf8ostream_iterator;
-
-/// Returns a UTF-8 adaptor writing to \p os.
-inline utf8ostream_iterator utf8out (ostream& os)
-{
- ostream_iterator_for_utf8 si (os);
- return (utf8ostream_iterator (si));
-}
-
-//----------------------------------------------------------------------
-
-/// Move the write pointer to \p newPos
-inline void ostream::seek (uoff_t newPos)
-{
-#ifdef WANT_STREAM_BOUNDS_CHECKING
- if (newPos > size())
- throw stream_bounds_exception ("seekp", "byte", pos(), newPos - pos(), size());
-#else
- assert (newPos <= size());
-#endif
- SetPos (newPos);
-}
-
-/// Sets the current write position to \p newPos
-inline void ostream::iseek (const_iterator newPos)
-{
- seek (distance (begin(), const_cast<iterator>(newPos)));
-}
-
-/// Sets the current write position to \p p based on \p d.
-inline void ostream::seekp (off_t p, seekdir d)
-{
- switch (d) {
- case beg: seek (p); break;
- case cur: seek (pos() + p); break;
- case ios_base::end: seek (size() - p); break;
- }
-}
-
-/// Skips \p nBytes without writing anything.
-inline void ostream::skip (size_type nBytes)
-{
- seek (pos() + nBytes);
-}
-
-/// Returns number of bytes remaining in the write buffer.
-inline ostream::size_type ostream::remaining (void) const
-{
- return (size() - pos());
-}
-
-/// Returns \c true if the write pointer is aligned on \p grain
-inline bool ostream::aligned (size_type grain) const
-{
- assert (uintptr_t(begin()) % grain == 0 && "Streams should be attached aligned at the maximum element grain to avoid bus errors.");
- return (pos() % grain == 0);
-}
-
-/// Returns the number of bytes to skip to be aligned on \p grain.
-inline ostream::size_type ostream::align_size (size_type grain) const
-{
- return (Align (pos(), grain) - pos());
-}
-
-/// Writes the contents of \p buf into the stream as a raw dump.
-inline void ostream::write (const cmemlink& buf)
-{
- write (buf.begin(), buf.size());
-}
-
-/// Writes type T into the stream via a direct pointer cast.
-template <typename T>
-inline void ostream::iwrite (const T& v)
-{
- assert (aligned (alignof (v)));
-#ifdef WANT_STREAM_BOUNDS_CHECKING
- verify_remaining ("write", typeid(v).name(), sizeof(T));
-#else
- assert (remaining() >= sizeof(T));
-#endif
- *reinterpret_cast<T*>(ipos()) = v;
- SetPos (pos() + sizeof(T));
-}
-
-#define OSTREAM_OPERATOR(type) \
-inline ostream& operator<< (ostream& os, type v) { os.iwrite(v); return (os); }
-
-template <typename T>
-OSTREAM_OPERATOR(T*)
-OSTREAM_OPERATOR(int8_t)
-OSTREAM_OPERATOR(uint8_t)
-OSTREAM_OPERATOR(int16_t)
-OSTREAM_OPERATOR(uint16_t)
-OSTREAM_OPERATOR(int32_t)
-OSTREAM_OPERATOR(uint32_t)
-OSTREAM_OPERATOR(float)
-OSTREAM_OPERATOR(double)
-OSTREAM_OPERATOR(wchar_t)
-#if SIZE_OF_BOOL == SIZE_OF_CHAR
-OSTREAM_OPERATOR(bool)
-#else
-inline ostream& operator<< (ostream& os, bool v)
-{ os.iwrite (uint8_t(v)); return (os); }
-#endif
-#if HAVE_THREE_CHAR_TYPES
-OSTREAM_OPERATOR(char)
-#endif
-#if HAVE_INT64_T
-OSTREAM_OPERATOR(int64_t)
-OSTREAM_OPERATOR(uint64_t)
-#endif
-#if SIZE_OF_LONG == SIZE_OF_INT
-OSTREAM_OPERATOR(long)
-OSTREAM_OPERATOR(unsigned long)
-#endif
-#if HAVE_LONG_LONG && (!HAVE_INT64_T || SIZE_OF_LONG_LONG > 8)
-OSTREAM_OPERATOR(long long)
-OSTREAM_OPERATOR(unsigned long long)
-#endif
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ofstream.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/ofstream.cpp
deleted file mode 100644
index 0948a4d..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ofstream.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ofstream.cc
-//
-
-#include "ofstream.h"
-#include "ustring.h"
-#include "uexception.h"
-#include <unistd.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdarg.h>
-
-namespace ustl {
-
-//----------------------------------------------------------------------
-
-ifstream cin (STDIN_FILENO);
-ofstream cout (STDOUT_FILENO);
-ofstream cerr (STDERR_FILENO);
-
-//----------------------------------------------------------------------
-
-/// Default constructor.
-ofstream::ofstream (void)
-: ostringstream (),
- m_File ()
-{
- reserve (255);
-}
-
-/// Constructs a stream for writing to \p Fd.
-ofstream::ofstream (int Fd)
-: ostringstream (),
- m_File (Fd)
-{
- clear (m_File.rdstate());
- reserve (255);
-}
-
-/// Constructs a stream for writing to \p filename.
-ofstream::ofstream (const char* filename, openmode mode)
-: ostringstream (),
- m_File (filename, mode)
-{
- clear (m_File.rdstate());
-}
-
-/// Default destructor.
-ofstream::~ofstream (void)
-{
-#if PLATFORM_ANDROID
- flush();
-#else /* !PLATFORM_ANDROID */
- try { flush(); } catch (...) {}
-#endif
-}
-
-/// Flushes the buffer to the file.
-void ofstream::flush (void)
-{
- while (pos() && overflow (remaining()));
- m_File.sync();
- clear (m_File.rdstate());
-}
-
-/// Seeks to \p p based on \p d.
-void ofstream::seekp (off_t p, seekdir d)
-{
- flush();
- m_File.seekp (p, d);
- clear (m_File.rdstate());
-}
-
-/// Called when more buffer space (\p n bytes) is needed.
-ofstream::size_type ofstream::overflow (size_type n)
-{
- if (eof() || (n > remaining() && n < capacity() - pos()))
- return (ostringstream::overflow (n));
- size_type bw = m_File.write (cdata(), pos());
- clear (m_File.rdstate());
- erase (begin(), bw);
- if (remaining() < n)
- ostringstream::overflow (n);
- return (remaining());
-}
-
-//----------------------------------------------------------------------
-
-/// Constructs a stream to read from \p Fd.
-ifstream::ifstream (int Fd)
-: istringstream (),
- m_Buffer (255),
- m_File (Fd)
-{
- link (m_Buffer.data(), 0U);
-}
-
-/// Constructs a stream to read from \p filename.
-ifstream::ifstream (const char* filename, openmode mode)
-: istringstream (),
- m_Buffer (255),
- m_File (filename, mode)
-{
- clear (m_File.rdstate());
- link (m_Buffer.data(), 0U);
-}
-
-/// Reads at least \p n more bytes and returns available bytes.
-ifstream::size_type ifstream::underflow (size_type n)
-{
- if (eof())
- return (istringstream::underflow (n));
-
- const ssize_t freeSpace = m_Buffer.size() - pos();
- const ssize_t neededFreeSpace = max (n, m_Buffer.size() / 2);
- const size_t oughtToErase = Align (max (0, neededFreeSpace - freeSpace));
- const size_t nToErase = min (pos(), oughtToErase);
- m_Buffer.memlink::erase (m_Buffer.begin(), nToErase);
- const uoff_t oldPos (pos() - nToErase);
-
- size_type br = oldPos;
- if (m_Buffer.size() - br < n) {
- m_Buffer.resize (br + neededFreeSpace);
- link (m_Buffer.data(), 0U);
- }
- cout.flush();
-
- while (br - oldPos < n && m_File.good())
- br += m_File.readsome (m_Buffer.begin() + br, m_Buffer.size() - br);
- clear (m_File.rdstate());
-
- m_Buffer[br] = string::c_Terminator;
- link (m_Buffer.data(), br);
- seek (oldPos);
- return (remaining());
-}
-
-/// Flushes the input.
-void ifstream::sync (void)
-{
- istringstream::sync();
- underflow (0U);
- m_File.sync();
- clear (m_File.rdstate());
-}
-
-/// Seeks to \p p based on \p d.
-void ifstream::seekg (off_t p, seekdir d)
-{
- m_Buffer.clear();
- link (m_Buffer);
- m_File.seekg (p, d);
- clear (m_File.rdstate());
-}
-
-//----------------------------------------------------------------------
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ofstream.h b/media/libdrm/mobile2/src/util/ustl-1.0/ofstream.h
deleted file mode 100644
index 7780833..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ofstream.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ofstream.h
-//
-
-#ifndef FDOSTREAM_H_5E27FC3D530BF3CA04D6C73F5700EECC
-#define FDOSTREAM_H_5E27FC3D530BF3CA04D6C73F5700EECC
-
-#include "sistream.h"
-#include "sostream.h"
-#include "fstream.h"
-
-namespace ustl {
-
-/// \class ofstream fdostream.h ustl.h
-/// \ingroup DeviceStreams
-/// \brief A string stream that writes to an fd. Implements cout and cerr.
-class ofstream : public ostringstream {
-public:
- ofstream (void);
- explicit ofstream (int Fd);
- explicit ofstream (const char* filename, openmode mode = out);
- virtual ~ofstream (void);
- inline void open (const char* filename, openmode mode = out) { m_File.open (filename, mode); clear (m_File.rdstate()); }
- inline void close (void) { m_File.close(); clear (m_File.rdstate()); }
- inline bool is_open (void) const { return (m_File.is_open()); }
- inline iostate exceptions (iostate v) { ostringstream::exceptions(v); return (m_File.exceptions(v)); }
- inline void setstate (iostate v) { ostringstream::setstate(v); m_File.setstate(v); }
- inline void clear (iostate v = goodbit) { ostringstream::clear(v); m_File.clear(v); }
- inline off_t tellp (void) const { return (m_File.tellp() + ostringstream::tellp()); }
- inline int fd (void) const { return (m_File.fd()); }
- inline void stat (struct stat& rs) const { m_File.stat (rs); }
- inline void set_nonblock (bool v = true) { m_File.set_nonblock (v); }
- inline int ioctl (const char* rname, int request, long argument = 0) { return (m_File.ioctl (rname, request, argument)); }
- inline int ioctl (const char* rname, int request, int argument) { return (m_File.ioctl (rname, request, argument)); }
- inline int ioctl (const char* rname, int request, void* argument) { return (m_File.ioctl (rname, request, argument)); }
- void seekp (off_t p, seekdir d = beg);
- void flush (void);
- virtual size_type overflow (size_type n = 1);
-private:
- fstream m_File;
-};
-
-/// \class ifstream fdostream.h ustl.h
-/// \ingroup DeviceStreams
-/// \brief A string stream that reads from an fd. Implements cin.
-class ifstream : public istringstream {
-public:
- ifstream (void);
- explicit ifstream (int Fd);
- explicit ifstream (const char* filename, openmode mode = in);
- inline void open (const char* filename, openmode mode = in) { m_File.open (filename, mode); clear (m_File.rdstate()); }
- inline void close (void) { m_File.close(); clear (m_File.rdstate()); }
- inline bool is_open (void) const { return (m_File.is_open()); }
- inline iostate exceptions (iostate v) { istringstream::exceptions(v); return (m_File.exceptions(v)); }
- inline void setstate (iostate v) { istringstream::setstate(v); m_File.setstate(v); }
- inline void clear (iostate v = goodbit) { istringstream::clear(v); m_File.clear(v); }
- inline off_t tellg (void) const { return (m_File.tellg() - remaining()); }
- inline int fd (void) const { return (m_File.fd()); }
- inline void stat (struct stat& rs) const { m_File.stat (rs); }
- inline void set_nonblock (bool v = true) { m_File.set_nonblock (v); }
- inline int ioctl (const char* rname, int request, long argument = 0) { return (m_File.ioctl (rname, request, argument)); }
- inline int ioctl (const char* rname, int request, int argument) { return (m_File.ioctl (rname, request, argument)); }
- inline int ioctl (const char* rname, int request, void* argument) { return (m_File.ioctl (rname, request, argument)); }
- void seekg (off_t p, seekdir d = beg);
- void sync (void);
- virtual size_type underflow (size_type n = 1);
-private:
- string m_Buffer;
- fstream m_File;
-};
-
-extern ofstream cout, cerr;
-extern ifstream cin;
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/simd.h b/media/libdrm/mobile2/src/util/ustl-1.0/simd.h
deleted file mode 100644
index 950efc2..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/simd.h
+++ /dev/null
@@ -1,465 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-/// \file simd.h
-/// \brief SIMD-type algorithms, with hardware acceleration, if available.
-///
-/// All algorithms are container-based because iterator syntax is just too
-/// damn verbose and because the specializations need to be able to tell
-/// how many elements are in the container in order to choose proper SIMD
-/// instruction set (i.e.: 4 floats select SSE, while 2 floats select 3dNow!)
-/// Specializations are only for the tuple template because the container
-/// must be of a fixed and compile-time-known size for the compiler to be
-/// able to choose the specialization.
-///
-
-#ifndef SIMD_H_39BE2D970DF4BD00508CCFFB482496F9
-#define SIMD_H_39BE2D970DF4BD00508CCFFB482496F9
-
-#include "uassert.h"
-#include "ulimits.h"
-#if HAVE_MATH_H
- #include <math.h>
-#endif
-
-#if PLATFORM_ANDROID
-#include <stdio.h>
-#undef CPU_HAS_MMX
-#endif
-
-namespace ustl {
-namespace simd {
-
-//----------------------------------------------------------------------
-// Generic algorithms
-//----------------------------------------------------------------------
-
-/// Applies \p op to each element in \p op1.
-template <typename Ctr, typename UnaryOperation>
-inline void packop (Ctr& op1, UnaryOperation op)
-{
- foreach (typename Ctr::iterator, i, op1)
- op (*i);
-}
-
-/// Applies \p op to each element in \p op1 and \p op2 and stores in \p op2.
-template <typename Ctr, typename BinaryOperation>
-inline void packop (const Ctr& op1, Ctr& op2, BinaryOperation op)
-{
- assert (op2.size() <= op1.size());
- typename Ctr::const_iterator i1 (op1.begin());
- typename Ctr::iterator i2 (op2.begin());
- for (; i2 != op2.end(); ++i1, ++i2)
- *i2 = op (*i2, *i1);
-}
-
-/// Applies \p op to corresponding elements in \p op1 and \p op2 and stores in \p result.
-template <typename Ctr, typename BinaryOperation>
-inline void packop (const Ctr& op1, const Ctr& op2, Ctr& result, BinaryOperation op)
-{
- assert (op1.size() <= op2.size() && op1.size() <= result.size());
- passign (op1, result);
- packop (op2, result);
-}
-
-/// Copies \p op1 into \p result.
-template <typename Ctr>
-inline void passign (const Ctr& op1, Ctr& result)
-{
- assert (op1.size() <= result.size());
- typename Ctr::iterator d (result.begin());
- foreach (typename Ctr::const_iterator, s, op1)
- *d++ = *s;
-}
-
-/// Copies \p result.size() elements from \p op1 to \p result.
-template <typename Ctr>
-inline void ipassign (typename Ctr::const_iterator op1, Ctr& result)
-{
- foreach (typename Ctr::iterator, d, result)
- *d = *op1++;
-}
-
-template <typename Ctr1, typename Ctr2, typename ConvertFunction>
-inline void pconvert (const Ctr1& op1, Ctr2& op2, ConvertFunction f)
-{
- assert (op1.size() <= op2.size());
- typename Ctr1::const_iterator i1 (op1.begin());
- typename Ctr2::iterator i2 (op2.begin());
- for (; i1 != op1.end(); ++i1, ++i2)
- *i2 = f (*i1);
-}
-
-// Functionoids for SIMD operations, like saturation arithmetic, shifts, etc.
-STD_BINARY_FUNCTOR (fpadds, T, ((b > numeric_limits<T>::max() - a) ? numeric_limits<T>::max() : a + b))
-STD_BINARY_FUNCTOR (fpsubs, T, ((a < numeric_limits<T>::min() + b) ? numeric_limits<T>::min() : a - b))
-STD_BINARY_FUNCTOR (fpshl, T, (a << b))
-STD_BINARY_FUNCTOR (fpshr, T, (a >> b))
-STD_BINARY_FUNCTOR (fpmin, T, (min (a, b)))
-STD_BINARY_FUNCTOR (fpmax, T, (max (a, b)))
-STD_BINARY_FUNCTOR (fpavg, T, ((a + b + 1) / 2))
-STD_CONVERSION_FUNCTOR (fcast, (D(a)))
-#if HAVE_MATH_H
-STD_UNARY_FUNCTOR (fpreciprocal,T, (1 / a))
-STD_UNARY_FUNCTOR (fpsqrt, T, (reset_mmx(), T (sqrt (a))))
-STD_UNARY_FUNCTOR (fprecipsqrt, T, (reset_mmx(), 1 / T(sqrt (a))))
-STD_UNARY_FUNCTOR (fsin, T, (reset_mmx(), T (sin (a))))
-STD_UNARY_FUNCTOR (fcos, T, (reset_mmx(), T (cos (a))))
-STD_UNARY_FUNCTOR (ftan, T, (reset_mmx(), T (tan (a))))
-#if HAVE_RINTF
-STD_CONVERSION_FUNCTOR (fround, (reset_mmx(), D(rintf(a))))
-#else
-STD_CONVERSION_FUNCTOR (fround, (reset_mmx(), D(rint(a))))
-#endif
-template <> inline int32_t fround<double,int32_t>::operator()(const double& a) const { reset_mmx(); return (int32_t(rint(a))); }
-#endif
-template <> inline float fpavg<float>::operator()(const float& a, const float& b) const { return ((a + b) / 2); }
-template <> inline double fpavg<double>::operator()(const double& a, const double& b) const { return ((a + b) / 2); }
-
-#define SIMD_PACKEDOP1(name, operation) \
-template <typename Ctr> \
-inline void name (Ctr& op1) \
-{ \
- typedef typename Ctr::value_type value_t; \
- packop (op1, operation<value_t>()); \
-}
-#define SIMD_PACKEDOP2(name, operation) \
-template <typename Ctr> \
-inline void name (const Ctr& op1, Ctr& op2) \
-{ \
- typedef typename Ctr::value_type value_t; \
- packop (op1, op2, operation<value_t>()); \
-}
-#define SIMD_PACKEDOP3(name, operation) \
-template <typename Ctr> \
-inline void name (const Ctr& op1, const Ctr& op2, Ctr& result) \
-{ \
- typedef typename Ctr::value_type value_t; \
- packop (op1, op2, result, operation<value_t>()); \
-}
-#define SIMD_SINGLEOP1(name, operation) \
-template <typename T> \
-inline T name (T op) \
-{ \
- operation<T> obj; \
- return (obj(op)); \
-}
-#define SIMD_CONVERTOP(name, operation) \
-template <typename Ctr1, typename Ctr2> \
-inline void name (const Ctr1& op1, Ctr2& op2) \
-{ \
- typedef typename Ctr1::value_type value1_t; \
- typedef typename Ctr2::value_type value2_t; \
- pconvert (op1, op2, operation<value1_t, value2_t>());\
-}
-
-SIMD_PACKEDOP2 (padd, plus)
-SIMD_PACKEDOP2 (psub, minus)
-SIMD_PACKEDOP2 (pmul, multiplies)
-SIMD_PACKEDOP2 (pdiv, divides)
-SIMD_PACKEDOP2 (pand, bitwise_and)
-SIMD_PACKEDOP2 (por, bitwise_or)
-SIMD_PACKEDOP2 (pxor, bitwise_xor)
-SIMD_PACKEDOP2 (pshl, fpshl)
-SIMD_PACKEDOP2 (pshr, fpshr)
-SIMD_PACKEDOP2 (psubs, fpsubs)
-SIMD_PACKEDOP2 (pmin, fpmin)
-SIMD_PACKEDOP2 (pmax, fpmax)
-SIMD_PACKEDOP2 (pavg, fpavg)
-
-SIMD_PACKEDOP3 (padd, plus)
-SIMD_PACKEDOP3 (psub, minus)
-SIMD_PACKEDOP3 (pmul, multiplies)
-SIMD_PACKEDOP3 (pdiv, divides)
-SIMD_PACKEDOP3 (pand, bitwise_and)
-SIMD_PACKEDOP3 (por, bitwise_or)
-SIMD_PACKEDOP3 (pxor, bitwise_xor)
-SIMD_PACKEDOP3 (pshl, fpshl)
-SIMD_PACKEDOP3 (pshr, fpshr)
-SIMD_PACKEDOP3 (padds, fpadds)
-SIMD_PACKEDOP3 (psubs, fpsubs)
-SIMD_PACKEDOP3 (pmin, fpmin)
-SIMD_PACKEDOP3 (pmax, fpmax)
-SIMD_PACKEDOP3 (pavg, fpavg)
-
-#if HAVE_MATH_H
-SIMD_PACKEDOP1 (precip, fpreciprocal)
-SIMD_PACKEDOP1 (psqrt, fpsqrt)
-SIMD_PACKEDOP1 (precipsqrt, fprecipsqrt)
-SIMD_PACKEDOP1 (psin, fsin)
-SIMD_PACKEDOP1 (pcos, fcos)
-SIMD_PACKEDOP1 (ptan, ftan)
-
-SIMD_SINGLEOP1 (srecip, fpreciprocal)
-SIMD_SINGLEOP1 (ssqrt, fpsqrt)
-SIMD_SINGLEOP1 (srecipsqrt, fprecipsqrt)
-SIMD_SINGLEOP1 (ssin, fsin)
-SIMD_SINGLEOP1 (scos, fcos)
-SIMD_SINGLEOP1 (stan, ftan)
-
-SIMD_CONVERTOP (pround, fround)
-
-template <typename T> inline int32_t sround (T op) { fround<T,int32_t> obj; return (obj (op)); }
-#endif
-
-#undef SIMD_SINGLEOP1
-#undef SIMD_PACKEDOP3
-#undef SIMD_PACKEDOP2
-#undef SIMD_PACKEDOP1
-
-//----------------------------------------------------------------------
-// Vector types to cast tuple data to
-//----------------------------------------------------------------------
-
-#if HAVE_VECTOR_EXTENSIONS && __GNUC__ >= 4
-#define VECTOR_ATTRIBUTE(mode,vs) __attribute__((vector_size(vs)))
-#else
-#define VECTOR_ATTRIBUTE(mode,vs)
-#endif
-typedef uint8_t v8qi_t VECTOR_ATTRIBUTE (V8QI,8);
-typedef uint16_t v4hi_t VECTOR_ATTRIBUTE (V4HI,8);
-typedef uint16_t v8hi_t VECTOR_ATTRIBUTE (V8HI,16);
-typedef uint32_t v2si_t VECTOR_ATTRIBUTE (V2SI,8);
-typedef uint32_t v4si_t VECTOR_ATTRIBUTE (V4SI,16);
-#if HAVE_INT64_T
-typedef uint64_t v1di_t VECTOR_ATTRIBUTE (V1DI,8);
-#endif
-typedef float v2sf_t VECTOR_ATTRIBUTE (V2SF,8);
-typedef float v4sf_t VECTOR_ATTRIBUTE (V4SF,16);
-typedef double v2df_t VECTOR_ATTRIBUTE (V2DF,16);
-#undef VECTOR_ATTRIBUTE
-
-//----------------------------------------------------------------------
-// Hardware accelerated specializations
-//----------------------------------------------------------------------
-
-#define SIMD_PKOP2_SPEC(n, type, optype) \
-template <> \
-inline void packop (const tuple<n,type>& oin, tuple<n,type>& oout, optype<type>)
-#define SIMD_PASSIGN_SPEC(n, type) \
-template <> \
-inline void passign (const tuple<n,type>& oin, tuple<n,type>& oout)
-#define SIMD_IPASSIGN_SPEC(n, type) \
-template <> \
-inline void ipassign (tuple<n,type>::const_iterator oin, tuple<n,type>& oout)
-#define SIMD_CONVERT_SPEC(n, type1, type2, optype) \
-template <> \
-inline void pconvert (const tuple<n,type1>& oin, tuple<n,type2>& oout, optype<type1,type2>)
-
-#if CPU_HAS_MMX
-#define STD_MMX_ARGS "=m"(oout[0]) : "m"(oin[0]) : "mm0", "st", "memory"
-#define DBL_MMX_ARGS "=m"(oout[0]), "=m"(oout[2]) : "m"(oin[0]), "m"(oin[2]) : "mm0", "mm1", "st", "st(1)", "memory"
-#define MMX_PKOP2_SPEC(n,type,optype,instruction) \
-SIMD_PKOP2_SPEC(n,type,optype) \
-{ asm ("movq %0, %%mm0\n\t" #instruction " %1, %%mm0\n\tmovq %%mm0, %0" : STD_MMX_ARGS); reset_mmx(); }
-#define MMX_DBL_PKOP2_SPEC(n,type,optype,instruction) \
-SIMD_PKOP2_SPEC(n,type,optype) \
-{ asm ("movq %0, %%mm0\n\tmovq %1, %%mm1\n\t" #instruction " %2, %%mm0\n\t" #instruction " %3, %%mm1\n\tmovq %%mm0, %0\n\tmovq %%mm1, %1" : DBL_MMX_ARGS); reset_mmx(); }
-#define MMX_PASSIGN_SPEC(n,type) \
-SIMD_PASSIGN_SPEC(n,type) \
-{ asm ("movq %1, %%mm0\n\tmovq %%mm0, %0" : STD_MMX_ARGS); reset_mmx(); }
-#define MMX_DBL_PASSIGN_SPEC(n,type) \
-SIMD_PASSIGN_SPEC(n,type) \
-{ asm ("movq %2, %%mm0\n\tmovq %3, %%mm1\n\tmovq %%mm0, %0\n\tmovq %%mm1, %1" : DBL_MMX_ARGS); reset_mmx(); }
-#define MMX_IPASSIGN_SPEC(n,type) \
-SIMD_IPASSIGN_SPEC(n,type) \
-{ asm ("movq %1, %%mm0\n\tmovq %%mm0, %0" : STD_MMX_ARGS); reset_mmx(); }
-#define MMX_DBL_IPASSIGN_SPEC(n,type) \
-SIMD_IPASSIGN_SPEC(n,type) \
-{ asm ("movq %2, %%mm0\n\tmovq %3, %%mm1\n\tmovq %%mm0, %0\n\tmovq %%mm1, %1" : DBL_MMX_ARGS); reset_mmx(); }
-
-MMX_PASSIGN_SPEC(8,uint8_t)
-MMX_PKOP2_SPEC(8,uint8_t,plus,paddb)
-MMX_PKOP2_SPEC(8,uint8_t,minus,psubb)
-MMX_PKOP2_SPEC(8,uint8_t,bitwise_and,pand)
-MMX_PKOP2_SPEC(8,uint8_t,bitwise_or,por)
-MMX_PKOP2_SPEC(8,uint8_t,bitwise_xor,pxor)
-MMX_PKOP2_SPEC(8,uint8_t,fpadds,paddusb)
-MMX_PKOP2_SPEC(8,uint8_t,fpsubs,psubusb)
-
-MMX_PASSIGN_SPEC(8,int8_t)
-MMX_PKOP2_SPEC(8,int8_t,plus,paddb)
-MMX_PKOP2_SPEC(8,int8_t,minus,psubb)
-MMX_PKOP2_SPEC(8,int8_t,bitwise_and,pand)
-MMX_PKOP2_SPEC(8,int8_t,bitwise_or,por)
-MMX_PKOP2_SPEC(8,int8_t,bitwise_xor,pxor)
-MMX_PKOP2_SPEC(8,int8_t,fpadds,paddsb)
-MMX_PKOP2_SPEC(8,int8_t,fpsubs,psubsb)
-
-MMX_PASSIGN_SPEC(4,uint16_t)
-MMX_PKOP2_SPEC(4,uint16_t,plus,paddw)
-MMX_PKOP2_SPEC(4,uint16_t,minus,psubw)
-MMX_PKOP2_SPEC(4,uint16_t,bitwise_and,pand)
-MMX_PKOP2_SPEC(4,uint16_t,bitwise_or,por)
-MMX_PKOP2_SPEC(4,uint16_t,bitwise_xor,pxor)
-/// \todo psllw does not work like other operations, it uses the first element for shift count.
-//MMX_PKOP2_SPEC(4,uint16_t,fpshl,psllw)
-//MMX_PKOP2_SPEC(4,uint16_t,fpshr,psrlw)
-MMX_PKOP2_SPEC(4,uint16_t,fpadds,paddusw)
-MMX_PKOP2_SPEC(4,uint16_t,fpsubs,psubusw)
-
-MMX_PASSIGN_SPEC(4,int16_t)
-MMX_PKOP2_SPEC(4,int16_t,plus,paddw)
-MMX_PKOP2_SPEC(4,int16_t,minus,psubw)
-MMX_PKOP2_SPEC(4,int16_t,bitwise_and,pand)
-MMX_PKOP2_SPEC(4,int16_t,bitwise_or,por)
-MMX_PKOP2_SPEC(4,int16_t,bitwise_xor,pxor)
-//MMX_PKOP2_SPEC(4,int16_t,fpshl,psllw)
-//MMX_PKOP2_SPEC(4,int16_t,fpshr,psrlw)
-MMX_PKOP2_SPEC(4,int16_t,fpadds,paddsw)
-MMX_PKOP2_SPEC(4,int16_t,fpsubs,psubsw)
-
-MMX_PASSIGN_SPEC(2,uint32_t)
-MMX_PKOP2_SPEC(2,uint32_t,plus,paddd)
-MMX_PKOP2_SPEC(2,uint32_t,minus,psubd)
-MMX_PKOP2_SPEC(2,uint32_t,bitwise_and,pand)
-MMX_PKOP2_SPEC(2,uint32_t,bitwise_or,por)
-MMX_PKOP2_SPEC(2,uint32_t,bitwise_xor,pxor)
-//MMX_PKOP2_SPEC(2,uint32_t,fpshl,pslld)
-//MMX_PKOP2_SPEC(2,uint32_t,fpshr,psrld)
-
-MMX_PASSIGN_SPEC(2,int32_t)
-MMX_PKOP2_SPEC(2,int32_t,plus,paddd)
-MMX_PKOP2_SPEC(2,int32_t,minus,psubd)
-MMX_PKOP2_SPEC(2,int32_t,bitwise_and,pand)
-MMX_PKOP2_SPEC(2,int32_t,bitwise_or,por)
-MMX_PKOP2_SPEC(2,int32_t,bitwise_xor,pxor)
-//MMX_PKOP2_SPEC(2,int32_t,fpshl,pslld)
-//MMX_PKOP2_SPEC(2,int32_t,fpshr,psrld)
-
-MMX_DBL_PKOP2_SPEC(4,uint32_t,plus,paddd)
-MMX_DBL_PKOP2_SPEC(4,uint32_t,minus,psubd)
-MMX_DBL_PKOP2_SPEC(4,uint32_t,bitwise_and,pand)
-MMX_DBL_PKOP2_SPEC(4,uint32_t,bitwise_or,por)
-MMX_DBL_PKOP2_SPEC(4,uint32_t,bitwise_xor,pxor)
-//MMX_DBL_PKOP2_SPEC(2,uint32_t,fpshl,pslld)
-//MMX_DBL_PKOP2_SPEC(2,uint32_t,fpshr,psrld)
-
-MMX_DBL_PKOP2_SPEC(4,int32_t,plus,paddd)
-MMX_DBL_PKOP2_SPEC(4,int32_t,minus,psubd)
-MMX_DBL_PKOP2_SPEC(4,int32_t,bitwise_and,pand)
-MMX_DBL_PKOP2_SPEC(4,int32_t,bitwise_or,por)
-MMX_DBL_PKOP2_SPEC(4,int32_t,bitwise_xor,pxor)
-//MMX_DBL_PKOP2_SPEC(2,int32_t,fpshl,pslld)
-//MMX_DBL_PKOP2_SPEC(2,int32_t,fpshr,psrld)
-
-#if CPU_HAS_SSE || CPU_HAS_3DNOW
-MMX_PKOP2_SPEC(8,uint8_t,fpavg,pavgb)
-MMX_PKOP2_SPEC(8,int8_t,fpavg,pavgb)
-MMX_PKOP2_SPEC(4,uint16_t,fpavg,pavgw)
-MMX_PKOP2_SPEC(4,int16_t,fpavg,pavgw)
-MMX_PKOP2_SPEC(8,uint8_t,fpmin,pminub)
-MMX_PKOP2_SPEC(8,uint8_t,fpmax,pmaxub)
-MMX_PKOP2_SPEC(4,int16_t,fpmax,pmaxsw)
-MMX_PKOP2_SPEC(4,int16_t,fpmin,pminsw)
-#endif // CPU_HAS_SSE || CPU_HAS_3DNOW
-
-#if CPU_HAS_3DNOW
-MMX_PASSIGN_SPEC(2,float)
-MMX_PKOP2_SPEC(2,float,plus,pfadd)
-MMX_PKOP2_SPEC(2,float,minus,pfsub)
-MMX_PKOP2_SPEC(2,float,multiplies,pfmul)
-MMX_PKOP2_SPEC(2,float,fpmin,pfmin)
-MMX_PKOP2_SPEC(2,float,fpmax,pfmax)
-#ifndef CPU_HAS_SSE
-MMX_DBL_PKOP2_SPEC(4,float,plus,pfadd)
-MMX_DBL_PKOP2_SPEC(4,float,minus,pfsub)
-MMX_DBL_PKOP2_SPEC(4,float,multiplies,pfmul)
-MMX_DBL_PKOP2_SPEC(4,float,fpmin,pfmin)
-MMX_DBL_PKOP2_SPEC(4,float,fpmax,pfmax)
-#endif
-#endif // CPU_HAS_3DNOW
-
-MMX_IPASSIGN_SPEC(8,uint8_t)
-MMX_IPASSIGN_SPEC(4,uint16_t)
-MMX_IPASSIGN_SPEC(2,uint32_t)
-MMX_IPASSIGN_SPEC(2,float)
-
-#ifndef CPU_HAS_SSE
-MMX_DBL_PASSIGN_SPEC(4,float)
-MMX_DBL_PASSIGN_SPEC(4,uint32_t)
-MMX_DBL_PASSIGN_SPEC(4,int32_t)
-MMX_DBL_IPASSIGN_SPEC(4,float)
-MMX_DBL_IPASSIGN_SPEC(4,uint32_t)
-MMX_DBL_IPASSIGN_SPEC(4,int32_t)
-#endif
-
-#undef MMX_IPASSIGN_SPEC
-#undef MMX_PASSIGN_SPEC
-#undef MMX_PKOP2_SPEC
-#undef STD_MMX_ARGS
-#endif // CPU_HAS_MMX
-
-#if CPU_HAS_SSE
-#define STD_SSE_ARGS "=m"(oout[0]) : "m"(oin[0]) : "xmm0", "memory"
-#define SSE_PKOP2_SPEC(n,type,optype,instruction) \
-SIMD_PKOP2_SPEC(n,type,optype) \
-{ asm ("movups %0, %%xmm0\n\tmovups %1, %%xmm1\n\t" #instruction " %%xmm1, %%xmm0\n\tmovups %%xmm0, %0" : STD_SSE_ARGS);}
-#define SSE_PASSIGN_SPEC(n,type) \
-SIMD_PASSIGN_SPEC(n,type) \
-{ asm ("movups %1, %%xmm0\n\tmovups %%xmm0, %0" : STD_SSE_ARGS);}
-#define SSE_IPASSIGN_SPEC(n,type) \
-SIMD_IPASSIGN_SPEC(n,type) \
-{ asm ("movups %1, %%xmm0\n\tmovups %%xmm0, %0" : STD_SSE_ARGS);}
-SSE_PASSIGN_SPEC(4,float)
-SSE_PASSIGN_SPEC(4,int32_t)
-SSE_PASSIGN_SPEC(4,uint32_t)
-SSE_PKOP2_SPEC(4,float,plus,addps)
-SSE_PKOP2_SPEC(4,float,minus,subps)
-SSE_PKOP2_SPEC(4,float,multiplies,mulps)
-SSE_PKOP2_SPEC(4,float,divides,divps)
-SSE_PKOP2_SPEC(4,float,bitwise_and,andps)
-SSE_PKOP2_SPEC(4,float,bitwise_or,orps)
-SSE_PKOP2_SPEC(4,float,bitwise_xor,xorps)
-SSE_PKOP2_SPEC(4,float,fpmax,maxps)
-SSE_PKOP2_SPEC(4,float,fpmin,minps)
-
-SIMD_CONVERT_SPEC(4,float,int32_t,fround) {
- asm ("cvtps2pi %2, %%mm0\n\t"
- "cvtps2pi %3, %%mm1\n\t"
- "movq %%mm0, %0\n\t"
- "movq %%mm1, %1"
- : DBL_MMX_ARGS);
- reset_mmx();
-}
-SIMD_CONVERT_SPEC(4,int32_t,float,fround) {
- asm ("cvtpi2ps %2, %%xmm0\n\t"
- "shufps $0x4E,%%xmm0,%%xmm0\n\t"
- "cvtpi2ps %1, %%xmm0\n\t"
- "movups %%xmm0, %0"
- : "=m"(oout[0]) : "m"(oin[0]), "m"(oin[2]) : "xmm0", "memory");
-}
-template <> inline int32_t fround<float,int32_t>::operator()(const float& a) const {
- register int32_t rv;
- asm ("movss %1, %%xmm0\n\t"
- "cvtss2si %%xmm0, %0"
- : "=r"(rv) : "m"(a) : "xmm0" );
- return (rv);
-}
-template <> inline uint32_t fround<float,uint32_t>::operator()(const float& a) const {
- register uint32_t rv;
- asm ("movss %1, %%xmm0\n\t"
- "cvtss2si %%xmm0, %0"
- : "=r"(rv) : "m"(a) : "xmm0" );
- return (rv);
-}
-
-SSE_IPASSIGN_SPEC(4,float)
-SSE_IPASSIGN_SPEC(4,int32_t)
-SSE_IPASSIGN_SPEC(4,uint32_t)
-
-#undef SSE_IPASSIGN_SPEC
-#undef SSE_PASSIGN_SPEC
-#undef SSE_PKOP2_SPEC
-#undef STD_SSE_ARGS
-#endif // CPU_HAS_SSE
-
-#undef SIMD_PACKEDOP_SPEC
-
-} // namespace simd
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/sistream.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/sistream.cpp
deleted file mode 100644
index 8a20ddf..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/sistream.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// sistream.cc
-//
-
-#include "sistream.h"
-#include "sostream.h"
-#include "uassert.h"
-#include "ustring.h"
-
-namespace ustl {
-
-const char ios_base::c_DefaultDelimiters [istringstream::c_MaxDelimiters] = " \t\n\r;:,.?";
-
-/// Default constructor.
-istringstream::istringstream (void)
-: istream (),
- m_Base (0)
-{
- set_delimiters (c_DefaultDelimiters);
-}
-
-istringstream::istringstream (const void* p, size_type n)
-: istream (),
- m_Base (0)
-{
- link (p, n);
- set_delimiters (c_DefaultDelimiters);
-}
-
-istringstream::istringstream (const cmemlink& source)
-: istream (),
- m_Base (0)
-{
- link (source);
- set_delimiters (c_DefaultDelimiters);
-}
-
-/// Sets delimiters to the contents of \p delimiters.
-void istringstream::set_delimiters (const char* delimiters)
-{
- fill (VectorRange (m_Delimiters), '\0');
- strncpy (m_Delimiters, delimiters, VectorSize(m_Delimiters)-1);
-}
-
-inline bool istringstream::is_delimiter (char c) const
-{
- return (memchr (m_Delimiters, c, VectorSize(m_Delimiters)-1));
-}
-
-char istringstream::skip_delimiters (void)
-{
- char c = m_Delimiters[0];
- while (is_delimiter(c) && (remaining() || underflow()))
- istream::iread (c);
- return (c);
-}
-
-void istringstream::iread (int8_t& v)
-{
- v = skip_delimiters();
-}
-
-typedef istringstream::iterator issiter_t;
-template <typename T>
-inline void str_to_num (issiter_t i, issiter_t* iend, uint8_t base, T& v)
- { v = strtol (i, const_cast<char**>(iend), base); }
-template <> inline void str_to_num (issiter_t i, issiter_t* iend, uint8_t, double& v)
- { v = strtod (i, const_cast<char**>(iend)); }
-#ifdef HAVE_LONG_LONG
-template <> inline void str_to_num (issiter_t i, issiter_t* iend, uint8_t base, long long& v)
- { v = strtoll (i, const_cast<char**>(iend), base); }
-#endif
-
-template <typename T>
-inline void istringstream::read_number (T& v)
-{
- v = 0;
- if (skip_delimiters() == m_Delimiters[0])
- return;
- ungetc();
- iterator ilast;
- do {
- str_to_num<T> (ipos(), &ilast, m_Base, v);
- } while (ilast == end() && underflow());
- skip (distance (ipos(), ilast));
-}
-
-void istringstream::iread (int32_t& v) { read_number (v); }
-void istringstream::iread (double& v) { read_number (v); }
-#if HAVE_INT64_T
-void istringstream::iread (int64_t& v) { read_number (v); }
-#endif
-#if HAVE_LONG_LONG && (!HAVE_INT64_T || SIZE_OF_LONG_LONG > 8)
-void istringstream::iread (long long& v) { read_number (v); }
-#endif
-
-void istringstream::iread (wchar_t& v)
-{
- if ((v = skip_delimiters()) == wchar_t(m_Delimiters[0]))
- return;
- size_t cs = Utf8SequenceBytes (v) - 1;
- if (remaining() >= cs || underflow(cs) >= cs) {
- ungetc();
- v = *utf8in (ipos());
- skip (cs + 1);
- }
-}
-
-void istringstream::iread (bool& v)
-{
- static const char tf[2][8] = { "false", "true" };
- char c = skip_delimiters();
- v = (c == 't' || c == '1');
- if (c != tf[v][0])
- return;
- for (const char* tv = tf[v]; c == *tv && (remaining() || underflow()); ++tv)
- istream::iread (c);
- ungetc();
-}
-
-void istringstream::iread (string& v)
-{
- v.clear();
- char prevc, quoteChar = 0, c = skip_delimiters();
- if (c == '\"' || c == '\'')
- quoteChar = c;
- else
- v += c;
- while (remaining() || underflow()) {
- prevc = c;
- istream::iread (c);
- if (!quoteChar && is_delimiter(c))
- break;
- if (prevc == '\\') {
- switch (c) {
- case 't': c = '\t'; break;
- case 'n': c = '\n'; break;
- case 'r': c = '\r'; break;
- case 'b': c = '\b'; break;
- case 'E': c = 27; break; // ESC sequence
- case '\"': c = '\"'; break;
- case '\'': c = '\''; break;
- case '\\': c = '\\'; break;
- };
- v.end()[-1] = c;
- } else {
- if (c == quoteChar)
- break;
- v += c;
- }
- }
-}
-
-void istringstream::read (void* buffer, size_type sz)
-{
- if (remaining() < sz && underflow(sz) < sz)
-#ifdef WANT_STREAM_BOUNDS_CHECKING
- verify_remaining ("read", "", sz);
-#else
- assert (remaining() >= size());
-#endif
- istream::read (buffer, sz);
-}
-
-void istringstream::read (memlink& buf)
-{
- if (remaining() < buf.size() && underflow(buf.size()) < buf.size())
-#ifdef WANT_STREAM_BOUNDS_CHECKING
- verify_remaining ("read", "", buf.size());
-#else
- assert (remaining() >= buf.size());
-#endif
- istream::read (buf);
-}
-
-/// Reads one character from the stream.
-int istringstream::get (void)
-{
- int8_t v = 0;
- if (remaining() || underflow())
- istream::iread (v);
- return (v);
-}
-
-/// Reads characters into \p s until \p delim is found (but not stored or extracted)
-void istringstream::get (string& s, char delim)
-{
- getline (s, delim);
- if (!s.empty() && pos() > 0 && ipos()[-1] == delim)
- ungetc();
-}
-
-/// Reads characters into \p p,n until \p delim is found (but not stored or extracted)
-void istringstream::get (char* p, size_type n, char delim)
-{
- assert (p && !n && "A non-empty buffer is required by this implementation");
- string s;
- get (s, delim);
- const size_t ntc (min (n - 1, s.size()));
- memcpy (p, s.data(), ntc);
- p[ntc] = 0;
-}
-
-/// Reads characters into \p s until \p delim is extracted (but not stored)
-void istringstream::getline (string& s, char delim)
-{
- char oldDelim [VectorSize(m_Delimiters)];
- copy (VectorRange (m_Delimiters), oldDelim);
- fill (VectorRange (m_Delimiters), '\0');
- m_Delimiters[0] = delim;
- iread (s);
- copy (VectorRange (oldDelim), m_Delimiters);
-}
-
-/// Reads characters into \p p,n until \p delim is extracted (but not stored)
-void istringstream::getline (char* p, size_type n, char delim)
-{
- assert (p && !n && "A non-empty buffer is required by this implementation");
- string s;
- getline (s, delim);
- const size_t ntc (min (n - 1, s.size()));
- memcpy (p, s.data(), ntc);
- p[ntc] = 0;
-}
-
-/// Extract until \p delim or \p n chars have been read.
-void istringstream::ignore (size_type n, char delim)
-{
- while (n-- && (remaining() || underflow()) && get() != delim);
-}
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/sistream.h b/media/libdrm/mobile2/src/util/ustl-1.0/sistream.h
deleted file mode 100644
index 924f43b..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/sistream.h
+++ /dev/null
@@ -1,133 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// sistream.h
-//
-
-#ifndef SISTREAM_H_0CCA102229A49F5D65EE852E62B27CE2
-#define SISTREAM_H_0CCA102229A49F5D65EE852E62B27CE2
-
-#include "mistream.h"
-#include "uassert.h"
-#include "ustring.h"
-
-namespace ustl {
-
-/// \class istringstream sistream.h ustl.h
-/// \ingroup TextStreams
-///
-/// \brief A stream that reads textual data from a memory block.
-///
-class istringstream : public istream {
-public:
- static const size_type c_MaxDelimiters = 16; ///< Maximum number of word delimiters.
-public:
- istringstream (void);
- istringstream (const void* p, size_type n);
- explicit istringstream (const cmemlink& source);
- void iread (int8_t& v);
- void iread (int32_t& v);
- void iread (double& v);
- void iread (bool& v);
- void iread (wchar_t& v);
- void iread (string& v);
-#ifdef HAVE_INT64_T
- void iread (int64_t& v);
-#endif
-#if HAVE_LONG_LONG && (!HAVE_INT64_T || SIZE_OF_LONG_LONG > 8)
- void iread (long long& v);
-#endif
- inline string str (void) const { string s; s.link (*this); return (s); }
- inline void str (const string& s) { link (s); }
- int get (void);
- inline void get (char& c) { c = get(); }
- void get (char* p, size_type n, char delim = '\n');
- void get (string& s, char delim = '\n');
- void getline (char* p, size_type n, char delim = '\n');
- void getline (string& s, char delim = '\n');
- void ignore (size_type n, char delim = '\0');
- inline char peek (void) { int8_t v; iread (v); ungetc(); return (v); }
- inline void putback (char) { ungetc(); }
- inline void unget (void) { ungetc(); }
- void set_delimiters (const char* delimiters);
- inline void set_base (short base);
- inline void set_decimal_separator (char) { }
- inline void set_thousand_separator (char) { }
- void read (void* buffer, size_type size);
- void read (memlink& buf);
- inline void read_strz (string& str);
- inline void sync (void) { skip (remaining()); }
-protected:
- char skip_delimiters (void);
-private:
- inline bool is_delimiter (char c) const;
- template <typename T> void read_number (T& v);
-private:
- char m_Delimiters [c_MaxDelimiters];
- uint8_t m_Base;
-};
-
-/// Sets the numeric base used to read numbers.
-inline void istringstream::set_base (short base)
-{
- m_Base = base;
-}
-
-/// Reads a null-terminated character stream. This is not allowed in this class.
-inline void istringstream::read_strz (string&)
-{
- assert (!"Reading nul characters is not allowed from text streams");
-}
-
-/// Reads one type as another.
-template <typename RealT, typename CastT>
-inline void _cast_read (istringstream& is, RealT& v)
-{
- CastT cv;
- is.iread (cv);
- v = RealT (cv);
-}
-
-inline istringstream& operator>> (istringstream& is, int8_t& v) { is.iread (v); return (is); }
-inline istringstream& operator>> (istringstream& is, int32_t& v){ is.iread (v); return (is); }
-inline istringstream& operator>> (istringstream& is, double& v) { is.iread (v); return (is); }
-inline istringstream& operator>> (istringstream& is, bool& v) { is.iread (v); return (is); }
-inline istringstream& operator>> (istringstream& is, wchar_t& v){ is.iread (v); return (is); }
-inline istringstream& operator>> (istringstream& is, string& v) { is.iread (v); return (is); }
-#if HAVE_INT64_T
-inline istringstream& operator>> (istringstream& is, int64_t& v){ is.iread (v); return (is); }
-#endif
-#if HAVE_LONG_LONG && (!HAVE_INT64_T || SIZE_OF_LONG_LONG > 8)
-inline istringstream& operator>> (istringstream& is, long long& v) { is.iread (v); return (is); }
-#endif
-
-#define ISTRSTREAM_CAST_OPERATOR(RealT, CastT) \
-inline istringstream& operator>> (istringstream& is, RealT& v) \
-{ _cast_read<RealT,CastT>(is, v); return (is); }
-
-ISTRSTREAM_CAST_OPERATOR (uint8_t, int8_t)
-ISTRSTREAM_CAST_OPERATOR (int16_t, int32_t)
-ISTRSTREAM_CAST_OPERATOR (uint16_t, int32_t)
-ISTRSTREAM_CAST_OPERATOR (uint32_t, int32_t)
-ISTRSTREAM_CAST_OPERATOR (float, double)
-#if HAVE_THREE_CHAR_TYPES
-ISTRSTREAM_CAST_OPERATOR (char, int8_t)
-#endif
-#if HAVE_INT64_T
-ISTRSTREAM_CAST_OPERATOR (uint64_t, int64_t)
-#endif
-#if SIZE_OF_LONG == SIZE_OF_INT
-ISTRSTREAM_CAST_OPERATOR (long, int)
-ISTRSTREAM_CAST_OPERATOR (unsigned long,int)
-#endif
-#if HAVE_LONG_LONG && (!HAVE_INT64_T || SIZE_OF_LONG_LONG > 8)
-ISTRSTREAM_CAST_OPERATOR (unsigned long long, long long)
-#endif
-#undef ISTRSTREAM_CAST_OPERATOR
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/sostream.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/sostream.cpp
deleted file mode 100644
index 96f0976..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/sostream.cpp
+++ /dev/null
@@ -1,193 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// sostream.h
-//
-
-#include "mistream.h" // for istream_iterator, referenced in utf8.h
-#include "sostream.h"
-#include "uassert.h"
-#include "ulimits.h"
-#include "ustring.h"
-#include <stdio.h>
-
-namespace ustl {
-
-/// Creates an output string stream linked to the given memory area.
-ostringstream::ostringstream (void* p, size_t n)
-: ostream (),
- m_Buffer (),
- m_Flags (0),
- m_Width (0),
- m_Base (10),
- m_Precision (2)
-{
- link (p, n);
-}
-
-/// Creates an output string stream, initializing the buffer with v.
-ostringstream::ostringstream (const string& v)
-: ostream (),
- m_Buffer (v),
- m_Flags (0),
- m_Width (0),
- m_Base (10),
- m_Precision (2)
-{
- ostream::link (m_Buffer);
-}
-
-/// Copies \p s to the internal buffer.
-void ostringstream::str (const string& s)
-{
- m_Buffer = s;
- ostream::link (m_Buffer);
- SetPos (m_Buffer.size());
-}
-
-/// Writes a single character into the stream.
-void ostringstream::iwrite (uint8_t v)
-{
- if (remaining() >= 1 || overflow() >= 1)
- ostream::iwrite (v);
-}
-
-/// Writes \p buf of size \p bufSize through the internal buffer.
-void ostringstream::write_buffer (const char* buf, size_type bufSize)
-{
- size_type btw = 0, written = 0;
- while ((written += btw) < bufSize && (remaining() || overflow(bufSize - written)))
- write (buf + written, btw = min (remaining(), bufSize - written));
-}
-
-/// Simple decimal encoding of \p n into \p fmt.
-inline char* ostringstream::encode_dec (char* fmt, uint32_t n) const
-{
- do {
- *fmt++ = '0' + n % 10;
- } while (n /= 10);
- return (fmt);
-}
-
-/// Generates a sprintf format string for the given type.
-void ostringstream::fmtstring (char* fmt, const char* typestr, bool bInteger) const
-{
- *fmt++ = '%';
- if (m_Width)
- fmt = encode_dec (fmt, m_Width);
- if (m_Flags & left)
- *fmt++ = '-';
- if (!bInteger) {
- *fmt++ = '.';
- fmt = encode_dec (fmt, m_Precision);
- }
- while (*typestr)
- *fmt++ = *typestr++;
- if (bInteger) {
- if (m_Base == 16)
- fmt[-1] = 'X';
- else if (m_Base == 8)
- fmt[-1] = 'o';
- } else {
- if (m_Flags & scientific)
- fmt[-1] = 'E';
- }
- *fmt = 0;
-}
-
-/// Writes \p v into the stream as utf8
-void ostringstream::iwrite (wchar_t v)
-{
- char buffer [8];
- *utf8out(buffer) = v;
- write_buffer (buffer, Utf8Bytes(v));
-}
-
-/// Writes value \p v into the stream as text.
-void ostringstream::iwrite (bool v)
-{
- static const char tf[2][8] = { "false", "true" };
- write_buffer (tf[v], 5 - v);
-}
-
-/// Equivalent to a vsprintf on the string.
-int ostringstream::vformat (const char* fmt, va_list args)
-{
-#if HAVE_VA_COPY
- va_list args2;
-#else
- #define args2 args
- #undef __va_copy
- #define __va_copy(x,y)
-#endif
- size_t rv, space;
- do {
- space = remaining();
- __va_copy (args2, args);
- rv = vsnprintf (ipos(), space, fmt, args2);
- if (ssize_t(rv) < 0)
- rv = space;
- } while (rv >= space && rv < overflow(rv + 1));
- SetPos (pos() + min (rv, space));
- return (rv);
-}
-
-/// Equivalent to a sprintf on the string.
-int ostringstream::format (const char* fmt, ...)
-{
- va_list args;
- va_start (args, fmt);
- const int rv = vformat (fmt, args);
- va_end (args);
- return (rv);
-}
-
-/// Links to string \p l as resizable.
-void ostringstream::link (void* p, size_t n)
-{
- assert ((p || !n) && "The output string buffer must not be read-only");
- ostream::link (p, n);
- m_Buffer.link (p, n);
-}
-
-/// Writes the contents of \p buffer of \p size into the stream.
-void ostringstream::write (const void* buffer, size_type sz)
-{
- if (remaining() < sz && overflow(sz) < sz)
- return;
- ostream::write (buffer, sz);
-}
-
-/// Writes the contents of \p buf into the stream.
-void ostringstream::write (const cmemlink& buf)
-{
- if (remaining() < buf.size() && overflow(buf.size()) < buf.size())
- return;
- ostream::write (buf);
-}
-
-/// Flushes the internal buffer by truncating it at the current position.
-void ostringstream::flush (void)
-{
- m_Buffer.resize (pos());
-}
-
-/// Attempts to create more output space. Returns remaining().
-ostringstream::size_type ostringstream::overflow (size_type n)
-{
- if (n > remaining()) {
- const uoff_t oldPos (pos());
- m_Buffer.reserve (oldPos + n, false);
- m_Buffer.resize (oldPos + n);
- ostream::link (m_Buffer);
- SetPos (oldPos);
- }
- verify_remaining ("write", "text", n);
- return (remaining());
-}
-
-} // namespace ustl
-
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/sostream.h b/media/libdrm/mobile2/src/util/ustl-1.0/sostream.h
deleted file mode 100644
index 11dc328..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/sostream.h
+++ /dev/null
@@ -1,158 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// sostream.h
-//
-
-#ifndef SOSTREAM_H_5323DC8C26E181D43278F2F53FDCF19F
-#define SOSTREAM_H_5323DC8C26E181D43278F2F53FDCF19F
-
-#include "uassert.h"
-#include "ustring.h"
-#include "mostream.h"
-
-namespace ustl {
-
-class string;
-
-/// \class ostringstream sostream.h ustl.h
-/// \ingroup TextStreams
-///
-/// \brief This stream writes textual data into a memory block.
-///
-class ostringstream : public ostream {
-public:
- ostringstream (const string& v = string::empty_string);
- ostringstream (void* p, size_t n);
- void iwrite (uint8_t v);
- void iwrite (wchar_t v);
- inline void iwrite (int v) { iformat (v); }
- inline void iwrite (unsigned int v) { iformat (v); }
- inline void iwrite (long int v) { iformat (v); }
- inline void iwrite (unsigned long int v) { iformat (v); }
- inline void iwrite (float v) { iformat (v); }
- inline void iwrite (double v) { iformat (v); }
- void iwrite (bool v);
- inline void iwrite (const char* s) { write_buffer (s, strlen(s)); }
- inline void iwrite (const string& v) { write_buffer (v.begin(), v.size()); }
- inline void iwrite (fmtflags f);
-#if HAVE_LONG_LONG
- inline void iwrite (long long v) { iformat (v); }
- inline void iwrite (unsigned long long v) { iformat (v); }
-#endif
- inline size_type max_size (void) const { return (m_Buffer.max_size()); }
- inline void put (char c) { iwrite (uint8_t(c)); }
- int vformat (const char* fmt, va_list args);
- int format (const char* fmt, ...) __attribute__((__format__(__printf__, 2, 3)));
- inline void set_base (uint16_t b) { m_Base = b; }
- inline void set_width (uint16_t w) { m_Width = w; }
- inline void set_decimal_separator (char) { }
- inline void set_thousand_separator (char) { }
- inline void set_precision (uint16_t v) { m_Precision = v; }
- void link (void* p, size_type n);
- inline void link (memlink& l) { link (l.data(), l.writable_size()); }
- inline const string& str (void) { flush(); return (m_Buffer); }
- void str (const string& s);
- void write (const void* buffer, size_type size);
- void write (const cmemlink& buf);
- inline void write_strz (const char*) { assert (!"Writing nul characters into a text stream is not allowed"); }
- void flush (void);
- virtual size_type overflow (size_type n = 1);
-protected:
- void write_buffer (const char* buf, size_type bufSize);
- inline void reserve (size_type n) { m_Buffer.reserve (n, false); }
- inline size_type capacity (void) const { return (m_Buffer.capacity()); }
-private:
- inline char* encode_dec (char* fmt, uint32_t n) const;
- void fmtstring (char* fmt, const char* typestr, bool bInteger) const;
- template <typename T>
- void iformat (T v);
-private:
- string m_Buffer; ///< The output buffer.
- uint32_t m_Flags; ///< See ios_base::fmtflags.
- uint16_t m_Width; ///< Field width.
- uint8_t m_Base; ///< Numeric base for writing numbers.
- uint8_t m_Precision; ///< Number of digits after the decimal separator.
-};
-
-//----------------------------------------------------------------------
-
-template <typename T>
-inline const char* printf_typestring (const T&) { return (""); }
-#define PRINTF_TYPESTRING_SPEC(type,str) \
-template <> inline const char* printf_typestring (const type&) { return (str); }
-PRINTF_TYPESTRING_SPEC (int, "d")
-PRINTF_TYPESTRING_SPEC (unsigned int, "u")
-PRINTF_TYPESTRING_SPEC (long, "ld")
-PRINTF_TYPESTRING_SPEC (unsigned long, "lu")
-PRINTF_TYPESTRING_SPEC (float, "f")
-PRINTF_TYPESTRING_SPEC (double, "lf")
-#if HAVE_LONG_LONG
-PRINTF_TYPESTRING_SPEC (long long, "lld")
-PRINTF_TYPESTRING_SPEC (unsigned long long, "llu")
-#endif
-#undef PRINTF_TYPESTRING_SPEC
-
-template <typename T>
-void ostringstream::iformat (T v)
-{
- char fmt [16];
- fmtstring (fmt, printf_typestring(v), numeric_limits<T>::is_integer);
- format (fmt, v);
-}
-
-/// Sets the flag \p f in the stream.
-inline void ostringstream::iwrite (fmtflags f)
-{
- switch (f) {
- case oct: set_base (8); break;
- case dec: set_base (10); break;
- case hex: set_base (16); break;
- case left: m_Flags |= left; m_Flags &= ~right; break;
- case right: m_Flags |= right; m_Flags &= ~left; break;
- default: m_Flags |= f; break;
- }
-}
-
-//----------------------------------------------------------------------
-
-#define OSTRSTREAM_OPERATOR(RealT, CastT) \
-inline ostringstream& operator<< (ostringstream& os, RealT v) \
-{ os.iwrite ((CastT) v); return (os); }
-
-template <typename T>
-OSTRSTREAM_OPERATOR (T*, unsigned long int)
-OSTRSTREAM_OPERATOR (const void*, unsigned long int)
-OSTRSTREAM_OPERATOR (void*, unsigned long int)
-OSTRSTREAM_OPERATOR (const char*, const char*)
-OSTRSTREAM_OPERATOR (char*, const char*)
-OSTRSTREAM_OPERATOR (uint8_t*, const char*)
-OSTRSTREAM_OPERATOR (const uint8_t*, const char*)
-OSTRSTREAM_OPERATOR (const string&, const string&)
-OSTRSTREAM_OPERATOR (ios_base::fmtflags,ios_base::fmtflags)
-OSTRSTREAM_OPERATOR (int8_t, uint8_t)
-OSTRSTREAM_OPERATOR (uint8_t, uint8_t)
-OSTRSTREAM_OPERATOR (short int, int)
-OSTRSTREAM_OPERATOR (unsigned short, unsigned int)
-OSTRSTREAM_OPERATOR (int, int)
-OSTRSTREAM_OPERATOR (unsigned int, unsigned int)
-OSTRSTREAM_OPERATOR (long, long)
-OSTRSTREAM_OPERATOR (unsigned long, unsigned long)
-OSTRSTREAM_OPERATOR (float, float)
-OSTRSTREAM_OPERATOR (double, double)
-OSTRSTREAM_OPERATOR (bool, bool)
-OSTRSTREAM_OPERATOR (wchar_t, wchar_t)
-#if HAVE_THREE_CHAR_TYPES
-OSTRSTREAM_OPERATOR (char, uint8_t)
-#endif
-#if HAVE_LONG_LONG
-OSTRSTREAM_OPERATOR (long long, long long)
-OSTRSTREAM_OPERATOR (unsigned long long, unsigned long long)
-#endif
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/strmsize.h b/media/libdrm/mobile2/src/util/ustl-1.0/strmsize.h
deleted file mode 100644
index 5888e15..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/strmsize.h
+++ /dev/null
@@ -1,135 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-/// \file strmsize.h
-/// \brief This file contains stream_size_of functions for basic types and *STREAMABLE macros.
-/// stream_size_of functions return the size of the object's data that is written or
-/// read from a stream.
-//
-
-#ifndef STRMSIZE_H_052FF16B2D8A608761BF10333D065073
-#define STRMSIZE_H_052FF16B2D8A608761BF10333D065073
-
-#include "uassert.h"
-
-namespace ustl {
-
-/// Returns the size of the given object. Overloads for standard types are available.
-template <typename T>
-inline size_t stream_size_of (T*) { return (sizeof(T*)); }
-#ifndef DOXYGEN_SHOULD_IGNORE_THIS
-inline size_t stream_size_of (int8_t) { return (sizeof(int8_t)); }
-inline size_t stream_size_of (uint8_t) { return (sizeof(uint8_t)); }
-inline size_t stream_size_of (int16_t) { return (sizeof(int16_t)); }
-inline size_t stream_size_of (uint16_t) { return (sizeof(uint16_t)); }
-inline size_t stream_size_of (int32_t) { return (sizeof(int32_t)); }
-inline size_t stream_size_of (uint32_t) { return (sizeof(uint32_t)); }
-inline size_t stream_size_of (float) { return (sizeof(float)); }
-inline size_t stream_size_of (double) { return (sizeof(double)); }
-inline size_t stream_size_of (bool) { return (sizeof(uint8_t)); }
-inline size_t stream_size_of (wchar_t) { return (sizeof(wchar_t)); }
-#if HAVE_THREE_CHAR_TYPES
-inline size_t stream_size_of (char) { return (sizeof(char)); }
-#endif
-#if HAVE_INT64_T
-inline size_t stream_size_of (int64_t) { return (sizeof(int64_t)); }
-inline size_t stream_size_of (uint64_t) { return (sizeof(uint64_t)); }
-#endif
-#if SIZE_OF_LONG == SIZE_OF_INT
-inline size_t stream_size_of (long v) { return (sizeof (v)); }
-inline size_t stream_size_of (unsigned long v) { return (sizeof (v)); }
-#endif
-#if HAVE_LONG_LONG && (!HAVE_INT64_T || SIZE_OF_LONG_LONG > 8)
-inline size_t stream_size_of (long long v) { return (sizeof (v)); }
-inline size_t stream_size_of (unsigned long long v) { return (sizeof (v)); }
-#endif
-#endif // DOXYGEN_SHOULD_IGNORE_THIS
-
-} // namespace ustl
-
-/// Declares that T is not written to istream/ostream.
-#define NOT_STREAMABLE(T) \
- namespace ustl { \
- inline istream& operator>> (istream& is, T&) { return (is); } \
- inline ostream& operator<< (ostream& os, const T&) { return (os); } \
- inline size_t stream_size_of (const T&) { return (0); } \
- }
-
-//
-// Extra overloads in this macro are needed because it is the one used for
-// marshalling pointers. Passing a pointer to stream_size_of creates a
-// conversion ambiguity between converting to const pointer& and converting
-// to bool; the compiler always chooses the bool conversion (because it
-// requires 1 conversion instead of 2 for the other choice). There is little
-// point in adding the overloads to other macros, since they are never used
-// for pointers.
-//
-/// Declares that T is to be written as is into binary streams.
-#define INTEGRAL_STREAMABLE(T) \
- namespace ustl { \
- inline istream& operator>> (istream& is, T& v) { is.iread(v); return (is); } \
- inline ostream& operator<< (ostream& os, const T& v) { os.iwrite(v); return (os); } \
- inline ostream& operator<< (ostream& os, T& v) { os.iwrite(v); return (os); } \
- inline size_t stream_size_of (const T& v) { return (sizeof(v)); } \
- inline size_t stream_size_of (T& v) { return (sizeof(v)); } \
- }
-
-#ifdef NDEBUG
- #define STD_STREAMABLE_SZCHK_BEGIN
- #define STD_STREAMABLE_SZCHK_END
-#else
- #define STD_STREAMABLE_SZCHK_BEGIN \
- assert (os.aligned (alignof (v))); \
- const uoff_t vStart (os.pos())
- #define STD_STREAMABLE_SZCHK_END \
- if (os.pos() - vStart != v.stream_size()) \
- throw stream_bounds_exception ("write", typeid(v).name(), vStart, os.pos() - vStart, v.stream_size())
-#endif
-
-/// Declares that T contains read, write, and stream_size methods.
-#define STD_STREAMABLE(T) \
- namespace ustl { \
- inline istream& operator>> (istream& is, T& v) { assert (is.aligned (alignof (v))); v.read (is); return (is); } \
- inline ostream& operator<< (ostream& os, const T& v) { STD_STREAMABLE_SZCHK_BEGIN; v.write (os); STD_STREAMABLE_SZCHK_END; return (os); } \
- inline size_t stream_size_of (const T& v) { return (v.stream_size()); } \
- }
-
-/// Declares that T is to be cast into TSUB for streaming.
-#define CAST_STREAMABLE(T,TSUB) \
- namespace ustl { \
- inline istream& operator>> (istream& is, T& v) { TSUB sv; is >> sv; v = (T)(sv); return (is); } \
- inline ostream& operator<< (ostream& os, const T& v) { os << TSUB(v); return (os); } \
- inline size_t stream_size_of (const T& v) { return (sizeof(TSUB(v))); } \
- }
-
-/// Placed into a class it declares the methods required by STD_STREAMABLE. Syntactic sugar.
-#define DECLARE_STD_STREAMABLE \
- public: \
- void read (istream& is); \
- void write (ostream& os) const; \
- size_t stream_size (void) const
-
-/// Declares \p T to be writable to text streams. Reading is not implemented because you should not do it.
-#define TEXT_STREAMABLE(T) \
- namespace ustl { \
- inline ostringstream& operator<< (ostringstream& os, const T& v) \
- { v.text_write (os); return (os); } \
- }
-
-/// Specifies that \p T is printed by using it as an index into \p Names string array.
-#define LOOKUP_TEXT_STREAMABLE(T,Names,nNames) \
- namespace ustl { \
- inline ostringstream& operator<< (ostringstream& os, const T& v) \
- { \
- if (uoff_t(v) < (nNames)) \
- os << Names[v]; \
- else \
- os << uoff_t(v); \
- return (os); \
- } \
- }
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ualgo.h b/media/libdrm/mobile2/src/util/ustl-1.0/ualgo.h
deleted file mode 100644
index 47b66d0..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ualgo.h
+++ /dev/null
@@ -1,677 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ualgo.h
-//
-// Implementation of STL algorithms.
-//
-// The function prototypes are copied
-// exactly from the SGI version of STL documentation along with comments about
-// their use. The code is NOT the same, though the functionality usually is.
-//
-
-#ifndef UALGO_H_711AB4214D417A51166694D47A662D6E
-#define UALGO_H_711AB4214D417A51166694D47A662D6E
-
-#include "upair.h"
-#include "ualgobase.h"
-#include "ufunction.h"
-#include "upredalgo.h"
-#include "umemory.h"
-#include <stdlib.h> // for rand()
-
-namespace ustl {
-
-/// Swaps corresponding elements of [first, last) and [result,)
-/// \ingroup SwapAlgorithms
-///
-template <typename ForwardIterator1, typename ForwardIterator2>
-inline ForwardIterator2 swap_ranges (ForwardIterator1 first, ForwardIterator2 last, ForwardIterator2 result)
-{
- for (; first != last; ++first, ++result)
- iter_swap (first, result);
- return (result);
-}
-
-/// Returns the first iterator i in the range [first, last) such that
-/// *i == value. Returns last if no such iterator exists.
-/// \ingroup SearchingAlgorithms
-///
-template <typename InputIterator, typename EqualityComparable>
-inline InputIterator find (InputIterator first, InputIterator last, const EqualityComparable& value)
-{
- while (first != last && !(*first == value))
- ++ first;
- return (first);
-}
-
-/// Returns the first iterator such that *i == *(i + 1)
-/// \ingroup SearchingAlgorithms
-///
-template <typename ForwardIterator>
-ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last)
-{
- if (first != last)
- for (ForwardIterator prev = first; ++first != last; ++ prev)
- if (*prev == *first)
- return (prev);
- return (last);
-}
-
-/// Returns the pointer to the first pair of unequal elements.
-/// \ingroup SearchingAlgorithms
-///
-template <typename InputIterator>
-pair<InputIterator,InputIterator>
-mismatch (InputIterator first1, InputIterator last1, InputIterator first2)
-{
- while (first1 != last1 && *first1 == *first2)
- ++ first1, ++ first2;
- return (make_pair (first1, first2));
-}
-
-/// \brief Returns true if two ranges are equal.
-/// This is an extension, present in uSTL and SGI STL.
-/// \ingroup SearchingAlgorithms
-///
-template <typename InputIterator>
-inline bool equal (InputIterator first1, InputIterator last1, InputIterator first2)
-{
- return (mismatch (first1, last1, first2).first == last1);
-}
-
-/// Count finds the number of elements in [first, last) that are equal
-/// to value. More precisely, the first version of count returns the
-/// number of iterators i in [first, last) such that *i == value.
-/// \ingroup SearchingAlgorithms
-///
-template <typename InputIterator, typename EqualityComparable>
-inline size_t count (InputIterator first, InputIterator last, const EqualityComparable& value)
-{
- size_t total = 0;
- for (; first != last; ++first)
- if (*first == value)
- ++ total;
- return (total);
-}
-
-///
-/// The first version of transform performs the operation op(*i) for each
-/// iterator i in the range [first, last), and assigns the result of that
-/// operation to *o, where o is the corresponding output iterator. That is,
-/// for each n such that 0 <= n < last - first, it performs the assignment
-/// *(result + n) = op(*(first + n)).
-/// The return value is result + (last - first).
-/// \ingroup MutatingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename InputIterator, typename OutputIterator, typename UnaryFunction>
-inline OutputIterator transform (InputIterator first, InputIterator last, OutputIterator result, UnaryFunction op)
-{
- for (; first != last; ++result, ++first)
- *result = op (*first);
- return (result);
-}
-
-///
-/// The second version of transform is very similar, except that it uses a
-/// Binary Function instead of a Unary Function: it performs the operation
-/// op(*i1, *i2) for each iterator i1 in the range [first1, last1) and assigns
-/// the result to *o, where i2 is the corresponding iterator in the second
-/// input range and where o is the corresponding output iterator. That is,
-/// for each n such that 0 <= n < last1 - first1, it performs the assignment
-/// *(result + n) = op(*(first1 + n), *(first2 + n).
-/// The return value is result + (last1 - first1).
-/// \ingroup MutatingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename InputIterator1, typename InputIterator2, typename OutputIterator, typename BinaryFunction>
-inline OutputIterator transform (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, OutputIterator result, BinaryFunction op)
-{
- for (; first1 != last1; ++result, ++first1, ++first2)
- *result = op (*first1, *first2);
- return (result);
-}
-
-/// Replace replaces every element in the range [first, last) equal to
-/// old_value with new_value. That is: for every iterator i,
-/// if *i == old_value then it performs the assignment *i = new_value.
-/// \ingroup MutatingAlgorithms
-///
-template <typename ForwardIterator, typename T>
-inline void replace (ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value)
-{
- for (; first != last; ++first)
- if (*first == old_value)
- *first = new_value;
-}
-
-/// Replace_copy copies elements from the range [first, last) to the range
-/// [result, result + (last-first)), except that any element equal to old_value
-/// is not copied; new_value is copied instead. More precisely, for every
-/// integer n such that 0 <= n < last-first, replace_copy performs the
-/// assignment *(result+n) = new_value if *(first+n) == old_value, and
-/// *(result+n) = *(first+n) otherwise.
-/// \ingroup MutatingAlgorithms
-///
-template <typename InputIterator, typename OutputIterator, typename T>
-inline OutputIterator replace_copy (InputIterator first, InputIterator last, OutputIterator result, const T& old_value, const T& new_value)
-{
- for (; first != last; ++result, ++first)
- *result = (*first == old_value) ? new_value : *first;
-}
-
-/// Generate assigns the result of invoking gen, a function object that
-/// takes no arguments, to each element in the range [first, last).
-/// \ingroup GeneratorAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename ForwardIterator, typename Generator>
-inline void generate (ForwardIterator first, ForwardIterator last, Generator gen)
-{
- for (; first != last; ++first)
- *first = gen();
-}
-
-/// Generate_n assigns the result of invoking gen, a function object that
-/// takes no arguments, to each element in the range [first, first+n).
-/// The return value is first + n.
-/// \ingroup GeneratorAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename OutputIterator, typename Generator>
-inline OutputIterator generate_n (OutputIterator first, size_t n, Generator gen)
-{
- for (uoff_t i = 0; i != n; ++i, ++first)
- *first = gen();
- return (first);
-}
-
-/// \brief Reverse reverses a range.
-/// That is: for every i such that 0 <= i <= (last - first) / 2),
-/// it exchanges *(first + i) and *(last - (i + 1)).
-/// \ingroup MutatingAlgorithms
-///
-template <typename BidirectionalIterator>
-inline void reverse (BidirectionalIterator first, BidirectionalIterator last)
-{
- for (; distance (first, --last) > 0; ++first)
- iter_swap (first, last);
-}
-
-/// \brief Reverses [first,last) and writes it to \p output.
-/// \ingroup MutatingAlgorithms
-///
-template <typename BidirectionalIterator, typename OutputIterator>
-inline OutputIterator reverse_copy (BidirectionalIterator first, BidirectionalIterator last, OutputIterator result)
-{
- for (; first != last; ++result)
- *result = *--last;
- return (result);
-}
-
-/// \brief Exchanges ranges [first, middle) and [middle, last)
-/// \ingroup MutatingAlgorithms
-///
-template <typename ForwardIterator>
-ForwardIterator rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last)
-{
- if (first == middle || middle == last)
- return (first);
- reverse (first, middle);
- reverse (middle, last);
- for (;first != middle && middle != last; ++first)
- iter_swap (first, --last);
- reverse (first, (first == middle ? last : middle));
- return (first);
-}
-
-/// Specialization for pointers, which can be treated identically.
-template <typename T>
-inline T* rotate (T* first, T* middle, T* last)
-{
- rotate_fast (first, middle, last);
- return (first);
-}
-
-
-/// \brief Exchanges ranges [first, middle) and [middle, last) into \p result.
-/// \ingroup MutatingAlgorithms
-///
-template <typename ForwardIterator, typename OutputIterator>
-inline OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result)
-{
- return (copy (first, middle, copy (middle, last, result)));
-}
-
-/// \brief Combines two sorted ranges.
-/// \ingroup SortingAlgorithms
-///
-template <typename InputIterator1, typename InputIterator2, typename OutputIterator>
-OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2, OutputIterator result)
-{
- for (; first1 != last1 && first2 != last2; ++result) {
- if (*first1 < *first2)
- *result = *first1++;
- else
- *result = *first2++;
- }
- if (first1 < last1)
- return (copy (first1, last1, result));
- else
- return (copy (first2, last2, result));
-}
-
-/// Combines two sorted ranges from the same container.
-/// \ingroup SortingAlgorithms
-///
-template <typename InputIterator>
-void inplace_merge (InputIterator first, InputIterator middle, InputIterator last)
-{
- for (; middle != last; ++first) {
- while (*first < *middle)
- ++ first;
- reverse (first, middle);
- reverse (first, ++middle);
- }
-}
-
-/// Remove_copy copies elements that are not equal to value from the range
-/// [first, last) to a range beginning at result. The return value is the
-/// end of the resulting range. This operation is stable, meaning that the
-/// relative order of the elements that are copied is the same as in the
-/// range [first, last).
-/// \ingroup MutatingAlgorithms
-///
-template <typename InputIterator, typename OutputIterator, typename T>
-OutputIterator remove_copy (InputIterator first, InputIterator last, OutputIterator result, const T& value)
-{
- for (; first != last; ++first) {
- if (!(*first == value)) {
- *result = *first;
- ++ result;
- }
- }
- return (result);
-}
-
-/// Remove_copy copies elements pointed to by iterators in [rfirst, rlast)
-/// from the range [first, last) to a range beginning at result. The return
-/// value is the end of the resulting range. This operation is stable, meaning
-/// that the relative order of the elements that are copied is the same as in the
-/// range [first, last). Range [rfirst, rlast) is assumed to be sorted.
-/// This algorithm is a uSTL extension.
-/// \ingroup MutatingAlgorithms
-///
-template <typename InputIterator, typename OutputIterator, typename RInputIterator>
-OutputIterator remove_copy (InputIterator first, InputIterator last, OutputIterator result, RInputIterator rfirst, RInputIterator rlast)
-{
- for (; first != last; ++first) {
- while (rfirst != rlast && *rfirst < first)
- ++ rfirst;
- if (rfirst == rlast || first != *rfirst) {
- *result = *first;
- ++ result;
- }
- }
- return (result);
-}
-
-/// Remove removes from the range [first, last) all elements that are equal to
-/// value. That is, remove returns an iterator new_last such that the range
-/// [first, new_last) contains no elements equal to value. [1] The iterators
-/// in the range [new_last, last) are all still dereferenceable, but the
-/// elements that they point to are unspecified. Remove is stable, meaning
-/// that the relative order of elements that are not equal to value is
-/// unchanged.
-/// \ingroup MutatingAlgorithms
-///
-template <typename ForwardIterator, typename T>
-inline ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& value)
-{
- return (remove_copy (first, last, first, value));
-}
-
-/// Unique_copy copies elements from the range [first, last) to a range
-/// beginning with result, except that in a consecutive group of duplicate
-/// elements only the first one is copied. The return value is the end of
-/// the range to which the elements are copied. This behavior is similar
-/// to the Unix filter uniq.
-/// \ingroup MutatingAlgorithms
-///
-template <typename InputIterator, typename OutputIterator>
-OutputIterator unique_copy (InputIterator first, InputIterator last, OutputIterator result)
-{
- if (first != last) {
- *result = *first;
- while (++first != last)
- if (!(*first == *result))
- *++result = *first;
- ++ result;
- }
- return (result);
-}
-
-/// Every time a consecutive group of duplicate elements appears in the range
-/// [first, last), the algorithm unique removes all but the first element.
-/// That is, unique returns an iterator new_last such that the range [first,
-/// new_last) contains no two consecutive elements that are duplicates.
-/// The iterators in the range [new_last, last) are all still dereferenceable,
-/// but the elements that they point to are unspecified. Unique is stable,
-/// meaning that the relative order of elements that are not removed is
-/// unchanged.
-/// \ingroup MutatingAlgorithms
-///
-template <typename ForwardIterator>
-inline ForwardIterator unique (ForwardIterator first, ForwardIterator last)
-{
- return (unique_copy (first, last, first));
-}
-
-/// Returns the furthermost iterator i in [first, last) such that,
-/// for every iterator j in [first, i), *j < value
-/// Assumes the range is sorted.
-/// \ingroup SearchingAlgorithms
-///
-template <typename ForwardIterator, typename LessThanComparable>
-ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const LessThanComparable& value)
-{
- ForwardIterator mid;
- while (first != last) {
- mid = advance (first, distance (first,last) / 2);
- if (*mid < value)
- first = mid + 1;
- else
- last = mid;
- }
- return (first);
-}
-
-/// Performs a binary search inside the sorted range.
-/// \ingroup SearchingAlgorithms
-///
-template <typename ForwardIterator, typename LessThanComparable>
-inline ForwardIterator binary_search (ForwardIterator first, ForwardIterator last, const LessThanComparable& value)
-{
- ForwardIterator found = lower_bound (first, last, value);
- return ((found == last || value < *found) ? last : found);
-}
-
-/// Returns the furthermost iterator i in [first,last) such that for
-/// every iterator j in [first,i), value < *j is false.
-/// \ingroup SearchingAlgorithms
-///
-template <typename ForwardIterator, typename LessThanComparable>
-ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const LessThanComparable& value)
-{
- ForwardIterator mid;
- while (first != last) {
- mid = advance (first, distance (first,last) / 2);
- if (value < *mid)
- last = mid;
- else
- first = mid + 1;
- }
- return (last);
-}
-
-/// Returns pair<lower_bound,upper_bound>
-/// \ingroup SearchingAlgorithms
-///
-template <typename ForwardIterator, typename LessThanComparable>
-inline pair<ForwardIterator,ForwardIterator> equal_range (ForwardIterator first, ForwardIterator last, const LessThanComparable& value)
-{
- pair<ForwardIterator,ForwardIterator> rv;
- rv.second = rv.first = lower_bound (first, last, value);
- while (rv.second != last && !(value < *(rv.second)))
- ++ rv.second;
- return (rv);
-}
-
-/// Randomly permute the elements of the container.
-/// \ingroup GeneratorAlgorithms
-///
-template <typename RandomAccessIterator>
-void random_shuffle (RandomAccessIterator first, RandomAccessIterator last)
-{
- for (; first != last; ++ first)
- iter_swap (first, first + (rand() % distance (first, last)));
-}
-
-/// \brief Generic compare function adaptor to pass to qsort
-/// \ingroup FunctorObjects
-template <typename ConstPointer, typename Compare>
-int qsort_adapter (const void* p1, const void* p2)
-{
- ConstPointer i1 = reinterpret_cast<ConstPointer>(p1);
- ConstPointer i2 = reinterpret_cast<ConstPointer>(p2);
- Compare comp;
- return (comp (*i1, *i2) ? -1 : (comp (*i2, *i1) ? 1 : 0));
-}
-
-/// Sorts the container
-/// \ingroup SortingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename RandomAccessIterator, typename Compare>
-void sort (RandomAccessIterator first, RandomAccessIterator last, Compare)
-{
- typedef typename iterator_traits<RandomAccessIterator>::value_type value_type;
- typedef typename iterator_traits<RandomAccessIterator>::const_pointer const_pointer;
- qsort (first, distance (first, last), sizeof(value_type),
- &qsort_adapter<const_pointer, Compare>);
-}
-
-/// Sorts the container
-/// \ingroup SortingAlgorithms
-///
-template <typename RandomAccessIterator>
-inline void sort (RandomAccessIterator first, RandomAccessIterator last)
-{
- typedef typename iterator_traits<RandomAccessIterator>::value_type value_type;
- sort (first, last, less<value_type>());
-}
-
-/// Sorts the container preserving order of equal elements.
-/// \ingroup SortingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename RandomAccessIterator, typename Compare>
-void stable_sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp)
-{
- for (RandomAccessIterator j, i = first; ++i < last;) { // Insertion sort
- for (j = i; j-- > first && !comp(*j, *i););
- rotate (++j, i, i + 1);
- }
-}
-
-/// Sorts the container
-/// \ingroup SortingAlgorithms
-///
-template <typename RandomAccessIterator>
-inline void stable_sort (RandomAccessIterator first, RandomAccessIterator last)
-{
- typedef typename iterator_traits<RandomAccessIterator>::value_type value_type;
- stable_sort (first, last, less<value_type>());
-}
-
-/// \brief Searches for the first subsequence [first2,last2) in [first1,last1)
-/// \ingroup SearchingAlgorithms
-template <typename ForwardIterator1, typename ForwardIterator2>
-inline ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2)
-{
- typedef typename iterator_traits<ForwardIterator1>::value_type value_type;
- return (search (first1, last1, first2, last2, equal_to<value_type>()));
-}
-
-/// \brief Searches for the last subsequence [first2,last2) in [first1,last1)
-/// \ingroup SearchingAlgorithms
-template <typename ForwardIterator1, typename ForwardIterator2>
-inline ForwardIterator1 find_end (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2)
-{
- typedef typename iterator_traits<ForwardIterator1>::value_type value_type;
- return (find_end (first1, last1, first2, last2, equal_to<value_type>()));
-}
-
-/// \brief Searches for the first occurence of \p count \p values in [first, last)
-/// \ingroup SearchingAlgorithms
-template <typename Iterator, typename T>
-inline Iterator search_n (Iterator first, Iterator last, size_t count, const T& value)
-{
- typedef typename iterator_traits<Iterator>::value_type value_type;
- return (search_n (first, last, count, value, equal_to<value_type>()));
-}
-
-/// \brief Searches [first1,last1) for the first occurrence of an element from [first2,last2)
-/// \ingroup SearchingAlgorithms
-template <typename InputIterator, typename ForwardIterator>
-inline InputIterator find_first_of (InputIterator first1, InputIterator last1, ForwardIterator first2, ForwardIterator last2)
-{
- typedef typename iterator_traits<InputIterator>::value_type value_type;
- return (find_first_of (first1, last1, first2, last2, equal_to<value_type>()));
-}
-
-/// \brief Returns true if [first2,last2) is a subset of [first1,last1)
-/// \ingroup ConditionAlgorithms
-/// \ingroup SetAlgorithms
-template <typename InputIterator1, typename InputIterator2>
-inline bool includes (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2)
-{
- typedef typename iterator_traits<InputIterator1>::value_type value_type;
- return (includes (first1, last1, first2, last2, less<value_type>()));
-}
-
-/// \brief Merges [first1,last1) with [first2,last2)
-///
-/// Result will contain every element that is in either set. If duplicate
-/// elements are present, max(n,m) is placed in the result.
-///
-/// \ingroup SetAlgorithms
-template <typename InputIterator1, typename InputIterator2, typename OutputIterator>
-inline OutputIterator set_union (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result)
-{
- typedef typename iterator_traits<InputIterator1>::value_type value_type;
- return (set_union (first1, last1, first2, last2, result, less<value_type>()));
-}
-
-/// \brief Creates a set containing elements shared by the given ranges.
-/// \ingroup SetAlgorithms
-template <typename InputIterator1, typename InputIterator2, typename OutputIterator>
-inline OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result)
-{
- typedef typename iterator_traits<InputIterator1>::value_type value_type;
- return (set_intersection (first1, last1, first2, last2, result, less<value_type>()));
-}
-
-/// \brief Removes from [first1,last1) elements present in [first2,last2)
-/// \ingroup SetAlgorithms
-template <typename InputIterator1, typename InputIterator2, typename OutputIterator>
-inline OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result)
-{
- typedef typename iterator_traits<InputIterator1>::value_type value_type;
- return (set_difference (first1, last1, first2, last2, result, less<value_type>()));
-}
-
-/// \brief Performs union of sets A-B and B-A.
-/// \ingroup SetAlgorithms
-template <typename InputIterator1, typename InputIterator2, typename OutputIterator>
-inline OutputIterator set_symmetric_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result)
-{
- typedef typename iterator_traits<InputIterator1>::value_type value_type;
- return (set_symmetric_difference (first1, last1, first2, last2, result, less<value_type>()));
-}
-
-/// \brief Returns true if the given range is sorted.
-/// \ingroup ConditionAlgorithms
-template <typename ForwardIterator>
-inline bool is_sorted (ForwardIterator first, ForwardIterator last)
-{
- typedef typename iterator_traits<ForwardIterator>::value_type value_type;
- return (is_sorted (first, last, less<value_type>()));
-}
-
-/// \brief Compares two given containers like strcmp compares strings.
-/// \ingroup ConditionAlgorithms
-template <typename InputIterator1, typename InputIterator2>
-inline bool lexicographical_compare (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2)
-{
- typedef typename iterator_traits<InputIterator1>::value_type value_type;
- return (lexicographical_compare (first1, last1, first2, last2, less<value_type>()));
-}
-
-/// \brief Creates the next lexicographical permutation of [first,last).
-/// Returns false if no further permutations can be created.
-/// \ingroup GeneratorAlgorithms
-template <typename BidirectionalIterator>
-inline bool next_permutation (BidirectionalIterator first, BidirectionalIterator last)
-{
- typedef typename iterator_traits<BidirectionalIterator>::value_type value_type;
- return (next_permutation (first, last, less<value_type>()));
-}
-
-/// \brief Creates the previous lexicographical permutation of [first,last).
-/// Returns false if no further permutations can be created.
-/// \ingroup GeneratorAlgorithms
-template <typename BidirectionalIterator>
-inline bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last)
-{
- typedef typename iterator_traits<BidirectionalIterator>::value_type value_type;
- return (prev_permutation (first, last, less<value_type>()));
-}
-
-/// \brief Returns iterator to the max element in [first,last)
-/// \ingroup SearchingAlgorithms
-template <typename ForwardIterator>
-inline ForwardIterator max_element (ForwardIterator first, ForwardIterator last)
-{
- typedef typename iterator_traits<ForwardIterator>::value_type value_type;
- return (max_element (first, last, less<value_type>()));
-}
-
-/// \brief Returns iterator to the min element in [first,last)
-/// \ingroup SearchingAlgorithms
-template <typename ForwardIterator>
-inline ForwardIterator min_element (ForwardIterator first, ForwardIterator last)
-{
- typedef typename iterator_traits<ForwardIterator>::value_type value_type;
- return (min_element (first, last, less<value_type>()));
-}
-
-/// \brief Makes [first,middle) a part of the sorted array.
-/// Contents of [middle,last) is undefined. This implementation just calls stable_sort.
-/// \ingroup SortingAlgorithms
-template <typename RandomAccessIterator>
-inline void partial_sort (RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last)
-{
- typedef typename iterator_traits<RandomAccessIterator>::value_type value_type;
- partial_sort (first, middle, last, less<value_type>());
-}
-
-/// \brief Puts \p nth element into its sorted position.
-/// In this implementation, the entire array is sorted. I can't think of any
-/// use for it where the time gained would be useful.
-/// \ingroup SortingAlgorithms
-/// \ingroup SearchingAlgorithms
-///
-template <typename RandomAccessIterator>
-inline void nth_element (RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last)
-{
- partial_sort (first, nth, last);
-}
-
-/// \brief Like partial_sort, but outputs to [result_first,result_last)
-/// \ingroup SortingAlgorithms
-template <typename InputIterator, typename RandomAccessIterator>
-inline RandomAccessIterator partial_sort_copy (InputIterator first, InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last)
-{
- typedef typename iterator_traits<InputIterator>::value_type value_type;
- return (partial_sort_copy (first, last, result_first, result_last, less<value_type>()));
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ualgobase.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/ualgobase.cpp
deleted file mode 100644
index 9764cd1..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ualgobase.cpp
+++ /dev/null
@@ -1,293 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ualgobase.cc
-//
-// Copy and fill optimizations are here.
-//
-
-#ifndef NDEBUG // Optimized code here. asserts slow it down, and are checked elsewhere.
-#define NDEBUG
-#endif
-
-#include "ualgo.h"
-
-#undef CPU_HAS_MMX
-
-namespace ustl {
-
-// Generic version for implementing fill_nX_fast on non-i386 architectures.
-template <typename T> inline void stosv (T*& p, size_t n, T v)
- { while (n--) *p++ = v; }
-
-#if defined(__i386__) || defined(__x86_64__)
-
-//----------------------------------------------------------------------
-// Copy functions
-//----------------------------------------------------------------------
-
-#if __GNUC__ >= 3
-static inline void movsb_dir_up (void) __attribute__((always_inline));
-static inline void movsb_dir_down (void) __attribute__((always_inline));
-static inline void movsb (const void*& src, size_t nBytes, void*& dest) __attribute__((always_inline));
-static inline void movsd (const void*& src, size_t nWords, void*& dest) __attribute__((always_inline));
-#endif
-
-static inline void movsb_dir_up (void) { asm volatile ("cld"); }
-static inline void movsb_dir_down (void) { asm volatile ("std"); }
-
-static inline void movsb (const void*& src, size_t nBytes, void*& dest)
-{
- asm volatile ("rep;\n\tmovsb"
- : "=&S"(src), "=&D"(dest), "=&c"(nBytes)
- : "0"(src), "1"(dest), "2"(nBytes)
- : "memory");
-}
-
-static inline void movsd (const void*& src, size_t nWords, void*& dest)
-{
- asm volatile ("rep;\n\tmovsl"
- : "=&S"(src), "=&D"(dest), "=&c"(nWords)
- : "0"(src), "1"(dest), "2"(nWords)
- : "memory");
-}
-
-template <> inline void stosv (uint8_t*& p, size_t n, uint8_t v)
-{ asm volatile ("rep;\n\tstosb" : "=&D"(p), "=c"(n) : "0"(p), "1"(n), "a"(v) : "memory"); }
-template <> inline void stosv (uint16_t*& p, size_t n, uint16_t v)
-{ asm volatile ("rep;\n\tstosw" : "=&D"(p), "=c"(n) : "0"(p), "1"(n), "a"(v) : "memory"); }
-template <> inline void stosv (uint32_t*& p, size_t n, uint32_t v)
-{ asm volatile ("rep;\n\tstosl" : "=&D"(p), "=c"(n) : "0"(p), "1"(n), "a"(v) : "memory"); }
-
-#if CPU_HAS_MMX
-#define MMX_ALIGN 16U // Data must be aligned on this grain
-#define MMX_BS 32U // Assembly routines copy data this many bytes at a time.
-
-static inline void simd_block_copy (const void* src, void* dest) __attribute__((always_inline));
-static inline void simd_block_store (uint8_t* dest) __attribute__((always_inline));
-static inline void simd_block_cleanup (void) __attribute__((always_inline));
-
-static inline void simd_block_copy (const void* src, void* dest)
-{
- const char* csrc ((const char*) src);
- char* cdest ((char*) dest);
- #if CPU_HAS_SSE
- asm (
- "movaps\t%2, %%xmm0 \n\t"
- "movaps\t%3, %%xmm1 \n\t"
- "movntps\t%%xmm0, %0 \n\t"
- "movntps\t%%xmm1, %1"
- : "=m"(cdest[0]), "=m"(cdest[16])
- : "m"(csrc[0]), "m"(csrc[16])
- : "xmm0", "xmm1");
- #else
- asm (
- "movq %4, %%mm0 \n\t"
- "movq %5, %%mm1 \n\t"
- "movq %6, %%mm2 \n\t"
- "movq %7, %%mm3 \n\t"
- "movq %%mm0, %0 \n\t"
- "movq %%mm1, %1 \n\t"
- "movq %%mm2, %2 \n\t"
- "movq %%mm3, %3"
- : "=m"(cdest[0]), "=m"(cdest[8]), "=m"(cdest[16]), "=m"(cdest[24])
- : "m"(csrc[0]), "m"(csrc[8]), "m"(csrc[16]), "m"(csrc[24])
- : "mm0", "mm1", "mm2", "mm3", "st", "st(1)", "st(2)", "st(3)");
- #endif
-}
-
-static inline void simd_block_store (uint8_t* dest)
-{
- #if CPU_HAS_SSE
- asm volatile (
- "movntq %%mm0, %0\n\t"
- "movntq %%mm0, %1\n\t"
- "movntq %%mm0, %2\n\t"
- "movntq %%mm0, %3"
- : "=m"(dest[0]), "=m"(dest[8]), "=m"(dest[16]), "=m"(dest[24]));
- #else
- asm volatile (
- "movq %%mm0, %0 \n\t"
- "movq %%mm0, %1 \n\t"
- "movq %%mm0, %2 \n\t"
- "movq %%mm0, %3"
- : "=m"(dest[0]), "=m"(dest[8]), "=m"(dest[16]), "=m"(dest[24]));
- #endif
-}
-
-static inline void simd_block_cleanup (void)
-{
- #if !CPU_HAS_SSE
- simd::reset_mmx();
- #endif
- asm volatile ("sfence");
-}
-
-/// The fastest optimized raw memory copy.
-void copy_n_fast (const void* src, size_t nBytes, void* dest)
-{
- movsb_dir_up();
- size_t nHeadBytes = Align(uintptr_t(src), MMX_ALIGN) - uintptr_t(src);
- nHeadBytes = min (nHeadBytes, nBytes);
- movsb (src, nHeadBytes, dest);
- nBytes -= nHeadBytes;
- if (!(uintptr_t(dest) % MMX_ALIGN)) {
- const size_t nMiddleBlocks = nBytes / MMX_BS;
- for (uoff_t i = 0; i < nMiddleBlocks; ++ i) {
- prefetch (advance (src, 512), 0, 0);
- simd_block_copy (src, dest);
- src = advance (src, MMX_BS);
- dest = advance (dest, MMX_BS);
- }
- simd_block_cleanup();
- nBytes %= MMX_BS;
- }
- movsb (src, nBytes, dest);
-}
-#endif // CPU_HAS_MMX
-
-/// The fastest optimized backwards raw memory copy.
-void copy_backward_fast (const void* first, const void* last, void* result)
-{
- prefetch (first, 0, 0);
- prefetch (result, 1, 0);
- size_t nBytes (distance (first, last));
- movsb_dir_down();
- size_t nHeadBytes = uintptr_t(last) % 4;
- last = advance (last, -1);
- result = advance (result, -1);
- movsb (last, nHeadBytes, result);
- nBytes -= nHeadBytes;
- if (uintptr_t(result) % 4 == 3) {
- const size_t nMiddleBlocks = nBytes / 4;
- last = advance (last, -3);
- result = advance (result, -3);
- movsd (last, nMiddleBlocks, result);
- nBytes %= 4;
- }
- movsb (last, nBytes, result);
- movsb_dir_up();
-}
-#endif // __i386__
-
-//----------------------------------------------------------------------
-// Fill functions
-//----------------------------------------------------------------------
-
-#if CPU_HAS_MMX
-template <typename T> inline void build_block (T) {}
-template <> inline void build_block (uint8_t v)
-{
- asm volatile (
- "movd %0, %%mm0\n\tpunpcklbw %%mm0, %%mm0\n\tpshufw $0, %%mm0, %%mm0"
- : : "g"(uint32_t(v)) : "mm0");
-}
-template <> inline void build_block (uint16_t v)
-{
- asm volatile (
- "movd %0, %%mm0\n\tpshufw $0, %%mm0, %%mm0"
- : : "g"(uint32_t(v)) : "mm0");
-}
-template <> inline void build_block (uint32_t v)
-{
- asm volatile (
- "movd %0, %%mm0\n\tpunpckldq %%mm0, %%mm0"
- : : "g"(uint32_t(v)) : "mm0");
-}
-
-static inline void simd_block_fill_loop (uint8_t*& dest, size_t count)
-{
- prefetch (advance (dest, 512), 1, 0);
- for (uoff_t i = 0; i < count; ++ i, dest += MMX_BS)
- simd_block_store (dest);
- simd_block_cleanup();
- simd::reset_mmx();
-}
-
-template <typename T>
-inline void fill_n_fast (T* dest, size_t count, T v)
-{
- size_t nHead = Align(uintptr_t(dest), MMX_ALIGN) - uintptr_t(dest) / sizeof(T);
- nHead = min (nHead, count);
- stosv (dest, nHead, v);
- count -= nHead;
- build_block (v);
- simd_block_fill_loop ((uint8_t*&) dest, count * sizeof(T) / MMX_BS);
- count %= MMX_BS;
- stosv (dest, count, v);
-}
-
-void fill_n8_fast (uint8_t* dest, size_t count, uint8_t v)
- { fill_n_fast (dest, count, v); }
-void fill_n16_fast (uint16_t* dest, size_t count, uint16_t v)
- { fill_n_fast (dest, count, v); }
-void fill_n32_fast (uint32_t* dest, size_t count, uint32_t v)
- { fill_n_fast (dest, count, v); }
-#else
-void fill_n8_fast (uint8_t* dest, size_t count, uint8_t v) { memset (dest, v, count); }
-void fill_n16_fast (uint16_t* dest, size_t count, uint16_t v) { stosv (dest, count, v); }
-void fill_n32_fast (uint32_t* dest, size_t count, uint32_t v) { stosv (dest, count, v); }
-#endif // CPU_HAS_MMX
-
-/// Exchanges ranges [first, middle) and [middle, last)
-void rotate_fast (void* first, void* middle, void* last)
-{
-#ifdef HAVE_ALLOCA_H
- const size_t half1 (distance (first, middle)), half2 (distance (middle, last));
- const size_t hmin (min (half1, half2));
- if (!hmin) {
- return;
- }
- void* buf = alloca (hmin);
- if (buf) {
- if (half2 < half1) {
- copy_n_fast (middle, half2, buf);
- copy_backward_fast (first, middle, last);
- copy_n_fast (buf, half2, first);
- } else {
- copy_n_fast (first, half1, buf);
- copy_n_fast (middle, half2, first);
- copy_n_fast (buf, half1, advance (first, half2));
- }
- } else
-#else
- if (first == middle || middle == last) {
- return;
- }
-#endif
- {
- char* f = (char*) first;
- char* m = (char*) middle;
- char* l = (char*) last;
- reverse (f, m);
- reverse (m, l);
- while (f != m && m != l)
- iter_swap (f++, --l);
- reverse (f, (f == m ? l : m));
- }
-}
-
-#if __GNUC__ < 4
-size_t popcount (uint32_t v)
-{
- const uint32_t w = v - ((v >> 1) & 0x55555555); // Algorithm from AMD optimization guide
- const uint32_t x = (w & 0x33333333) + ((w >> 2) & 0x33333333);
- return (((x + (x >> 4) & 0x0F0F0F0F) * 0x01010101) >> 24);
-}
-
-#if HAVE_INT64_T
-/// \brief Returns the number of 1s in \p v in binary.
-size_t popcount (uint64_t v)
-{
- v -= (v >> 1) & UINT64_C(0x5555555555555555); // Algorithm from Wikipedia
- v = (v & UINT64_C(0x3333333333333333)) + ((v >> 2) & UINT64_C(0x3333333333333333));
- v = (v + (v >> 4)) & UINT64_C(0x0F0F0F0F0F0F0F0F);
- return ((v * UINT64_C(0x0101010101010101)) >> 56);
-}
-#endif // HAVE_INT64_T
-#endif // !__GNUC__
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ualgobase.h b/media/libdrm/mobile2/src/util/ustl-1.0/ualgobase.h
deleted file mode 100644
index 38c1a72..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ualgobase.h
+++ /dev/null
@@ -1,334 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ualgobase.h
-//
-// Implementation of STL algorithms.
-//
-// The function prototypes are copied
-// exactly from the SGI version of STL documentation along with comments about
-// their use. The code is NOT the same, though the functionality usually is.
-//
-
-#ifndef UALGOBASE_H_683A0BE77546133C4CE0E3622CFAA2EB
-#define UALGOBASE_H_683A0BE77546133C4CE0E3622CFAA2EB
-
-#include "uutility.h"
-#include <string.h>
-
-#if PLATFORM_ANDROID
-#include <stdio.h>
-#undef CPU_HAS_MMX
-#endif
-
-namespace ustl {
-
-/// Assigns the contents of a to b and the contents of b to a.
-/// This is used as a primitive operation by many other algorithms.
-/// \ingroup SwapAlgorithms
-///
-template <typename Assignable>
-inline void swap (Assignable& a, Assignable& b)
-{
- Assignable tmp = a;
- a = b;
- b = tmp;
-}
-
-/// Equivalent to swap (*a, *b)
-/// \ingroup SwapAlgorithms
-///
-template <typename Iterator>
-inline void iter_swap (Iterator a, Iterator b)
-{
- swap (*a, *b);
-}
-
-/// Copy copies elements from the range [first, last) to the range
-/// [result, result + (last - first)). That is, it performs the assignments
-/// *result = *first, *(result + 1) = *(first + 1), and so on. [1] Generally,
-/// for every integer n from 0 to last - first, copy performs the assignment
-/// *(result + n) = *(first + n). Assignments are performed in forward order,
-/// i.e. in order of increasing n.
-/// \ingroup MutatingAlgorithms
-///
-template <typename InputIterator, typename OutputIterator>
-inline OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
-{
- for (; first != last; ++result, ++first)
- *result = *first;
- return (result);
-}
-
-/// Copy_n copies elements from the range [first, first + n) to the range
-/// [result, result + n). That is, it performs the assignments
-/// *result = *first, *(result + 1) = *(first + 1), and so on. Generally,
-/// for every integer i from 0 up to (but not including) n, copy_n performs
-/// the assignment *(result + i) = *(first + i). Assignments are performed
-/// in forward order, i.e. in order of increasing n.
-/// \ingroup MutatingAlgorithms
-///
-template <typename InputIterator, typename OutputIterator>
-inline OutputIterator copy_n (InputIterator first, size_t count, OutputIterator result)
-{
- for (; count; --count, ++result, ++first)
- *result = *first;
- return (result);
-}
-
-/// \brief Copy copies elements from the range (last, first] to result.
-/// \ingroup MutatingAlgorithms
-/// Copies elements starting at last, decrementing both last and result.
-///
-template <typename InputIterator, typename OutputIterator>
-inline OutputIterator copy_backward (InputIterator first, InputIterator last, OutputIterator result)
-{
- while (first != last)
- *--result = *--last;
- return (result);
-}
-
-/// For_each applies the function object f to each element in the range
-/// [first, last); f's return value, if any, is ignored. Applications are
-/// performed in forward order, i.e. from first to last. For_each returns
-/// the function object after it has been applied to each element.
-/// \ingroup MutatingAlgorithms
-///
-template <typename InputIterator, typename UnaryFunction>
-inline UnaryFunction for_each (InputIterator first, InputIterator last, UnaryFunction f)
-{
- for (; first != last; ++first)
- f (*first);
- return (f);
-}
-
-/// Fill assigns the value value to every element in the range [first, last).
-/// That is, for every iterator i in [first, last),
-/// it performs the assignment *i = value.
-/// \ingroup GeneratorAlgorithms
-///
-template <typename ForwardIterator, typename T>
-inline void fill (ForwardIterator first, ForwardIterator last, const T& value)
-{
- for (; first != last; ++first)
- *first = value;
-}
-
-/// Fill_n assigns the value value to every element in the range
-/// [first, first+count). That is, for every iterator i in [first, first+count),
-/// it performs the assignment *i = value. The return value is first + count.
-/// \ingroup GeneratorAlgorithms
-///
-template <typename OutputIterator, typename T>
-inline OutputIterator fill_n (OutputIterator first, size_t count, const T& value)
-{
- for (; count; --count, ++first)
- *first = value;
- return (first);
-}
-
-#if CPU_HAS_MMX
-extern "C" void copy_n_fast (const void* src, size_t count, void* dest);
-#else
-inline void copy_n_fast (const void* src, size_t count, void* dest)
-{ memcpy (dest, src, count); }
-#endif
-#if __i386__ || __x86_64__
-extern "C" void copy_backward_fast (const void* first, const void* last, void* result);
-#else
-inline void copy_backward_fast (const void* first, const void* last, void* result)
-{
- const size_t nBytes (distance (first, last));
- memmove (advance (result, -nBytes), first, nBytes);
-}
-#endif
-extern "C" void fill_n8_fast (uint8_t* dest, size_t count, uint8_t v);
-extern "C" void fill_n16_fast (uint16_t* dest, size_t count, uint16_t v);
-extern "C" void fill_n32_fast (uint32_t* dest, size_t count, uint32_t v);
-extern "C" void rotate_fast (void* first, void* middle, void* last);
-
-#if __GNUC__ >= 4
-/// \brief Computes the number of 1 bits in a number.
-/// \ingroup ConditionAlgorithms
-inline size_t popcount (uint32_t v) { return (__builtin_popcount (v)); }
-#if HAVE_INT64_T
-inline size_t popcount (uint64_t v) { return (__builtin_popcountll (v)); }
-#endif
-#else
-size_t popcount (uint32_t v);
-#if HAVE_INT64_T
-size_t popcount (uint64_t v);
-#endif // HAVE_INT64_T
-#endif // __GNUC__
-
-//----------------------------------------------------------------------
-// Optimized versions for standard types
-//----------------------------------------------------------------------
-
-#if WANT_UNROLLED_COPY
-
-template <typename T>
-inline T* unrolled_copy (const T* first, size_t count, T* result)
-{
- copy_n_fast (first, count * sizeof(T), result);
- return (advance (result, count));
-}
-
-template <>
-inline uint8_t* copy_backward (const uint8_t* first, const uint8_t* last, uint8_t* result)
-{
- copy_backward_fast (first, last, result);
- return (result);
-}
-
-template <typename T>
-inline T* unrolled_fill (T* result, size_t count, T value)
-{
- for (; count; --count, ++result)
- *result = value;
- return (result);
-}
-template <> inline uint8_t* unrolled_fill (uint8_t* result, size_t count, uint8_t value)
- { fill_n8_fast (result, count, value); return (advance (result, count)); }
-template <> inline uint16_t* unrolled_fill (uint16_t* result, size_t count, uint16_t value)
- { fill_n16_fast (result, count, value); return (advance (result, count)); }
-template <> inline uint32_t* unrolled_fill (uint32_t* result, size_t count, uint32_t value)
- { fill_n32_fast (result, count, value); return (advance (result, count)); }
-template <> inline float* unrolled_fill (float* result, size_t count, float value)
- { fill_n32_fast ((uint32_t*) result, count, noalias(uint32_t(),&value)); return (advance (result, count)); }
-
-#if CPU_HAS_MMX
-#define UNROLLED_COPY_SPECIALIZATION(type) \
-template <> inline type* copy (const type* first, const type* last, type* result) \
-{ return (unrolled_copy (first, distance (first, last), result)); } \
-template <> inline type* copy_n (const type* first, size_t count, type* result) \
-{ return (unrolled_copy (first, count, result)); }
-#define UNROLLED_FILL_SPECIALIZATION(type) \
-template <> inline void fill (type* first, type* last, const type& value) \
-{ unrolled_fill (first, distance (first, last), value); } \
-template <> inline type* fill_n (type* first, size_t count, const type& value) \
-{ return (unrolled_fill (first, count, value)); }
-UNROLLED_COPY_SPECIALIZATION(uint8_t)
-UNROLLED_FILL_SPECIALIZATION(uint8_t)
-UNROLLED_COPY_SPECIALIZATION(uint16_t)
-UNROLLED_FILL_SPECIALIZATION(uint16_t)
-UNROLLED_COPY_SPECIALIZATION(uint32_t)
-UNROLLED_FILL_SPECIALIZATION(uint32_t)
-UNROLLED_COPY_SPECIALIZATION(float)
-UNROLLED_FILL_SPECIALIZATION(float)
-#undef UNROLLED_FILL_SPECIALIZATION
-#undef UNROLLED_COPY_SPECIALIZATION
-#endif // WANT_UNROLLED_COPY
-#endif // CPU_HAS_MMX
-
-// Specializations for void* and char*, aliasing the above optimized versions.
-//
-// All these need duplication with const and non-const arguments, since
-// otherwise the compiler will default to the unoptimized version for
-// pointers not const in the caller's context, such as local variables.
-// These are all inline, but they sure slow down compilation... :(
-//
-#define COPY_ALIAS_FUNC(ctype, type, alias_type) \
-template <> inline type* copy (ctype* first, ctype* last, type* result) \
-{ return ((type*) copy ((const alias_type*) first, (const alias_type*) last, (alias_type*) result)); }
-#if WANT_UNROLLED_COPY
-#if HAVE_THREE_CHAR_TYPES
-COPY_ALIAS_FUNC(const char, char, uint8_t)
-COPY_ALIAS_FUNC(char, char, uint8_t)
-#endif
-COPY_ALIAS_FUNC(const int8_t, int8_t, uint8_t)
-COPY_ALIAS_FUNC(int8_t, int8_t, uint8_t)
-COPY_ALIAS_FUNC(uint8_t, uint8_t, uint8_t)
-COPY_ALIAS_FUNC(const int16_t, int16_t, uint16_t)
-COPY_ALIAS_FUNC(int16_t, int16_t, uint16_t)
-COPY_ALIAS_FUNC(uint16_t, uint16_t, uint16_t)
-#if CPU_HAS_MMX || (SIZE_OF_LONG > 4)
-COPY_ALIAS_FUNC(const int32_t, int32_t, uint32_t)
-COPY_ALIAS_FUNC(int32_t, int32_t, uint32_t)
-COPY_ALIAS_FUNC(uint32_t, uint32_t, uint32_t)
-#endif
-#endif
-COPY_ALIAS_FUNC(const void, void, uint8_t)
-COPY_ALIAS_FUNC(void, void, uint8_t)
-#undef COPY_ALIAS_FUNC
-#define COPY_BACKWARD_ALIAS_FUNC(ctype, type, alias_type) \
-template <> inline type* copy_backward (ctype* first, ctype* last, type* result) \
-{ return ((type*) copy_backward ((const alias_type*) first, (const alias_type*) last, (alias_type*) result)); }
-#if WANT_UNROLLED_COPY
-#if HAVE_THREE_CHAR_TYPES
-COPY_BACKWARD_ALIAS_FUNC(char, char, uint8_t)
-#endif
-COPY_BACKWARD_ALIAS_FUNC(uint8_t, uint8_t, uint8_t)
-COPY_BACKWARD_ALIAS_FUNC(int8_t, int8_t, uint8_t)
-COPY_BACKWARD_ALIAS_FUNC(uint16_t, uint16_t, uint8_t)
-COPY_BACKWARD_ALIAS_FUNC(const uint16_t, uint16_t, uint8_t)
-COPY_BACKWARD_ALIAS_FUNC(int16_t, int16_t, uint8_t)
-COPY_BACKWARD_ALIAS_FUNC(const int16_t, int16_t, uint8_t)
-#endif
-COPY_BACKWARD_ALIAS_FUNC(void, void, uint8_t)
-COPY_BACKWARD_ALIAS_FUNC(const void, void, uint8_t)
-#undef COPY_BACKWARD_ALIAS_FUNC
-#define FILL_ALIAS_FUNC(type, alias_type, v_type) \
-template <> inline void fill (type* first, type* last, const v_type& value) \
-{ fill ((alias_type*) first, (alias_type*) last, (const alias_type&) value); }
-FILL_ALIAS_FUNC(void, uint8_t, char)
-FILL_ALIAS_FUNC(void, uint8_t, uint8_t)
-#if WANT_UNROLLED_COPY
-#if HAVE_THREE_CHAR_TYPES
-FILL_ALIAS_FUNC(char, uint8_t, char)
-FILL_ALIAS_FUNC(char, uint8_t, uint8_t)
-#endif
-FILL_ALIAS_FUNC(int8_t, uint8_t, int8_t)
-FILL_ALIAS_FUNC(int16_t, uint16_t, int16_t)
-#if CPU_HAS_MMX || (SIZE_OF_LONG > 4)
-FILL_ALIAS_FUNC(int32_t, uint32_t, int32_t)
-#endif
-#endif
-#undef FILL_ALIAS_FUNC
-#define COPY_N_ALIAS_FUNC(ctype, type, alias_type) \
-template <> inline type* copy_n (ctype* first, size_t count, type* result) \
-{ return ((type*) copy_n ((const alias_type*) first, count, (alias_type*) result)); }
-COPY_N_ALIAS_FUNC(const void, void, uint8_t)
-COPY_N_ALIAS_FUNC(void, void, uint8_t)
-#if WANT_UNROLLED_COPY
-#if HAVE_THREE_CHAR_TYPES
-COPY_N_ALIAS_FUNC(const char, char, uint8_t)
-COPY_N_ALIAS_FUNC(char, char, uint8_t)
-#endif
-COPY_N_ALIAS_FUNC(int8_t, int8_t, uint8_t)
-COPY_N_ALIAS_FUNC(uint8_t, uint8_t, uint8_t)
-COPY_N_ALIAS_FUNC(const int8_t, int8_t, uint8_t)
-COPY_N_ALIAS_FUNC(int16_t, int16_t, uint16_t)
-COPY_N_ALIAS_FUNC(uint16_t, uint16_t, uint16_t)
-COPY_N_ALIAS_FUNC(const int16_t, int16_t, uint16_t)
-#if CPU_HAS_MMX || (SIZE_OF_LONG > 4)
-COPY_N_ALIAS_FUNC(int32_t, int32_t, uint32_t)
-COPY_N_ALIAS_FUNC(uint32_t, uint32_t, uint32_t)
-COPY_N_ALIAS_FUNC(const int32_t, int32_t, uint32_t)
-#endif
-#endif
-#undef COPY_N_ALIAS_FUNC
-#define FILL_N_ALIAS_FUNC(type, alias_type, v_type) \
-template <> inline type* fill_n (type* first, size_t n, const v_type& value) \
-{ return ((type*) fill_n ((alias_type*) first, n, (const alias_type&) value)); }
-FILL_N_ALIAS_FUNC(void, uint8_t, char)
-FILL_N_ALIAS_FUNC(void, uint8_t, uint8_t)
-#if WANT_UNROLLED_COPY
-#if HAVE_THREE_CHAR_TYPES
-FILL_N_ALIAS_FUNC(char, uint8_t, char)
-FILL_N_ALIAS_FUNC(char, uint8_t, uint8_t)
-#endif
-FILL_N_ALIAS_FUNC(int8_t, uint8_t, int8_t)
-FILL_N_ALIAS_FUNC(int16_t, uint16_t, int16_t)
-#if CPU_HAS_MMX || (SIZE_OF_LONG > 4)
-FILL_N_ALIAS_FUNC(int32_t, uint32_t, int32_t)
-#endif
-#endif
-#undef FILL_N_ALIAS_FUNC
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uassert.h b/media/libdrm/mobile2/src/util/ustl-1.0/uassert.h
deleted file mode 100644
index a9fde46..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uassert.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// uassert.h
-
-#ifndef UASSERT_H
-#define UASSERT_H
-
-#if PLATFORM_ANDROID
-#include <stdio.h>
-
-#undef assert
-#define assert(x) _uassert((x), #x, __FILE__, __LINE__)
-
-static void _uassert(int x, const char *xstr, const char *file, int line) {
- if (!x) {
- printf("assert %s failed at %s:%d\n", xstr, file, line);
- }
-}
-#else
-#include <assert.h>
-#endif
-
-#endif
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ubitset.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/ubitset.cpp
deleted file mode 100644
index 21b5a7a..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ubitset.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ubitset.cc
-//
-
-#include "ubitset.h"
-
-namespace ustl {
-
-/// Copies bits from \p v of size \p n into \p buf as MSB "1011001..." LSB
-/// If \p buf is too small, MSB bits will be truncated.
-void convert_to_bitstring (const bitset_value_type* v, size_t n, string& buf)
-{
- string::iterator stri = buf.end();
- for (size_t i = 0; i < n && stri > buf.begin(); ++ i)
- for (bitset_value_type b = 1; b && stri > buf.begin(); b <<= 1)
- *--stri = (v[i] & b) ? '1' : '0';
-}
-
-/// Copies bits from \p buf as MSB "1011001..." LSB into \p v of size \p n.
-void convert_from_bitstring (const string& buf, bitset_value_type* v, size_t n)
-{
- string::const_iterator stri = buf.end();
- for (size_t i = 0; i < n; ++ i) {
- for (bitset_value_type b = 1; b; b <<= 1) {
- if (stri == buf.begin() || *--stri == '0')
- v[i] &= ~b;
- else
- v[i] |= b;
- }
- }
-}
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ubitset.h b/media/libdrm/mobile2/src/util/ustl-1.0/ubitset.h
deleted file mode 100644
index 4f53a95..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ubitset.h
+++ /dev/null
@@ -1,131 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ubitset.h
-//
-#ifndef UBITSET_H_7B6450EC1400CBA45DCE0127739F82EE
-#define UBITSET_H_7B6450EC1400CBA45DCE0127739F82EE
-
-#include "uassert.h"
-#include "ustring.h"
-#include "ufunction.h"
-
-namespace ustl {
-
-typedef uint32_t bitset_value_type;
-
-void convert_to_bitstring (const bitset_value_type* v, size_t n, string& buf);
-void convert_from_bitstring (const string& buf, bitset_value_type* v, size_t n);
-
-/// \class bitset ubitset.h ustl.h
-/// \ingroup Sequences
-///
-/// \brief bitset is a fixed-size block of memory with addressable bits.
-///
-/// Normally used for state flags; allows setting and unsetting of individual
-/// bits as well as bitwise operations on the entire set. The interface is
-/// most like that of unsigned integers, and is intended to be used as such.
-/// If you were using begin() and end() functions in STL's bitset, you would
-/// not be able to do the same thing here, because those functions return
-/// host type iterators, not bits.
-///
-template <size_t Size>
-class bitset {
-public:
- typedef bitset_value_type value_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
- typedef pointer iterator;
- typedef const_pointer const_iterator;
- typedef size_t difference_type;
- typedef size_t size_type;
-private:
- static const size_t s_WordBits = BitsInType (value_type);
- static const size_t s_nWords = Size / s_WordBits + ((Size % s_WordBits) != 0);
- static const size_t s_nBits = s_nWords * s_WordBits;
-private:
- inline value_type& BitRef (uoff_t n) { assert (n < Size); return (m_Bits [n / s_WordBits]); }
- inline const value_type BitRef (uoff_t n) const { assert (n < Size); return (m_Bits [n / s_WordBits]); }
- inline const value_type Mask (uoff_t n) const { assert (n < Size); return (1 << (n % s_WordBits)); }
-public:
- inline bitset (value_type v = 0) { fill_n (m_Bits, s_nWords, 0); m_Bits[0] = v; }
- inline bitset (const string& buf) { convert_from_bitstring (buf, m_Bits, s_nWords); }
- inline void flip (uoff_t n) { BitRef(n) ^= Mask(n); }
- inline void reset (void) { fill_n (m_Bits, s_nWords, 0); }
- inline void clear (void) { fill_n (m_Bits, s_nWords, 0); }
- inline void set (void) { fill_n (m_Bits, s_nWords, -1); }
- inline bitset operator~ (void) const { bitset rv (*this); rv.flip(); return (rv); }
- inline size_type size (void) const { return (Size); }
- inline size_type capacity (void) const { return (s_nBits); }
- inline const bool test (uoff_t n) const { return (BitRef(n) & Mask(n)); }
- inline const bool operator[] (uoff_t n) const { return (test(n)); }
- inline const_iterator begin (void) const { return (m_Bits); }
- inline iterator begin (void) { return (m_Bits); }
- inline const_iterator end (void) const { return (m_Bits + s_nWords); }
- inline iterator end (void) { return (m_Bits + s_nWords); }
- /// Returns the value_type with the equivalent bits. If size() > 1, you'll get only the first BitsInType(value_type) bits.
- inline const value_type to_value (void) const { return (m_Bits[0]); }
- /// Flips all the bits in the set.
- inline void flip (void) { transform (begin(), end(), begin(), bitwise_not<value_type>()); }
- /// Sets or clears bit \p n.
- inline void set (uoff_t n, bool val = true)
- {
- value_type& br (BitRef (n));
- const value_type mask (Mask (n));
- const value_type bOn (br | mask), bOff (br & ~mask);
- br = val ? bOn : bOff;
- }
- // Sets the value of the bitrange \p first through \p last to the equivalent number of bits from \p v.
- inline void set (uoff_t first, uoff_t DebugArg(last), value_type v)
- {
-#if !PLATFORM_ANDROID
- assert (size_t (distance (first, last)) <= s_WordBits && "Bit ranges must be 32 bits or smaller");
- assert (first / s_WordBits == last / s_WordBits && "Bit ranges can not cross dword (4 byte) boundary");
- assert ((v & BitMask(value_type,distance(first,last))) == v && "The value is too large to fit in the given bit range");
-#endif
- BitRef(first) |= v << (first % s_WordBits);
- }
- /// Clears the bit \p n.
- inline void reset (uoff_t n) { set (n, false); }
- /// Returns a string with bits MSB "001101001..." LSB.
- inline string to_string (void) const
- {
- string rv (Size, '0');
- convert_to_bitstring (m_Bits, s_nWords, rv);
- return (rv);
- }
- inline value_type at (uoff_t n) const { return (test(n)); }
- /// Returns the value in bits \p first through \p last.
- inline value_type at (uoff_t first, uoff_t last) const
- {
- assert (size_t (distance (first, last)) <= s_WordBits && "Bit ranges must be 32 bits or smaller");
- assert (first / s_WordBits == last / s_WordBits && "Bit ranges can not cross dword (4 byte) boundary");
- return ((BitRef(first) >> (first % s_WordBits)) & BitMask(value_type,distance(first, last)));
- }
- inline bool any (void) const { value_type sum = 0; foreach (const_iterator, i, *this) sum |= *i; return (sum); }
- inline bool none (void) const { return (!any()); }
- inline size_t count (void) const { size_t sum = 0; foreach (const_iterator, i, *this) sum += popcount(*i); return (sum); }
- inline bool operator== (const bitset<Size>& v) const
- { return (s_nWords == 1 ? (m_Bits[0] == v.m_Bits[0]) : equal (begin(), end(), v.begin())); }
- inline const bitset operator& (const bitset<Size>& v)
- { bitset<Size> result; transform (begin(), end(), v.begin(), result.begin(), bitwise_and<value_type>()); return (result); }
- inline const bitset operator| (const bitset<Size>& v)
- { bitset<Size> result; transform (begin(), end(), v.begin(), result.begin(), bitwise_or<value_type>()); return (result); }
- inline const bitset operator^ (const bitset<Size>& v)
- { bitset<Size> result; transform (begin(), end(), v.begin(), result.begin(), bitwise_xor<value_type>()); return (result); }
- inline const bitset& operator&= (const bitset<Size>& v)
- { transform (begin(), end(), v.begin(), begin(), bitwise_and<value_type>()); return (*this); }
- inline const bitset& operator|= (const bitset<Size>& v)
- { transform (begin(), end(), v.begin(), begin(), bitwise_or<value_type>()); return (*this); }
- inline const bitset& operator^= (const bitset<Size>& v)
- { transform (begin(), end(), v.begin(), begin(), bitwise_xor<value_type>()); return (*this); }
-private:
- value_type m_Bits [s_nWords];
-};
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uctralgo.h b/media/libdrm/mobile2/src/util/ustl-1.0/uctralgo.h
deleted file mode 100644
index 57f637d..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uctralgo.h
+++ /dev/null
@@ -1,482 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// \file uctralgo.h
-//
-// \brief Implementation of STL algorithms with container shortcuts.
-//
-// The function prototypes are copied
-// exactly from the SGI version of STL documentation along with comments about
-// their use. The code is NOT the same, though the functionality usually is.
-//
-
-#ifndef UCTRALGO_H_0D1AEDFA74B09791489FE25B1EC644B0
-#define UCTRALGO_H_0D1AEDFA74B09791489FE25B1EC644B0
-
-#include "uassert.h"
-
-namespace ustl {
-
-/// Copy copies elements from the range [first, last) to the range
-/// [result, result + (last - first)). That is, it performs the assignments
-/// *result = *first, *(result + 1) = *(first + 1), and so on. [1] Generally,
-/// for every integer n from 0 to last - first, copy performs the assignment
-/// *(result + n) = *(first + n). Assignments are performed in forward order,
-/// i.e. in order of increasing n.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename OutputIterator>
-inline OutputIterator copy (const Container& ctr, OutputIterator result)
-{
- return (copy (ctr.begin(), ctr.end(), result));
-}
-
-/// Copy_if copies elements from the range [first, last) to the range
-/// [result, result + (last - first)) if pred(*i) returns true.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename OutputIterator, typename Predicate>
-inline OutputIterator copy_if (Container& ctr, OutputIterator result, Predicate pred)
-{
- return (copy_if (ctr.begin(), ctr.end(), result, pred));
-}
-
-/// For_each applies the function object f to each element in the range
-/// [first, last); f's return value, if any, is ignored. Applications are
-/// performed in forward order, i.e. from first to last. For_each returns
-/// the function object after it has been applied to each element.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename UnaryFunction>
-inline UnaryFunction for_each (Container& ctr, UnaryFunction f)
-{
- return (for_each (ctr.begin(), ctr.end(), f));
-}
-
-/// For_each applies the function object f to each element in the range
-/// [first, last); f's return value, if any, is ignored. Applications are
-/// performed in forward order, i.e. from first to last. For_each returns
-/// the function object after it has been applied to each element.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename UnaryFunction>
-inline UnaryFunction for_each (const Container& ctr, UnaryFunction f)
-{
- return (for_each (ctr.begin(), ctr.end(), f));
-}
-
-/// Returns the first iterator i in the range [first, last) such that
-/// *i == value. Returns last if no such iterator exists.
-/// \ingroup SearchingAlgorithms
-///
-template <typename Container, typename EqualityComparable>
-inline typename Container::const_iterator find (const Container& ctr, const EqualityComparable& value)
-{
- return (find (ctr.begin(), ctr.end(), value));
-}
-template <typename Container, typename EqualityComparable>
-inline typename Container::iterator find (Container& ctr, const EqualityComparable& value)
-{
- return (find (ctr.begin(), ctr.end(), value));
-}
-
-/// Returns the first iterator i in the range [first, last) such that
-/// pred(*i) is true. Returns last if no such iterator exists.
-/// \ingroup SearchingAlgorithms
-///
-template <typename Container, typename Predicate>
-inline typename Container::const_iterator find_if (const Container& ctr, Predicate pred)
-{
- return (find_if (ctr.begin(), ctr.end(), pred));
-}
-template <typename Container, typename Predicate>
-inline typename Container::iterator find_if (Container& ctr, Predicate pred)
-{
- return (find_if (ctr.begin(), ctr.end(), pred));
-}
-
-/// Count finds the number of elements in [first, last) that are equal
-/// to value. More precisely, the first version of count returns the
-/// number of iterators i in [first, last) such that *i == value.
-/// \ingroup ConditionAlgorithms
-///
-template <typename Container, typename EqualityComparable>
-inline size_t count (const Container& ctr, const EqualityComparable& value)
-{
- return (count (ctr.begin(), ctr.end(), value));
-}
-
-/// Count_if finds the number of elements in [first, last) that satisfy the
-/// predicate pred. More precisely, the first version of count_if returns the
-/// number of iterators i in [first, last) such that pred(*i) is true.
-/// \ingroup ConditionAlgorithms
-///
-template <typename Container, typename Predicate>
-inline size_t count_if (const Container& ctr, Predicate pred)
-{
- return (count_if (ctr.begin(), ctr.end(), pred));
-}
-
-/// The first version of transform performs the operation op(*i) for each
-/// iterator i in the range [first, last), and assigns the result of that
-/// operation to *o, where o is the corresponding output iterator. That is,
-/// for each n such that 0 <= n < last - first, it performs the assignment
-/// *(result + n) = op(*(first + n)).
-/// The return value is result + (last - first).
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename UnaryFunction>
-inline void transform (Container& ctr, UnaryFunction op)
-{
- transform (ctr.begin(), ctr.end(), ctr.begin(), op);
-}
-
-/// The first version of transform performs the operation op(*i) for each
-/// iterator i in the range [first, last), and assigns the result of that
-/// operation to *o, where o is the corresponding output iterator. That is,
-/// for each n such that 0 <= n < last - first, it performs the assignment
-/// *(result + n) = op(*(first + n)).
-/// The return value is result + (last - first).
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename OutputIterator, typename UnaryFunction>
-inline OutputIterator transform (Container& ctr, OutputIterator result, UnaryFunction op)
-{
- return (transform (ctr.begin(), ctr.end(), result, op));
-}
-
-/// The second version of transform is very similar, except that it uses a
-/// Binary Function instead of a Unary Function: it performs the operation
-/// op(*i1, *i2) for each iterator i1 in the range [first1, last1) and assigns
-/// the result to *o, where i2 is the corresponding iterator in the second
-/// input range and where o is the corresponding output iterator. That is,
-/// for each n such that 0 <= n < last1 - first1, it performs the assignment
-/// *(result + n) = op(*(first1 + n), *(first2 + n).
-/// The return value is result + (last1 - first1).
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename InputIterator, typename OutputIterator, typename BinaryFunction>
-inline OutputIterator transform (Container& ctr, InputIterator first, OutputIterator result, BinaryFunction op)
-{
- return (transform (ctr.begin(), ctr.end(), first, result, op));
-}
-
-/// Replace replaces every element in the range [first, last) equal to
-/// old_value with new_value. That is: for every iterator i,
-/// if *i == old_value then it performs the assignment *i = new_value.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename T>
-inline void replace (Container& ctr, const T& old_value, const T& new_value)
-{
- replace (ctr.begin(), ctr.end(), old_value, new_value);
-}
-
-/// Replace_if replaces every element in the range [first, last) for which
-/// pred returns true with new_value. That is: for every iterator i, if
-/// pred(*i) is true then it performs the assignment *i = new_value.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename Predicate, typename T>
-inline void replace_if (Container& ctr, Predicate pred, const T& new_value)
-{
- replace_if (ctr.begin(), ctr.end(), pred, new_value);
-}
-
-/// Replace_copy copies elements from the range [first, last) to the range
-/// [result, result + (last-first)), except that any element equal to old_value
-/// is not copied; new_value is copied instead. More precisely, for every
-/// integer n such that 0 <= n < last-first, replace_copy performs the
-/// assignment *(result+n) = new_value if *(first+n) == old_value, and
-/// *(result+n) = *(first+n) otherwise.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename OutputIterator, typename T>
-inline OutputIterator replace_copy (const Container& ctr, OutputIterator result, const T& old_value, const T& new_value)
-{
- return (replace_copy (ctr.begin(), ctr.end(), result, old_value, new_value));
-}
-
-/// Replace_copy_if copies elements from the range [first, last) to the range
-/// [result, result + (last-first)), except that any element for which pred is
-/// true is not copied; new_value is copied instead. More precisely, for every
-/// integer n such that 0 <= n < last-first, replace_copy_if performs the
-/// assignment *(result+n) = new_value if pred(*(first+n)),
-/// and *(result+n) = *(first+n) otherwise.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename OutputIterator, typename Predicate, typename T>
-inline OutputIterator replace_copy_if (const Container& ctr, OutputIterator result, Predicate pred, const T& new_value)
-{
- return (replace_copy_if (ctr.begin(), ctr.end(), result, pred, new_value));
-}
-
-/// Fill assigns the value value to every element in the range [first, last).
-/// That is, for every iterator i in [first, last),
-/// it performs the assignment *i = value.
-/// \ingroup GeneratorAlgorithms
-///
-template <typename Container, typename T>
-inline void fill (Container& ctr, const T& value)
-{
- fill (ctr.begin(), ctr.end(), value);
-}
-
-/// Generate assigns the result of invoking gen, a function object that
-/// takes no arguments, to each element in the range [first, last).
-/// \ingroup GeneratorAlgorithms
-///
-template <typename Container, typename Generator>
-inline void generate (Container& ctr, Generator gen)
-{
- generate (ctr.begin(), ctr.end(), gen);
-}
-
-/// Randomly permute the elements of the container.
-/// \ingroup GeneratorAlgorithms
-///
-template <typename Container>
-inline void random_shuffle (Container& ctr)
-{
- random_shuffle (ctr.begin(), ctr.end());
-}
-
-/// Remove_copy copies elements that are not equal to value from the range
-/// [first, last) to a range beginning at result. The return value is the
-/// end of the resulting range. This operation is stable, meaning that the
-/// relative order of the elements that are copied is the same as in the
-/// range [first, last).
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename OutputIterator, typename T>
-inline OutputIterator remove_copy (const Container& ctr, OutputIterator result, const T& value)
-{
- return (remove_copy (ctr.begin(), ctr.end(), result, value));
-}
-
-/// Remove_copy_if copies elements from the range [first, last) to a range
-/// beginning at result, except that elements for which pred is true are not
-/// copied. The return value is the end of the resulting range. This operation
-/// is stable, meaning that the relative order of the elements that are copied
-/// is the same as in the range [first, last).
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename OutputIterator, typename Predicate>
-inline OutputIterator remove_copy_if (const Container& ctr, OutputIterator result, Predicate pred)
-{
- return (remove_copy_if (ctr.begin(), ctr.end(), result, pred));
-}
-
-/// Remove removes from the range [first, last) all elements that are equal to
-/// value. That is, remove returns an iterator new_last such that the range
-/// [first, new_last) contains no elements equal to value. Remove is stable,
-/// meaning that the relative order of elements that are not equal to value is
-/// unchanged.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename T>
-inline void remove (Container& ctr, const T& value)
-{
- ctr.erase (remove_copy (ctr.begin(), ctr.end(), ctr.begin(), value), ctr.end());
-}
-
-/// Remove removes from the range [first, last) all elements that have an iterator
-/// in range [rfirst, rlast). The range is assumed to be sorted. That is, remove
-/// returns an iterator new_last such that the range [first, new_last) contains
-/// no elements whose iterators are in [rfirst, rlast). Remove is stable,
-/// meaning that the relative order of elements that are not equal to value is
-/// unchanged. This version of the algorithm is a uSTL extension.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename ForwardIterator>
-inline void remove (Container& ctr, ForwardIterator rfirst, ForwardIterator rlast)
-{
- ctr.erase (remove_copy (ctr.begin(), ctr.end(), ctr.begin(), rfirst, rlast), ctr.end());
-}
-
-/// Remove_if removes from the range [first, last) every element x such that
-/// pred(x) is true. That is, remove_if returns an iterator new_last such that
-/// the range [first, new_last) contains no elements for which pred is true.
-/// The iterators in the range [new_last, last) are all still dereferenceable,
-/// but the elements that they point to are unspecified. Remove_if is stable,
-/// meaning that the relative order of elements that are not removed is
-/// unchanged.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename Predicate>
-inline void remove_if (Container& ctr, Predicate pred)
-{
- ctr.erase (remove_copy_if (ctr.begin(), ctr.end(), ctr.begin(), pred), ctr.end());
-}
-
-/// Unique_copy copies elements from the range [first, last) to a range
-/// beginning with result, except that in a consecutive group of duplicate
-/// elements only the first one is copied. The return value is the end of
-/// the range to which the elements are copied. This behavior is similar
-/// to the Unix filter uniq.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename OutputIterator>
-inline OutputIterator unique_copy (const Container& ctr, OutputIterator result)
-{
- return (unique_copy (ctr.begin(), ctr.end(), result));
-}
-
-/// Every time a consecutive group of duplicate elements appears in the range
-/// [first, last), the algorithm unique removes all but the first element.
-/// That is, unique returns an iterator new_last such that the range [first,
-/// new_last) contains no two consecutive elements that are duplicates.
-/// The iterators in the range [new_last, last) are all still dereferenceable,
-/// but the elements that they point to are unspecified. Unique is stable,
-/// meaning that the relative order of elements that are not removed is
-/// unchanged.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container>
-inline void unique (Container& ctr)
-{
- ctr.erase (unique_copy (ctr.begin(), ctr.end(), ctr.begin()), ctr.end());
-}
-
-/// Every time a consecutive group of duplicate elements appears in the range
-/// [first, last), the algorithm unique removes all but the first element.
-/// That is, unique returns an iterator new_last such that the range [first,
-/// new_last) contains no two consecutive elements that are duplicates.
-/// The iterators in the range [new_last, last) are all still dereferenceable,
-/// but the elements that they point to are unspecified. Unique is stable,
-/// meaning that the relative order of elements that are not removed is
-/// unchanged.
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container, typename BinaryPredicate>
-inline void unique (Container& ctr, BinaryPredicate binary_pred)
-{
- ctr.erase (unique_copy (ctr.begin(), ctr.end(), ctr.begin(), binary_pred), ctr.end());
-}
-
-/// Reverse reverses a range.
-/// That is: for every i such that 0 <= i <= (last - first) / 2),
-/// it exchanges *(first + i) and *(last - (i + 1)).
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container>
-inline void reverse (Container& ctr)
-{
- reverse (ctr.begin(), ctr.end());
-}
-
-/// Exchanges ranges [first, middle) and [middle, last)
-/// \ingroup MutatingAlgorithms
-///
-template <typename Container>
-inline void rotate (Container& ctr, off_t offset)
-{
- assert (size_t(offset > 0 ? offset : -offset) < ctr.size());
- if (offset > 0)
- rotate (ctr.begin(), ctr.end() - offset, ctr.end());
- else
- rotate (ctr.begin(), ctr.begin() - offset, ctr.end());
-}
-
-/// Returns the furthermost iterator i in [first, last) such that,
-/// for every iterator j in [first, i), *j < value
-/// Assumes the range is sorted.
-/// \ingroup SearchingAlgorithms
-///
-template <typename Container, typename LessThanComparable>
-inline typename Container::const_iterator lower_bound (const Container& ctr, const LessThanComparable& value)
-{
- return (lower_bound (ctr.begin(), ctr.end(), value));
-}
-template <typename Container, typename LessThanComparable>
-inline typename Container::iterator lower_bound (Container& ctr, const LessThanComparable& value)
-{
- return (lower_bound (ctr.begin(), ctr.end(), value));
-}
-
-/// Returns the furthermost iterator i in [first,last) such that for
-/// every iterator j in [first,i), value < *j is false.
-/// \ingroup SearchingAlgorithms
-///
-template <typename Container, typename LessThanComparable>
-inline typename Container::const_iterator upper_bound (const Container& ctr, const LessThanComparable& value)
-{
- return (upper_bound (ctr.begin(), ctr.end(), value));
-}
-template <typename Container, typename LessThanComparable>
-inline typename Container::iterator upper_bound (Container& ctr, const LessThanComparable& value)
-{
- return (upper_bound (ctr.begin(), ctr.end(), value));
-}
-
-/// Performs a binary search for \p value.
-/// Assumes the range is sorted.
-/// \ingroup SearchingAlgorithms
-///
-template <typename Container>
-inline typename Container::const_iterator binary_search (const Container& ctr, const typename Container::value_type& value)
-{
- return (binary_search (ctr.begin(), ctr.end(), value));
-}
-template <typename Container>
-inline typename Container::iterator binary_search (Container& ctr, const typename Container::value_type& value)
-{
- return (binary_search (ctr.begin(), ctr.end(), value));
-}
-
-/// Returns pair<lower_bound,upper_bound>
-/// \ingroup SearchingAlgorithms
-///
-template <typename Container, typename LessThanComparable>
-inline pair<typename Container::const_iterator,typename Container::const_iterator> equal_range (const Container& ctr, const LessThanComparable& value)
-{
- return (equal_range (ctr.begin(), ctr.end(), value));
-}
-template <typename Container, typename LessThanComparable>
-inline pair<typename Container::iterator,typename Container::iterator> equal_range (Container& ctr, const LessThanComparable& value)
-{
- return (equal_range (ctr.begin(), ctr.end(), value));
-}
-
-/// Sorts the container
-/// \ingroup SortingAlgorithms
-///
-template <typename Container>
-inline void sort (Container& ctr)
-{
- sort (ctr.begin(), ctr.end());
-}
-
-/// Sorts the container
-/// \ingroup SortingAlgorithms
-///
-template <typename Container, typename Compare>
-inline void sort (Container& ctr, Compare comp)
-{
- sort (ctr.begin(), ctr.end(), comp);
-}
-
-/// Sorts the container
-/// \ingroup SortingAlgorithms
-///
-template <typename Container>
-inline void stable_sort (Container& ctr)
-{
- stable_sort (ctr.begin(), ctr.end());
-}
-
-/// Sorts the container
-/// \ingroup SortingAlgorithms
-///
-template <typename Container, typename Compare>
-inline void stable_sort (Container& ctr, Compare comp)
-{
- stable_sort (ctr.begin(), ctr.end(), comp);
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uctrstrm.h b/media/libdrm/mobile2/src/util/ustl-1.0/uctrstrm.h
deleted file mode 100644
index 39ddcdd..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uctrstrm.h
+++ /dev/null
@@ -1,177 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-/// \file uctrstrm.h
-///
-/// \brief Serialization templates for standard containers.
-/// Because containers are templates, a single operator>> is impossible.
-/// Making virtual read/write is also impossible because not all containers
-/// contain serializable elements. Therefore, use the macros in this file.
-///
-
-#ifndef UCTRSTRM_H_75B2C3EA4980DDDC6B6DFFF767A3B7AC
-#define UCTRSTRM_H_75B2C3EA4980DDDC6B6DFFF767A3B7AC
-
-#include "mistream.h"
-#include "sostream.h"
-#include "uiosfunc.h"
-
-namespace ustl {
-
-//----------------------------------------------------------------------
-// Macros for easily declaring a container streamable.
-//----------------------------------------------------------------------
-
-/// \brief Declares container template \p type streamable.
-///
-/// Use TEMPLATE_TYPE and TEMPLATE_DECL macros to pass in templated
-/// type with commas and the template declaration.
-///
-#define STD_TEMPLATE_CTR_STREAMABLE(type, template_decl) \
- template_decl \
- inline istream& operator>> (istream& is, type& v) \
- { return (container_read (is, v)); } \
- template_decl \
- inline ostream& operator<< (ostream& os, const type& v) \
- { return (container_write (os, v)); } \
- template_decl \
- inline ostringstream& operator<< (ostringstream& os, const type& v) \
- { return (container_text_write (os, v)); } \
- template_decl \
- inline size_t stream_size_of (const type& v) \
- { return (container_stream_size (v)); }
-
-/// \brief Declares non-resizable container template \p type streamable.
-#define STD_TEMPLATE_NR_CTR_STREAMABLE(type, template_decl) \
- template_decl \
- inline istream& operator>> (istream& is, type& v) \
- { return (nr_container_read (is, v)); } \
- template_decl \
- inline ostream& operator<< (ostream& os, const type& v) \
- { return (nr_container_write (os, v)); } \
- template_decl \
- inline ostringstream& operator<< (ostringstream& os, const type& v) \
- { return (container_text_write (os, v)); } \
- template_decl \
- inline size_t stream_size_of (const type& v) \
- { return (nr_container_stream_size (v)); }
-
-//----------------------------------------------------------------------
-// Fixed size container serialization.
-//----------------------------------------------------------------------
-
-/// Reads fixed size container \p v from stream \p is.
-template <typename Container>
-inline istream& nr_container_read (istream& is, Container& v)
-{
- foreach (typename Container::iterator, i, v)
- is >> *i;
- return (is);
-}
-
-/// Writes fixed size container \p v into stream \p os.
-template <typename Container>
-inline ostream& nr_container_write (ostream& os, const Container& v)
-{
- foreach (typename Container::const_iterator, i, v)
- os << *i;
- return (os);
-}
-
-/// Computes the stream size of a fixed size standard container.
-template <typename Container>
-size_t nr_container_stream_size (const Container& v)
-{
- typedef typename Container::const_iterator vciter_t;
- typedef typename iterator_traits<vciter_t>::value_type value_type;
- size_t s = 0;
- if (numeric_limits<value_type>::is_integral)
- s += v.size() * stream_size_of(value_type());
- else
- foreach (vciter_t, i, v)
- s += stream_size_of(*i);
- return (s);
-}
-
-//----------------------------------------------------------------------
-// Resizable container serialization.
-//----------------------------------------------------------------------
-
-/// Reads container \p v from stream \p is.
-template <typename Container>
-istream& container_read (istream& is, Container& v)
-{
- typedef typename Container::value_type value_type;
- typedef typename Container::iterator iterator;
- typedef typename Container::written_size_type written_size_type;
- written_size_type n;
- is >> n;
- const size_t expectedSize = n * stream_size_of(value_type());
-#if !PLATFORM_ANDROID
- is.verify_remaining ("read", typeid(v).name(), expectedSize);
-#endif
- if (alignof(value_type()) > alignof(n))
- is >> ios::talign<value_type>();
- v.resize (n);
- nr_container_read (is, v);
- is >> ios::talign<written_size_type>();
- return (is);
-}
-
-/// Writes the vector to stream \p os.
-template <typename Container>
-ostream& container_write (ostream& os, const Container& v)
-{
- typedef typename Container::value_type value_type;
- typedef typename Container::written_size_type written_size_type;
- const written_size_type sz (v.size());
- os << sz;
- if (alignof(value_type()) > alignof(sz))
- os << ios::talign<value_type>();
- nr_container_write (os, v);
- os << ios::talign<written_size_type>();
- return (os);
-}
-
-/// Computes the stream size of a standard container.
-template <typename Container>
-size_t container_stream_size (const Container& v)
-{
- typedef typename Container::value_type value_type;
- typedef typename Container::written_size_type written_size_type;
- const written_size_type sz (v.size());
- size_t sizeSize = stream_size_of (sz);
- if (alignof(value_type()) > alignof(sz))
- sizeSize = Align (sizeSize, alignof(value_type()));
- return (Align (sizeSize + nr_container_stream_size (v), alignof(sz)));
-}
-
-/// \brief Writes element \p v into stream \p os as text.
-/// Specialize to custom print elements.
-template <typename T>
-inline ostringstream& container_element_text_write (ostringstream& os, const T& v)
-{ return (os << v); }
-
-/// Writes container \p v into stream \p os as text.
-template <typename Container>
-ostringstream& container_text_write (ostringstream& os, const Container& v)
-{
- typename Container::const_iterator i = v.begin();
- os << '(';
- while (i < v.end()) {
- container_element_text_write (os, *i);
- if (++i >= v.end()) break;
- os << ',';
- }
- os << ')';
- return (os);
-}
-
-//----------------------------------------------------------------------
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uexception.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/uexception.cpp
deleted file mode 100644
index d00f219..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uexception.cpp
+++ /dev/null
@@ -1,305 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// uexception.cc
-//
-
-#include "uassert.h"
-#include "uexception.h"
-#include "ustring.h"
-#include "mistream.h"
-#include "sostream.h"
-#include "strmsize.h"
-#include "uspecial.h"
-#include <errno.h>
-#if __GNUC__ >= 3 && !PLATFORM_ANDROID
- #include <cxxabi.h>
-#endif
-
-namespace ustl {
-
-//----------------------------------------------------------------------
-
-/// \brief Returns a descriptive error message. fmt="%s"
-/// Overloads of this functions must set NULL as the default fmt
-/// argument and handle that case to provide a default format string
-/// in case the user does not have a localized one. The format
-/// string should be shown in the documentation to not require
-/// translators to look through code. Also, this function must
-/// not throw anything, so you must wrap memory allocation routines
-/// (like string::format, for instance) in a try{}catch(...){} block.
-///
-void exception::info (string& msgbuf, const char*) const throw()
-{
-#if PLATFORM_ANDROID
- msgbuf.format ("%s", what());
-#else /* !PLATFORM_ANDROID */
- try { msgbuf.format ("%s", what()); } catch (...) { /* Ignore all exceptions */ }
-#endif
-}
-
-/// Reads the exception from stream \p is.
-void exception::read (istream& is)
-{
- uint32_t stmSize;
- xfmt_t fmt;
- is >> fmt >> stmSize >> m_Backtrace;
- assert (fmt == m_Format && "The saved exception is of a different type.");
- assert (stmSize - exception::stream_size() <= is.remaining() && "The saved exception data is corrupt.");
- m_Format = fmt;
-}
-
-/// Writes the exception into stream \p os as an IFF chunk.
-void exception::write (ostream& os) const
-{
- os << m_Format << uint32_t(stream_size()) << m_Backtrace;
-}
-
-/// Writes the exception as text into stream \p os.
-void exception::text_write (ostringstream& os) const
-{
-#if !PLATFORM_ANDROID
- try {
-#endif
- string buf;
- info (buf);
- os << buf;
-#if !PLATFORM_ANDROID
- } catch (...) {}
-#endif
-}
-
-//----------------------------------------------------------------------
-
-/// Initializes the empty object. \p nBytes is the size of the attempted allocation.
-bad_alloc::bad_alloc (size_t nBytes) throw()
-: ustl::exception(),
- m_nBytesRequested (nBytes)
-{
- set_format (xfmt_BadAlloc);
-}
-
-/// Returns a descriptive error message. fmt="failed to allocate %d bytes"
-void bad_alloc::info (string& msgbuf, const char* fmt) const throw()
-{
- if (!fmt) fmt = "failed to allocate %d bytes";
-#if PLATFORM_ANDROID
- msgbuf.format (fmt, m_nBytesRequested);
-#else /* !PLATFORM_ANDROID */
- try { msgbuf.format (fmt, m_nBytesRequested); } catch (...) {}
-#endif
-}
-
-/// Reads the exception from stream \p is.
-void bad_alloc::read (istream& is)
-{
- ustl::exception::read (is);
- is >> m_nBytesRequested;
-}
-
-/// Writes the exception into stream \p os.
-void bad_alloc::write (ostream& os) const
-{
- ustl::exception::write (os);
- os << m_nBytesRequested;
-}
-
-/// Returns the size of the written exception.
-size_t bad_alloc::stream_size (void) const
-{
- return (ustl::exception::stream_size() + stream_size_of(m_nBytesRequested));
-}
-
-//----------------------------------------------------------------------
-
-/// Initializes the empty object. \p operation is the function that returned the error code.
-libc_exception::libc_exception (const char* operation) throw()
-: exception(),
- m_Errno (errno),
- m_Operation (operation)
-{
- set_format (xfmt_LibcException);
-}
-
-/// Copies object \p v.
-libc_exception::libc_exception (const libc_exception& v) throw()
-: exception (v),
- m_Errno (v.m_Errno),
- m_Operation (v.m_Operation)
-{
-}
-
-/// Copies object \p v.
-const libc_exception& libc_exception::operator= (const libc_exception& v)
-{
- m_Errno = v.m_Errno;
- m_Operation = v.m_Operation;
- return (*this);
-}
-
-/// Returns a descriptive error message. fmt="%s: %m"
-void libc_exception::info (string& msgbuf, const char* fmt) const throw()
-{
- if (!fmt) fmt = "%s: %m";
-#if PLATFORM_ANDROID
- msgbuf.format (fmt, m_Operation, m_Errno, m_Errno);
-#else /* !PLATFORM_ANDROID */
- try { msgbuf.format (fmt, m_Operation, m_Errno, m_Errno); } catch (...) {}
-#endif
-}
-
-/// Reads the exception from stream \p is.
-void libc_exception::read (istream& is)
-{
- exception::read (is);
- is >> m_Errno >> m_Operation;
-}
-
-/// Writes the exception into stream \p os.
-void libc_exception::write (ostream& os) const
-{
- exception::write (os);
- os << m_Errno << m_Operation;
-}
-
-/// Returns the size of the written exception.
-size_t libc_exception::stream_size (void) const
-{
- return (exception::stream_size() +
- stream_size_of(m_Errno) +
- stream_size_of(m_Operation));
-}
-
-//----------------------------------------------------------------------
-
-/// Initializes the empty object. \p operation is the function that returned the error code.
-file_exception::file_exception (const char* operation, const char* filename) throw()
-: libc_exception (operation)
-{
- memset (m_Filename, 0, VectorSize(m_Filename));
- set_format (xfmt_FileException);
- if (filename) {
- strncpy (m_Filename, filename, VectorSize(m_Filename));
- m_Filename [VectorSize(m_Filename) - 1] = 0;
- }
-}
-
-/// Returns a descriptive error message. fmt="%s %s: %m"
-void file_exception::info (string& msgbuf, const char* fmt) const throw()
-{
- if (!fmt) fmt = "%s %s: %m";
-#if PLATFORM_ANDROID
- msgbuf.format (fmt, m_Operation, m_Filename, m_Errno, m_Errno);
-#else /* !PLATFORM_ANDROID */
- try { msgbuf.format (fmt, m_Operation, m_Filename, m_Errno, m_Errno); } catch (...) {}
-#endif
-}
-
-/// Reads the exception from stream \p is.
-void file_exception::read (istream& is)
-{
- libc_exception::read (is);
- string filename;
- is >> filename;
- is.align (8);
- filename.copyto (filename, VectorSize(m_Filename));
-}
-
-/// Writes the exception into stream \p os.
-void file_exception::write (ostream& os) const
-{
- libc_exception::write (os);
- os << string (m_Filename);
- os.align (8);
-}
-
-/// Returns the size of the written exception.
-size_t file_exception::stream_size (void) const
-{
- return (libc_exception::stream_size() +
- Align (stream_size_of (string (m_Filename)), 8));
-}
-
-//----------------------------------------------------------------------
-
-/// \brief Uses C++ ABI call, if available to demangle the contents of \p buf.
-///
-/// The result is written to \p buf, with the maximum size of \p bufSize, and
-/// is zero-terminated. The return value is \p buf.
-///
-const char* demangle_type_name (char* buf, size_t bufSize, size_t* pdmSize)
-{
- size_t bl = strlen (buf);
-#if __GNUC__ >= 3 && !PLATFORM_ANDROID
- char dmname [256];
- size_t sz = VectorSize(dmname);
- int bFailed;
- abi::__cxa_demangle (buf, dmname, &sz, &bFailed);
- if (!bFailed) {
- bl = min (strlen (dmname), bufSize - 1);
- memcpy (buf, dmname, bl);
- buf[bl] = 0;
- }
-#else
- bl = min (bl, bufSize);
-#endif
- if (pdmSize)
- *pdmSize = bl;
- return (buf);
-}
-
-//----------------------------------------------------------------------
-
-/// Initializes the empty object. \p operation is the function that returned the error code.
-stream_bounds_exception::stream_bounds_exception (const char* operation, const char* type, uoff_t offset, size_t expected, size_t remaining) throw()
-: libc_exception (operation),
- m_TypeName (type),
- m_Offset (offset),
- m_Expected (expected),
- m_Remaining (remaining)
-{
- set_format (xfmt_StreamBoundsException);
-}
-
-/// Returns a descriptive error message. fmt="%s stream %s: @%u: expected %u, available %u";
-void stream_bounds_exception::info (string& msgbuf, const char* fmt) const throw()
-{
- char typeName [256];
- strncpy (typeName, m_TypeName, VectorSize(typeName));
- typeName[VectorSize(typeName)-1] = 0;
- if (!fmt) fmt = "%s stream %s: @0x%X: need %u bytes, have %u";
-#if PLATFORM_ANDROID
- msgbuf.format (fmt, demangle_type_name (VectorBlock(typeName)), m_Operation, m_Offset, m_Expected, m_Remaining);
-#else /* !PLATFORM_ANDROID */
- try { msgbuf.format (fmt, demangle_type_name (VectorBlock(typeName)), m_Operation, m_Offset, m_Expected, m_Remaining); } catch (...) {}
-#endif
-}
-
-/// Reads the exception from stream \p is.
-void stream_bounds_exception::read (istream& is)
-{
- libc_exception::read (is);
- is >> m_TypeName >> m_Offset >> m_Expected >> m_Remaining;
-}
-
-/// Writes the exception into stream \p os.
-void stream_bounds_exception::write (ostream& os) const
-{
- libc_exception::write (os);
- os << m_TypeName << m_Offset << m_Expected << m_Remaining;
-}
-
-/// Returns the size of the written exception.
-size_t stream_bounds_exception::stream_size (void) const
-{
- return (libc_exception::stream_size() +
- stream_size_of(m_TypeName) +
- stream_size_of(m_Offset) +
- stream_size_of(m_Expected) +
- stream_size_of(m_Remaining));
-}
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uexception.h b/media/libdrm/mobile2/src/util/ustl-1.0/uexception.h
deleted file mode 100644
index 3e9a179..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uexception.h
+++ /dev/null
@@ -1,194 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// uexception.h
-//
-// This file contains stuff from \<exception\>.
-// The standard C++ headers are duplicated because uSTL is intended
-// to completely replace all C++ standard library functions.
-//
-
-#ifndef UEXCEPTION_H_18DE3EF55C4F00673268F0D66546AF5D
-#define UEXCEPTION_H_18DE3EF55C4F00673268F0D66546AF5D
-
-#include "utypes.h"
-#ifndef WITHOUT_LIBSTDCPP
- #include <exception>
- #include <new>
-#endif
-#include "bktrace.h"
-
-#ifdef WITHOUT_LIBSTDCPP // This code is copied from <exception>
-namespace std {
-/// If you write a replacement terminate handler, it must be of this type.
-typedef void (*terminate_handler) (void);
-/// If you write a replacement unexpected handler, it must be of this type.
-typedef void (*unexpected_handler) (void);
-/// Takes a new handler function as an argument, returns the old function.
-terminate_handler set_terminate (terminate_handler pHandler) throw();
-/// The runtime will call this function if exception handling must be
-/// abandoned for any reason. It can also be called by the user.
-void terminate (void) __attribute__ ((__noreturn__));
-/// Takes a new handler function as an argument, returns the old function.
-unexpected_handler set_unexpected (unexpected_handler pHandler) throw();
-/// The runtime will call this function if an exception is thrown which
-/// violates the function's exception specification.
-void unexpected (void) __attribute__ ((__noreturn__));
-/// Returns true when the caught exception violates the throw specification.
-bool uncaught_exception() throw();
-} // namespace std
-#endif
-
-namespace ustl {
-
-class string;
-
-typedef uint32_t xfmt_t;
-
-enum {
- xfmt_Exception,
- xfmt_BadAlloc,
- xfmt_LibcException = 12,
- xfmt_FileException = 13,
- xfmt_StreamBoundsException = 14
-};
-
-/// \class exception uexception.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Base class for exceptions, equivalent to std::exception.
-///
-#ifdef WITHOUT_LIBSTDCPP
-class exception {
-#else
-class exception : public std::exception {
-#endif
-public:
- typedef const CBacktrace& rcbktrace_t;
-public:
- inline exception (void) throw() : m_Format (xfmt_Exception) {}
- inline virtual ~exception (void) throw() {}
- inline virtual const char* what (void) const throw() { return ("error"); }
- virtual void info (string& msgbuf, const char* fmt = NULL) const throw();
- virtual void read (istream& is);
- virtual void write (ostream& os) const;
- void text_write (ostringstream& os) const;
- inline virtual size_t stream_size (void) const { return (sizeof(m_Format) + sizeof(uint32_t) + m_Backtrace.stream_size()); }
- /// Format of the exception is used to lookup exception::info format string.
- /// Another common use is the instantiation of serialized exceptions, used
- /// by the error handler node chain to troubleshoot specific errors.
- inline xfmt_t format (void) const { return (m_Format); }
- inline rcbktrace_t backtrace (void) const { return (m_Backtrace); }
-protected:
- inline void set_format (xfmt_t fmt) { m_Format = fmt; }
-private:
- CBacktrace m_Backtrace; ///< Backtrace of the throw point.
- xfmt_t m_Format; ///< Format of the exception's data.
-};
-
-/// \class bad_cast uexception.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Thrown to indicate a bad dynamic_cast usage.
-///
-class bad_cast : public exception {
-public:
- inline explicit bad_cast (void) throw() : exception() {}
- inline virtual const char* what (void) const throw() { return ("bad cast"); }
-};
-
-//----------------------------------------------------------------------
-
-/// \class bad_alloc uexception.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Exception thrown on memory allocation failure by memblock::reserve.
-///
-#ifdef WITHOUT_LIBSTDCPP
-class bad_alloc : public exception {
-#else
-class bad_alloc : public std::bad_alloc, public exception {
-#endif
-public:
- explicit bad_alloc (size_t nBytes = 0) throw();
- inline virtual const char* what (void) const throw() { return ("memory allocation failed"); }
- virtual void info (string& msgbuf, const char* fmt = NULL) const throw();
- virtual void read (istream& is);
- virtual void write (ostream& os) const;
- virtual size_t stream_size (void) const;
-protected:
- size_t m_nBytesRequested; ///< Number of bytes requested by the failed allocation.
-};
-
-/// \class libc_exception uexception.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Thrown when a libc function returns an error.
-///
-/// Contains an errno and description. This is a uSTL extension.
-///
-class libc_exception : public exception {
-public:
- explicit libc_exception (const char* operation) throw();
- libc_exception (const libc_exception& v) throw();
- const libc_exception& operator= (const libc_exception& v);
- inline virtual const char* what (void) const throw() { return ("libc function failed"); }
- virtual void info (string& msgbuf, const char* fmt = NULL) const throw();
- virtual void read (istream& is);
- virtual void write (ostream& os) const;
- virtual size_t stream_size (void) const;
-protected:
- intptr_t m_Errno; ///< Error code returned by the failed operation.
- const char* m_Operation; ///< Name of the failed operation.
-};
-
-/// \class file_exception uexception.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief File-related exceptions.
-///
-/// Contains the file name. This is a uSTL extension.
-///
-class file_exception : public libc_exception {
-public:
- file_exception (const char* operation, const char* filename) throw();
- inline virtual const char* what (void) const throw() { return ("file error"); }
- virtual void info (string& msgbuf, const char* fmt = NULL) const throw();
- virtual void read (istream& is);
- virtual void write (ostream& os) const;
- virtual size_t stream_size (void) const;
-protected:
- char m_Filename [PATH_MAX]; ///< Name of the file causing the error.
-};
-
-/// \class stream_bounds_exception uexception.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Stream bounds checking.
-///
-/// Only thrown in debug builds unless you say otherwise in config.h
-/// This is a uSTL extension.
-///
-class stream_bounds_exception : public libc_exception {
-public:
- stream_bounds_exception (const char* operation, const char* type, uoff_t offset, size_t expected, size_t remaining) throw();
- inline virtual const char* what (void) const throw() { return ("stream bounds exception"); }
- virtual void info (string& msgbuf, const char* fmt = NULL) const throw();
- virtual void read (istream& is);
- virtual void write (ostream& os) const;
- virtual size_t stream_size (void) const;
-protected:
- const char* m_TypeName;
- uoff_t m_Offset;
- size_t m_Expected;
- size_t m_Remaining;
-};
-
-const char* demangle_type_name (char* buf, size_t bufSize, size_t* pdmSize = NULL);
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ufunction.h b/media/libdrm/mobile2/src/util/ustl-1.0/ufunction.h
deleted file mode 100644
index 53dc5e2..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ufunction.h
+++ /dev/null
@@ -1,480 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// \file ufunction.h
-//
-// \brief Implements STL standard functors.
-//
-// See STL specification and bvts for usage of these. The only
-// extension is the mem_var functors for member variable access:
-// \code
-// f = find_if (ctr, mem_var_equal_to(&MyClass::m_Var, matchVar));
-// f = find_if (ctr, mem_var_less(&MyClass::m_Var, matchVar));
-// \endcode
-// There are a couple of others but the syntax is much harder to grasp.
-// See bvt10.cc for more examples.
-//
-
-#ifndef UFUNCTION_H_221ABA8551801799263C927234C085F3
-#define UFUNCTION_H_221ABA8551801799263C927234C085F3
-
-namespace ustl {
-
-//----------------------------------------------------------------------
-// Standard functors
-//----------------------------------------------------------------------
-
-/// \brief void-returning function abstract interface.
-/// \ingroup FunctorObjects
-template <typename Result>
-struct void_function {
- typedef Result result_type;
-};
-
-/// \brief \p Result f (\p Arg) function abstract interface.
-/// \ingroup FunctorObjects
-template <typename Arg, typename Result>
-struct unary_function {
- typedef Arg argument_type;
- typedef Result result_type;
-};
-
-/// \brief \p Result f (\p Arg1, \p Arg2) function abstract interface.
-/// \ingroup FunctorObjects
-template <typename Arg1, typename Arg2, typename Result>
-struct binary_function {
- typedef Arg1 first_argument_type;
- typedef Arg2 second_argument_type;
- typedef Result result_type;
-};
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-
-#define STD_BINARY_FUNCTOR(name, rv, func) \
-template <class T> struct name : public binary_function<T,T,rv> \
-{ inline rv operator()(const T& a, const T& b) const { return func; } };
-#define STD_UNARY_FUNCTOR(name, rv, func) \
-template <class T> struct name : public unary_function<T,rv> \
-{ inline rv operator()(const T& a) const { return func; } };
-#define STD_CONVERSION_FUNCTOR(name, func) \
-template <class S, class D> struct name : public unary_function<S,D> \
-{ inline D operator()(const S& a) const { return func; } };
-
-STD_BINARY_FUNCTOR (plus, T, (a + b))
-STD_BINARY_FUNCTOR (minus, T, (a - b))
-STD_BINARY_FUNCTOR (divides, T, (a / b))
-STD_BINARY_FUNCTOR (modulus, T, (a % b))
-STD_BINARY_FUNCTOR (multiplies, T, (a * b))
-STD_BINARY_FUNCTOR (logical_and, T, (a && b))
-STD_BINARY_FUNCTOR (logical_or, T, (a || b))
-STD_UNARY_FUNCTOR (logical_not, T, (!a))
-STD_BINARY_FUNCTOR (bitwise_or, T, (a | b))
-STD_BINARY_FUNCTOR (bitwise_and, T, (a & b))
-STD_BINARY_FUNCTOR (bitwise_xor, T, (a ^ b))
-STD_UNARY_FUNCTOR (bitwise_not, T, (~a))
-STD_UNARY_FUNCTOR (negate, T, (-a))
-STD_BINARY_FUNCTOR (equal_to, bool, (a == b))
-STD_BINARY_FUNCTOR (not_equal_to, bool, (!(a == b)))
-STD_BINARY_FUNCTOR (greater, bool, (b < a))
-STD_BINARY_FUNCTOR (less, bool, (a < b))
-STD_BINARY_FUNCTOR (greater_equal, bool, (!(a < b)))
-STD_BINARY_FUNCTOR (less_equal, bool, (!(b < a)))
-STD_BINARY_FUNCTOR (compare, int, (a < b ? -1 : (b < a)))
-STD_UNARY_FUNCTOR (identity, T, (a))
-
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-/// \brief Selects and returns the first argument.
-/// \ingroup FunctorObjects
-template <class T1, class T2> struct project1st : public binary_function<T1,T2,T1> { inline const T1& operator()(const T1& a, const T2&) const { return (a); } };
-/// \brief Selects and returns the second argument.
-/// \ingroup FunctorObjects
-template <class T1, class T2> struct project2nd : public binary_function<T1,T2,T2> { inline const T2& operator()(const T1&, const T2& a) const { return (a); } };
-
-//----------------------------------------------------------------------
-// Generic function to functor converters.
-//----------------------------------------------------------------------
-
-/// \brief Wrapper object for unary function pointers.
-/// Use the \ref ptr_fun accessor to create this object.
-/// \ingroup FunctorObjects
-template <typename Arg, typename Result>
-class pointer_to_unary_function : public unary_function<Arg,Result> {
-public:
- typedef Arg argument_type;
- typedef Result result_type;
- typedef Result (*pfunc_t)(Arg);
-public:
- explicit inline pointer_to_unary_function (pfunc_t pfn) : m_pfn (pfn) {}
- inline result_type operator() (argument_type v) const { return (m_pfn(v)); }
-private:
- pfunc_t m_pfn; ///< Pointer to the wrapped function.
-};
-
-/// \brief Wrapper object for binary function pointers.
-/// Use the \ref ptr_fun accessor to create this object.
-/// \ingroup FunctorObjects
-template <typename Arg1, typename Arg2, typename Result>
-class pointer_to_binary_function : public binary_function<Arg1,Arg2,Result> {
-public:
- typedef Arg1 first_argument_type;
- typedef Arg2 second_argument_type;
- typedef Result result_type;
- typedef Result (*pfunc_t)(Arg1, Arg2);
-public:
- explicit inline pointer_to_binary_function (pfunc_t pfn) : m_pfn (pfn) {}
- inline result_type operator() (first_argument_type v1, second_argument_type v2) const { return (m_pfn(v1, v2)); }
-private:
- pfunc_t m_pfn; ///< Pointer to the wrapped function.
-};
-
-/// ptr_fun(pfn) wraps function pointer pfn into a functor class that calls it.
-/// \ingroup FunctorAccessors
-template <typename Arg, typename Result>
-inline pointer_to_unary_function<Arg,Result> ptr_fun (Result (*pfn)(Arg))
-{
- return (pointer_to_unary_function<Arg,Result> (pfn));
-}
-
-/// ptr_fun(pfn) wraps function pointer pfn into a functor class that calls it.
-/// \ingroup FunctorAccessors
-template <typename Arg1, typename Arg2, typename Result>
-inline pointer_to_binary_function<Arg1,Arg2,Result> ptr_fun (Result (*pfn)(Arg1,Arg2))
-{
- return (pointer_to_binary_function<Arg1,Arg2,Result> (pfn));
-}
-
-//----------------------------------------------------------------------
-// Negators.
-//----------------------------------------------------------------------
-
-/// \brief Wraps a unary function to return its logical negative.
-/// Use the \ref unary_negator accessor to create this object.
-/// \ingroup FunctorObjects
-template <class UnaryFunction>
-class unary_negate : public unary_function<typename UnaryFunction::argument_type,
- typename UnaryFunction::result_type> {
-public:
- typedef typename UnaryFunction::argument_type argument_type;
- typedef typename UnaryFunction::result_type result_type;
-public:
- explicit inline unary_negate (UnaryFunction pfn) : m_pfn (pfn) {}
- inline result_type operator() (argument_type v) const { return (!m_pfn(v)); }
-private:
- UnaryFunction m_pfn;
-};
-
-/// Returns the functor that negates the result of *pfn().
-/// \ingroup FunctorAccessors
-template <class UnaryFunction>
-inline unary_negate<UnaryFunction> unary_negator (UnaryFunction pfn)
-{
- return (unary_negate<UnaryFunction>(pfn));
-}
-
-//----------------------------------------------------------------------
-// Argument binders
-//----------------------------------------------------------------------
-
-/// \brief Converts a binary function to a unary function
-/// by binding a constant value to the first argument.
-/// Use the \ref bind1st accessor to create this object.
-/// \ingroup FunctorObjects
-template <class BinaryFunction>
-class binder1st : public unary_function<typename BinaryFunction::second_argument_type,
- typename BinaryFunction::result_type> {
-public:
- typedef typename BinaryFunction::first_argument_type arg1_t;
- typedef typename BinaryFunction::second_argument_type arg2_t;
- typedef typename BinaryFunction::result_type result_t;
-public:
- inline binder1st (const BinaryFunction& pfn, const arg1_t& v) : m_pfn (pfn), m_Value(v) {}
- inline result_t operator()(arg2_t v2) const { return (m_pfn (m_Value, v2)); }
-protected:
- BinaryFunction m_pfn;
- arg1_t m_Value;
-};
-
-/// \brief Converts a binary function to a unary function
-/// by binding a constant value to the second argument.
-/// Use the \ref bind2nd accessor to create this object.
-/// \ingroup FunctorObjects
-template <class BinaryFunction>
-class binder2nd : public unary_function<typename BinaryFunction::first_argument_type,
- typename BinaryFunction::result_type> {
-public:
- typedef typename BinaryFunction::first_argument_type arg1_t;
- typedef typename BinaryFunction::second_argument_type arg2_t;
- typedef typename BinaryFunction::result_type result_t;
-public:
- inline binder2nd (const BinaryFunction& pfn, const arg2_t& v) : m_pfn (pfn), m_Value(v) {}
- inline result_t operator()(arg1_t v1) const { return (m_pfn (v1, m_Value)); }
-protected:
- BinaryFunction m_pfn;
- arg2_t m_Value;
-};
-
-/// Converts \p pfn into a unary function by binding the first argument to \p v.
-/// \ingroup FunctorAccessors
-template <typename BinaryFunction>
-inline binder1st<BinaryFunction>
-bind1st (BinaryFunction pfn, typename BinaryFunction::first_argument_type v)
-{
- return (binder1st<BinaryFunction> (pfn, v));
-}
-
-/// Converts \p pfn into a unary function by binding the second argument to \p v.
-/// \ingroup FunctorAccessors
-template <typename BinaryFunction>
-inline binder2nd<BinaryFunction>
-bind2nd (BinaryFunction pfn, typename BinaryFunction::second_argument_type v)
-{
- return (binder2nd<BinaryFunction> (pfn, v));
-}
-
-//----------------------------------------------------------------------
-// Composition adapters
-//----------------------------------------------------------------------
-
-/// \brief Chains two unary functions together.
-///
-/// When f(x) and g(x) are composed, the result is function c(x)=f(g(x)).
-/// Use the \ref compose1 accessor to create this object.
-/// This template is an extension, implemented by SGI STL and uSTL.
-/// \ingroup FunctorObjects
-///
-template <typename Operation1, typename Operation2>
-class unary_compose : public unary_function<typename Operation2::argument_type,
- typename Operation1::result_type> {
-public:
- typedef typename Operation2::argument_type arg_t;
- typedef const arg_t& rcarg_t;
- typedef typename Operation1::result_type result_t;
-public:
- inline unary_compose (const Operation1& f, const Operation2& g) : m_f(f), m_g(g) {}
- inline result_t operator() (rcarg_t x) const { return m_f(m_g(x)); }
-protected:
- Operation1 m_f; ///< f(x), if c(x) = f(g(x))
- Operation2 m_g; ///< g(x), if c(x) = f(g(x))
-};
-
-/// Creates a \ref unary_compose object whose function c(x)=f(g(x))
-/// \ingroup FunctorAccessors
-template <typename Operation1, typename Operation2>
-inline unary_compose<Operation1, Operation2>
-compose1 (const Operation1& f, const Operation2& g)
-{ return unary_compose<Operation1,Operation2>(f, g); }
-
-/// \brief Chains two unary functions through a binary function.
-///
-/// When f(x,y), g(x), and h(x) are composed, the result is function
-/// c(x)=f(g(x),h(x)). Use the \ref compose2 accessor to create this
-/// object. This template is an extension, implemented by SGI STL and uSTL.
-/// \ingroup FunctorObjects
-///
-template <typename Operation1, typename Operation2, typename Operation3>
-class binary_compose : public unary_function<typename Operation2::argument_type,
- typename Operation1::result_type> {
-public:
- typedef typename Operation2::argument_type arg_t;
- typedef const arg_t& rcarg_t;
- typedef typename Operation1::result_type result_t;
-public:
- inline binary_compose (const Operation1& f, const Operation2& g, const Operation3& h) : m_f(f), m_g(g), m_h(h) {}
- inline result_t operator() (rcarg_t x) const { return m_f(m_g(x), m_h(x)); }
-protected:
- Operation1 m_f; ///< f(x,y), if c(x) = f(g(x),h(x))
- Operation2 m_g; ///< g(x), if c(x) = f(g(x),h(x))
- Operation3 m_h; ///< h(x), if c(x) = f(g(x),h(x))
-};
-
-/// Creates a \ref binary_compose object whose function c(x)=f(g(x),h(x))
-/// \ingroup FunctorAccessors
-template <typename Operation1, typename Operation2, typename Operation3>
-inline binary_compose<Operation1, Operation2, Operation3>
-compose2 (const Operation1& f, const Operation2& g, const Operation3& h)
-{ return binary_compose<Operation1, Operation2, Operation3> (f, g, h); }
-
-//----------------------------------------------------------------------
-// Member function adaptors
-//----------------------------------------------------------------------
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-
-#define MEM_FUN_T(WrapperName, ClassName, ArgType, FuncType, CallType) \
- template <typename Ret, class T> \
- class ClassName : public unary_function<ArgType,Ret> { \
- public: \
- typedef Ret (T::*func_t) FuncType; \
- public: \
- explicit inline ClassName (func_t pf) : m_pf (pf) {} \
- inline Ret operator() (ArgType p) const { return ((p CallType m_pf)()); } \
- private: \
- func_t m_pf; \
- }; \
- \
- template <class Ret, typename T> \
- inline ClassName<Ret,T> WrapperName (Ret (T::*pf) FuncType) \
- { \
- return (ClassName<Ret,T> (pf)); \
- }
-
-MEM_FUN_T(mem_fun, mem_fun_t, T*, (void), ->*)
-MEM_FUN_T(mem_fun, const_mem_fun_t, const T*, (void) const, ->*)
-MEM_FUN_T(mem_fun_ref, mem_fun_ref_t, T&, (void), .*)
-MEM_FUN_T(mem_fun_ref, const_mem_fun_ref_t, const T&, (void) const, .*)
-
-#define EXT_MEM_FUN_T(ClassName, HostType, FuncType) \
- template <class T, typename Ret, typename V> \
- class ClassName : public unary_function<V,void> { \
- public: \
- typedef Ret (T::*func_t)(V) FuncType; \
- public: \
- inline ClassName (HostType t, func_t pf) : m_t (t), m_pf (pf) {} \
- inline Ret operator() (V v) const { return ((m_t->*m_pf)(v)); } \
- private: \
- HostType m_t; \
- func_t m_pf; \
- }; \
- \
- template <class T, typename Ret, typename V> \
- inline ClassName<T,Ret,V> mem_fun (HostType p, Ret (T::*pf)(V) FuncType) \
- { \
- return (ClassName<T,Ret,V> (p, pf)); \
- }
-
-EXT_MEM_FUN_T(ext_mem_fun_t, T*, )
-EXT_MEM_FUN_T(const_ext_mem_fun_t, const T*, const)
-
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-//----------------------------------------------------------------------
-// Member variable adaptors (uSTL extension)
-//----------------------------------------------------------------------
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-
-#define MEM_VAR_T(FunctorName, ArgType, VarType, BaseClass, CallImpl) \
- template <typename Function, class T, typename VT> \
- class FunctorName##_t : public BaseClass { \
- public: \
- typedef ArgType argument_type; \
- typedef typename Function::result_type result_type; \
- typedef VarType mem_var_ptr_t; \
- public: \
- inline FunctorName##_t (mem_var_ptr_t pv, Function pfn) : m_pv(pv), m_pfn(pfn) {} \
- inline result_type operator() CallImpl \
- private: \
- mem_var_ptr_t m_pv; \
- Function m_pfn; \
- }; \
- \
- template <typename Function, class T, typename VT> \
- inline FunctorName##_t<Function, T, VT> \
- FunctorName (VT T::*mvp, Function pfn) \
- { \
- return (FunctorName##_t<Function,T,VT> (mvp, pfn)); \
- }
-
-#define FUNCTOR_UNARY_BASE(ArgType) unary_function<ArgType, typename Function::result_type>
-#define FUNCTOR_BINARY_BASE(ArgType) binary_function<ArgType, ArgType, typename Function::result_type>
-
-#define MEM_VAR_UNARY_ARGS (argument_type p) const \
- { return (m_pfn(p.*m_pv)); }
-#define MEM_VAR_BINARY_ARGS (argument_type p1, argument_type p2) const \
- { return (m_pfn(p1.*m_pv, p2.*m_pv)); }
-
-MEM_VAR_T(mem_var1, T&, VT T::*, FUNCTOR_UNARY_BASE(T&), MEM_VAR_UNARY_ARGS)
-MEM_VAR_T(const_mem_var1, const T&, const VT T::*, FUNCTOR_UNARY_BASE(T&), MEM_VAR_UNARY_ARGS)
-MEM_VAR_T(mem_var2, T&, VT T::*, FUNCTOR_BINARY_BASE(T&), MEM_VAR_BINARY_ARGS)
-MEM_VAR_T(const_mem_var2, const T&, const VT T::*, FUNCTOR_BINARY_BASE(T&), MEM_VAR_BINARY_ARGS)
-
-#undef MEM_VAR_UNARY_ARGS
-#undef MEM_VAR_BINARY_ARGS
-
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-/// Returned functor passes member variable \p mvp reference of given object to equal\<VT\>.
-/// \ingroup FunctorAccessors
-template <class T, typename VT>
-inline const_mem_var1_t<binder2nd<equal_to<VT> >, T, VT>
-mem_var_equal_to (const VT T::*mvp, const VT& v)
-{
- return (const_mem_var1_t<binder2nd<equal_to<VT> >,T,VT> (mvp, bind2nd(equal_to<VT>(), v)));
-}
-
-/// Returned functor passes member variable \p mvp reference of given object to less\<VT\>.
-/// \ingroup FunctorAccessors
-template <class T, typename VT>
-inline const_mem_var1_t<binder2nd<less<VT> >, T, VT>
-mem_var_less (const VT T::*mvp, const VT& v)
-{
- return (const_mem_var1_t<binder2nd<less<VT> >,T,VT> (mvp, bind2nd(less<VT>(), v)));
-}
-
-/// Returned functor passes member variable \p mvp reference of given object to equal\<VT\>.
-/// \ingroup FunctorAccessors
-template <class T, typename VT>
-inline const_mem_var2_t<equal_to<VT>, T, VT>
-mem_var_equal_to (const VT T::*mvp)
-{
- return (const_mem_var2_t<equal_to<VT>,T,VT> (mvp, equal_to<VT>()));
-}
-
-/// Returned functor passes member variable \p mvp reference of given object to less\<VT\>.
-/// \ingroup FunctorAccessors
-template <class T, typename VT>
-inline const_mem_var2_t<less<VT>, T, VT>
-mem_var_less (const VT T::*mvp)
-{
- return (const_mem_var2_t<less<VT>,T,VT> (mvp, less<VT>()));
-}
-
-//----------------------------------------------------------------------
-// Dereference adaptors (uSTL extension)
-//----------------------------------------------------------------------
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-
-#define DEREFERENCER_T(ClassName, ArgType, BaseClass, CallImpl, FunctorKey) \
- template <typename T, typename Function> \
- class ClassName : public BaseClass { \
- public: \
- typedef ArgType* argument_type; \
- typedef typename Function::result_type result_type; \
- public: \
- inline ClassName (Function pfn) : m_pfn (pfn) {} \
- inline result_type operator() CallImpl \
- private: \
- Function m_pfn; \
- }; \
- \
- template <typename T, typename Function> \
- inline ClassName<T,Function> _dereference (Function pfn, FunctorKey) \
- { \
- return (ClassName<T,Function> (pfn)); \
- }
-
-#define DEREF_UNARY_ARGS (argument_type p) const \
- { return (m_pfn(*p)); }
-#define DEREF_BINARY_ARGS (argument_type p1, argument_type p2) const \
- { return (m_pfn(*p1, *p2)); }
-
-DEREFERENCER_T(deref1_t, T, FUNCTOR_UNARY_BASE(T*), DEREF_UNARY_ARGS, FUNCTOR_UNARY_BASE(T))
-DEREFERENCER_T(const_deref1_t, const T, FUNCTOR_UNARY_BASE(const T*), DEREF_UNARY_ARGS, FUNCTOR_UNARY_BASE(const T))
-DEREFERENCER_T(deref2_t, T, FUNCTOR_BINARY_BASE(T*), DEREF_BINARY_ARGS, FUNCTOR_BINARY_BASE(T))
-DEREFERENCER_T(const_deref2_t, const T, FUNCTOR_BINARY_BASE(const T*), DEREF_BINARY_ARGS, FUNCTOR_BINARY_BASE(const T))
-
-#define dereference(f) _dereference(f,f)
-
-#undef DEREF_UNARY_ARGS
-#undef DEREF_BINARY_ARGS
-
-#endif
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uheap.h b/media/libdrm/mobile2/src/util/ustl-1.0/uheap.h
deleted file mode 100644
index 9dfddaf..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uheap.h
+++ /dev/null
@@ -1,153 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// uheap.h
-//
-// Implementation of STL heap algorithms.
-//
-// The function prototypes are copied
-// exactly from the SGI version of STL documentation along with comments about
-// their use. The code is NOT the same, though the functionality is.
-//
-
-#ifndef UHEAP_H_574B9EAF271A1C107190B4D575A356C5
-#define UHEAP_H_574B9EAF271A1C107190B4D575A356C5
-
-#include "uvector.h"
-#include "ualgobase.h"
-
-namespace ustl {
-
-/// \brief Returns true if the given range is a heap under \p comp.
-/// A heap is a sequentially encoded binary tree where for every node
-/// comp(node,child1) is false and comp(node,child2) is false.
-/// \ingroup HeapAlgorithms
-/// \ingroup ConditionAlgorithms
-///
-template <typename RandomAccessIterator, typename Compare>
-bool is_heap (RandomAccessIterator first, RandomAccessIterator last, Compare comp)
-{
- RandomAccessIterator iChild (first);
- for (; ++iChild < last; ++first)
- if (comp (*first, *iChild) || (++iChild < last && comp (*first, *iChild)))
- return (false);
- return (true);
-}
-
-/// \brief make_heap turns the range [first, last) into a heap
-/// At completion, is_heap (first, last, comp) is true.
-/// The algorithm is adapted from "Classic Data Structures in C++" by Timothy Budd.
-/// \ingroup HeapAlgorithms
-/// \ingroup SortingAlgorithms
-///
-template <typename RandomAccessIterator, typename Compare>
-void make_heap (RandomAccessIterator first, RandomAccessIterator last, Compare comp)
-{
- typedef typename iterator_traits<RandomAccessIterator>::value_type value_type;
- const value_type v (*first);
- uoff_t iChild, iHole = 0, iEnd (distance (first, last));
- while ((iChild = 2 * iHole + 1) < iEnd) {
- if (iChild + 1 < iEnd) // Pick the greater child
- iChild += comp (first[iChild], first[iChild + 1]);
- if (comp (first[iChild], v))
- break; // Done when parent is greater than both children.
- first[iHole] = first[iChild];
- iHole = iChild;
- }
- if (iHole < iEnd)
- first[iHole] = v;
-}
-
-/// \brief Inserts the *--last into the preceeding range assumed to be a heap.
-/// \ingroup HeapAlgorithms
-/// \ingroup MutatingAlgorithms
-template <typename RandomAccessIterator, typename Compare>
-void push_heap (RandomAccessIterator first, RandomAccessIterator last, Compare comp)
-{
- if (last <= first)
- return;
- typedef typename iterator_traits<RandomAccessIterator>::value_type value_type;
- const value_type v (*--last);
- while (first < last) {
- RandomAccessIterator iParent = first + (distance(first, last) - 1) / 2;
- if (comp (v, *iParent))
- break;
- *last = *iParent;
- last = iParent;
- }
- *last = v;
-}
-
-/// Removes the largest element from the heap (*first) and places it at *(last-1)
-/// [first, last-1) is a heap after this operation.
-/// \ingroup HeapAlgorithms
-/// \ingroup MutatingAlgorithms
-template <typename RandomAccessIterator, typename Compare>
-void pop_heap (RandomAccessIterator first, RandomAccessIterator last, Compare comp)
-{
- if (--last <= first)
- return;
- iter_swap (first, last);
- make_heap (first, last, comp);
-}
-
-/// Sorts heap [first, last) in descending order according to comp.
-/// \ingroup HeapAlgorithms
-/// \ingroup SortingAlgorithms
-template <typename RandomAccessIterator, typename Compare>
-void sort_heap (RandomAccessIterator first, RandomAccessIterator last, Compare comp)
-{
- for (; first < last; --last)
- pop_heap (first, last, comp);
-}
-
-#define HEAP_FN_WITH_LESS(rtype, name) \
-template <typename RandomAccessIterator>\
-inline rtype name (RandomAccessIterator first, RandomAccessIterator last) \
-{ \
- typedef typename iterator_traits<RandomAccessIterator>::value_type value_type; \
- return (name (first, last, less<value_type>())); \
-}
-HEAP_FN_WITH_LESS (bool, is_heap)
-HEAP_FN_WITH_LESS (void, make_heap)
-HEAP_FN_WITH_LESS (void, push_heap)
-HEAP_FN_WITH_LESS (void, pop_heap)
-HEAP_FN_WITH_LESS (void, sort_heap)
-#undef HEAP_FN_WITH_LESS
-
-/// \class priority_queue uheap.h ustl.h
-/// \ingroup Sequences
-///
-/// \brief Sorted queue adapter to uSTL containers.
-///
-/// Acts just like the queue adapter, but keeps the elements sorted by priority
-/// specified by the given comparison operator.
-///
-template <typename T, typename Ctr = vector<T>, typename Comp = less<typename Ctr::value_type> >
-class priority_queue {
-public:
- typedef Ctr base_ctr;
- typedef typename base_ctr::value_type value_type;
- typedef typename base_ctr::size_type size_type;
- typedef typename base_ctr::const_pointer const_pointer;
- typedef typename base_ctr::const_reference reference;
-public:
- priority_queue (const Comp& c = Comp()) : m_v(), m_c (c) {}
- priority_queue (const_pointer f, const_pointer l, const Comp& c = Comp())
- : m_v (f, l), m_c (c) { make_heap (m_v.begin(), m_v.end(), m_c); }
- inline size_type size (void) const { return (m_v.size()); }
- inline bool empty (void) const { return (m_v.empty()); }
- inline reference top (void) const { return (m_v.at(0)); }
- inline void push (reference v) { m_v.push_back (v); make_heap (m_v.begin(), m_v.end(), m_c); }
- inline void pop (void) { pop_heap (m_v.begin(), m_v.end()); m_v.pop_back(); }
-private:
- base_ctr m_v; ///< Element container.
- Comp m_c; ///< Comparison functor by value.
-};
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uios.h b/media/libdrm/mobile2/src/util/ustl-1.0/uios.h
deleted file mode 100644
index 6153be5..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uios.h
+++ /dev/null
@@ -1,107 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// uios.h
-//
-// Types used by the streams for option setting.
-//
-
-#ifndef UIOS_H_630C16E316F7650E3A02E1C6611B789A
-#define UIOS_H_630C16E316F7650E3A02E1C6611B789A
-
-#include "utypes.h"
-
-namespace ustl {
-
-class file_exception;
-
-const char endl = '\n'; ///< End of line character.
-const char ends = '\0'; ///< End of string character.
-
-/// Defines types and constants used by all stream classes.
-class ios_base {
-public:
- /// Used to set parameters for stringstreams
- enum fmtflags {
- boolalpha = (1 << 0), ///< Boolean values printed as text.
- dec = (1 << 1), ///< Decimal number output.
- fixed = (1 << 2), ///< Fixed-point float output.
- hex = (1 << 3), ///< Hexadecimal number output.
- internal = (1 << 4),
- left = (1 << 5), ///< Left alignment.
- oct = (1 << 6), ///< Octal number output.
- right = (1 << 7), ///< Right alignment.
- scientific = (1 << 8), ///< Scientific float format.
- showbase = (1 << 9), ///< Add 0x or 0 prefixes on hex and octal numbers.
- showpoint = (1 << 10), ///< Print decimal point.
- showpos = (1 << 11),
- skipws = (1 << 12), ///< Skip whitespace when reading.
- unitbuf = (1 << 13),
- uppercase = (1 << 14),
- adjustfield = (1 << 15),
- basefield = (1 << 16),
- floatfield = (1 << 17)
- };
- /// For file-based streams, specifies fd mode.
- enum openmode_bits {
- in = (1 << 0),
- out = (1 << 1),
- app = (1 << 2),
- ate = (1 << 3),
- binary = (1 << 4),
- trunc = (1 << 5),
- #ifndef DOXYGEN_SHOULD_SKIP_THIS
- nonblock= (1 << 6),
- nocreate= (1 << 7),
- noctty = (1 << 8),
- nombits = 9
- #endif
- };
- /// Seek directions, equivalent to SEEK_SET, SEEK_CUR, and SEEK_END.
- enum seekdir {
- beg,
- cur,
- end
- };
- /// I/O state bitmasks.
- enum iostate_bits {
- goodbit = 0,
- badbit = (1 << 0),
- eofbit = (1 << 1),
- failbit = (1 << 2),
- #ifndef DOXYGEN_SHOULD_SKIP_THIS
- nbadbits = 3,
- allbadbits = 0x7
- #endif
- };
-
- typedef uint32_t openmode; ///< Holds openmode_bits.
- typedef uint32_t iostate; ///< Holds iostate_bits for a file stream.
- typedef file_exception failure; ///< Thrown by fstream on errors.
-
- static const char c_DefaultDelimiters [16]; ///< Default word delimiters for stringstreams.
-public:
- inline ios_base (void) : m_State (goodbit), m_Exceptions (goodbit) {}
- inline iostate rdstate (void) const { return (m_State); }
- inline bool bad (void) const { return (rdstate() & badbit); }
- inline bool good (void) const { return (rdstate() == goodbit); }
- inline bool fail (void) const { return (rdstate() & (badbit | failbit)); }
- inline bool eof (void) const { return (rdstate() & eofbit); }
- inline bool operator! (void) const { return (fail()); }
- inline void clear (iostate v = goodbit) { m_State = v; }
- inline void setstate (iostate v) { m_State |= v; }
- inline iostate exceptions (void) const { return (m_Exceptions); }
- inline iostate exceptions (iostate v) { return (m_Exceptions = v); }
-protected:
- inline bool set_and_throw (iostate v) { setstate(v); return (exceptions() & v); }
-private:
- uint16_t m_State; ///< Open state, using ios::iostate_bits.
- uint16_t m_Exceptions; ///< Exception flags, using ios::iostate_bits.
-};
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uiosfunc.h b/media/libdrm/mobile2/src/util/ustl-1.0/uiosfunc.h
deleted file mode 100644
index fe26ed1..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uiosfunc.h
+++ /dev/null
@@ -1,103 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// uiosfunc.h
-//
-
-#ifndef UIOSFUNC_H_730C16E316F7650E3A02E1C6611B789A
-#define UIOSFUNC_H_730C16E316F7650E3A02E1C6611B789A
-
-#include "sostream.h"
-
-namespace ustl {
-
-class ios : public ios_base {
-public:
- /// \class align uiosfunc.h ustl.h
- /// \ingroup StreamFunctors
- /// \brief Stream functor to allow inline align() calls.
- ///
- /// Example: os << ios::align(sizeof(uint16_t));
- ///
- class align {
- public:
- inline explicit align (size_t grain = c_DefaultAlignment) : m_Grain(grain) {}
- inline istream& apply (istream& is) const { is.align (m_Grain); return (is); }
- inline ostream& apply (ostream& os) const { os.align (m_Grain); return (os); }
- inline size_t stream_size (void) const { return (m_Grain - 1); }
- private:
- const size_t m_Grain;
- };
-
- /// \class talign uiosfunc.h ustl.h
- /// \ingroup StreamFunctors
- /// \brief Stream functor to allow type-based alignment.
- template <typename T>
- class talign : public align {
- public:
- inline explicit talign (void) : align (alignof (T())) {}
- };
-
- /// \class skip uiosfunc.h ustl.h
- /// \ingroup StreamFunctors
- /// \brief Stream functor to allow inline skip() calls.
- ///
- /// Example: os << ios::skip(sizeof(uint16_t));
- ///
- class skip {
- public:
- inline explicit skip (size_t nBytes) : m_nBytes(nBytes) {}
- inline istream& apply (istream& is) const { is.skip (m_nBytes); return (is); }
- inline ostream& apply (ostream& os) const { os.skip (m_nBytes); return (os); }
- inline size_t stream_size (void) const { return (m_nBytes); }
- private:
- const size_t m_nBytes;
- };
-
- /// \class width uiosfunc.h ustl.h
- /// \ingroup StreamFunctors
- /// \brief Stream functor to allow inline set_width() calls.
- ///
- /// Example: os << ios::width(15);
- ///
- class width {
- public:
- inline explicit width (size_t nBytes) : m_nBytes(nBytes) {}
- inline ostringstream& apply (ostringstream& os) const { os.set_width (m_nBytes); return (os); }
- private:
- const size_t m_nBytes;
- };
-
- /// \class base uiosfunc.h ustl.h
- /// \ingroup StreamFunctors
- /// \brief Stream functor to allow inline set_base() calls.
- ///
- /// Example: os << ios::base(15);
- ///
- class base {
- public:
- inline explicit base (size_t n) : m_Base(n) {}
- inline ostringstream& apply (ostringstream& os) const { os.set_base (m_Base); return (os); }
- private:
- const size_t m_Base;
- };
-};
-
-inline istream& operator>> (istream& is, const ios::skip& op) { return (op.apply (is)); }
-inline ostream& operator<< (ostream& os, const ios::skip& op) { return (op.apply (os)); }
-inline size_t stream_size_of (const ios::skip& op) { return (op.stream_size()); }
-inline istream& operator>> (istream& is, const ios::align& op) { return (op.apply (is)); }
-inline ostream& operator<< (ostream& os, const ios::align& op) { return (op.apply (os)); }
-inline size_t stream_size_of (const ios::align& op) { return (op.stream_size()); }
-inline ostringstream& operator<< (ostringstream& os, const ios::width& op) { return (op.apply (os)); }
-inline ostringstream& operator<< (ostringstream& os, const ios::base& op) { return (op.apply (os)); }
-
-} // namespace ustl
-
-CAST_STREAMABLE(ustl::ios::fmtflags, uint32_t)
-CAST_STREAMABLE(ustl::ios::seekdir, uint32_t)
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uiterator.h b/media/libdrm/mobile2/src/util/ustl-1.0/uiterator.h
deleted file mode 100644
index 48c0d2d..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uiterator.h
+++ /dev/null
@@ -1,268 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-/// \file uiterator.h
-/// \brief Contains various iterator adapters.
-//
-
-#ifndef UITERATOR_H_5BCA176C7214A30F2069E2614D2DC226
-#define UITERATOR_H_5BCA176C7214A30F2069E2614D2DC226
-
-#include "uassert.h"
-#include "utypes.h"
-
-namespace ustl {
-
-//----------------------------------------------------------------------
-
-/// \struct iterator_traits uiterator.h ustl.h
-/// \brief Contains the type traits of \p Iterator
-///
-template <typename Iterator>
-struct iterator_traits {
- typedef typename Iterator::value_type value_type;
- typedef typename Iterator::difference_type difference_type;
- typedef typename Iterator::pointer pointer;
- typedef typename Iterator::reference reference;
-};
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-
-template <typename T>
-struct iterator_traits<T*> {
- typedef T value_type;
- typedef ptrdiff_t difference_type;
- typedef const T* const_pointer;
- typedef T* pointer;
- typedef T& reference;
-};
-
-template <typename T>
-struct iterator_traits<const T*> {
- typedef T value_type;
- typedef ptrdiff_t difference_type;
- typedef const T* const_pointer;
- typedef const T* pointer;
- typedef const T& reference;
-};
-
-template <>
-struct iterator_traits<void*> {
- typedef uint8_t value_type;
- typedef ptrdiff_t difference_type;
- typedef const void* const_pointer;
- typedef void* pointer;
- typedef value_type& reference;
-};
-
-template <>
-struct iterator_traits<const void*> {
- typedef uint8_t value_type;
- typedef ptrdiff_t difference_type;
- typedef const void* const_pointer;
- typedef const void* pointer;
- typedef const value_type& reference;
-};
-
-#endif
-
-//----------------------------------------------------------------------
-
-/// \class reverse_iterator uiterator.h ustl.h
-/// \ingroup IteratorAdaptors
-/// \brief Wraps \p Iterator to behave in an exactly opposite manner.
-///
-template <class Iterator>
-class reverse_iterator {
-public:
- typedef typename iterator_traits<Iterator>::value_type value_type;
- typedef typename iterator_traits<Iterator>::difference_type difference_type;
- typedef typename iterator_traits<Iterator>::pointer pointer;
- typedef typename iterator_traits<Iterator>::reference reference;
-public:
- reverse_iterator (void) : m_i() {}
- explicit reverse_iterator (Iterator iter) : m_i (iter) {}
- inline bool operator== (const reverse_iterator& iter) const { return (m_i == iter.m_i); }
- inline bool operator< (const reverse_iterator& iter) const { return (iter.m_i < m_i); }
- inline Iterator base (void) const { return (m_i); }
- inline reference operator* (void) const { Iterator prev (m_i); --prev; return (*prev); }
- inline pointer operator-> (void) const { return (&(operator*())); }
- inline reverse_iterator& operator++ (void) { -- m_i; return (*this); }
- inline reverse_iterator& operator-- (void) { ++ m_i; return (*this); }
- inline reverse_iterator operator++ (int) { reverse_iterator prev (*this); -- m_i; return (prev); }
- inline reverse_iterator operator-- (int) { reverse_iterator prev (*this); ++ m_i; return (prev); }
- inline reverse_iterator& operator+= (size_t n) { m_i -= n; return (*this); }
- inline reverse_iterator& operator-= (size_t n) { m_i += n; return (*this); }
- inline reverse_iterator operator+ (size_t n) const { return (reverse_iterator (m_i - n)); }
- inline reverse_iterator operator- (size_t n) const { return (reverse_iterator (m_i + n)); }
- inline reference operator[] (uoff_t n) const { return (*(*this + n)); }
- inline difference_type operator- (const reverse_iterator& i) const { return (distance (m_i, i.m_i)); }
-protected:
- Iterator m_i;
-};
-
-//----------------------------------------------------------------------
-
-/// \class insert_iterator uiterator.h ustl.h
-/// \ingroup IteratorAdaptors
-/// \brief Calls insert on bound container for each assignment.
-///
-template <class Container>
-class insert_iterator {
-public:
- typedef typename Container::value_type value_type;
- typedef typename Container::difference_type difference_type;
- typedef typename Container::pointer pointer;
- typedef typename Container::reference reference;
- typedef typename Container::iterator iterator;
-public:
- explicit insert_iterator (Container& ctr, iterator ip) : m_rCtr (ctr), m_ip (ip) {}
- inline insert_iterator& operator= (typename Container::const_reference v)
- { m_ip = m_rCtr.insert (m_ip, v); return (*this); }
- inline insert_iterator& operator* (void) { return (*this); }
- inline insert_iterator& operator++ (void) { ++ m_ip; return (*this); }
- inline insert_iterator operator++ (int) { insert_iterator prev (*this); ++ m_ip; return (*this); }
-protected:
- Container& m_rCtr;
- iterator m_ip;
-};
-
-/// Returns the insert_iterator for \p ctr.
-template <class Container>
-inline insert_iterator<Container> inserter (Container& ctr, typename Container::iterator ip)
-{
- return (insert_iterator<Container> (ctr, ip));
-}
-
-//----------------------------------------------------------------------
-
-/// \class back_insert_iterator uiterator.h ustl.h
-/// \ingroup IteratorAdaptors
-/// \brief Calls push_back on bound container for each assignment.
-///
-template <class Container>
-class back_insert_iterator {
-public:
- typedef typename Container::value_type value_type;
- typedef typename Container::difference_type difference_type;
- typedef typename Container::pointer pointer;
- typedef typename Container::reference reference;
-public:
- explicit back_insert_iterator (Container& ctr) : m_rCtr (ctr) {}
- inline back_insert_iterator& operator= (typename Container::const_reference v)
- { m_rCtr.push_back (v); return (*this); }
- inline back_insert_iterator& operator* (void) { return (*this); }
- inline back_insert_iterator& operator++ (void) { return (*this); }
- inline back_insert_iterator operator++ (int) { return (*this); }
-protected:
- Container& m_rCtr;
-};
-
-/// Returns the back_insert_iterator for \p ctr.
-template <class Container>
-inline back_insert_iterator<Container> back_inserter (Container& ctr)
-{
- return (back_insert_iterator<Container> (ctr));
-}
-
-//----------------------------------------------------------------------
-
-/// \class index_iterate uiterator.h ustl.h
-/// \ingroup IteratorAdaptors
-///
-/// \brief Allows iteration through an index container.
-///
-/// Converts an iterator into a container of uoff_t indexes to an
-/// iterator of iterators into another container.
-///
-template <typename RandomAccessIterator, typename IndexIterator>
-class index_iterate {
-public:
- typedef RandomAccessIterator value_type;
- typedef ptrdiff_t difference_type;
- typedef RandomAccessIterator* pointer;
- typedef RandomAccessIterator reference;
-public:
- index_iterate (void) : m_Base(), m_i() {}
- index_iterate (RandomAccessIterator ibase, IndexIterator iindex) : m_Base (ibase), m_i (iindex) {}
- inline bool operator== (const index_iterate& i) const { return (m_i == i.m_i); }
- inline bool operator< (const index_iterate& i) const { return (m_i < i.m_i); }
- inline bool operator== (const RandomAccessIterator& i) const { return (m_Base == i); }
- inline bool operator< (const RandomAccessIterator& i) const { return (m_Base < i); }
- inline IndexIterator base (void) const { return (m_i); }
- inline reference operator* (void) const { return (advance(m_Base, *m_i)); }
- inline pointer operator-> (void) const { return (&(operator*())); }
- inline index_iterate& operator++ (void) { ++ m_i; return (*this); }
- inline index_iterate& operator-- (void) { -- m_i; return (*this); }
- inline index_iterate operator++ (int) { index_iterate prev (*this); ++ m_i; return (prev); }
- inline index_iterate operator-- (int) { index_iterate prev (*this); -- m_i; return (prev); }
- inline index_iterate& operator+= (size_t n) { m_i += n; return (*this); }
- inline index_iterate& operator-= (size_t n) { m_i -= n; return (*this); }
- inline index_iterate operator+ (size_t n) const { return (index_iterate (m_Base, m_i + n)); }
- inline index_iterate operator- (size_t n) const { return (index_iterate (m_Base, m_i - n)); }
- inline reference operator[] (uoff_t n) const { return (*(*this + n)); }
- inline difference_type operator- (const index_iterate& i) const { return (distance (m_i, i.m_i)); }
-private:
- RandomAccessIterator m_Base;
- IndexIterator m_i;
-};
-
-/// Returns an index_iterate for \p ibase over \p iindex.
-template <typename RandomAccessIterator, typename IndexIterator>
-inline index_iterate<RandomAccessIterator, IndexIterator> index_iterator (RandomAccessIterator ibase, IndexIterator iindex)
-{
- return (index_iterate<RandomAccessIterator, IndexIterator> (ibase, iindex));
-}
-
-/// Converts the indexes in \p xc to iterators in \p ic of base \p ibase.
-template <typename IndexContainer, typename IteratorContainer>
-inline void indexv_to_iteratorv (typename IteratorContainer::value_type ibase, const IndexContainer& xc, IteratorContainer& ic)
-{
- ic.resize (xc.size());
- copy_n (index_iterator (ibase, xc.begin()), xc.size(), ic.begin());
-}
-
-//----------------------------------------------------------------------
-
-/// Converts the given const_iterator into an iterator.
-///
-template <typename Container>
-inline typename Container::iterator unconst (typename Container::const_iterator i, Container& ctr)
-{
- const Container& cctr = ctr;
- return (ctr.begin() + (i - cctr.begin()));
-}
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-
-#define IBYI(Iter1, Iter2, Ctr1, Ctr2) \
-template <typename Container1, typename Container2> \
-inline typename Container2::Iter2 ibyi (typename Container1::Iter1 idx, Ctr1& ctr1, Ctr2& ctr2) \
-{ \
- assert (ctr1.size() == ctr2.size()); \
- return (ctr2.begin() + (idx - ctr1.begin())); \
-}
-
-IBYI(const_iterator, const_iterator, const Container1, const Container2)
-IBYI(iterator, iterator, Container1, Container2)
-IBYI(const_iterator, iterator, const Container1, Container2)
-IBYI(iterator, const_iterator, Container1, const Container2)
-
-#else // DOXYGEN
-
-#error This declaration is for doxygen only; it is not compiled.
-
-/// Converts a const_iterator in one container into a const_iterator in another container.
-template <typename Container1, typename Container2>
-inline typename Container2::iterator ibyi (typename Container1::iterator idx, Container1& ctr1, Container2& ctr2) {}
-
-#endif // DOXYGEN
-
-//----------------------------------------------------------------------
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ulaalgo.h b/media/libdrm/mobile2/src/util/ustl-1.0/ulaalgo.h
deleted file mode 100644
index 1efc977..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ulaalgo.h
+++ /dev/null
@@ -1,223 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ulaalgo.h
-//
-
-#ifndef ULAALGO_H_2E403D182E83FB596AFB800E68B255A1
-#define ULAALGO_H_2E403D182E83FB596AFB800E68B255A1
-
-#include "umatrix.h"
-#include "simd.h"
-
-namespace ustl {
-
-/// \brief Creates an identity matrix in \p m
-/// \ingroup NumericAlgorithms
-template <size_t NX, size_t NY, typename T>
-void load_identity (matrix<NX,NY,T>& m)
-{
- fill_n (m.begin(), NX * NY, 0);
- for (typename matrix<NX,NY,T>::iterator i = m.begin(); i < m.end(); i += NX + 1)
- *i = 1;
-}
-
-/// \brief Multiplies two matrices
-/// \ingroup NumericAlgorithms
-template <size_t NX, size_t NY, typename T>
-matrix<NY,NY,T> operator* (const matrix<NX,NY,T>& m1, const matrix<NY,NX,T>& m2)
-{
- matrix<NY,NY,T> mr;
- for (uoff_t ry = 0; ry < NY; ++ ry) {
- for (uoff_t rx = 0; rx < NY; ++ rx) {
- T dpv (0);
- for (uoff_t x = 0; x < NX; ++ x)
- dpv += m1[ry][x] * m2[x][rx];
- mr[ry][rx] = dpv;
- }
- }
- return (mr);
-}
-
-/// \brief Transforms vector \p t with matrix \p m
-/// \ingroup NumericAlgorithms
-template <size_t NX, size_t NY, typename T>
-tuple<NX,T> operator* (const tuple<NY,T>& t, const matrix<NX,NY,T>& m)
-{
- tuple<NX,T> tr;
- for (uoff_t x = 0; x < NX; ++ x) {
- T dpv (0);
- for (uoff_t y = 0; y < NY; ++ y)
- dpv += t[y] * m[y][x];
- tr[x] = dpv;
- }
- return (tr);
-}
-
-/// \brief Transposes (exchanges rows and columns) matrix \p m.
-/// \ingroup NumericAlgorithms
-template <size_t N, typename T>
-void transpose (matrix<N,N,T>& m)
-{
- for (uoff_t x = 0; x < N; ++ x)
- for (uoff_t y = x; y < N; ++ y)
- swap (m[x][y], m[y][x]);
-}
-
-#if WANT_UNROLLED_COPY
-
-#if CPU_HAS_SSE
-
-#if linux // Non-linux gcc versions (BSD, Solaris) can't handle "x" constraint and provide no alternative.
-template <>
-inline void load_identity (matrix<4,4,float>& m)
-{
- asm (
- "movaps %4, %%xmm1 \n\t" // 1 0 0 0
- "movups %4, %0 \n\t" // 1 0 0 0
- "shufps $0xB1,%%xmm1,%%xmm1 \n\t" // 0 1 0 0
- "movups %%xmm1, %1 \n\t" // 0 1 0 0
- "shufps $0x4F,%4,%%xmm1 \n\t" // 0 0 1 0
- "shufps $0x1B,%4,%4 \n\t" // 0 0 0 1
- "movups %%xmm1, %2 \n\t" // 0 0 1 0
- "movups %4, %3" // 0 0 0 1
- : "=m"(m[0][0]), "=m"(m[1][0]), "=m"(m[2][0]), "=m"(m[3][0])
- : "x"(1.0f)
- : "xmm1"
- );
-}
-#endif
-
-inline void _sse_load_matrix (const float* m)
-{
- asm (
- "movups %0, %%xmm4 \n\t" // xmm4 = m[1 2 3 4]
- "movups %1, %%xmm5 \n\t" // xmm5 = m[1 2 3 4]
- "movups %2, %%xmm6 \n\t" // xmm6 = m[1 2 3 4]
- "movups %3, %%xmm7" // xmm7 = m[1 2 3 4]
- : : "m"(m[0]), "m"(m[4]), "m"(m[8]), "m"(m[12])
- : "xmm4", "xmm5", "xmm6", "xmm7"
- );
-}
-
-inline void _sse_transform_to_vector (float* result)
-{
- asm (
- "movaps %%xmm0, %%xmm1 \n\t" // xmm1 = t[0 1 2 3]
- "movaps %%xmm0, %%xmm2 \n\t" // xmm1 = t[0 1 2 3]
- "movaps %%xmm0, %%xmm3 \n\t" // xmm1 = t[0 1 2 3]
- "shufps $0x00, %%xmm0, %%xmm0 \n\t" // xmm0 = t[0 0 0 0]
- "shufps $0x66, %%xmm1, %%xmm1 \n\t" // xmm1 = t[1 1 1 1]
- "shufps $0xAA, %%xmm2, %%xmm2 \n\t" // xmm2 = t[2 2 2 2]
- "shufps $0xFF, %%xmm3, %%xmm3 \n\t" // xmm3 = t[3 3 3 3]
- "mulps %%xmm4, %%xmm0 \n\t" // xmm0 = t[0 0 0 0] * m[0 1 2 3]
- "mulps %%xmm5, %%xmm1 \n\t" // xmm1 = t[1 1 1 1] * m[0 1 2 3]
- "addps %%xmm1, %%xmm0 \n\t" // xmm0 = xmm0 + xmm1
- "mulps %%xmm6, %%xmm2 \n\t" // xmm2 = t[2 2 2 2] * m[0 1 2 3]
- "mulps %%xmm7, %%xmm3 \n\t" // xmm3 = t[3 3 3 3] * m[0 1 2 3]
- "addps %%xmm3, %%xmm2 \n\t" // xmm2 = xmm2 + xmm3
- "addps %%xmm2, %%xmm0 \n\t" // xmm0 = result
- "movups %%xmm0, %0"
- : "=m"(result[0]) :
- : "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
- );
-}
-
-template <>
-tuple<4,float> operator* (const tuple<4,float>& t, const matrix<4,4,float>& m)
-{
- tuple<4,float> result;
- _sse_load_matrix (m.begin());
- asm ("movups %0, %%xmm0" : : "m"(t[0]) : "xmm0");
- _sse_transform_to_vector (result.begin());
- return (result);
-}
-
-template <>
-matrix<4,4,float> operator* (const matrix<4,4,float>& m1, const matrix<4,4,float>& m2)
-{
- matrix<4,4,float> result;
- _sse_load_matrix (m2.begin());
- for (uoff_t r = 0; r < 4; ++ r) {
- asm ("movups %0, %%xmm0" : : "m"(m1[r][0]) : "xmm0");
- _sse_transform_to_vector (result[r]);
- }
- return (result);
-}
-
-#elif CPU_HAS_3DNOW
-
-/// Specialization for 4-component vector transform, the slow part of 3D graphics.
-template <>
-tuple<4,float> operator* (const tuple<4,float>& t, const matrix<4,4,float>& m)
-{
- tuple<4,float> result;
- // This is taken from "AMD Athlon Code Optimization Guide" from AMD. 18 cycles!
- // If you are writing a 3D engine, you may want to copy it instead of calling it
- // because of the femms instruction at the end, which takes 2 cycles.
- asm (
- "movq %2, %%mm0 \n\t" // y | x
- "movq %3, %%mm1 \n\t" // w | z
- "movq %%mm0, %%mm2 \n\t" // y | x
- "movq %4, %%mm3 \n\t" // m[0][1] | m[0][0]
- "punpckldq %%mm0, %%mm0 \n\t" // x | x
- "movq %6, %%mm4 \n\t" // m[1][1] | m[1][0]
- "pfmul %%mm0, %%mm3 \n\t" // x*m[0][1] | x*m[0][0]
- "punpckhdq %%mm2, %%mm2 \n\t" // y | y
- "pfmul %%mm2, %%mm4 \n\t" // y*m[1][1] | y*m[1][0]
- "movq %5, %%mm5 \n\t" // m[0][3] | m[0][2]
- "movq %7, %%mm7 \n\t" // m[1][3] | m[1][2]
- "movq %%mm1, %%mm6 \n\t" // w | z
- "pfmul %%mm0, %%mm5 \n\t" // x*m[0][3] | v0>x*m[0][2]
- "movq %8, %%mm0 \n\t" // m[2][1] | m[2][0]
- "punpckldq %%mm1, %%mm1 \n\t" // z | z
- "pfmul %%mm2, %%mm7 \n\t" // y*m[1][3] | y*m[1][2]
- "movq %9, %%mm2 \n\t" // m[2][3] | m[2][2]
- "pfmul %%mm1, %%mm0 \n\t" // z*m[2][1] | z*m[2][0]
- "pfadd %%mm4, %%mm3 \n\t" // x*m[0][1]+y*m[1][1] | x*m[0][0]+y*m[1][0]
- "movq %10, %%mm4 \n\t" // m[3][1] | m[3][0]
- "pfmul %%mm1, %%mm2 \n\t" // z*m[2][3] | z*m[2][2]
- "pfadd %%mm7, %%mm5 \n\t" // x*m[0][3]+y*m[1][3] | x*m[0][2]+y*m[1][2]
- "movq %11, %%mm1 \n\t" // m[3][3] | m[3][2]
- "punpckhdq %%mm6, %%mm6 \n\t" // w | w
- "pfadd %%mm0, %%mm3 \n\t" // x*m[0][1]+y*m[1][1]+z*m[2][1] | x*m[0][0]+y*m[1][0]+z*m[2][0]
- "pfmul %%mm6, %%mm4 \n\t" // w*m[3][1] | w*m[3][0]
- "pfmul %%mm6, %%mm1 \n\t" // w*m[3][3] | w*m[3][2]
- "pfadd %%mm2, %%mm5 \n\t" // x*m[0][3]+y*m[1][3]+z*m[2][3] | x*m[0][2]+y*m[1][2]+z*m[2][2]
- "pfadd %%mm4, %%mm3 \n\t" // x*m[0][1]+y*m[1][1]+z*m[2][1]+w*m[3][1] | x*m[0][0]+y*m[1][0]+z*m[2][0]+w*m[3][0]
- "movq %%mm3, %0 \n\t" // store result->y | result->x
- "pfadd %%mm1, %%mm5 \n\t" // x*m[0][3]+y*m[1][3]+z*m[2][3]+w*m[3][3] | x*m[0][2]+y*m[1][2]+z*m[2][2]+w*m[3][2]
- "movq %%mm5, %1" // store result->w | result->z
- : "=m"(result[0]), "=m"(result[2])
- : "m"(t[0]), "m"(t[2]),
- "m"(m[0][0]), "m"(m[0][2]),
- "m"(m[1][0]), "m"(m[1][2]),
- "m"(m[2][0]), "m"(m[2][2]),
- "m"(m[3][0]), "m"(m[3][2])
- : "mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7"
- );
- simd::reset_mmx();
- return (result);
-}
-
-#else // If no processor extensions, just unroll the multiplication
-
-/// Specialization for 4-component vector transform, the slow part of 3D graphics.
-template <>
-tuple<4,float> operator* (const tuple<4,float>& t, const matrix<4,4,float>& m)
-{
- tuple<4,float> tr;
- for (uoff_t i = 0; i < 4; ++ i)
- tr[i] = t[0] * m[0][i] + t[1] * m[1][i] + t[2] * m[2][i] + t[3] * m[3][i];
- return (tr);
-}
-
-#endif // CPU_HAS_3DNOW
-#endif // WANT_UNROLLED_COPY
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ulimits.h b/media/libdrm/mobile2/src/util/ustl-1.0/ulimits.h
deleted file mode 100644
index 85f1db1..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ulimits.h
+++ /dev/null
@@ -1,108 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ulimits.h
-//
-
-#ifndef ULIMITS_H_1C2192EA3821E0811BBAF86B0F048364
-#define ULIMITS_H_1C2192EA3821E0811BBAF86B0F048364
-
-#include "utypes.h"
-#include <stdint.h>
-
-namespace ustl {
-
-// Android
-#ifndef UINTPTR_MAX
-#define UINTPTR_MAX UINT32_MAX
-#endif
-
-#ifndef UINT32_MAX
-#define UINT32_MAX (0xffffffff)
-#endif
-
-/// \class numeric_limits ulimits.h ustl.h
-/// \brief Defines numeric limits for a type.
-///
-template <typename T>
-struct numeric_limits {
- /// Returns the minimum value for type T.
- static inline T min (void) { return (T(0)); }
- /// Returns the minimum value for type T.
- static inline T max (void) { return (T(0)); }
- static const bool is_signed = false; ///< True if the type is signed.
- static const bool is_integer = false; ///< True if stores an exact value.
- static const bool is_integral = false; ///< True if fixed size and cast-copyable.
-};
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-
-template <typename T>
-struct numeric_limits<T*> {
- static inline T* min (void) { return (NULL); }
- static inline T* max (void) { return (UINTPTR_MAX); }
- static const bool is_signed = false;
- static const bool is_integer = true;
- static const bool is_integral = true;
-};
-
-#define _NUMERIC_LIMITS(type, minVal, maxVal, bSigned, bInteger, bIntegral) \
-template <> \
-struct numeric_limits<type> { \
- static inline type min (void) { return (minVal); } \
- static inline type max (void) { return (maxVal); } \
- static const bool is_signed = bSigned; \
- static const bool is_integer = bInteger; \
- static const bool is_integral = bIntegral; \
-}
-
-//--------------------------------------------------------------------------------------
-// type min max signed integer integral
-//--------------------------------------------------------------------------------------
-_NUMERIC_LIMITS (bool, false, true, false, true, true);
-_NUMERIC_LIMITS (char, SCHAR_MIN, SCHAR_MAX, true, true, true);
-_NUMERIC_LIMITS (int, INT_MIN, INT_MAX, true, true, true);
-_NUMERIC_LIMITS (short, SHRT_MIN, SHRT_MAX, true, true, true);
-_NUMERIC_LIMITS (long, LONG_MIN, LONG_MAX, true, true, true);
-#if HAVE_THREE_CHAR_TYPES
-_NUMERIC_LIMITS (signed char, SCHAR_MIN, SCHAR_MAX, true, true, true);
-#endif
-_NUMERIC_LIMITS (unsigned char, 0, UCHAR_MAX, false, true, true);
-_NUMERIC_LIMITS (unsigned int, 0, UINT_MAX, false, true, true);
-_NUMERIC_LIMITS (unsigned short,0, USHRT_MAX, false, true, true);
-_NUMERIC_LIMITS (unsigned long, 0, ULONG_MAX, false, true, true);
-_NUMERIC_LIMITS (wchar_t, 0, WCHAR_MAX, false, true, true);
-_NUMERIC_LIMITS (float, FLT_MIN, FLT_MAX, true, false, true);
-_NUMERIC_LIMITS (double, DBL_MIN, DBL_MAX, true, false, true);
-_NUMERIC_LIMITS (long double, LDBL_MIN, LDBL_MAX, true, false, true);
-#ifdef HAVE_LONG_LONG
-_NUMERIC_LIMITS (long long, LLONG_MIN, LLONG_MAX, true, true, true);
-_NUMERIC_LIMITS (unsigned long long, 0, ULLONG_MAX, false, true, true);
-#endif
-//--------------------------------------------------------------------------------------
-
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-/// Macro for defining numeric_limits specializations
-#define NUMERIC_LIMITS(type, minVal, maxVal, bSigned, bInteger, bIntegral) \
-namespace ustl { _NUMERIC_LIMITS (type, minVal, maxVal, bSigned, bInteger, bIntegral); }
-
-/// Returns the recommended stream alignment for type \p T. Override with ALIGNOF.
-template <typename T>
-inline size_t alignof (const T&)
-{
- if (numeric_limits<T>::is_integral)
- return (__alignof__(T));
- return (4);
-}
-
-#define ALIGNOF(type,grain) \
-namespace ustl { \
- template <> inline size_t alignof (const type&) { return (grain); } }
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ulist.h b/media/libdrm/mobile2/src/util/ustl-1.0/ulist.h
deleted file mode 100644
index 842bbde..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ulist.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ulist.h
-//
-
-#ifndef ULIST_H_54E3B510498982C87A0A1E1932E6729D
-#define ULIST_H_54E3B510498982C87A0A1E1932E6729D
-
-#include "uvector.h"
-#include "uctralgo.h"
-
-namespace ustl {
-
-/// \class list ulist.h ustl.h
-/// \ingroup Sequences
-///
-/// \brief Linked list, defined as an alias to \ref vector.
-///
-template <typename T>
-class list : public vector<T> {
-public:
- typedef typename vector<T>::size_type size_type;
- typedef typename vector<T>::iterator iterator;
- typedef typename vector<T>::const_iterator const_iterator;
- typedef typename vector<T>::reference reference;
- typedef typename vector<T>::const_reference const_reference;
-public:
- inline list (void) : vector<T> () {}
- inline explicit list (size_type n) : vector<T> (n) {}
- inline list (size_type n, const T& v) : vector<T> (n, v) {}
- inline list (const list<T>& v) : vector<T> (v) {}
- inline list (const_iterator i1, const_iterator i2) : vector<T> (i1, i2) {}
- inline size_type size (void) const { return (vector<T>::size()); }
- inline iterator begin (void) { return (vector<T>::begin()); }
- inline const_iterator begin (void) const { return (vector<T>::begin()); }
- inline iterator end (void) { return (vector<T>::end()); }
- inline const_iterator end (void) const { return (vector<T>::end()); }
- inline void push_front (const T& v) { insert (begin(), v); }
- inline void pop_front (void) { erase (begin()); }
- inline const_reference front (void) const { return (*begin()); }
- inline reference front (void) { return (*begin()); }
- inline void remove (const T& v) { ::ustl::remove (*this, v); }
- inline void unique (void) { ::ustl::unique (*this); }
- inline void sort (void) { ::ustl::sort (*this); }
- void merge (list<T>& l);
- void splice (iterator ip, list<T>& l, iterator first = NULL, iterator last = NULL);
-};
-
-/// Merges the contents with \p l. Assumes both lists are sorted.
-template <typename T>
-void list<T>::merge (list& l)
-{
- list<T>::resize (size() + l.size());
- iterator me = merge (begin(), end(), l.begin(), l.end(), begin());
- list<T>::resize (distance (begin(), me));
-}
-
-/// Moves the range [first, last) from \p l to this list at \p ip.
-template <typename T>
-void list<T>::splice (iterator ip, list<T>& l, iterator first, iterator last)
-{
- if (!first)
- first = l.begin();
- if (!last)
- last = l.end();
- insert (ip, first, last);
- l.erase (first, last);
-}
-
-#define deque list ///< list has all the functionality provided by deque
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/umap.h b/media/libdrm/mobile2/src/util/ustl-1.0/umap.h
deleted file mode 100644
index 938c507..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/umap.h
+++ /dev/null
@@ -1,165 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// umap.h
-//
-
-#ifndef UMAP_H_45643F516E02A87A3DCEA5024052A6F5
-#define UMAP_H_45643F516E02A87A3DCEA5024052A6F5
-
-#include "uassert.h"
-#include "ufunction.h"
-#include "uvector.h"
-
-namespace ustl {
-
-/// \class map umap.h ustl.h
-/// \ingroup AssociativeContainers
-///
-/// \brief A sorted associative container of pair<K,V>
-///
-template <typename K, typename V>
-class map : public vector<pair<K,V> > {
-public:
- typedef K key_type;
- typedef V data_type;
- typedef const K& const_key_ref;
- typedef const V& const_data_ref;
- typedef const map<K,V>& rcself_t;
- typedef vector<pair<K,V> > base_class;
- typedef typename base_class::value_type value_type;
- typedef typename base_class::size_type size_type;
- typedef typename base_class::pointer pointer;
- typedef typename base_class::const_pointer const_pointer;
- typedef typename base_class::reference reference;
- typedef typename base_class::const_reference const_reference;
- typedef typename base_class::const_iterator const_iterator;
- typedef typename base_class::iterator iterator;
- typedef typename base_class::reverse_iterator reverse_iterator;
- typedef typename base_class::const_reverse_iterator const_reverse_iterator;
- typedef pair<const_iterator,const_iterator> const_range_t;
- typedef pair<iterator,iterator> range_t;
-public:
- inline map (void) : vector<pair<K,V> > () {}
- explicit inline map (size_type n) : vector<pair<K,V> > (n) {}
- inline map (rcself_t v) : vector<pair<K,V> > (v) {}
- inline map (const_iterator i1, const_iterator i2) : vector<pair<K,V> >() { insert (i1, i2); }
- inline rcself_t operator= (rcself_t v) { base_class::operator= (v); return (*this); }
- inline const_data_ref operator[] (const_key_ref i) const;
- data_type& operator[] (const_key_ref i);
- inline size_type size (void) const { return (base_class::size()); }
- inline iterator begin (void) { return (base_class::begin()); }
- inline const_iterator begin (void) const { return (base_class::begin()); }
- inline iterator end (void) { return (base_class::end()); }
- inline const_iterator end (void) const { return (base_class::end()); }
- inline void assign (const_iterator i1, const_iterator i2) { clear(); insert (i1, i2); }
- inline void push_back (const_reference v) { insert (v); }
- inline const_iterator find (const_key_ref k) const;
- inline iterator find (const_key_ref k) { return (const_cast<iterator> (const_cast<rcself_t>(*this).find (k))); }
- inline const_iterator find_data (const_data_ref v, const_iterator first = NULL, const_iterator last = NULL) const;
- inline iterator find_data (const_data_ref v, iterator first = NULL, iterator last = NULL);
- iterator insert (const_reference v);
- void insert (const_iterator i1, const_iterator i2);
- inline void erase (const_key_ref k);
- inline iterator erase (iterator ep) { return (base_class::erase (ep)); }
- inline iterator erase (iterator ep1, iterator ep2) { return (base_class::erase (ep1, ep2)); }
- inline void clear (void) { base_class::clear(); }
-private:
- const_iterator lower_bound (const_key_ref k) const;
- inline iterator lower_bound (const_key_ref k) { return (const_cast<iterator>(const_cast<rcself_t>(*this).lower_bound (k))); }
-};
-
-template <typename K, typename V>
-typename map<K,V>::const_iterator map<K,V>::lower_bound (const_key_ref k) const
-{
- const_iterator first (begin()), last (end());
- while (first != last) {
- const_iterator mid = advance (first, distance (first,last) / 2);
- if (mid->first < k)
- first = advance (mid, 1);
- else
- last = mid;
- }
- return (first);
-}
-
-/// Returns the pair<K,V> where K = \p k.
-template <typename K, typename V>
-inline typename map<K,V>::const_iterator map<K,V>::find (const_key_ref k) const
-{
- const_iterator i = lower_bound (k);
- return ((i < end() && k < i->first) ? end() : i);
-}
-
-/// Returns the pair<K,V> where V = \p v, occuring in range [first,last).
-template <typename K, typename V>
-inline typename map<K,V>::const_iterator map<K,V>::find_data (const_data_ref v, const_iterator first, const_iterator last) const
-{
- if (!first) first = begin();
- if (!last) last = end();
- for (; first != last && first->second != v; ++first);
- return (first);
-}
-
-/// Returns the pair<K,V> where V = \p v, occuring in range [first,last).
-template <typename K, typename V>
-inline typename map<K,V>::iterator map<K,V>::find_data (const_data_ref v, iterator first, iterator last)
-{
- return (const_cast<iterator> (find_data (v, const_cast<const_iterator>(first), const_cast<const_iterator>(last))));
-}
-
-/// Returns data associated with key \p k.
-template <typename K, typename V>
-inline const typename map<K,V>::data_type& map<K,V>::operator[] (const_key_ref k) const
-{
- assert (find(k) != end() && "operator[] const can not insert non-existent keys");
- return (find(k)->second);
-}
-
-/// Returns data associated with key \p k.
-template <typename K, typename V>
-typename map<K,V>::data_type& map<K,V>::operator[] (const_key_ref k)
-{
- iterator ip = lower_bound (k);
- if (ip == end() || k < ip->first)
- ip = base_class::insert (ip, make_pair (k, V()));
- return (ip->second);
-}
-
-/// Inserts the pair into the container.
-template <typename K, typename V>
-typename map<K,V>::iterator map<K,V>::insert (const_reference v)
-{
- iterator ip = lower_bound (v.first);
- if (ip == end() || v.first < ip->first)
- ip = base_class::insert (ip, v);
- else
- *ip = v;
- return (ip);
-}
-
-/// Inserts elements from range [i1,i2) into the container.
-template <typename K, typename V>
-void map<K,V>::insert (const_iterator i1, const_iterator i2)
-{
- assert (i1 <= i2);
- reserve (size() + distance (i1, i2));
- for (; i1 != i2; ++i1)
- insert (*i1);
-}
-
-/// Erases the element with key value \p k.
-template <typename K, typename V>
-inline void map<K,V>::erase (const_key_ref k)
-{
- iterator ip = find (k);
- if (ip != end())
- erase (ip);
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/umatrix.h b/media/libdrm/mobile2/src/util/ustl-1.0/umatrix.h
deleted file mode 100644
index e6810f1..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/umatrix.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// umatrix.h
-//
-
-#ifndef UMATRIX_H_740EBFEF554E833645E0FD72419A8185
-#define UMATRIX_H_740EBFEF554E833645E0FD72419A8185
-
-#include "utuple.h"
-
-namespace ustl {
-
-/// \class matrix umatrix.h ustl.h
-/// \ingroup Sequences
-///
-/// \brief A two-dimensional array of NX*NY elements of type T.
-///
-template <size_t NX, size_t NY, typename T>
-class matrix : public tuple<NX*NY,T> {
-public:
- typedef tuple<NX,T> row_type;
- typedef tuple<NY,T> column_type;
- typedef tuple<NX*NY,T> tuple_type;
- typedef typename tuple_type::value_type value_type;
- typedef typename tuple_type::size_type size_type;
- typedef typename tuple_type::pointer pointer;
- typedef typename tuple_type::const_pointer const_pointer;
- typedef typename tuple_type::reference reference;
- typedef typename tuple_type::const_reference const_reference;
- typedef typename tuple_type::iterator iterator;
- typedef typename tuple_type::const_iterator const_iterator;
- typedef typename tuple_type::range_t range_t;
- typedef typename tuple_type::const_range_t const_range_t;
- typedef typename tuple_type::reverse_iterator reverse_iterator;
- typedef typename tuple_type::const_reverse_iterator const_reverse_iterator;
-public:
- inline matrix (void) { fill_n (matrix::begin(), NX*NY, T()); }
- inline size_type columns (void) const { return (NX); }
- inline size_type rows (void) const { return (NY); }
- inline const_iterator at (size_type i) const { return (matrix::begin() + i * NX); }
- inline iterator at (size_type i) { return (matrix::begin() + i * NX); }
- inline const_iterator operator[] (size_type i) const { return (at (i)); }
- inline iterator operator[] (size_type i) { return (at (i)); }
- inline row_type row (size_type r) const { return (row_type (at (r))); }
- inline column_type column (size_type c) const;
- template <typename T2>
- inline const matrix& operator= (const matrix<NX,NY,T2>& src) { tuple_type::operator= (src); return (*this); }
- inline const matrix& operator= (const matrix<NX,NY,T>& src) { tuple_type::operator= (src); return (*this); }
- inline const matrix& operator+= (const_reference v) { tuple_type::operator+= (v); return (*this); }
- inline const matrix& operator-= (const_reference v) { tuple_type::operator-= (v); return (*this); }
- inline const matrix& operator*= (const_reference v) { tuple_type::operator*= (v); return (*this); }
- inline const matrix& operator/= (const_reference v) { tuple_type::operator/= (v); return (*this); }
- inline const matrix operator+ (const_reference v) const
- { matrix result (*this); result += v; return (result); }
- inline const matrix operator- (const_reference v) const
- { matrix result (*this); result -= v; return (result); }
- inline const matrix operator* (const_reference v) const
- { matrix result (*this); result *= v; return (result); }
- inline const matrix operator/ (const_reference v) const
- { matrix result (*this); result /= v; return (result); }
-};
-
-template <size_t NX, size_t NY, typename T>
-inline typename matrix<NX,NY,T>::column_type matrix<NX,NY,T>::column (size_type c) const
-{
- column_type result;
- const_iterator src (matrix::begin() + c);
- iterator dest (result.begin());
- for (uoff_t i = 0; i < NY; ++ i, ++ dest, src += NX)
- *dest = *src;
- return (result);
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/umemory.h b/media/libdrm/mobile2/src/util/ustl-1.0/umemory.h
deleted file mode 100644
index 75a9005..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/umemory.h
+++ /dev/null
@@ -1,199 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// umemory.h
-//
-
-#ifndef UMEMORY_H_4AB5B0DB5BF09140541409CC47BCD17A
-#define UMEMORY_H_4AB5B0DB5BF09140541409CC47BCD17A
-
-#include "unew.h"
-#ifdef HAVE_ALLOCA_H
- #include <alloca.h>
-#else
- #include <stdlib.h>
-#endif
-#include "upair.h"
-#include "uiterator.h"
-#include "ulimits.h"
-
-namespace ustl {
-
-/// \class auto_ptr umemory.h ustl.h
-/// \ingroup MemoryManagement
-///
-/// \brief A smart pointer.
-///
-/// Calls delete in the destructor; assignment transfers ownership.
-/// This class does not work with void pointers due to the absence
-/// of the required dereference operator.
-///
-template <typename T>
-class auto_ptr {
-public:
- typedef T value_type;
- typedef T* pointer;
- typedef T& reference;
-public:
- /// Takes ownership of \p p.
- inline explicit auto_ptr (pointer p = NULL) : m_p (p) {}
- /// Takes ownership of pointer in \p p. \p p relinquishes ownership.
- inline auto_ptr (auto_ptr<T>& p) : m_p (p.release()) {}
- /// Deletes the owned pointer.
- inline ~auto_ptr (void) { delete m_p; }
- /// Returns the pointer without relinquishing ownership.
- inline pointer get (void) const { return (m_p); }
- /// Returns the pointer and gives up ownership.
- inline pointer release (void) { pointer rv (m_p); m_p = NULL; return (rv); }
- /// Deletes the pointer and sets it equal to \p p.
- inline void reset (pointer p) { if (p != m_p) { delete m_p; m_p = p; } }
- /// Takes ownership of \p p.
- inline auto_ptr<T>& operator= (pointer p) { reset (p); return (*this); }
- /// Takes ownership of pointer in \p p. \p p relinquishes ownership.
- inline auto_ptr<T>& operator= (auto_ptr<T>& p) { reset (p.release()); return (*this); }
- inline reference operator* (void) const { return (*m_p); }
- inline pointer operator-> (void) const { return (m_p); }
- inline bool operator== (const pointer p) const { return (m_p == p); }
- inline bool operator== (const auto_ptr<T>& p) const { return (m_p == p.m_p); }
- inline bool operator< (const auto_ptr<T>& p) const { return (p.m_p < m_p); }
-private:
- pointer m_p;
-};
-
-/// Calls the placement new on \p p.
-/// \ingroup RawStorageAlgorithms
-///
-template <typename T>
-inline void construct (T* p)
-{
- new (p) T;
-}
-
-/// Calls the placement new on \p p.
-/// \ingroup RawStorageAlgorithms
-///
-template <typename ForwardIterator>
-inline void construct (ForwardIterator first, ForwardIterator last)
-{
- typedef typename iterator_traits<ForwardIterator>::value_type value_type;
- if (!numeric_limits<value_type>::is_integral) {
- while (first < last) {
- construct (&*first);
- ++ first;
- }
- }
-}
-
-/// Calls the placement new on \p p.
-/// \ingroup RawStorageAlgorithms
-///
-template <typename T>
-inline void construct (T* p, const T& value)
-{
- new (p) T (value);
-}
-
-/// Calls the destructor of \p p without calling delete.
-/// \ingroup RawStorageAlgorithms
-///
-template <typename T>
-inline void destroy (T* p) throw()
-{
- p->~T();
-}
-
-/// Calls the destructor on elements in range [first, last) without calling delete.
-/// \ingroup RawStorageAlgorithms
-///
-template <typename ForwardIterator>
-inline void destroy (ForwardIterator first, ForwardIterator last) throw()
-{
- typedef typename iterator_traits<ForwardIterator>::value_type value_type;
- if (!numeric_limits<value_type>::is_integral)
- for (; first < last; ++ first)
- destroy (&*first);
-}
-
-/// Casts \p p to the type of the second pointer argument.
-template <typename T> inline T* cast_to_type (void* p, const T*) { return ((T*) p); }
-
-/// \brief Creates a temporary buffer pair from \p p and \p n
-/// This is intended to be used with alloca to create temporary buffers.
-/// The size in the returned pair is set to 0 if the allocation is unsuccessful.
-/// \ingroup RawStorageAlgorithms
-///
-template <typename T>
-inline pair<T*, ptrdiff_t> make_temporary_buffer (void* p, size_t n, const T* ptype)
-{
- return (make_pair (cast_to_type(p,ptype), ptrdiff_t(p ? n : 0)));
-}
-
-#ifdef HAVE_ALLOCA_H
- /// \brief Allocates a temporary buffer, if possible.
- /// \ingroup RawStorageAlgorithms
- #define get_temporary_buffer(size, ptype) make_temporary_buffer (alloca(size_of_elements(size, ptype)), size, ptype)
- #define return_temporary_buffer(p)
-#else
- #define get_temporary_buffer(size, ptype) make_temporary_buffer (malloc(size_of_elements(size, ptype)), size, ptype)
- #define return_temporary_buffer(p) if (p) free (p), p = NULL
-#endif
-
-/// Copies [first, last) into result by calling copy constructors in result.
-/// \ingroup RawStorageAlgorithms
-///
-template <typename InputIterator, typename ForwardIterator>
-ForwardIterator uninitialized_copy (InputIterator first, InputIterator last, ForwardIterator result)
-{
- while (first < last) {
- construct (&*result, *first);
- ++ result;
- ++ first;
- }
- return (result);
-}
-
-/// Copies [first, first + n) into result by calling copy constructors in result.
-/// \ingroup RawStorageAlgorithms
-///
-template <typename InputIterator, typename ForwardIterator>
-ForwardIterator uninitialized_copy_n (InputIterator first, size_t n, ForwardIterator result)
-{
- while (n--) {
- construct (&*result, *first);
- ++ result;
- ++ first;
- }
- return (result);
-}
-
-/// Calls construct on all elements in [first, last) with value \p v.
-/// \ingroup RawStorageAlgorithms
-///
-template <typename ForwardIterator, typename T>
-void uninitialized_fill (ForwardIterator first, ForwardIterator last, const T& v)
-{
- while (first < last) {
- construct (&*first, v);
- ++ first;
- }
-}
-
-/// Calls construct on all elements in [first, first + n) with value \p v.
-/// \ingroup RawStorageAlgorithms
-///
-template <typename ForwardIterator, typename T>
-ForwardIterator uninitialized_fill_n (ForwardIterator first, size_t n, const T& v)
-{
- while (n--) {
- construct (&*first, v);
- ++ first;
- }
- return (first);
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/umultimap.h b/media/libdrm/mobile2/src/util/ustl-1.0/umultimap.h
deleted file mode 100644
index dd6ca48..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/umultimap.h
+++ /dev/null
@@ -1,121 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// umultimap.h
-//
-
-#ifndef UMULTIMAP_H_45743F516E02A87A3FCEA5024052A6F5
-#define UMULTIMAP_H_45743F516E02A87A3FCEA5024052A6F5
-
-#include "uassert.h"
-#include "ufunction.h"
-#include "uvector.h"
-
-namespace ustl {
-
-/// \class multimap umultimap.h ustl.h
-/// \ingroup AssociativeContainers
-///
-/// \brief A sorted associative container that may container multiple entries for each key.
-///
-template <typename K, typename V>
-class multimap : public vector<pair<K,V> > {
-public:
- typedef K key_type;
- typedef V data_type;
- typedef const K& const_key_ref;
- typedef const V& const_data_ref;
- typedef const multimap<K,V>& rcself_t;
- typedef vector<pair<K,V> > base_class;
- typedef typename base_class::value_type value_type;
- typedef typename base_class::size_type size_type;
- typedef typename base_class::pointer pointer;
- typedef typename base_class::const_pointer const_pointer;
- typedef typename base_class::reference reference;
- typedef typename base_class::const_reference const_reference;
- typedef typename base_class::const_iterator const_iterator;
- typedef typename base_class::iterator iterator;
- typedef typename base_class::reverse_iterator reverse_iterator;
- typedef typename base_class::const_reverse_iterator const_reverse_iterator;
- typedef pair<const_iterator,const_iterator> const_range_t;
- typedef pair<iterator,iterator> range_t;
-public:
- inline multimap (void) : vector<pair<K,V> > () {}
- explicit inline multimap (size_type n) : vector<pair<K,V> > (n) {}
- inline multimap (rcself_t v) : vector<pair<K,V> > (v) {}
- inline multimap (const_iterator i1, const_iterator i2) : vector<pair<K,V> > () { insert (i1, i2); }
- inline rcself_t operator= (rcself_t v) { base_class::operator= (v); return (*this); }
- inline size_type size (void) const { return (base_class::size()); }
- inline iterator begin (void) { return (base_class::begin()); }
- inline const_iterator begin (void) const { return (base_class::begin()); }
- inline iterator end (void) { return (base_class::end()); }
- inline const_iterator end (void) const { return (base_class::end()); }
- inline void assign (const_iterator i1, const_iterator i2) { clear(); insert (i1, i2); }
- inline size_type count (const_key_ref k) const { return (upper_bound(k) - lower_bound(k)); }
- inline void push_back (const_reference v) { insert (v); }
- inline const_range_t equal_range (const_key_ref k) const { return (make_pair (lower_bound(k), upper_bound(k))); }
- inline range_t equal_range (const_key_ref k) { return (make_pair (const_cast<iterator>(lower_bound(k)), const_cast<iterator>(upper_bound(k)))); }
- const_iterator lower_bound (const_key_ref k) const;
- const_iterator upper_bound (const_key_ref k) const;
- inline iterator insert (const_reference v);
- void insert (const_iterator i1, const_iterator i2);
- inline void erase (const_key_ref k) { erase (const_cast<iterator>(lower_bound(k)), const_cast<iterator>(upper_bound(k))); }
- inline iterator erase (iterator ep) { return (base_class::erase (ep)); }
- inline iterator erase (iterator ep1, iterator ep2) { return (base_class::erase (ep1, ep2)); }
- inline void clear (void) { base_class::clear(); }
-};
-
-/// Returns an iterator to the first element with key value \p k.
-template <typename K, typename V>
-typename multimap<K,V>::const_iterator multimap<K,V>::lower_bound (const_key_ref k) const
-{
- const_iterator first (begin()), last (end());
- while (first != last) {
- const_iterator mid = advance (first, distance (first,last) / 2);
- if (mid->first < k)
- first = advance (mid, 1);
- else
- last = mid;
- }
- return (first);
-}
-
-/// Returns an iterator to the first element with key value \p k.
-template <typename K, typename V>
-typename multimap<K,V>::const_iterator multimap<K,V>::upper_bound (const_key_ref k) const
-{
- const_iterator first (begin()), last (end());
- while (first != last) {
- const_iterator mid = advance (first, distance (first,last) / 2);
- if (k < mid->first)
- last = mid;
- else
- first = advance (mid, 1);
- }
- return (last);
-}
-
-/// Inserts the pair into the container.
-template <typename K, typename V>
-inline typename multimap<K,V>::iterator multimap<K,V>::insert (const_reference v)
-{
- iterator ip = const_cast<iterator> (upper_bound (v.first));
- return (base_class::insert (ip, v));
-}
-
-/// Inserts elements from range [i1,i2) into the container.
-template <typename K, typename V>
-void multimap<K,V>::insert (const_iterator i1, const_iterator i2)
-{
- assert (i1 <= i2);
- reserve (size() + distance (i1, i2));
- for (; i1 != i2; ++i1)
- insert (*i1);
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/umultiset.h b/media/libdrm/mobile2/src/util/ustl-1.0/umultiset.h
deleted file mode 100644
index 404b877..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/umultiset.h
+++ /dev/null
@@ -1,106 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// umultiset.h
-//
-
-#ifndef UMULTISET_H_446AEDBB7F61C6994DC228C25D5FA3A1
-#define UMULTISET_H_446AEDBB7F61C6994DC228C25D5FA3A1
-
-#include "uassert.h"
-#include "ualgo.h"
-#include "uvector.h"
-
-namespace ustl {
-
-/// \class multiset umultiset.h ustl.h
-/// \ingroup AssociativeContainers
-///
-/// \brief Multiple sorted container.
-/// Unlike set, it may contain multiple copies of each element.
-///
-template <typename T>
-class multiset : public vector<T> {
-public:
- typedef const multiset<T>& rcself_t;
- typedef vector<T> base_class;
- typedef typename base_class::value_type value_type;
- typedef typename base_class::size_type size_type;
- typedef typename base_class::pointer pointer;
- typedef typename base_class::const_pointer const_pointer;
- typedef typename base_class::reference reference;
- typedef typename base_class::const_reference const_reference;
- typedef typename base_class::const_iterator const_iterator;
- typedef typename base_class::iterator iterator;
- typedef typename base_class::reverse_iterator reverse_iterator;
- typedef typename base_class::const_reverse_iterator const_reverse_iterator;
-public:
- inline multiset (void) : vector<T> () {}
- explicit inline multiset (size_type n) : vector<T> (n) {}
- inline multiset (rcself_t v) : vector<T> (v) {}
- inline multiset (const_iterator i1, const_iterator i2) : vector<T> () { insert (i1, i2); }
- inline rcself_t operator= (rcself_t v) { base_class::operator= (v); return (*this); }
- inline size_type size (void) const { return (base_class::size()); }
- inline iterator begin (void) { return (base_class::begin()); }
- inline const_iterator begin (void) const { return (base_class::begin()); }
- inline iterator end (void) { return (base_class::end()); }
- inline const_iterator end (void) const { return (base_class::end()); }
- inline void assign (const_iterator i1, const_iterator i2);
- size_type count (const_reference v) const;
- inline void push_back (const_reference v) { insert (v); }
- inline iterator insert (const_reference v);
- void insert (const_iterator i1, const_iterator i2);
- void erase (const_reference v);
- inline iterator erase (iterator ep) { return (base_class::erase (ep)); }
- inline iterator erase (iterator ep1, iterator ep2) { return (base_class::erase (ep1, ep2)); }
- inline void clear (void) { base_class::clear(); }
-};
-
-/// Copies contents of range [i1,i2)
-template <typename T>
-inline void multiset<T>::assign (const_iterator i1, const_iterator i2)
-{
- base_class::clear();
- insert (i1, i2);
-}
-
-/// Returns the number of elements of value \p v.
-template <typename T>
-typename multiset<T>::size_type multiset<T>::count (const_reference v) const
-{
- const pair<const_iterator,const_iterator> fr = equal_range (begin(), end(), v);
- return (distance (fr.first, fr.second));
-}
-
-/// Inserts \p v.
-template <typename T>
-inline typename multiset<T>::iterator multiset<T>::insert (const_reference v)
-{
- iterator ip = upper_bound (begin(), end(), v);
- return (base_class::insert (ip, v));
-}
-
-/// Inserts all elements from range [i1,i2).
-template <typename T>
-void multiset<T>::insert (const_iterator i1, const_iterator i2)
-{
- assert (i1 <= i2);
- reserve (size() + distance (i1, i2));
- for (; i1 < i2; ++i1)
- push_back (*i1);
-}
-
-/// Erases all elements with value \p v.
-template <typename T>
-void multiset<T>::erase (const_reference v)
-{
- pair<iterator,iterator> epr = equal_range (begin(), end(), v);
- erase (epr.first, epr.second);
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/unew.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/unew.cpp
deleted file mode 100644
index 084e053..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/unew.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// unew.cc
-//
-
-#include "unew.h"
-#include <stdlib.h>
-
-#if PLATFORM_ANDROID
-#include <stdio.h>
-#endif
-
-void* throwing_malloc (size_t n) throw (ustl::bad_alloc)
-{
- void* p = malloc (n);
- if (!p)
-#if PLATFORM_ANDROID
- printf("bad alloc\n");
-#else
- throw ustl::bad_alloc (n);
-#endif
- return (p);
-}
-
-void free_nullok (void* p) throw()
-{
- if (p)
- free (p);
-}
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/unew.h b/media/libdrm/mobile2/src/util/ustl-1.0/unew.h
deleted file mode 100644
index c4ffb62..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/unew.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-/// \file unew.h
-///
-/// \brief Same as \<new\>, but throws ustl:: exceptions.
-//
-
-#ifndef UNEW_H_11D237512B324C9C05A55DAF1BF086F1
-#define UNEW_H_11D237512B324C9C05A55DAF1BF086F1
-
-#include "uexception.h"
-
-/// Just like malloc, but throws on failure.
-void* throwing_malloc (size_t n) throw (ustl::bad_alloc);
-/// Just like free, but doesn't crash when given a NULL.
-void free_nullok (void* p) throw();
-
-#ifdef WITHOUT_LIBSTDCPP
-
-//
-// These are replaceable signatures:
-// - normal single new and delete (no arguments, throw @c bad_alloc on error)
-// - normal array new and delete (same)
-// - @c nothrow single new and delete (take a @c nothrow argument, return
-// @c NULL on error)
-// - @c nothrow array new and delete (same)
-//
-// Placement new and delete signatures (take a memory address argument,
-// does nothing) may not be replaced by a user's program.
-//
-inline void* operator new (size_t n) throw (ustl::bad_alloc) { return (throwing_malloc (n)); }
-inline void* operator new[] (size_t n) throw (ustl::bad_alloc) { return (throwing_malloc (n)); }
-inline void operator delete (void* p) throw() { free_nullok (p); }
-inline void operator delete[] (void* p) throw() { free_nullok (p); }
-
-// Default placement versions of operator new.
-inline void* operator new (size_t, void* p) throw() { return (p); }
-inline void* operator new[] (size_t, void* p) throw() { return (p); }
-
-// Default placement versions of operator delete.
-inline void operator delete (void*, void*) throw() { }
-inline void operator delete[](void*, void*) throw() { }
-
-#else
-#include <new>
-#endif // WITHOUT_LIBSTDCPP
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/unumeric.h b/media/libdrm/mobile2/src/util/ustl-1.0/unumeric.h
deleted file mode 100644
index 4883eb4..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/unumeric.h
+++ /dev/null
@@ -1,160 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// unumeric.h
-//
-// This file contains numeric algorithm templates.
-//
-
-#ifndef UNUMERIC_H_6C99D6F6363832C644A6FFF336E84E18
-#define UNUMERIC_H_6C99D6F6363832C644A6FFF336E84E18
-
-namespace ustl {
-
-/// Returns the sum of all elements in [first, last) added to \p init.
-/// \ingroup NumericAlgorithms
-///
-template <typename InputIterator, typename T>
-inline T accumulate (InputIterator first, InputIterator last, T init)
-{
- while (first < last)
- init += *first++;
- return (init);
-}
-
-/// Returns the sum of all elements in [first, last) via \p op, added to \p init.
-/// \ingroup NumericAlgorithms
-///
-template <typename InputIterator, typename T, typename BinaryFunction>
-inline T accumulate (InputIterator first, InputIterator last, T init, BinaryFunction binary_op)
-{
- while (first < last)
- init = binary_op (init, *first++);
- return (init);
-}
-
-/// Assigns range [value, value + (last - first)) to [first, last)
-/// \ingroup NumericAlgorithms
-///
-template <typename ForwardIterator, typename T>
-inline void iota (ForwardIterator first, ForwardIterator last, T value)
-{
- while (first < last)
- *first++ = value++;
-}
-
-/// Returns the sum of products of respective elements in the given ranges.
-/// \ingroup NumericAlgorithms
-///
-template <typename InputIterator1, typename InputIterator2, typename T>
-inline T inner_product (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init)
-{
- while (first1 < last1)
- init += *first1++ * *first2++;
- return (init);
-}
-
-/// Returns the sum of products of respective elements in the given ranges.
-/// \ingroup NumericAlgorithms
-///
-template <typename InputIterator1, typename InputIterator2, typename T,
- typename BinaryOperation1, typename BinaryOperation2>
-inline T inner_product
-(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init,
- BinaryOperation1 sumOp, BinaryOperation2 productOp)
-{
- while (first1 < last1)
- init = sumOp (init, productOp (*first1++, *first2++));
- return (init);
-}
-
-/// Writes result such that result[i] = sum (first...first+i)
-/// \ingroup NumericAlgorithms
-///
-template <typename InputIterator, typename OutputIterator>
-inline OutputIterator partial_sum (InputIterator first, InputIterator last, OutputIterator result)
-{
- if (first < last)
- *result = *first++;
- while (first < last)
- *++result = *first++ + *result;
- return (result);
-}
-
-/// Writes result such that result[i] = sumOp (first...first+i)
-/// \ingroup NumericAlgorithms
-///
-template <typename InputIterator, typename OutputIterator, typename BinaryOperation>
-inline OutputIterator partial_sum (InputIterator first, InputIterator last, OutputIterator result, BinaryOperation sumOp)
-{
- if (first < last)
- *result = *first++;
- while (first < last)
- *++result = sumOp (*first++, *result);
- return (result);
-}
-
-/// Writes result such that result[i] = first[i] - first[i - 1]
-/// \ingroup NumericAlgorithms
-///
-template <typename InputIterator, typename OutputIterator>
-inline OutputIterator adjacent_difference (InputIterator first, InputIterator last, OutputIterator result)
-{
- if (first < last)
- *result++ = *first++;
- while (first < last)
- *result++ = *first - *(first - 1);
- return (result);
-}
-
-/// Writes result such that result[i] = differenceOp (first[i], first[i - 1])
-/// \ingroup NumericAlgorithms
-///
-template <typename InputIterator, typename OutputIterator, typename BinaryOperation>
-inline OutputIterator adjacent_difference (InputIterator first, InputIterator last, OutputIterator result, BinaryOperation differenceOp)
-{
- if (first < last)
- *result++ = *first++;
- while (first < last)
- *result++ = differenceOp (*first, *(first - 1));
- return (result);
-}
-
-/// \brief Returns x^n.
-/// Donald Knuth's Russian Peasant algorithm.
-/// \ingroup NumericAlgorithms
-///
-template <typename T>
-inline T power (T x, unsigned n)
-{
- T result (n % 2 ? x : 1);
- while (n /= 2) {
- x *= x;
- if (n % 2)
- result *= x;
- }
- return (result);
-}
-
-/// \brief Returns x^n, using \p op instead of multiplication.
-/// Donald Knuth's Russian Peasant algorithm.
-/// \ingroup NumericAlgorithms
-///
-template <typename T, typename BinaryOperation>
-inline T power (T x, unsigned n, BinaryOperation op)
-{
- T result (n % 2 ? x : 1);
- while (n /= 2) {
- x = op (x, x);
- if (n % 2)
- result = op (result, x);
- }
- return (result);
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/upair.h b/media/libdrm/mobile2/src/util/ustl-1.0/upair.h
deleted file mode 100644
index b4cc3b7..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/upair.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-/// \file upair.h
-/// \brief Pair-related functionality.
-
-#ifndef UPAIR_H_7DC08F1B7FECF8AE6856D84C3B617A75
-#define UPAIR_H_7DC08F1B7FECF8AE6856D84C3B617A75
-
-#include "utypes.h"
-
-namespace ustl {
-
-/// \class pair upair.h ustl.h
-/// \ingroup AssociativeContainers
-///
-/// \brief Container for two values.
-///
-template <typename T1, typename T2>
-class pair {
-public:
- typedef T1 first_type;
- typedef T2 second_type;
-public:
- /// Default constructor.
- inline pair (void) : first (T1()), second (T2()) {}
- /// Initializes members with \p a, and \p b.
- inline pair (const T1& a, const T2& b) : first (a), second (b) {}
- inline pair& operator= (const pair<T1, T2>& p2) { first = p2.first; second = p2.second; return (*this); }
- template <typename T3, typename T4>
- inline pair& operator= (const pair<T3, T4>& p2) { first = p2.first; second = p2.second; return (*this); }
-public:
- first_type first;
- second_type second;
-};
-
-/// Compares both values of \p p1 to those of \p p2.
-template <typename T1, typename T2>
-inline bool operator== (const pair<T1,T2>& p1, const pair<T1,T2>& p2)
-{
- return (p1.first == p2.first && p1.second == p2.second);
-}
-
-/// Compares both values of \p p1 to those of \p p2.
-template <typename T1, typename T2>
-bool operator< (const pair<T1,T2>& p1, const pair<T1,T2>& p2)
-{
- return (p1.first < p2.first || (p1.first == p2.first && p1.second < p2.second));
-}
-
-/// Returns a pair object with (a,b)
-template <typename T1, typename T2>
-inline pair<T1,T2> make_pair (const T1& a, const T2& b)
-{
- return (pair<T1,T2> (a, b));
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/upredalgo.h b/media/libdrm/mobile2/src/util/ustl-1.0/upredalgo.h
deleted file mode 100644
index 562a3d6..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/upredalgo.h
+++ /dev/null
@@ -1,597 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ualgo.h
-//
-// Implementation of STL algorithms with custom predicates.
-//
-// The function prototypes are copied
-// exactly from the SGI version of STL documentation along with comments about
-// their use. The code is NOT the same, though the functionality usually is.
-//
-
-#ifndef UPREDALGO_H_2CB058AE0807A01A2F6A51BA5D5820A5
-#define UPREDALGO_H_2CB058AE0807A01A2F6A51BA5D5820A5
-
-namespace ustl {
-
-/// Copy_if copies elements from the range [first, last) to the range
-/// [result, result + (last - first)) if pred(*i) returns true.
-/// \ingroup MutatingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename InputIterator, typename OutputIterator, typename Predicate>
-inline OutputIterator copy_if (InputIterator first, InputIterator last, OutputIterator result, Predicate pred)
-{
- for (; first != last; ++first) {
- if (pred(*first)) {
- *result = *first;
- ++ result;
- }
- }
- return (result);
-}
-
-/// Returns the first iterator i in the range [first, last) such that
-/// pred(*i) is true. Returns last if no such iterator exists.
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename InputIterator, typename Predicate>
-inline InputIterator find_if (InputIterator first, InputIterator last, Predicate pred)
-{
- while (first != last && !pred (*first))
- ++ first;
- return (first);
-}
-
-/// Returns the first iterator such that p(*i, *(i + 1)) == true.
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename ForwardIterator, typename BinaryPredicate>
-inline ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last, BinaryPredicate p)
-{
- if (first != last)
- for (ForwardIterator prev = first; ++first != last; ++ prev)
- if (p (*prev, *first))
- return (prev);
- return (last);
-}
-
-/// Returns the pointer to the first pair of unequal elements.
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename InputIterator, typename BinaryPredicate>
-inline pair<InputIterator,InputIterator>
-mismatch (InputIterator first1, InputIterator last1, InputIterator first2, BinaryPredicate comp)
-{
- while (first1 != last1 && comp(*first1, *first2))
- ++ first1, ++ first2;
- return (make_pair (first1, first2));
-}
-
-/// Returns true if two ranges are equal.
-/// This is an extension, present in uSTL and SGI STL.
-/// \ingroup ConditionAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename InputIterator, typename BinaryPredicate>
-inline bool equal (InputIterator first1, InputIterator last1, InputIterator first2, BinaryPredicate comp)
-{
- return (mismatch (first1, last1, first2, comp).first == last1);
-}
-
-/// Count_if finds the number of elements in [first, last) that satisfy the
-/// predicate pred. More precisely, the first version of count_if returns the
-/// number of iterators i in [first, last) such that pred(*i) is true.
-/// \ingroup ConditionAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename InputIterator, typename Predicate>
-inline size_t count_if (InputIterator first, InputIterator last, Predicate pred)
-{
- size_t total = 0;
- for (; first != last; ++first)
- if (pred (*first))
- ++ total;
- return (total);
-}
-
-/// Replace_if replaces every element in the range [first, last) for which
-/// pred returns true with new_value. That is: for every iterator i, if
-/// pred(*i) is true then it performs the assignment *i = new_value.
-/// \ingroup MutatingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename ForwardIterator, typename Predicate, typename T>
-inline void replace_if (ForwardIterator first, ForwardIterator last, Predicate pred, const T& new_value)
-{
- for (; first != last; ++first)
- if (pred (*first))
- *first = new_value;
-}
-
-/// Replace_copy_if copies elements from the range [first, last) to the range
-/// [result, result + (last-first)), except that any element for which pred is
-/// true is not copied; new_value is copied instead. More precisely, for every
-/// integer n such that 0 <= n < last-first, replace_copy_if performs the
-/// assignment *(result+n) = new_value if pred(*(first+n)),
-/// and *(result+n) = *(first+n) otherwise.
-/// \ingroup MutatingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename InputIterator, typename OutputIterator, typename Predicate, typename T>
-inline OutputIterator replace_copy_if (InputIterator first, InputIterator last, OutputIterator result, Predicate pred, const T& new_value)
-{
- for (; first != last; ++result, ++first)
- *result = pred(*first) ? new_value : *first;
-}
-
-/// Remove_copy_if copies elements from the range [first, last) to a range
-/// beginning at result, except that elements for which pred is true are not
-/// copied. The return value is the end of the resulting range. This operation
-/// is stable, meaning that the relative order of the elements that are copied
-/// is the same as in the range [first, last).
-/// \ingroup MutatingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename InputIterator, typename OutputIterator, typename Predicate>
-inline OutputIterator remove_copy_if (InputIterator first, InputIterator last, OutputIterator result, Predicate pred)
-{
- for (; first != last; ++first)
- if (pred (*first))
- *result++ = *first;
- return (result);
-}
-
-/// Remove_if removes from the range [first, last) every element x such that
-/// pred(x) is true. That is, remove_if returns an iterator new_last such that
-/// the range [first, new_last) contains no elements for which pred is true.
-/// The iterators in the range [new_last, last) are all still dereferenceable,
-/// but the elements that they point to are unspecified. Remove_if is stable,
-/// meaning that the relative order of elements that are not removed is
-/// unchanged.
-/// \ingroup MutatingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename ForwardIterator, typename Predicate>
-inline ForwardIterator remove_if (ForwardIterator first, ForwardIterator last, Predicate pred)
-{
- return (remove_copy_if (first, last, first, pred));
-}
-
-/// The reason there are two different versions of unique_copy is that there
-/// are two different definitions of what it means for a consecutive group of
-/// elements to be duplicates. In the first version, the test is simple
-/// equality: the elements in a range [f, l) are duplicates if, for every
-/// iterator i in the range, either i == f or else *i == *(i-1). In the second,
-/// the test is an arbitrary Binary Predicate binary_pred: the elements in
-/// [f, l) are duplicates if, for every iterator i in the range, either
-/// i == f or else binary_pred(*i, *(i-1)) is true.
-/// \ingroup MutatingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename InputIterator, typename OutputIterator, typename BinaryPredicate>
-OutputIterator unique_copy (InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate binary_pred)
-{
- if (first != last) {
- *result = *first;
- while (++first != last)
- if (!binary_pred (*first, *result))
- *++result = *first;
- ++ result;
- }
- return (result);
-}
-
-/// Every time a consecutive group of duplicate elements appears in the range
-/// [first, last), the algorithm unique removes all but the first element.
-/// That is, unique returns an iterator new_last such that the range [first,
-/// new_last) contains no two consecutive elements that are duplicates.
-/// The iterators in the range [new_last, last) are all still dereferenceable,
-/// but the elements that they point to are unspecified. Unique is stable,
-/// meaning that the relative order of elements that are not removed is
-/// unchanged.
-/// \ingroup MutatingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename ForwardIterator, typename BinaryPredicate>
-inline ForwardIterator unique (ForwardIterator first, ForwardIterator last, BinaryPredicate binary_pred)
-{
- return (unique_copy (first, last, first, binary_pred));
-}
-
-/// Returns the furthermost iterator i in [first, last) such that,
-/// for every iterator j in [first, i), comp(*j, value) is true.
-/// Assumes the range is sorted.
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename ForwardIterator, typename T, typename StrictWeakOrdering>
-ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& value, StrictWeakOrdering comp)
-{
- ForwardIterator mid;
- while (first != last) {
- mid = advance (first, distance (first,last) / 2);
- if (comp (*mid, value))
- first = mid + 1;
- else
- last = mid;
- }
- return (first);
-}
-
-/// Performs a binary search inside the sorted range.
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename ForwardIterator, typename T, typename StrictWeakOrdering>
-inline ForwardIterator binary_search (ForwardIterator first, ForwardIterator last, const T& value, StrictWeakOrdering comp)
-{
- ForwardIterator found = lower_bound (first, last, value, comp);
- return ((found == last || comp(value, *found)) ? last : found);
-}
-
-/// Returns the furthermost iterator i in [first,last) such that for
-/// every iterator j in [first,i), comp(value,*j) is false.
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename ForwardIterator, typename T, typename StrictWeakOrdering>
-ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& value, StrictWeakOrdering comp)
-{
- ForwardIterator mid;
- while (first != last) {
- mid = advance (first, distance (first,last) / 2);
- if (comp (value, *mid))
- last = mid;
- else
- first = mid + 1;
- }
- return (last);
-}
-
-/// Returns pair<lower_bound,upper_bound>
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename ForwardIterator, typename T, typename StrictWeakOrdering>
-inline pair<ForwardIterator,ForwardIterator> equal_range (ForwardIterator first, ForwardIterator last, const T& value, StrictWeakOrdering comp)
-{
- pair<ForwardIterator,ForwardIterator> rv;
- rv.second = rv.first = lower_bound (first, last, value, comp);
- while (rv.second != last && !comp(value, *(rv.second)))
- ++ rv.second;
- return (rv);
-}
-
-/// \brief Puts \p nth element into its sorted position.
-/// In this implementation, the entire array is sorted. The performance difference is
-/// so small and the function use is so rare, there is no need to have code for it.
-/// \ingroup SortingAlgorithms
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-///
-template <typename RandomAccessIterator, typename Compare>
-inline void nth_element (RandomAccessIterator first, RandomAccessIterator, RandomAccessIterator last, Compare comp)
-{
- sort (first, last, comp);
-}
-
-/// \brief Searches for the first subsequence [first2,last2) in [first1,last1)
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename ForwardIterator1, typename ForwardIterator2, typename BinaryPredicate>
-ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate comp)
-{
- const ForwardIterator1 slast = last1 - distance(first2, last2) + 1;
- for (; first1 < slast; ++first1) {
- ForwardIterator2 i = first2;
- ForwardIterator1 j = first1;
- for (; i != last2 && comp(*j, *i); ++i, ++j);
- if (i == last2)
- return (first1);
- }
- return (last1);
-}
-
-/// \brief Searches for the last subsequence [first2,last2) in [first1,last1)
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename ForwardIterator1, typename ForwardIterator2, typename BinaryPredicate>
-ForwardIterator1 find_end (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate comp)
-{
- ForwardIterator1 s = last1 - distance(first2, last2);
- for (; first1 < s; --s) {
- ForwardIterator2 i = first2, j = s;
- for (; i != last2 && comp(*j, *i); ++i, ++j);
- if (i == last2)
- return (s);
- }
- return (last1);
-}
-
-/// \brief Searches for the first occurence of \p count \p values in [first, last)
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename Iterator, typename T, typename BinaryPredicate>
-Iterator search_n (Iterator first, Iterator last, size_t count, const T& value, BinaryPredicate comp)
-{
- size_t n = 0;
- for (; first != last; ++first) {
- if (!comp (*first, value))
- n = 0;
- else if (++n == count)
- return (first - --n);
- }
- return (last);
-}
-
-/// \brief Searches [first1,last1) for the first occurrence of an element from [first2,last2)
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename InputIterator, typename ForwardIterator, typename BinaryPredicate>
-InputIterator find_first_of (InputIterator first1, InputIterator last1, ForwardIterator first2, ForwardIterator last2, BinaryPredicate comp)
-{
- for (; first1 != last1; ++first1)
- for (ForwardIterator i = first2; i != last2; ++i)
- if (comp (*first1, *i))
- return (first1);
- return (first1);
-}
-
-/// \brief Returns true if [first2,last2) is a subset of [first1,last1)
-/// \ingroup ConditionAlgorithms
-/// \ingroup SetAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename InputIterator1, typename InputIterator2, typename StrictWeakOrdering>
-bool includes (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, StrictWeakOrdering comp)
-{
- for (; (first1 != last1) & (first2 != last2); ++first1) {
- if (comp (*first2, *first1))
- return (false);
- first2 += !comp (*first1, *first2);
- }
- return (first2 == last2);
-}
-
-/// \brief Merges [first1,last1) with [first2,last2)
-///
-/// Result will contain every element that is in either set. If duplicate
-/// elements are present, max(n,m) is placed in the result.
-///
-/// \ingroup SetAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename InputIterator1, typename InputIterator2, typename OutputIterator, typename StrictWeakOrdering>
-OutputIterator set_union (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, StrictWeakOrdering comp)
-{
- for (; (first1 != last1) & (first2 != last2); ++result) {
- if (comp (*first2, *first1))
- *result = *first2++;
- else {
- first2 += !comp (*first1, *first2);
- *result = *first1++;
- }
- }
- return (copy (first2, last2, copy (first1, last1, result)));
-}
-
-/// \brief Creates a set containing elements shared by the given ranges.
-/// \ingroup SetAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename InputIterator1, typename InputIterator2, typename OutputIterator, typename StrictWeakOrdering>
-OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, StrictWeakOrdering comp)
-{
- while ((first1 != last1) & (first2 != last2)) {
- bool b1ge2 = !comp (*first1, *first2), b2ge1 = !comp (*first2, *first1);
- if (b1ge2 & b2ge1)
- *result++ = *first1;
- first1 += b2ge1;
- first2 += b1ge2;
- }
- return (result);
-}
-
-/// \brief Removes from [first1,last1) elements present in [first2,last2)
-/// \ingroup SetAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename InputIterator1, typename InputIterator2, typename OutputIterator, typename StrictWeakOrdering>
-OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, StrictWeakOrdering comp)
-{
- while ((first1 != last1) & (first2 != last2)) {
- bool b1ge2 = !comp (*first1, *first2), b2ge1 = !comp (*first2, *first1);
- if (!b1ge2)
- *result++ = *first1;
- first1 += b2ge1;
- first2 += b1ge2;
- }
- return (copy (first1, last1, result));
-}
-
-/// \brief Performs union of sets A-B and B-A.
-/// \ingroup SetAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename InputIterator1, typename InputIterator2, typename OutputIterator, typename StrictWeakOrdering>
-OutputIterator set_symmetric_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, StrictWeakOrdering comp)
-{
- while ((first1 != last1) & (first2 != last2)) {
- bool b1l2 = comp (*first1, *first2), b2l1 = comp (*first2, *first1);
- if (b1l2)
- *result++ = *first1;
- else if (b2l1)
- *result++ = *first2;
- first1 += !b2l1;
- first2 += !b1l2;
- }
- return (copy (first2, last2, copy (first1, last1, result)));
-}
-
-/// \brief Returns true if the given range is sorted.
-/// \ingroup ConditionAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename ForwardIterator, typename StrictWeakOrdering>
-bool is_sorted (ForwardIterator first, ForwardIterator last, StrictWeakOrdering comp)
-{
- for (ForwardIterator i = first; ++i < last; ++first)
- if (comp (*i, *first))
- return (false);
- return (true);
-}
-
-/// \brief Compares two given containers like strcmp compares strings.
-/// \ingroup ConditionAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename InputIterator1, typename InputIterator2, typename BinaryPredicate>
-bool lexicographical_compare (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, BinaryPredicate comp)
-{
- for (; (first1 != last1) & (first2 != last2); ++first1, ++first2) {
- if (comp (*first1, *first2))
- return (true);
- if (comp (*first2, *first1))
- return (false);
- }
- return ((first1 == last1) & (first2 != last2));
-}
-
-/// \brief Creates the next lexicographical permutation of [first,last).
-/// Returns false if no further permutations can be created.
-/// \ingroup GeneratorAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename BidirectionalIterator, typename StrictWeakOrdering>
-bool next_permutation (BidirectionalIterator first, BidirectionalIterator last, StrictWeakOrdering comp)
-{
- if (distance (first, last) < 2)
- return (false);
- BidirectionalIterator i = last;
- for (--i; i != first; ) {
- --i;
- if (comp (i[0], i[1])) {
- BidirectionalIterator j = last;
- while (!comp (*i, *--j));
- iter_swap (i, j);
- reverse (i + 1, last);
- return (true);
- }
- }
- reverse (first, last);
- return (false);
-}
-
-/// \brief Creates the previous lexicographical permutation of [first,last).
-/// Returns false if no further permutations can be created.
-/// \ingroup GeneratorAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename BidirectionalIterator, typename StrictWeakOrdering>
-bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last, StrictWeakOrdering comp)
-{
- if (distance (first, last) < 2)
- return (false);
- BidirectionalIterator i = last;
- for (--i; i != first; ) {
- --i;
- if (comp(i[1], i[0])) {
- BidirectionalIterator j = last;
- while (!comp (*--j, *i));
- iter_swap (i, j);
- reverse (i + 1, last);
- return (true);
- }
- }
- reverse (first, last);
- return (false);
-}
-
-/// \brief Returns iterator to the max element in [first,last)
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename ForwardIterator, typename BinaryPredicate>
-inline ForwardIterator max_element (ForwardIterator first, ForwardIterator last, BinaryPredicate comp)
-{
- ForwardIterator result = first;
- for (; first != last; ++first)
- if (comp (*result, *first))
- result = first;
- return (result);
-}
-
-/// \brief Returns iterator to the min element in [first,last)
-/// \ingroup SearchingAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename ForwardIterator, typename BinaryPredicate>
-inline ForwardIterator min_element (ForwardIterator first, ForwardIterator last, BinaryPredicate comp)
-{
- ForwardIterator result = first;
- for (; first != last; ++first)
- if (comp (*first, *result))
- result = first;
- return (result);
-}
-
-/// \brief Makes [first,middle) a part of the sorted array.
-/// Contents of [middle,last) is undefined. This implementation just calls stable_sort.
-/// \ingroup SortingAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename RandomAccessIterator, typename StrictWeakOrdering>
-inline void partial_sort (RandomAccessIterator first, RandomAccessIterator, RandomAccessIterator last, StrictWeakOrdering comp)
-{
- stable_sort (first, last, comp);
-}
-
-/// \brief Like partial_sort, but outputs to [result_first,result_last)
-/// \ingroup SortingAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename InputIterator, typename RandomAccessIterator, typename StrictWeakOrdering>
-RandomAccessIterator partial_sort_copy (InputIterator first, InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last, StrictWeakOrdering comp)
-{
- RandomAccessIterator rend = result_first;
- for (; first != last; ++first) {
- RandomAccessIterator i = result_first;
- for (; i != rend && comp (*i, *first); ++i);
- if (i == result_last)
- continue;
- rend += (rend < result_last);
- copy_backward (i, rend - 1, rend);
- *i = *first;
- }
- return (rend);
-}
-
-/// \brief Like \ref partition, but preserves equal element order.
-/// \ingroup SortingAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename ForwardIterator, typename Predicate>
-ForwardIterator stable_partition (ForwardIterator first, ForwardIterator last, Predicate pred)
-{
- if (first == last)
- return (first);
- ForwardIterator l, r, m = advance (first, distance (first, last) / 2);
- if (first == m)
- return (pred(*first) ? last : first);
- l = stable_partition (first, m, pred);
- r = stable_partition (m, last, pred);
- rotate (l, m, r);
- return (advance (l, distance (m, r)));
-}
-
-/// \brief Splits [first,last) in two by \p pred.
-///
-/// Creates two ranges [first,middle) and [middle,last), where every element
-/// in the former is less than every element in the latter.
-/// The return value is middle.
-///
-/// \ingroup SortingAlgorithms
-/// \ingroup PredicateAlgorithms
-template <typename ForwardIterator, typename Predicate>
-inline ForwardIterator partition (ForwardIterator first, ForwardIterator last, Predicate pred)
-{
- return (stable_partition (first, last, pred));
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uqueue.h b/media/libdrm/mobile2/src/util/ustl-1.0/uqueue.h
deleted file mode 100644
index 99eef80..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uqueue.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// uqueue.h
-//
-
-#ifndef UQUEUE_H_27F01FDB0D59B75277E0E5C41ABC6B5B
-#define UQUEUE_H_27F01FDB0D59B75277E0E5C41ABC6B5B
-
-namespace ustl {
-
-/// \class queue uqueue.h ustl.h
-/// \ingroup Sequences
-///
-/// \brief Queue adapter to uSTL containers.
-///
-/// The most efficient way to use this implementation is to fill the queue
-/// and the completely empty it before filling again.
-///
-template <typename Sequence>
-class queue {
-public:
- typedef typename Sequence::value_type value_type;
- typedef typename Sequence::size_type size_type;
- typedef typename Sequence::difference_type difference_type;
- typedef typename Sequence::reference reference;
- typedef typename Sequence::const_reference const_reference;
- typedef typename Sequence::pointer pointer;
-public:
- inline queue (void) : m_Storage (), m_Front (0) { }
- explicit inline queue (const Sequence& s) : m_Storage (s), m_Front (0) { }
- inline size_type size (void) const { return (m_Storage.size() - m_Front); }
- inline bool empty (void) const { return (!size()); }
- inline reference front (void) { return (m_Storage [m_Front]); }
- inline const_reference front (void) const { return (m_Storage [m_Front]); }
- inline reference back (void) { return (m_Storage.back()); }
- inline const_reference back (void) const { return (m_Storage.back()); }
- inline void push (const value_type& v);
- inline void pop (void);
- inline bool operator== (const queue& s) { return (m_Storage == s.m_Storage && m_Front == s.m_Front); }
- inline bool operator< (const queue& s) { return (size() < s.size()); }
-private:
- Sequence m_Storage; ///< Where the data actually is.
- size_type m_Front; ///< Index of the element returned by next pop.
-};
-
-/// Pushes \p v on the queue.
-template <class Sequence>
-inline void queue<Sequence>::push (const value_type& v)
-{
- if (m_Front) {
- m_Storage.erase (m_Storage.begin(), m_Front);
- m_Front = 0;
- }
- m_Storage.push_back (v);
-}
-
-/// Pops the topmost element from the queue.
-template <class Sequence>
-inline void queue<Sequence>::pop (void)
-{
- if (++m_Front >= m_Storage.size())
- m_Storage.resize (m_Front = 0);
-}
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uset.h b/media/libdrm/mobile2/src/util/ustl-1.0/uset.h
deleted file mode 100644
index 958d4b0..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uset.h
+++ /dev/null
@@ -1,97 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// uset.h
-//
-
-#ifndef USET_H_45543F516E02A87A3FCEA5024052A6F5
-#define USET_H_45543F516E02A87A3FCEA5024052A6F5
-
-#include "uassert.h"
-#include "uvector.h"
-
-namespace ustl {
-
-/// \class set uset.h ustl.h
-/// \ingroup Sequences
-///
-/// \brief Unique sorted container. Sorted vector with all values unique.
-///
-template <typename T>
-class set : public vector<T> {
-public:
- typedef const set<T>& rcself_t;
- typedef vector<T> base_class;
- typedef typename base_class::value_type key_type;
- typedef typename base_class::value_type data_type;
- typedef typename base_class::value_type value_type;
- typedef typename base_class::size_type size_type;
- typedef typename base_class::pointer pointer;
- typedef typename base_class::const_pointer const_pointer;
- typedef typename base_class::reference reference;
- typedef typename base_class::const_reference const_reference;
- typedef typename base_class::const_iterator const_iterator;
- typedef typename base_class::iterator iterator;
- typedef typename base_class::reverse_iterator reverse_iterator;
- typedef typename base_class::const_reverse_iterator const_reverse_iterator;
-public:
- inline set (void) : vector<T> () { }
- explicit inline set (size_type n) : vector<T> (n) { }
- inline set (rcself_t v) : vector<T> (v) { }
- inline set (const_iterator i1, const_iterator i2) : vector<T> () { insert (i1, i2); }
- inline rcself_t operator= (rcself_t v) { base_class::operator= (v); return (*this); }
- inline size_type size (void) const { return (base_class::size()); }
- inline iterator begin (void) { return (base_class::begin()); }
- inline const_iterator begin (void) const { return (base_class::begin()); }
- inline iterator end (void) { return (base_class::end()); }
- inline const_iterator end (void) const { return (base_class::end()); }
- inline void assign (const_iterator i1, const_iterator i2) { clear(); insert (i1, i2); }
- inline void push_back (const_reference v) { insert (v); }
- inline const_iterator find (const_reference v) const { return (binary_search (begin(), end(), v)); }
- inline iterator find (const_reference v) { return (const_cast<iterator>(const_cast<rcself_t>(*this).find (v))); }
- iterator insert (const_reference v);
- inline void insert (const_iterator i1, const_iterator i2);
- inline void erase (const_reference v);
- inline iterator erase (iterator ep) { return (base_class::erase (ep)); }
- inline iterator erase (iterator ep1, iterator ep2) { return (base_class::erase (ep1, ep2)); }
- inline void clear (void) { base_class::clear(); }
-};
-
-/// Inserts \p v into the container, maintaining the sort order.
-template <typename T>
-typename set<T>::iterator set<T>::insert (const_reference v)
-{
- iterator ip = lower_bound (begin(), end(), v);
- if (ip == end() || v < *ip)
- ip = base_class::insert (ip, v);
- else
- *ip = v;
- return (ip);
-}
-
-/// Inserts the contents of range [i1,i2)
-template <typename T>
-void set<T>::insert (const_iterator i1, const_iterator i2)
-{
- assert (i1 <= i2);
- reserve (size() + distance (i1, i2));
- for (; i1 < i2; ++i1)
- push_back (*i1);
-}
-
-/// Erases the element with value \p v.
-template <typename T>
-inline void set<T>::erase (const_reference v)
-{
- iterator ip = find (v);
- if (ip != end())
- erase (ip);
-}
-
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uspecial.h b/media/libdrm/mobile2/src/util/ustl-1.0/uspecial.h
deleted file mode 100644
index 0b87a54..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uspecial.h
+++ /dev/null
@@ -1,267 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// uspecial.h
-//
-// Template specializations for uSTL classes.
-//
-
-#ifndef USPECIAL_H_947ADYOU0ARE3YOU2REALLY8ARE44CE0
-#define USPECIAL_H_947ADYOU0ARE3YOU2REALLY8ARE44CE0
-
-#include "uassert.h"
-#include "uvector.h"
-#include "ustring.h"
-#include "uset.h"
-#include "umultiset.h"
-#include "ubitset.h"
-#include "ulaalgo.h"
-#include "uctralgo.h"
-#include "ufunction.h"
-#include "uctrstrm.h"
-#include "sistream.h"
-#include <ctype.h>
-
-namespace ustl {
-
-//----------------------------------------------------------------------
-// Alogrithm specializations not in use by the library code.
-//----------------------------------------------------------------------
-
-template <> inline void swap (cmemlink& a, cmemlink& b) { a.swap (b); }
-template <> inline void swap (memlink& a, memlink& b) { a.swap (b); }
-template <> inline void swap (memblock& a, memblock& b) { a.swap (b); }
-template <> inline void swap (string& a, string& b) { a.swap (b); }
-#define TEMPLATE_SWAP_PSPEC(type, template_decl) \
-template_decl inline void swap (type& a, type& b) { a.swap (b); }
-TEMPLATE_SWAP_PSPEC (TEMPLATE_TYPE1 (vector,T), TEMPLATE_DECL1 (T))
-TEMPLATE_SWAP_PSPEC (TEMPLATE_TYPE1 (set,T), TEMPLATE_DECL1 (T))
-TEMPLATE_SWAP_PSPEC (TEMPLATE_TYPE1 (multiset,T), TEMPLATE_DECL1 (T))
-TEMPLATE_SWAP_PSPEC (TEMPLATE_TYPE2 (tuple,N,T), TEMPLATE_FULL_DECL2 (size_t,N,typename,T))
-
-//----------------------------------------------------------------------
-// Streamable definitions. Not used in the library and require streams.
-//----------------------------------------------------------------------
-
-//----{ pair }----------------------------------------------------------
-
-/// \brief Reads pair \p p from stream \p is.
-template <typename T1, typename T2>
-istream& operator>> (istream& is, pair<T1,T2>& p)
-{
- is >> p.first;
- is.align (alignof(T2()));
- is >> p.second;
- is.align (alignof(T1()));
- return (is);
-}
-
-/// Writes pair \p p to stream \p os.
-template <typename T1, typename T2>
-ostream& operator<< (ostream& os, const pair<T1,T2>& p)
-{
- os << p.first;
- os.align (alignof(T2()));
- os << p.second;
- os.align (alignof(T1()));
- return (os);
-}
-
-/// Writes pair \p p to stream \p os.
-template <typename T1, typename T2>
-ostringstream& operator<< (ostringstream& os, const pair<T1,T2>& p)
-{
- os << '(' << p.first << ',' << p.second << ')';
- return (os);
-}
-
-/// Returns the written size of the object.
-template <typename T1, typename T2>
-inline size_t stream_size_of (const pair<T1,T2>& v)
-{
- return (Align (stream_size_of(v.first), alignof(T2())) +
- Align (stream_size_of(v.second), alignof(T1())));
-}
-
-/// \brief Takes a pair and returns pair.first
-/// This is an extension, available in uSTL and the SGI STL.
-template <typename Pair> struct select1st : public unary_function<Pair,typename Pair::first_type> {
- typedef typename Pair::first_type result_type;
- inline const result_type& operator()(const Pair& a) const { return (a.first); }
- inline result_type& operator()(Pair& a) const { return (a.first); }
-};
-
-/// \brief Takes a pair and returns pair.second
-/// This is an extension, available in uSTL and the SGI STL.
-template <typename Pair> struct select2nd : public unary_function<Pair,typename Pair::second_type> {
- typedef typename Pair::second_type result_type;
- inline const result_type& operator()(const Pair& a) const { return (a.second); }
- inline result_type& operator()(Pair& a) const { return (a.second); }
-};
-
-/// \brief Converts a const_iterator pair into an iterator pair
-/// Useful for converting pair ranges returned by equal_range, for instance.
-/// This is an extension, available in uSTL.
-template <typename Container>
-inline pair<typename Container::iterator, typename Container::iterator>
-unconst (const pair<typename Container::const_iterator, typename Container::const_iterator>& i, Container& ctr)
-{
- assert (i.first >= ctr.begin() && i.first <= ctr.end() && "unconst algorithm must be given iterators from the argument container");
- pair<typename Container::iterator, typename Container::iterator> result;
- result.first = ctr.begin() + (i.first - ctr.begin());
- result.second = ctr.begin() + (i.second - ctr.begin());
- return (result);
-}
-
-//----{ vector }--------------------------------------------------------
-
-STD_TEMPLATE_CTR_STREAMABLE (TEMPLATE_TYPE1 (vector,T), TEMPLATE_DECL1 (T))
-
-template <typename T>
-inline size_t alignof (const vector<T>&)
-{
- typedef typename vector<T>::written_size_type written_size_type;
- return (alignof (written_size_type()));
-}
-
-//----{ bitset }--------------------------------------------------------
-
-/// Reads bitset \p v from stream \p is.
-template <size_t Size>
-inline istream& operator>> (istream& is, bitset<Size>& v)
-{
- return (nr_container_read (is, v));
-}
-
-/// Writes bitset \p v into stream \p os.
-template <size_t Size>
-inline ostream& operator<< (ostream& os, const bitset<Size>& v)
-{
- return (nr_container_write (os, v));
-}
-
-/// Writes bitset \p v into stream \p os.
-template <size_t Size>
-inline ostringstream& operator<< (ostringstream& os, const bitset<Size>& v)
-{
- return (os << v.to_string());
-}
-
-/// Writes bitset \p v into stream \p os.
-template <size_t Size>
-istringstream& operator>> (istringstream& is, bitset<Size>& v)
-{
- char c;
- for (int i = Size; --i >= 0 && (is >> c).good();)
- v.set (i, c == '1');
- return (is);
-}
-
-/// Returns the number of bytes necessary to write this object to a stream
-template <size_t Size>
-inline size_t stream_size_of (const bitset<Size>& v)
-{
- return (v.capacity() / CHAR_BIT);
-}
-
-//----{ tuple }---------------------------------------------------------
-
-STD_TEMPLATE_NR_CTR_STREAMABLE (
- TEMPLATE_TYPE2 (tuple,N,T),
- TEMPLATE_FULL_DECL2 (size_t,N,typename,T)
-)
-
-template <size_t N, typename T>
-struct numeric_limits<tuple<N,T> > {
- typedef numeric_limits<T> value_limits;
- static inline tuple<N,T> min (void) { tuple<N,T> v; fill (v, value_limits::min()); return (v); }
- static inline tuple<N,T> max (void) { tuple<N,T> v; fill (v, value_limits::max()); return (v); }
- static const bool is_signed = value_limits::is_signed;
- static const bool is_integer = value_limits::is_integer;
- static const bool is_integral = value_limits::is_integral;
-};
-
-template <size_t N, typename T>
-inline size_t alignof (const tuple<N,T>&) { return (alignof (T())); }
-
-template <typename T, typename IntT>
-inline ostringstream& chartype_text_write (ostringstream& os, const T& v)
-{
- if (isprint(v))
- os << '\'' << v << '\'';
- else
- os << (IntT)(v);
- return (os);
-}
-
-template <>
-inline ostringstream& container_element_text_write (ostringstream& os, const uint8_t& v)
-{ return (chartype_text_write<uint8_t, unsigned int> (os, v)); }
-template <>
-inline ostringstream& container_element_text_write (ostringstream& os, const int8_t& v)
-{ return (chartype_text_write<int8_t, int> (os, v)); }
-
-//----{ matrix }--------------------------------------------------------
-
-/// Writes tuple \p v into stream \p os.
-template <size_t NX, size_t NY, typename T>
-ostringstream& operator<< (ostringstream& os, const matrix<NX,NY,T>& v)
-{
- os << '(';
- for (uoff_t row = 0; row < NY; ++ row) {
- os << '(';
- for (uoff_t column = 0; column < NX; ++ column) {
- os << v[row][column];
- if (column < NX - 1)
- os << ',';
- }
- os << ')';
- }
- os << ')';
- return (os);
-}
-
-//----------------------------------------------------------------------
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-#ifndef WITHOUT_LIBSTDCPP
-
-/// \todo Need a better solution to getting the hash value.
-inline hashvalue_t hash_value (const string::const_pointer& v)
-{
- string::const_pointer first (v), last (v + strlen(v));
- hashvalue_t h = 0;
- // This has the bits flowing into each other from both sides of the number
- for (; first < last; ++ first)
- h = *first + ((h << 7) | (h >> BitsInType(hashvalue_t) - 7));
- return (h);
-}
-
-#endif
-#endif
-
-//----------------------------------------------------------------------
-
-} // namespace ustl
-
-// This is here because there really is no other place to put it.
-#if SIZE_OF_BOOL != SIZE_OF_CHAR
-// bool is a big type on some machines (like DEC Alpha), so it's written as a byte.
-ALIGNOF(bool, sizeof(uint8_t))
-#endif
-STD_STREAMABLE(cmemlink)
-STD_STREAMABLE(istream)
-STD_STREAMABLE(ostream)
-STD_STREAMABLE(string)
-STD_STREAMABLE(exception)
-STD_STREAMABLE(CBacktrace)
-TEXT_STREAMABLE(cmemlink)
-TEXT_STREAMABLE(istream)
-TEXT_STREAMABLE(ostream)
-TEXT_STREAMABLE(exception)
-TEXT_STREAMABLE(CBacktrace)
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ustack.h b/media/libdrm/mobile2/src/util/ustl-1.0/ustack.h
deleted file mode 100644
index c48e3b3..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ustack.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ustack.h
-//
-
-#ifndef USTACK_H_5242F5635322B2EC44A9AEE73022C6E9
-#define USTACK_H_5242F5635322B2EC44A9AEE73022C6E9
-
-namespace ustl {
-
-/// \class stack ustack.h ustl.h
-/// \ingroup Sequences
-///
-/// \brief Stack adapter to uSTL containers.
-///
-template <typename Sequence>
-class stack {
-public:
- typedef typename Sequence::value_type value_type;
- typedef typename Sequence::size_type size_type;
- typedef typename Sequence::difference_type difference_type;
- typedef typename Sequence::reference reference;
- typedef typename Sequence::const_reference const_reference;
- typedef typename Sequence::pointer pointer;
-public:
- inline stack (void) : m_Storage () { }
- explicit inline stack (const Sequence& s) : m_Storage (s) { }
- inline bool empty (void) const { return (m_Storage.empty()); }
- inline size_type size (void) const { return (m_Storage.size()); }
- inline reference top (void) { return (m_Storage.back()); }
- inline const_reference top (void) const { return (m_Storage.back()); }
- inline void push (const value_type& v) { m_Storage.push_back (v); }
- inline void pop (void) { m_Storage.pop_back(); }
- inline bool operator== (const stack& s) { return (m_Storage == s.m_Storage); }
- inline bool operator< (const stack& s) { return (m_Storage.size() < s.m_Storage.size()); }
-private:
- Sequence m_Storage; ///< Where the data actually is.
-};
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ustdxept.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/ustdxept.cpp
deleted file mode 100644
index ce731f7..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ustdxept.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ustdxept.cc
-//
-
-#include "ustdxept.h"
-#include "mistream.h"
-#include "mostream.h"
-#include "strmsize.h"
-#include "uiosfunc.h"
-#include "uspecial.h"
-
-namespace ustl {
-
-//----------------------------------------------------------------------
-
-/// \p arg contains a description of the error.
-error_message::error_message (const char* arg) throw()
-: m_Arg ()
-{
-#if PLATFORM_ANDROID
- m_Arg = arg;
-#else /* !PLATFORM_ANDROID */
- try { m_Arg = arg; } catch (...) {}
-#endif
- set_format (xfmt_ErrorMessage);
-}
-
-/// Virtual destructor
-error_message::~error_message (void) throw()
-{
-}
-
-/// Returns a descriptive error message. fmt="%s: %s"
-void error_message::info (string& msgbuf, const char* fmt) const throw()
-{
- if (!fmt) fmt = "%s: %s";
-#if PLATFORM_ANDROID
- msgbuf.format (fmt, what(), m_Arg.cdata());
-#else /* !PLATFORM_ANDROID */
- try { msgbuf.format (fmt, what(), m_Arg.cdata()); } catch (...) {}
-#endif
-}
-
-/// Reads the object from stream \p is.
-void error_message::read (istream& is)
-{
- exception::read (is);
- is >> m_Arg >> ios::align();
-}
-
-/// Writes the object to stream \p os.
-void error_message::write (ostream& os) const
-{
- exception::write (os);
- os << m_Arg << ios::align();
-}
-
-/// Returns the size of the written object.
-size_t error_message::stream_size (void) const
-{
- return (exception::stream_size() + Align (stream_size_of (m_Arg)));
-}
-
-//----------------------------------------------------------------------
-
-} // namespace ustl
-
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ustdxept.h b/media/libdrm/mobile2/src/util/ustl-1.0/ustdxept.h
deleted file mode 100644
index 4f50953..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ustdxept.h
+++ /dev/null
@@ -1,143 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ustdxept.h
-//
-
-#ifndef USTDXEPT_H_46F7AE967738B588038F95E41158D7FF
-#define USTDXEPT_H_46F7AE967738B588038F95E41158D7FF
-
-#include "uexception.h"
-#include "ustring.h"
-
-namespace ustl {
-
-enum {
- xfmt_ErrorMessage = 2,
- xfmt_LogicError = xfmt_ErrorMessage,
- xfmt_RuntimeError = xfmt_ErrorMessage
-};
-
-/// \class logic_error ustdxept.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Logic errors represent problems in the internal logic of the program.
-///
-class error_message : public exception {
-public:
- explicit error_message (const char* arg) throw();
- virtual ~error_message (void) throw();
- inline virtual const char* what (void) const throw() { return ("error"); }
- virtual void info (string& msgbuf, const char* fmt = NULL) const throw();
- virtual void read (istream& is);
- virtual void write (ostream& os) const;
- virtual size_t stream_size (void) const;
-protected:
- string m_Arg;
-};
-
-/// \class logic_error ustdxept.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Logic errors represent problems in the internal logic of the program.
-///
-class logic_error : public error_message {
-public:
- inline explicit logic_error (const char* arg) throw() : error_message (arg) {}
- inline virtual const char* what (void) const throw() { return ("logic error"); }
-};
-
-/// \class domain_error ustdxept.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Reports domain errors ("domain" is in the mathematical sense)
-///
-class domain_error : public logic_error {
-public:
- inline explicit domain_error (const char* arg) throw() : logic_error (arg) {}
- inline virtual const char* what (void) const throw() { return ("domain error"); }
-};
-
-/// \class invalid_argument ustdxept.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Reports an invalid argument to a function.
-///
-class invalid_argument : public logic_error {
-public:
- inline explicit invalid_argument (const char* arg) throw() : logic_error (arg) {}
- inline virtual const char* what (void) const throw() { return ("invalid argument"); }
-};
-
-/// \class length_error ustdxept.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Reports when an object exceeds its allowed size.
-///
-class length_error : public logic_error {
-public:
- inline explicit length_error (const char* arg) throw() : logic_error (arg) {}
- inline virtual const char* what (void) const throw() { return ("length error"); }
-};
-
-/// \class out_of_range ustdxept.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Reports arguments with values out of allowed range.
-///
-class out_of_range : public logic_error {
-public:
- inline explicit out_of_range (const char* arg) throw() : logic_error (arg) {}
- inline virtual const char* what (void) const throw() { return ("out of range"); }
-};
-
-/// \class runtime_error ustdxept.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Reports errors that are dependent on the data being processed.
-///
-class runtime_error : public error_message {
-public:
- inline explicit runtime_error (const char* arg) throw() : error_message (arg) {}
- inline virtual const char* what (void) const throw() { return ("runtime error"); }
-};
-
-/// \class range_error ustdxept.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Reports data that does not fall within the permitted range.
-///
-class range_error : public runtime_error {
-public:
- inline explicit range_error (const char* arg) throw() : runtime_error (arg) {}
- inline virtual const char* what (void) const throw() { return ("range error"); }
-};
-
-/// \class overflow_error ustdxept.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Reports arithmetic overflow.
-///
-class overflow_error : public runtime_error {
-public:
- inline explicit overflow_error (const char* arg) throw() : runtime_error (arg) {}
- inline virtual const char* what (void) const throw() { return ("overflow error"); }
-};
-
-/// \class underflow_error ustdxept.h ustl.h
-/// \ingroup Exceptions
-///
-/// \brief Reports arithmetic underflow.
-///
-class underflow_error : public runtime_error {
-public:
- inline explicit underflow_error (const char* arg) throw() : runtime_error (arg) {}
- inline virtual const char* what (void) const throw() { return ("underflow error"); }
-};
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ustl.tbff b/media/libdrm/mobile2/src/util/ustl-1.0/ustl.tbff
deleted file mode 100644
index b8ad374..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ustl.tbff
+++ /dev/null
@@ -1,84 +0,0 @@
-<!-- ANSI Standard fixed size types -->
-<type name=int8_t format=signedIntegral size=int8_t/>
-<type name=int16_t format=signedIntegral size=int16_t/>
-<type name=int32_t format=signedIntegral size=int32_t/>
-<type name=int64_t format=signedIntegral size=int64_t/>
-<type name=uint8_t format=integral size=int8_t/>
-<type name=uint16_t format=integral size=int16_t/>
-<type name=uint32_t format=integral size=int32_t/>
-<type name=uint64_t format=integral size=int64_t/>
-<type name=float format=float size=float/>
-<type name=double format=float size=double/>
-
-<!-- Standard types of variable size, these are machine specific -->
-<type name=int_least8_t format=signedIntegral size=int8_t/>
-<type name=int_least16_t format=signedIntegral size=int16_t/>
-<type name=int_least32_t format=signedIntegral size=int32_t/>
-<type name=int_least64_t format=signedIntegral size=int64_t/>
-<type name=uint_least8_t format=integral size=int8_t/>
-<type name=uint_least16_t format=integral size=int16_t/>
-<type name=uint_least32_t format=integral size=int32_t/>
-<type name=uint_least64_t format=integral size=int64_t/>
-<type name=int_fast8_t format=signedIntegral size=int8_t/>
-<type name=int_fast16_t format=signedIntegral size=int16_t/>
-<type name=int_fast32_t format=signedIntegral size=int32_t/>
-<type name=int_fast64_t format=signedIntegral size=int64_t/>
-<type name=uint_fast8_t format=integral size=int8_t/>
-<type name=uint_fast16_t format=integral size=int16_t/>
-<type name=uint_fast32_t format=integral size=int32_t/>
-<type name=uint_fast64_t format=integral size=int64_t/>
-<type name=intptr_t format=integral size=intptr_t/>
-<type name=uintptr_t format=integral size=intptr_t/>
-<type name=intmax_t format=integral size=intmax_t/>
-<type name=uintmax_t format=integral size=intmax_t/>
-
-<!-- Standard C++ variable size types, also machine specific -->
-<type name=wchar_t format=signedIntegral size=wchar_t/>
-<type name=size_t format=integral size=size_t/>
-<type name=char format=signedIntegral size=char/>
-<type name=short format=signedIntegral size=short/>
-<type name=int format=signedIntegral size=int/>
-<type name=long format=signedIntegral size=long/>
-<type name=longlong format=signedIntegral size=longlong/>
-<type name=u_char format=signedIntegral size=char/>
-<type name=u_short format=signedIntegral size=short/>
-<type name=u_int format=signedIntegral size=int/>
-<type name=u_long format=signedIntegral size=long/>
-<type name=u_longlong format=signedIntegral size=longlong/>
-
-<!-- libc types -->
-<type name=time_t format=signedIntegral size=time_t/>
-<type name=off_t format=signedIntegral size=off_t/>
-<type name=ptrdiff_t format=signedIntegral size=ptrdiff_t/>
-<type name=dev_t format=integral size=dev_t/>
-<type name=uid_t format=integral size=uid_t/>
-<type name=gid_t format=integral size=gid_t/>
-<type name=mode_t format=integral size=mode_t/>
-<type name=nlink_t format=integral size=nlink_t/>
-<type name=pid_t format=integral size=pid_t/>
-<type name=fsid_t format=integral size=fsid_t/>
-<type name=clock_t format=integral size=clock_t/>
-<type name=id_t format=integral size=id_t/>
-<type name=key_t format=integral size=key_t/>
-<type name=blksize_t format=integral size=blksize_t/>
-
-<!-- Types within the ustl library -->
-<type name=utf8 format=integral minSize="1" maxSize="8"/>
-<type name=auto format=unstructured id="AUTO"/>
-<namespace name=ustl>
- <type name=uoff_t extends=size_t/>
- <type name=cmemlink_ptr_t format=pointer/>
- <type name=memlink_ptr_t extends=cmemlink_ptr_t/>
- <type name=memblock_ptr_t extends=memlink_ptr_t/>
- <type name=cmemlink format=struct>
- <var name=data_size type=size_t />
- <var name=data format=unstructured size=data_size />
- </type>
- <type name=memlink extends=cmemlink />
- <type name=memblock extends=cmemlink />
- <type name=string extends=memblock>
- <var name=data_size type=utf8 />
- <var name=data format=array type=utf8 size=data_size />
- </type>
-</namespace>
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ustring.cpp b/media/libdrm/mobile2/src/util/ustl-1.0/ustring.cpp
deleted file mode 100644
index db87d34..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ustring.cpp
+++ /dev/null
@@ -1,425 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ustring.cpp
-//
-// STL basic_string equivalent functionality.
-//
-
-#include "uassert.h"
-#include "ustring.h"
-#include "mistream.h"
-#include "mostream.h"
-#include "ualgo.h"
-#include <stdio.h> // for vsnprintf (in string::format)
-
-#include "uassert.h"
-
-namespace ustl {
-
-//----------------------------------------------------------------------
-
-const uoff_t string::npos;
-const string::size_type string::size_Terminator;
-const string::value_type string::c_Terminator;
-const char string::empty_string[string::size_Terminator] = "";
-
-typedef utf8in_iterator<string::const_iterator> utf8icstring_iterator;
-typedef utf8in_iterator<string::iterator> utf8istring_iterator;
-typedef utf8out_iterator<string::iterator> utf8ostring_iterator;
-
-//----------------------------------------------------------------------
-
-/// Creates an empty string.
-string::string (void)
-: memblock ()
-{
- link (empty_string, 0U);
-}
-
-/// Assigns itself the value of string \p s
-string::string (const string& s)
-: memblock()
-{
- if (s.is_linked())
- link (s.c_str(), s.size());
- else
- assign (s);
-}
-
-/// Links to \p s
-string::string (const_pointer s)
-: memblock ()
-{
- if (!s)
- s = empty_string;
- link (s, strlen(s));
-}
-
-/// Creates a string of length \p n filled with character \p c.
-string::string (size_type n, value_type c)
-: memblock ()
-{
- resize (n);
- fill_n (begin(), n, c);
-}
-
-/// Resize the string to \p n characters. New space contents is undefined.
-void string::resize (size_type n)
-{
- memblock::resize (n);
- at(n) = c_Terminator;
-}
-
-/// Assigns itself the value of string \p s
-void string::assign (const_pointer s)
-{
- if (!s)
- s = empty_string;
- assign (s, strlen (s));
-}
-
-/// Assigns itself the value of string \p s of length \p len.
-void string::assign (const_pointer s, size_type len)
-{
- while (len && s[len - 1] == c_Terminator)
- -- len;
- resize (len);
- copy (s, len);
-}
-
-/// Appends to itself the value of string \p s of length \p len.
-void string::append (const_pointer s)
-{
- if (!s)
- s = empty_string;
- append (s, strlen (s));
-}
-
-/// Appends to itself the value of string \p s of length \p len.
-void string::append (const_pointer s, size_type len)
-{
- while (len && s[len - 1] == c_Terminator)
- -- len;
- resize (size() + len);
- copy_n (s, len, end() - len);
-}
-
-/// Appends to itself \p n characters of value \p c.
-void string::append (size_type n, value_type c)
-{
- resize (size() + n);
- fill_n (end() - n, n, c);
-}
-
-/// Copies into itself at offset \p start, the value of string \p p of length \p n.
-string::size_type string::copyto (pointer p, size_type n, const_iterator start) const
-{
- assert (p && n);
- if (!start)
- start = begin();
- const size_type btc = min(n - size_Terminator, size());
- copy_n (start, btc, p);
- p[btc] = c_Terminator;
- return (btc + size_Terminator);
-}
-
-/// Returns comparison value regarding string \p s.
-/// The return value is:
-/// \li 1 if this string is greater (by value, not length) than string \p s
-/// \li 0 if this string is equal to string \p s
-/// \li -1 if this string is less than string \p s
-///
-/*static*/ int string::compare (const_iterator first1, const_iterator last1, const_iterator first2, const_iterator last2)
-{
- assert (first1 <= last1 && (first2 <= last2 || !last2) && "Negative ranges result in memory allocation errors.");
- const size_type len1 = distance (first1, last1), len2 = distance (first2, last2);
- const int rvbylen = sign (int(len1 - len2));
- int rv = memcmp (first1, first2, min (len1, len2));
- return (rv ? rv : rvbylen);
-}
-
-/// Returns true if this string is equal to string \p s.
-bool string::operator== (const_pointer s) const
-{
- if (!s)
- s = empty_string;
- return (size() == strlen(s) && 0 == memcmp (c_str(), s, size()));
-}
-
-/// Returns the beginning of character \p i.
-string::iterator string::utf8_iat (uoff_t i)
-{
- utf8istring_iterator cfinder (begin());
- cfinder += i;
- return (cfinder.base());
-}
-
-/// Inserts wide character \p c at \p ip \p n times as a UTF-8 string.
-///
-/// \p ip is a character position, not a byte position, and must fall in
-/// the 0 through length() range.
-/// The first argument is not an iterator because it is rather difficult
-/// to get one. You'd have to use ((utf8begin() + n).base()) as the first
-/// argument, which is rather ugly. Besides, then this insert would be
-/// ambiguous with the regular character insert.
-///
-void string::insert (const uoff_t ip, wchar_t c, size_type n)
-{
- iterator ipp (utf8_iat (ip));
- ipp = iterator (memblock::insert (memblock::iterator(ipp), n * Utf8Bytes(c)));
- fill_n (utf8out (ipp), n, c);
- *end() = c_Terminator;
-}
-
-/// Inserts sequence of wide characters at \p ip.
-void string::insert (const uoff_t ip, const wchar_t* first, const wchar_t* last, const size_type n)
-{
- iterator ipp (utf8_iat (ip));
- size_type nti = distance (first, last), bti = 0;
- for (uoff_t i = 0; i < nti; ++ i)
- bti += Utf8Bytes(first[i]);
- ipp = iterator (memblock::insert (memblock::iterator(ipp), n * bti));
- utf8ostring_iterator uout (utf8out (ipp));
- for (uoff_t j = 0; j < n; ++ j)
- for (uoff_t k = 0; k < nti; ++ k, ++ uout)
- *uout = first[k];
- *end() = c_Terminator;
-}
-
-/// Inserts character \p c into this string at \p start.
-string::iterator string::insert (iterator start, const_reference c, size_type n)
-{
- start = iterator (memblock::insert (memblock::iterator(start), n));
- fill_n (start, n, c);
- *end() = c_Terminator;
- return (start);
-}
-
-/// Inserts \p count instances of string \p s at offset \p start.
-string::iterator string::insert (iterator start, const_pointer s, size_type n)
-{
- if (!s)
- s = empty_string;
- return (insert (start, s, s + strlen(s), n));
-}
-
-/// Inserts [first,last] \p n times.
-string::iterator string::insert (iterator start, const_pointer first, const_pointer last, size_type n)
-{
- assert (first <= last);
- assert (begin() <= start && end() >= start);
- assert ((first < begin() || first >= end() || size() + abs_distance(first,last) < capacity()) && "Insertion of self with autoresize is not supported");
- start = iterator (memblock::insert (memblock::iterator(start), distance(first, last) * n));
- fill (memblock::iterator(start), first, distance(first, last), n);
- *end() = c_Terminator;
- return (start);
-}
-
-/// Erases \p size bytes at \p start.
-string::iterator string::erase (iterator ep, size_type n)
-{
- string::iterator rv = memblock::erase (memblock::iterator(ep), n);
- *end() = c_Terminator;
- return (rv);
-}
-
-/// Erases \p size characters at \p start.
-/// \p start is a character position, not a byte position, and must be
-/// in the 0..length() range.
-///
-void string::erase (uoff_t ep, size_type n)
-{
- iterator first (utf8_iat(ep));
- size_t nbytes (utf8_iat(ep + n) - first);
- memblock::erase (first, nbytes);
- *end() = c_Terminator;
-}
-
-/// Replaces range [\p start, \p start + \p len] with string \p s.
-void string::replace (iterator first, iterator last, const_pointer s)
-{
- if (!s)
- s = empty_string;
- replace (first, last, s, s + strlen(s));
-}
-
-/// Replaces range [\p start, \p start + \p len] with \p count instances of string \p s.
-void string::replace (iterator first, iterator last, const_pointer i1, const_pointer i2, size_type n)
-{
- assert (first <= last);
- assert (n || distance(first, last));
- assert (first >= begin() && first <= end() && last >= first && last <= end());
- assert ((i1 < begin() || i1 >= end() || abs_distance(i1,i2) * n + size() < capacity()) && "Replacement by self can not autoresize");
- const size_type bte = distance(first, last), bti = distance(i1, i2) * n;
- if (bti < bte)
- first = iterator (memblock::erase (memblock::iterator(first), bte - bti));
- else if (bte < bti)
- first = iterator (memblock::insert (memblock::iterator(first), bti - bte));
- fill (memblock::iterator(first), i1, distance(i1, i2), n);
- *end() = c_Terminator;
-}
-
-/// Returns the offset of the first occurence of \p c after \p pos.
-uoff_t string::find (const_reference c, uoff_t pos) const
-{
- const_iterator found = ::ustl::find (iat(pos), end(), c);
- return (found < end() ? distance(begin(),found) : npos);
-}
-
-/// Returns the offset of the first occurence of substring \p s of length \p n after \p pos.
-uoff_t string::find (const string& s, uoff_t pos) const
-{
- if (s.empty() || s.size() > size() - pos)
- return (npos);
- const uoff_t endi = s.size() - 1;
- const_reference endchar = s[endi];
- uoff_t lastPos = endi;
- while (lastPos-- && s[lastPos] != endchar);
- const size_type skip = endi - lastPos;
- const_iterator i = iat(pos) + endi;
- for (; i < end() && (i = ::ustl::find (i, end(), endchar)) < end(); i += skip)
- if (memcmp (i - endi, s.c_str(), s.size()) == 0)
- return (distance (begin(), i) - endi);
- return (npos);
-}
-
-/// Returns the offset of the last occurence of character \p c before \p pos.
-uoff_t string::rfind (const_reference c, uoff_t pos) const
-{
- for (int i = min(pos,size()-1); i >= 0; --i)
- if (at(i) == c)
- return (i);
- return (npos);
-}
-
-/// Returns the offset of the last occurence of substring \p s of size \p n before \p pos.
-uoff_t string::rfind (const string& s, uoff_t pos) const
-{
- const_iterator d = iat(pos) - 1;
- const_iterator sp = begin() + s.size() - 1;
- const_iterator m = s.end() - 1;
- for (uoff_t i = 0; d > sp && i < s.size(); -- d)
- for (i = 0; i < s.size(); ++ i)
- if (m[-i] != d[-i])
- break;
- return (d > sp ? distance (begin(), d + 2 - s.size()) : npos);
-}
-
-/// Returns the offset of the first occurence of one of characters in \p s of size \p n after \p pos.
-uoff_t string::find_first_of (const string& s, uoff_t pos) const
-{
- for (uoff_t i = min(pos,size()); i < size(); ++ i)
- if (s.find (at(i)) != npos)
- return (i);
- return (npos);
-}
-
-/// Returns the offset of the first occurence of one of characters not in \p s of size \p n after \p pos.
-uoff_t string::find_first_not_of (const string& s, uoff_t pos) const
-{
- for (uoff_t i = min(pos,size()); i < size(); ++ i)
- if (s.find (at(i)) == npos)
- return (i);
- return (npos);
-}
-
-/// Returns the offset of the last occurence of one of characters in \p s of size \p n before \p pos.
-uoff_t string::find_last_of (const string& s, uoff_t pos) const
-{
- for (int i = min(pos,size()-1); i >= 0; -- i)
- if (s.find (at(i)) != npos)
- return (i);
- return (npos);
-}
-
-/// Returns the offset of the last occurence of one of characters not in \p s of size \p n before \p pos.
-uoff_t string::find_last_not_of (const string& s, uoff_t pos) const
-{
- for (int i = min(pos,size()-1); i >= 0; -- i)
- if (s.find (at(i)) == npos)
- return (i);
- return (npos);
-}
-
-/// Equivalent to a vsprintf on the string.
-int string::vformat (const char* fmt, va_list args)
-{
-#if HAVE_VA_COPY
- va_list args2;
-#else
- #define args2 args
- #undef __va_copy
- #define __va_copy(x,y)
-#endif
- size_t rv = size();
- do {
- reserve (rv);
- __va_copy (args2, args);
- rv = vsnprintf (data(), memblock::capacity(), fmt, args2);
- rv = min (rv, memblock::capacity());
- } while (rv > capacity());
- resize (min (rv, capacity()));
- return (rv);
-}
-
-/// Equivalent to a sprintf on the string.
-int string::format (const char* fmt, ...)
-{
- va_list args;
- va_start (args, fmt);
- const int rv = vformat (fmt, args);
- va_end (args);
- return (rv);
-}
-
-/// Returns the number of bytes required to write this object to a stream.
-size_t string::stream_size (void) const
-{
- return (Utf8Bytes(size()) + size());
-}
-
-/// Reads the object from stream \p os
-void string::read (istream& is)
-{
- char szbuf [8];
- is >> szbuf[0];
- size_t szsz (Utf8SequenceBytes (szbuf[0]) - 1), n = 0;
- is.verify_remaining ("read", "ustl::string", szsz);
- is.read (szbuf + 1, szsz);
- n = *utf8in(szbuf);
- is.verify_remaining ("read", "ustl::string", n);
- resize (n);
- is.read (data(), size());
-}
-
-/// Writes the object to stream \p os
-void string::write (ostream& os) const
-{
- const written_size_type sz (size());
- assert (sz == size() && "No support for writing strings larger than 4G");
-
- char szbuf [8];
- utf8out_iterator<char*> szout (szbuf);
- *szout = sz;
- size_t szsz = distance (szbuf, szout.base());
-
- os.verify_remaining ("write", "ustl::string", szsz + sz);
- os.write (szbuf, szsz);
- os.write (cdata(), sz);
-}
-
-/// Returns a hash value for [first, last)
-/*static*/ hashvalue_t string::hash (const char* first, const char* last)
-{
- hashvalue_t h = 0;
- // This has the bits flowing into each other from both sides of the number
- for (; first < last; ++ first)
- h = *first + ((h << 7) | (h >> BitsInType(hashvalue_t) - 7));
- return (h);
-}
-
-} // namespace ustl
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/ustring.h b/media/libdrm/mobile2/src/util/ustl-1.0/ustring.h
deleted file mode 100644
index 9ecf6e7..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/ustring.h
+++ /dev/null
@@ -1,263 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// ustring.h
-//
-
-#ifndef USTRING_H_1249CB7A098A9010763AAC6D37B133CF
-#define USTRING_H_1249CB7A098A9010763AAC6D37B133CF
-
-#include "memblock.h"
-#include "utf8.h"
-#include <stdarg.h> // for va_list, va_start, and va_end (in string::format)
-
-namespace ustl {
-
-/// \class string ustring.h ustl.h
-/// \ingroup Sequences
-///
-/// \brief STL basic_string&lt;char&gt; equivalent.
-///
-/// An STL container for text string manipulation.
-/// Differences from C++ standard:
-/// - string is a class, not a template. Wide characters are assumed to be
-/// encoded with utf8 at all times except when rendering or editing,
-/// where you would use a utf8 iterator.
-/// - format member function - you can, of course use an \ref ostringstream,
-/// which also have format functions, but most of the time this way
-/// is more convenient. Because uSTL does not implement locales,
-/// format is the only way to create localized strings.
-/// - const char* cast operator. It is much clearer to use this than having
-/// to type .c_str() every time.
-/// - length returns the number of _characters_, not bytes.
-/// This function is O(N), so use wisely.
-///
-class string : public memblock {
-public:
- typedef char value_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
- typedef wchar_t wvalue_type;
- typedef wvalue_type* wpointer;
- typedef const wvalue_type* const_wpointer;
- typedef pointer iterator;
- typedef const_pointer const_iterator;
- typedef value_type& reference;
- typedef value_type const_reference;
- typedef ::ustl::reverse_iterator<iterator> reverse_iterator;
- typedef ::ustl::reverse_iterator<const_iterator> const_reverse_iterator;
- typedef utf8in_iterator<const_iterator> utf8_iterator;
-public:
- static const uoff_t npos = static_cast<uoff_t>(-1); ///< Value that means the end of string.
- static const value_type c_Terminator = 0; ///< String terminator
- static const size_type size_Terminator = sizeof(c_Terminator); ///< Most systems terminate strings with '\\0'
- static const char empty_string [size_Terminator]; ///< An empty string.
-public:
- string (void);
- string (const string& s);
- inline string (const string& s, uoff_t o, size_type n);
- inline explicit string (const cmemlink& l);
- string (const_pointer s);
- inline string (const_pointer s, size_type len);
- inline string (const_pointer s1, const_pointer s2);
- explicit string (size_type n, value_type c = c_Terminator);
- inline pointer data (void) { return (string::pointer (memblock::data())); }
- inline const_pointer c_str (void) const { return (string::const_pointer (memblock::cdata())); }
- inline size_type max_size (void) const { size_type s (memblock::max_size()); return (s - !!s); }
- inline size_type capacity (void) const { size_type c (memblock::capacity()); return (c - !!c); }
- void resize (size_type n);
- inline void clear (void) { resize (0); }
- inline const_iterator begin (void) const { return (const_iterator (memblock::begin())); }
- inline iterator begin (void) { return (iterator (memblock::begin())); }
- inline const_iterator end (void) const { return (const_iterator (memblock::end())); }
- inline iterator end (void) { return (iterator (memblock::end())); }
- inline const_reverse_iterator rbegin (void) const { return (const_reverse_iterator (end())); }
- inline reverse_iterator rbegin (void) { return (reverse_iterator (end())); }
- inline const_reverse_iterator rend (void) const { return (const_reverse_iterator (begin())); }
- inline reverse_iterator rend (void) { return (reverse_iterator (begin())); }
- inline utf8_iterator utf8_begin (void) const { return (utf8_iterator (begin())); }
- inline utf8_iterator utf8_end (void) const { return (utf8_iterator (end())); }
- inline const_reference at (uoff_t pos) const { assert (pos <= size() && begin()); return (begin()[pos]); }
- inline reference at (uoff_t pos) { assert (pos <= size() && begin()); return (begin()[pos]); }
- inline const_iterator iat (uoff_t pos) const { return (begin() + min (pos, size())); }
- inline iterator iat (uoff_t pos) { return (begin() + min (pos, size())); }
- inline size_type length (void) const { return (distance (utf8_begin(), utf8_end())); }
- inline void append (const_iterator i1, const_iterator i2) { append (i1, distance (i1, i2)); }
- void append (const_pointer s, size_type len);
- void append (const_pointer s);
- void append (size_type n, const_reference c);
- inline void append (size_type n, wvalue_type c) { insert (size(), c, n); }
- inline void append (const_wpointer s1, const_wpointer s2) { insert (size(), s1, s2); }
- inline void append (const_wpointer s) { const_wpointer se (s); for (;se&&*se;++se); append (s, se); }
- inline void append (const string& s) { append (s.begin(), s.end()); }
- inline void append (const string& s, uoff_t o, size_type n) { append (s.iat(o), s.iat(o+n)); }
- inline void assign (const_iterator i1, const_iterator i2) { assign (i1, distance (i1, i2)); }
- void assign (const_pointer s, size_type len);
- void assign (const_pointer s);
- inline void assign (const_wpointer s1, const_wpointer s2) { clear(); append (s1, s2); }
- inline void assign (const_wpointer s1) { clear(); append (s1); }
- inline void assign (const string& s) { assign (s.begin(), s.end()); }
- inline void assign (const string& s, uoff_t o, size_type n) { assign (s.iat(o), s.iat(o+n)); }
- size_type copyto (pointer p, size_type n, const_iterator start = NULL) const;
- inline int compare (const string& s) const { return (compare (begin(), end(), s.begin(), s.end())); }
- inline int compare (const_pointer s) const { return (compare (begin(), end(), s, s + strlen(s))); }
- static int compare (const_iterator first1, const_iterator last1, const_iterator first2, const_iterator last2);
- inline operator const value_type* (void) const;
- inline operator value_type* (void);
- inline const string& operator= (const string& s) { assign (s.begin(), s.end()); return (*this); }
- inline const string& operator= (const_reference c) { assign (&c, 1); return (*this); }
- inline const string& operator= (const_pointer s) { assign (s); return (*this); }
- inline const string& operator= (const_wpointer s) { assign (s); return (*this); }
- inline const string& operator+= (const string& s) { append (s.begin(), s.size()); return (*this); }
- inline const string& operator+= (const_reference c) { append (1, c); return (*this); }
- inline const string& operator+= (const_pointer s) { append (s); return (*this); }
- inline const string& operator+= (wvalue_type c) { append (1, c); return (*this); }
- inline const string& operator+= (const_wpointer s) { append (s); return (*this); }
- inline string operator+ (const string& s) const;
- inline bool operator== (const string& s) const { return (memblock::operator== (s)); }
- bool operator== (const_pointer s) const;
- inline bool operator== (const_reference c) const { return (size() == 1 && c == at(0)); }
- inline bool operator!= (const string& s) const { return (!operator== (s)); }
- inline bool operator!= (const_pointer s) const { return (!operator== (s)); }
- inline bool operator!= (const_reference c) const { return (!operator== (c)); }
- inline bool operator< (const string& s) const { return (0 > compare (s)); }
- inline bool operator< (const_pointer s) const { return (0 > compare (s)); }
- inline bool operator< (const_reference c) const { return (0 > compare (begin(), end(), &c, &c + 1)); }
- inline bool operator> (const_pointer s) const { return (0 < compare (s)); }
- void insert (const uoff_t ip, wvalue_type c, size_type n = 1);
- void insert (const uoff_t ip, const_wpointer first, const_wpointer last, const size_type n = 1);
- iterator insert (iterator start, const_reference c, size_type n = 1);
- iterator insert (iterator start, const_pointer s, size_type n = 1);
- iterator insert (iterator start, const_pointer first, const_iterator last, size_type n = 1);
- inline void insert (uoff_t ip, const_pointer s, size_type nlen) { insert (iat(ip), s, s + nlen); }
- inline void insert (uoff_t ip, size_type n, value_type c) { insert (iat(ip), c, n); }
- inline void insert (uoff_t ip, const string& s, uoff_t sp, size_type slen) { insert (iat(ip), s.iat(sp), s.iat(sp + slen)); }
- iterator erase (iterator start, size_type size = 1);
- void erase (uoff_t start, size_type size = 1);
- inline iterator erase (iterator first, const_iterator last) { return (erase (first, size_type(distance(first,last)))); }
- OVERLOAD_POINTER_AND_SIZE_T_V2(erase, iterator)
- inline void push_back (const_reference c) { append (1, c); }
- inline void push_back (wvalue_type c) { append (1, c); }
- inline void pop_back (void) { resize (size() - 1); }
- void replace (iterator first, iterator last, const_pointer s);
- void replace (iterator first, iterator last, const_pointer i1, const_pointer i2, size_type n = 1);
- inline void replace (iterator first, iterator last, const string& s) { replace (first, last, s.begin(), s.end()); }
- inline void replace (iterator first, iterator last, const_pointer s, size_type slen) { replace (first, last, s, s + slen); }
- inline void replace (iterator first, iterator last, size_type n, value_type c) { replace (first, last, &c, &c + 1, n); }
- inline void replace (uoff_t rp, size_type n, const string& s) { replace (iat(rp), iat(rp + n), s); }
- inline void replace (uoff_t rp, size_type n, const string& s, uoff_t sp, size_type slen) { replace (iat(rp), iat(rp + n), s.iat(sp), s.iat(sp + slen)); }
- inline void replace (uoff_t rp, size_type n, const_pointer s, size_type slen) { replace (iat(rp), iat(rp + n), s, s + slen); }
- inline void replace (uoff_t rp, size_type n, const_pointer s) { replace (iat(rp), iat(rp + n), string(s)); }
- inline void replace (uoff_t rp, size_type n, size_type count, value_type c) { replace (iat(rp), iat(rp + n), count, c); }
- inline string substr (uoff_t o, size_type n) const { return (string (*this, o, n)); }
- uoff_t find (const_reference c, uoff_t pos = 0) const;
- uoff_t find (const string& s, uoff_t pos = 0) const;
- uoff_t rfind (const_reference c, uoff_t pos = npos) const;
- uoff_t rfind (const string& s, uoff_t pos = npos) const;
- uoff_t find_first_of (const string& s, uoff_t pos = 0) const;
- uoff_t find_first_not_of (const string& s, uoff_t pos = 0) const;
- uoff_t find_last_of (const string& s, uoff_t pos = npos) const;
- uoff_t find_last_not_of (const string& s, uoff_t pos = npos) const;
- int vformat (const char* fmt, va_list args);
- int format (const char* fmt, ...) __attribute__((__format__(__printf__, 2, 3)));
- void read (istream&);
- void write (ostream& os) const;
- size_t stream_size (void) const;
- static hashvalue_t hash (const char* f1, const char* l1);
-private:
- DLL_LOCAL iterator utf8_iat (uoff_t i);
-protected:
- inline virtual size_type minimumFreeCapacity (void) const { return (size_Terminator); }
-};
-
-//----------------------------------------------------------------------
-
-/// Assigns itself the value of string \p s
-inline string::string (const cmemlink& s)
-: memblock ()
-{
- assign (const_iterator (s.begin()), s.size());
-}
-
-/// Assigns itself a [o,o+n) substring of \p s.
-inline string::string (const string& s, uoff_t o, size_type n)
-: memblock()
-{
- assign (s, o, n);
-}
-
-/// Copies the value of \p s of length \p len into itself.
-inline string::string (const_pointer s, size_type len)
-: memblock ()
-{
- assign (s, len);
-}
-
-/// Copies into itself the string data between \p s1 and \p s2
-inline string::string (const_pointer s1, const_pointer s2)
-: memblock ()
-{
- assert (s1 <= s2 && "Negative ranges result in memory allocation errors.");
- assign (s1, s2);
-}
-
-/// Returns the pointer to the first character.
-inline string::operator const string::value_type* (void) const
-{
- assert ((!end() || *end() == c_Terminator) && "This string is linked to data that is not 0-terminated. This may cause serious security problems. Please assign the data instead of linking.");
- return (begin());
-}
-
-/// Returns the pointer to the first character.
-inline string::operator string::value_type* (void)
-{
- assert ((end() && *end() == c_Terminator) && "This string is linked to data that is not 0-terminated. This may cause serious security problems. Please assign the data instead of linking.");
- return (begin());
-}
-
-/// Concatenates itself with \p s
-inline string string::operator+ (const string& s) const
-{
- string result (*this);
- result += s;
- return (result);
-}
-
-//----------------------------------------------------------------------
-// Operators needed to avoid comparing pointer to pointer
-
-#define PTR_STRING_CMP(op, impl) \
-inline bool op (const char* s1, const string& s2) { return impl; }
-PTR_STRING_CMP (operator==, (s2 == s1))
-PTR_STRING_CMP (operator!=, (s2 != s1))
-PTR_STRING_CMP (operator<, (s2 > s1))
-PTR_STRING_CMP (operator<=, (s2 >= s1))
-PTR_STRING_CMP (operator>, (s2 < s1))
-PTR_STRING_CMP (operator>=, (s2 <= s1))
-#undef PTR_STRING_CMP
-
-//----------------------------------------------------------------------
-
-template <typename T>
-inline hashvalue_t hash_value (const T& v)
-{ return (string::hash (v.begin(), v.end())); }
-
-template <>
-inline hashvalue_t hash_value (const string::const_pointer& v)
-{ return (string::hash (v, v + strlen(v))); }
-
-template <>
-inline hashvalue_t hash_value (const string::pointer& v)
-{ return (string::hash (v, v + strlen(v))); }
-
-//----------------------------------------------------------------------
-
-} // namespace ustl
-
-// Specialization for stream alignment
-ALIGNOF (ustl::string, alignof (string::value_type()))
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/utf8.h b/media/libdrm/mobile2/src/util/ustl-1.0/utf8.h
deleted file mode 100644
index f829e7d..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/utf8.h
+++ /dev/null
@@ -1,200 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// utf8.h
-//
-// This file contains stream iterators that read and write UTF-8 encoded
-// characters. The encoding is defined as follows:
-//
-// U-00000000 - U-0000007F: 0xxxxxxx
-// U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
-// U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
-// U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
-// U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-// U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-// U-80000000 - U-FFFFFFFF: 11111110 100000xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-//
-// The last range in not in the UTF-8 standard because Unicode forbids
-// characters of those values. However, since ustl::string uses this code
-// to write its length, the support is here. The reason it was put here
-// in the first place, is that extra code would have been necessary to
-// flag that range as invalid.
-//
-#ifndef UTF8_H_3D7AEEEB3A88928D4D280B785F78B6F4
-#define UTF8_H_3D7AEEEB3A88928D4D280B785F78B6F4
-
-#include "uiterator.h"
-
-namespace ustl {
-
-//----------------------------------------------------------------------
-
-typedef uint8_t utf8subchar_t; ///< Type for the encoding subcharacters.
-
-//----------------------------------------------------------------------
-
-/// Returns the number of bytes required to UTF-8 encode \p v.
-inline size_t Utf8Bytes (wchar_t v)
-{
- static const uint32_t c_Bounds[] = { 0x0000007F, 0x000007FF, 0x0000FFFF, 0x001FFFFF, 0x03FFFFFF, 0x7FFFFFFF, 0xFFFFFFFF, };
- size_t bi = 0;
- while (c_Bounds[bi++] < uint32_t(v));
- return (bi);
-}
-
-/// Returns the number of bytes in a UTF-8 sequence that starts with \p c.
-inline size_t Utf8SequenceBytes (wchar_t c) // a wchar_t to keep c in a full register
-{
- // Count the leading bits. Header bits are 1 * nBytes followed by a 0.
- // 0 - single byte character. Take 7 bits (0xFF >> 1)
- // 1 - error, in the middle of the character. Take 6 bits (0xFF >> 2)
- // so you will keep reading invalid entries until you hit the next character.
- // >2 - multibyte character. Take remaining bits, and get the next bytes.
- // All errors are ignored, since the user can not correct them.
- //
- wchar_t mask = 0x80;
- size_t nBytes = 0;
- for (; c & mask; ++nBytes)
- mask >>= 1;
- return (nBytes ? nBytes : 1); // A sequence is always at least 1 byte.
-}
-
-//----------------------------------------------------------------------
-
-/// \class utf8in_iterator utf8.h ustl.h
-/// \ingroup IteratorAdaptors
-///
-/// \brief An iterator adaptor to character containers for reading UTF-8 encoded text.
-///
-/// For example, you can copy from ustl::string to ustl::vector<wchar_t> with
-/// copy (utf8in (str.begin()), utf8in (str.end()), back_inserter(wvect));
-/// There is no error handling; if the reading frame slips you'll get extra
-/// characters, one for every misaligned byte. Although it is possible to skip
-/// to the start of the next character, that would result in omitting the
-/// misformatted character and the one after it, making it very difficult to
-/// detect by the user. It is better to write some strange characters and let
-/// the user know his file is corrupted. Another problem is overflow on bad
-/// encodings (like a 0xFF on the end of a string). This is checked through
-/// the end-of-string nul character, which will always be there as long as
-/// you are using the string class.
-///
-template <typename Iterator, typename WChar = wchar_t>
-class utf8in_iterator {
-public:
- typedef typename iterator_traits<Iterator>::value_type value_type;
- typedef typename iterator_traits<Iterator>::difference_type difference_type;
- typedef typename iterator_traits<Iterator>::pointer pointer;
- typedef typename iterator_traits<Iterator>::reference reference;
-public:
- explicit utf8in_iterator (const Iterator& is) : m_i (is), m_v (0) { Read(); }
- utf8in_iterator (const utf8in_iterator& i) : m_i (i.m_i), m_v (i.m_v) {}
- inline const utf8in_iterator& operator= (const utf8in_iterator& i) { m_i = i.m_i; m_v = i.m_v; return (*this); }
- inline Iterator base (void) const { return (m_i - (Utf8Bytes(m_v) - 1)); }
- /// Reads and returns the next value.
- inline WChar operator* (void) const { return (m_v); }
- inline utf8in_iterator& operator++ (void) { ++m_i; Read(); return (*this); }
- inline utf8in_iterator operator++ (int) { utf8in_iterator old (*this); operator++(); return (old); }
- inline utf8in_iterator& operator+= (uoff_t n) { while (n--) operator++(); return (*this); }
- inline utf8in_iterator operator+ (uoff_t n) { utf8in_iterator v (*this); return (v += n); }
- inline bool operator== (const utf8in_iterator& i) const { return (m_i == i.m_i); }
- inline bool operator< (const utf8in_iterator& i) const { return (m_i < i.m_i); }
- difference_type operator- (const utf8in_iterator& i) const;
-private:
- void Read (void);
-private:
- Iterator m_i;
- WChar m_v;
-};
-
-/// Steps to the next character and updates current returnable value.
-template <typename Iterator, typename WChar>
-void utf8in_iterator<Iterator,WChar>::Read (void)
-{
- const utf8subchar_t c = *m_i;
- size_t nBytes = Utf8SequenceBytes (c);
- m_v = c & (0xFF >> nBytes); // First byte contains bits after the header.
- while (--nBytes && *++m_i) // Each subsequent byte has 6 bits.
- m_v = (m_v << 6) | (*m_i & 0x3F);
-}
-
-/// Returns the distance in characters (as opposed to the distance in bytes).
-template <typename Iterator, typename WChar>
-typename utf8in_iterator<Iterator,WChar>::difference_type
-utf8in_iterator<Iterator,WChar>::operator- (const utf8in_iterator<Iterator,WChar>& last) const
-{
- difference_type dist = 0;
- for (Iterator first (last.m_i); first < m_i; ++dist)
- first = advance (first, Utf8SequenceBytes (*first));
- return (dist);
-}
-
-//----------------------------------------------------------------------
-
-/// \class utf8out_iterator utf8.h ustl.h
-/// \ingroup IteratorAdaptors
-///
-/// \brief An iterator adaptor to character containers for writing UTF-8 encoded text.
-///
-template <typename Iterator, typename WChar = wchar_t>
-class utf8out_iterator {
-public:
- typedef typename iterator_traits<Iterator>::value_type value_type;
- typedef typename iterator_traits<Iterator>::difference_type difference_type;
- typedef typename iterator_traits<Iterator>::pointer pointer;
- typedef typename iterator_traits<Iterator>::reference reference;
-public:
- explicit utf8out_iterator (const Iterator& os) : m_i (os) {}
- utf8out_iterator (const utf8out_iterator& i) : m_i (i.m_i) {}
- inline const Iterator& base (void) const { return (m_i); }
- /// Writes \p v into the stream.
- utf8out_iterator& operator= (WChar v);
- inline utf8out_iterator& operator* (void) { return (*this); }
- inline utf8out_iterator& operator++ (void) { return (*this); }
- inline utf8out_iterator operator++ (int) { return (*this); }
- inline bool operator== (const utf8out_iterator& i) const { return (m_i == i.m_i); }
- inline bool operator< (const utf8out_iterator& i) const { return (m_i < i.m_i); }
-private:
- Iterator m_i;
-};
-
-/// Writes \p v into the stream.
-template <typename Iterator, typename WChar>
-utf8out_iterator<Iterator,WChar>& utf8out_iterator<Iterator,WChar>::operator= (WChar v)
-{
- const size_t nBytes = Utf8Bytes (v);
- if (nBytes > 1) {
- // Write the bits 6 bits at a time, except for the first one,
- // which may be less than 6 bits.
- register wchar_t shift = nBytes * 6;
- *m_i++ = ((v >> (shift -= 6)) & 0x3F) | (0xFF << (8 - nBytes));
- while (shift)
- *m_i++ = ((v >> (shift -= 6)) & 0x3F) | 0x80;
- } else // If only one byte, there is no header.
- *m_i++ = v;
- return (*this);
-}
-
-//----------------------------------------------------------------------
-
-/// Returns a UTF-8 adaptor writing to \p i. Useful in conjuction with back_insert_iterator.
-template <typename Iterator>
-inline utf8out_iterator<Iterator> utf8out (Iterator i)
-{
- return (utf8out_iterator<Iterator> (i));
-}
-
-/// Returns a UTF-8 adaptor reading from \p i.
-template <typename Iterator>
-inline utf8in_iterator<Iterator> utf8in (Iterator i)
-{
- return (utf8in_iterator<Iterator> (i));
-}
-
-//----------------------------------------------------------------------
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/utuple.h b/media/libdrm/mobile2/src/util/ustl-1.0/utuple.h
deleted file mode 100644
index 8a003ab..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/utuple.h
+++ /dev/null
@@ -1,247 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// utuple.h
-//
-
-#ifndef UTUPLE_H_7324ADEC49B397CA74A56F6050FD5A6B
-#define UTUPLE_H_7324ADEC49B397CA74A56F6050FD5A6B
-
-#include "ualgo.h"
-
-#if PLATFORM_ANDROID
-#undef CPU_HAS_MMX
-#endif
-
-namespace ustl {
-
-/// \class tuple utuple.h ustl.h
-/// \ingroup Sequences
-///
-/// \brief A fixed-size array of \p N \p Ts.
-///
-template <size_t N, typename T>
-class tuple {
-public:
- typedef T value_type;
- typedef size_t size_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef pointer iterator;
- typedef const_pointer const_iterator;
- typedef ::ustl::reverse_iterator<iterator> reverse_iterator;
- typedef ::ustl::reverse_iterator<const_iterator> const_reverse_iterator;
- typedef pair<iterator,iterator> range_t;
- typedef pair<const_iterator,const_iterator> const_range_t;
-public:
- template <typename T2>
- inline tuple (const tuple<N,T2>& t);
- inline tuple (const tuple<N,T>& t);
- inline tuple (const_pointer v);
- inline tuple (void) { for (uoff_t i = 0; i < N; ++ i) m_v[i] = T(); }
- explicit inline tuple (const_reference v0, const_reference v1 = T(), const_reference v2 = T(), const_reference v3 = T());
- inline iterator begin (void) { return (m_v); }
- inline const_iterator begin (void) const { return (m_v); }
- inline iterator end (void) { return (begin() + N); }
- inline const_iterator end (void) const { return (begin() + N); }
- inline size_type size (void) const { return (N); }
- inline size_type max_size (void) const { return (N); }
- inline bool empty (void) const { return (N == 0); }
- inline const_reference at (size_type i) const { return (m_v[i]); }
- inline reference at (size_type i) { return (m_v[i]); }
- inline const_reference operator[] (size_type i) const { return (m_v[i]); }
- inline reference operator[] (size_type i) { return (m_v[i]); }
- template <typename T2>
- inline const tuple& operator= (const tuple<N,T2>& src);
- inline const tuple& operator= (const tuple<N,T>& src);
- inline const tuple& operator+= (const_reference v)
- { for (uoff_t i = 0; i < N; ++ i) m_v[i] += v; return (*this); }
- inline const tuple& operator-= (const_reference v)
- { for (uoff_t i = 0; i < N; ++ i) m_v[i] -= v; return (*this); }
- inline const tuple& operator*= (const_reference v)
- { for (uoff_t i = 0; i < N; ++ i) m_v[i] *= v; return (*this); }
- inline const tuple& operator/= (const_reference v)
- { for (uoff_t i = 0; i < N; ++ i) m_v[i] /= v; return (*this); }
- inline const tuple operator+ (const_reference v) const
- { tuple result; for (uoff_t i = 0; i < N; ++ i) result[i] = m_v[i] + v; return (result); }
- inline const tuple operator- (const_reference v) const
- { tuple result; for (uoff_t i = 0; i < N; ++ i) result[i] = m_v[i] - v; return (result); }
- inline const tuple operator* (const_reference v) const
- { tuple result; for (uoff_t i = 0; i < N; ++ i) result[i] = m_v[i] * v; return (result); }
- inline const tuple operator/ (const_reference v) const
- { tuple result; for (uoff_t i = 0; i < N; ++ i) result[i] = m_v[i] / v; return (result); }
- inline void swap (tuple<N,T>& v)
- { for (uoff_t i = 0; i < N; ++ i) ::ustl::swap (m_v[i], v.m_v[i]); }
-private:
- T m_v [N];
-};
-
-} // namespace ustl
-
-#include "simd.h"
-
-namespace ustl {
-
-template <size_t N, typename T>
-template <typename T2>
-inline tuple<N,T>::tuple (const tuple<N,T2>& t)
-{ simd::pconvert (t, *this, simd::fcast<T2,T>()); }
-
-template <size_t N, typename T>
-inline tuple<N,T>::tuple (const tuple<N,T>& t)
-{ simd::passign (t, *this); }
-
-template <size_t N, typename T>
-inline tuple<N,T>::tuple (const_pointer v)
-{ simd::ipassign (v, *this); }
-
-template <size_t N, typename T>
-inline tuple<N,T>::tuple (const_reference v0, const_reference v1, const_reference v2, const_reference v3)
-{
- m_v[0] = v0;
- if (N > 1) m_v[1] = v1;
- if (N > 2) m_v[2] = v2;
- if (N > 3) m_v[3] = v3;
- if (N > 4) fill_n (m_v + 4, N - 4, T());
-}
-
-template <size_t N, typename T>
-template <typename T2>
-inline const tuple<N,T>& tuple<N,T>::operator= (const tuple<N,T2>& src)
-{ simd::pconvert (src, *this, simd::fcast<T2,T>()); return (*this); }
-
-template <size_t N, typename T>
-inline const tuple<N,T>& tuple<N,T>::operator= (const tuple<N,T>& src)
-{ simd::passign (src, *this); return (*this); }
-
-template <size_t N, typename T1, typename T2>
-inline bool operator== (const tuple<N,T1>& t1, const tuple<N,T2>& t2)
-{
- for (uoff_t i = 0; i < N; ++ i)
- if (t1[i] != t2[i])
- return (false);
- return (true);
-}
-
-template <size_t N, typename T1, typename T2>
-inline bool operator< (const tuple<N,T1>& t1, const tuple<N,T2>& t2)
-{
- for (uoff_t i = 0; i < N && t1[i] <= t2[i]; ++ i)
- if (t1[i] < t2[i])
- return (true);
- return (false);
-}
-
-template <size_t N, typename T1, typename T2>
-inline const tuple<N,T1>& operator+= (tuple<N,T1>& t1, const tuple<N,T2>& t2)
- { for (uoff_t i = 0; i < N; ++ i) t1[i] = T1(t1[i] + t2[i]); return (t1); }
-
-template <size_t N, typename T1, typename T2>
-inline const tuple<N,T1>& operator-= (tuple<N,T1>& t1, const tuple<N,T2>& t2)
- { for (uoff_t i = 0; i < N; ++ i) t1[i] = T1(t1[i] - t2[i]); return (t1); }
-
-template <size_t N, typename T1, typename T2>
-inline const tuple<N,T1>& operator*= (tuple<N,T1>& t1, const tuple<N,T2>& t2)
- { for (uoff_t i = 0; i < N; ++ i) t1[i] = T1(t1[i] * t2[i]); return (t1); }
-
-template <size_t N, typename T1, typename T2>
-inline const tuple<N,T1>& operator/= (tuple<N,T1>& t1, const tuple<N,T2>& t2)
- { for (uoff_t i = 0; i < N; ++ i) t1[i] = T1(t1[i] / t2[i]); return (t1); }
-
-template <size_t N, typename T1, typename T2>
-inline const tuple<N,T1> operator+ (const tuple<N,T1>& t1, const tuple<N,T2>& t2)
-{
- tuple<N,T1> result;
- for (uoff_t i = 0; i < N; ++ i) result[i] = T1(t1[i] + t2[i]);
- return (result);
-}
-
-template <size_t N, typename T1, typename T2>
-inline const tuple<N,T1> operator- (const tuple<N,T1>& t1, const tuple<N,T2>& t2)
-{
- tuple<N,T1> result;
- for (uoff_t i = 0; i < N; ++ i) result[i] = T1(t1[i] - t2[i]);
- return (result);
-}
-
-template <size_t N, typename T1, typename T2>
-inline const tuple<N,T1> operator* (const tuple<N,T1>& t1, const tuple<N,T2>& t2)
-{
- tuple<N,T1> result;
- for (uoff_t i = 0; i < N; ++ i) result[i] = T1(t1[i] * t2[i]);
- return (result);
-}
-
-template <size_t N, typename T1, typename T2>
-inline const tuple<N,T1> operator/ (const tuple<N,T1>& t1, const tuple<N,T2>& t2)
-{
- tuple<N,T1> result;
- for (uoff_t i = 0; i < N; ++ i) result[i] = T1(t1[i] / t2[i]);
- return (result);
-}
-
-#if CPU_HAS_SSE
-#define SSE_TUPLE_SPECS(n,type) \
-template <> inline tuple<n,type>::tuple (void) \
-{ asm ("xorps %%xmm0, %%xmm0\n\tmovups %%xmm0, %0"::"m"(m_v[0]):"xmm0","memory"); } \
-template<> inline void tuple<n,type>::swap (tuple<n,type>& v) \
-{ asm ("movups %0,%%xmm0\n\tmovups %1,%%xmm1\n\tmovups %%xmm0,%1\n\tmovups %%xmm1,%0"::"m"(m_v[0]),"m"(v.m_v[0]):"xmm0","xmm1","memory"); }
-SSE_TUPLE_SPECS(4,float)
-SSE_TUPLE_SPECS(4,int32_t)
-SSE_TUPLE_SPECS(4,uint32_t)
-#undef SSE_TUPLE_SPECS
-#endif
-#if CPU_HAS_MMX
-#define MMX_TUPLE_SPECS(n,type) \
-template <> inline tuple<n,type>::tuple (void) \
-{ asm ("pxor %%mm0, %%mm0\n\tmovq %%mm0, %0"::"m"(m_v[0]):"mm0","memory"); simd::reset_mmx(); } \
-template<> inline void tuple<n,type>::swap (tuple<n,type>& v) \
-{ asm ("movq %0,%%mm0\n\tmovq %1,%%mm1\n\tmovq %%mm0,%1\n\tmovq %%mm1,%0"::"m"(m_v[0]),"m"(v.m_v[0]):"mm0","mm1","memory"); simd::reset_mmx(); }
-MMX_TUPLE_SPECS(2,float)
-MMX_TUPLE_SPECS(4,int16_t)
-MMX_TUPLE_SPECS(4,uint16_t)
-MMX_TUPLE_SPECS(2,int32_t)
-MMX_TUPLE_SPECS(2,uint32_t)
-MMX_TUPLE_SPECS(8,int8_t)
-MMX_TUPLE_SPECS(8,uint8_t)
-#undef MMX_TUPLE_SPECS
-#endif
-
-#define SIMD_TUPLE_PACKOP(N,T) \
-template <> inline const tuple<N,T>& operator+= (tuple<N,T>& t1, const tuple<N,T>& t2) \
- { simd::padd (t2, t1); return (t1); } \
-template <> inline const tuple<N,T>& operator-= (tuple<N,T>& t1, const tuple<N,T>& t2) \
- { simd::psub (t2, t1); return (t1); } \
-template <> inline const tuple<N,T>& operator*= (tuple<N,T>& t1, const tuple<N,T>& t2) \
- { simd::pmul (t2, t1); return (t1); } \
-template <> inline const tuple<N,T>& operator/= (tuple<N,T>& t1, const tuple<N,T>& t2) \
- { simd::pdiv (t2, t1); return (t1); } \
-template <> inline const tuple<N,T> operator+ (const tuple<N,T>& t1, const tuple<N,T>& t2) \
- { tuple<N,T> result (t1); simd::padd (t2, result); return (result); } \
-template <> inline const tuple<N,T> operator- (const tuple<N,T>& t1, const tuple<N,T>& t2) \
- { tuple<N,T> result (t1); simd::psub (t2, result); return (result); } \
-template <> inline const tuple<N,T> operator* (const tuple<N,T>& t1, const tuple<N,T>& t2) \
- { tuple<N,T> result (t1); simd::pmul (t2, result); return (result); } \
-template <> inline const tuple<N,T> operator/ (const tuple<N,T>& t1, const tuple<N,T>& t2) \
- { tuple<N,T> result (t1); simd::pdiv (t2, result); return (result); }
-SIMD_TUPLE_PACKOP(4,float)
-SIMD_TUPLE_PACKOP(2,float)
-SIMD_TUPLE_PACKOP(2,double)
-SIMD_TUPLE_PACKOP(4,int32_t)
-SIMD_TUPLE_PACKOP(4,uint32_t)
-SIMD_TUPLE_PACKOP(4,int16_t)
-SIMD_TUPLE_PACKOP(4,uint16_t)
-SIMD_TUPLE_PACKOP(2,int32_t)
-SIMD_TUPLE_PACKOP(2,uint32_t)
-SIMD_TUPLE_PACKOP(8,int8_t)
-SIMD_TUPLE_PACKOP(8,uint8_t)
-#undef SIMD_TUPLE_PACKOP
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/utypes.h b/media/libdrm/mobile2/src/util/ustl-1.0/utypes.h
deleted file mode 100644
index f0b0265..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/utypes.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// utypes.h
-//
-// Types used by this library.
-//
-
-#ifndef UTYPES_H_118BBB3B50B7DBF22F5460C52E515C83
-#define UTYPES_H_118BBB3B50B7DBF22F5460C52E515C83
-
-#include "config.h"
-#ifndef STDC_HEADERS
- #error This library requires standard C and C++ headers to compile.
-#endif
-#ifndef STDUNIX_HEADERS
- #error This library compiles only on UNIX systems.
-#endif
-#define __STDC_LIMIT_MACROS // For WCHAR_MIN and WCHAR_MAX in stdint.
-#define __STDC_CONSTANT_MACROS // For UINT??_C macros to avoid using L and UL suffixes on constants.
-#ifdef HAVE_STDINT_H
- #include <stdint.h>
-#elif HAVE_INTTYPES_H
- #include <inttypes.h>
-#else
- #error Need standard integer types definitions, usually in stdint.h
-#endif
-#include <stddef.h> // For ptrdiff_t, size_t
-#include <limits.h>
-#include <float.h>
-#ifdef HAVE_SYS_TYPES_H
- #include <sys/types.h>
-#endif
-#ifndef SIZE_MAX
- #define SIZE_MAX UINT_MAX
-#endif
-#if sun || __sun // Solaris defines UINTPTR_MAX as empty.
- #undef UINTPTR_MAX
- #define UINTPTR_MAX ULONG_MAX
-#endif
-#ifndef WCHAR_MAX
- #ifdef __WCHAR_MAX__
- #define WCHAR_MAX __WCHAR_MAX__
- #else
- #define WCHAR_MAX CHAR_MAX
- #endif
-#endif
-#ifdef HAVE_LONG_LONG
- #ifndef LLONG_MAX
- #define ULLONG_MAX UINT64_C(0xFFFFFFFFFFFFFFFF)
- #define LLONG_MAX INT64_C(0x7FFFFFFFFFFFFFFF)
- #define LLONG_MIN ULLONG_MAX
- #endif
-#endif
-#if !PLATFORM_ANDROID
-#ifndef BYTE_ORDER
- #define LITTLE_ENDIAN USTL_LITTLE_ENDIAN
- #define BIG_ENDIAN USTL_BIG_ENDIAN
- #define BYTE_ORDER USTL_BYTE_ORDER
-#endif
-#endif
-
-typedef size_t uoff_t; ///< A type for storing offsets into blocks measured by size_t.
-typedef uint32_t hashvalue_t; ///< Value type returned by the hash functions.
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uutility.h b/media/libdrm/mobile2/src/util/ustl-1.0/uutility.h
deleted file mode 100644
index 7b5ae64..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uutility.h
+++ /dev/null
@@ -1,387 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-/// \file uutility.h
-///
-/// \brief Utility templates.
-///
-/// Everything in here except min(), max(), distance(), and advance()
-/// are uSTL extensions and are absent from other STL implementations.
-///
-
-#ifndef UUTILITY_H_6A58BD296269A82A4AAAA4FD19FDB3AC
-#define UUTILITY_H_6A58BD296269A82A4AAAA4FD19FDB3AC
-
-#include "uassert.h"
-#include "utypes.h"
-
-#if PLATFORM_ANDROID
-#include <stdio.h>
-#undef CPU_HAS_MMX
-#endif
-
-namespace ustl {
-
-#ifdef __GNUC__
- /// Returns the number of elements in a static vector
- #define VectorSize(v) (sizeof(v) / sizeof(*v))
-#else
- // Old compilers will not be able to evaluate *v on an empty vector.
- // The tradeoff here is that VectorSize will not be able to measure arrays of local structs.
- #define VectorSize(v) (sizeof(v) / ustl::size_of_elements(1, v))
-#endif
-
-/// Expands into a ptr,size expression for the given static vector; useful as link arguments.
-#define VectorBlock(v) (v)+0, VectorSize(v) // +0 makes it work under gcc 2.95
-/// Expands into a begin,end expression for the given static vector; useful for algorithm arguments.
-#define VectorRange(v) VectorBlock(v)+(v)
-
-/// Returns the number of bits in the given type
-#define BitsInType(t) (sizeof(t) * CHAR_BIT)
-
-/// Returns the mask of type \p t with the lowest \p n bits set.
-#define BitMask(t,n) (t(~t(0)) >> ((sizeof(t) * CHAR_BIT) - (n)))
-
-/// Argument that is used only in debug builds (as in an assert)
-#ifndef NDEBUG
- #define DebugArg(x) x
-#else
- #define DebugArg(x)
-#endif
-
-/// Shorthand for container iteration.
-#define foreach(type,i,ctr) for (type i = (ctr).begin(); i != (ctr).end(); ++ i)
-/// Shorthand for container reverse iteration.
-#define eachfor(type,i,ctr) for (type i = (ctr).rbegin(); i != (ctr).rend(); ++ i)
-
-/// Macro for passing template types as macro arguments.
-/// \@{
-#define TEMPLATE_FULL_DECL1(d1,t1) template <d1 t1>
-#define TEMPLATE_FULL_DECL2(d1,t1,d2,t2) template <d1 t1, d2 t2>
-#define TEMPLATE_FULL_DECL3(d1,t1,d2,t2,d3,t3) template <d1 t1, d2 t2, d3 t3>
-#define TEMPLATE_DECL1(t1) TEMPLATE_FULL_DECL1(typename,t1)
-#define TEMPLATE_DECL2(t1,t2) TEMPLATE_FULL_DECL2(typename,t1,typename,t2)
-#define TEMPLATE_DECL3(t1,t2,t3) TEMPLATE_FULL_DECL3(typename,t1,typename,t2,typename,t3)
-#define TEMPLATE_TYPE1(type,a1) type<a1>
-#define TEMPLATE_TYPE2(type,a1,a2) type<a1,a2>
-#define TEMPLATE_TYPE3(type,a1,a2,a3) type<a1,a2,a3>
-/// \@}
-
-/// Returns the minimum of \p a and \p b
-template <typename T1, typename T2>
-inline const T1 min (const T1& a, const T2& b)
-{
- return (a < b ? a : b);
-}
-
-/// Returns the maximum of \p a and \p b
-template <typename T1, typename T2>
-inline const T1 max (const T1& a, const T2& b)
-{
- return (b < a ? a : b);
-}
-
-/// \brief Divides \p n1 by \p n2 and rounds the result up.
-/// This is in contrast to regular division, which rounds down.
-/// Negative numbers are rounded down because they are an unusual case, supporting
-/// which would require a branch. Since this is frequently used in graphics, the
-/// speed is important.
-///
-template <typename T1, typename T2>
-inline T1 DivRU (T1 n1, T2 n2)
-{
- return (n1 / n2 + (n1 % n2 > 0));
-}
-
-/// The alignment performed by default.
-const size_t c_DefaultAlignment = __alignof__(void*);
-
-/// \brief Rounds \p n up to be divisible by \p grain
-template <typename T>
-inline T Align (T n, size_t grain = c_DefaultAlignment)
-{
- T a, r = n % grain;
- if (grain == 2) return (n + r);
- switch (grain) {
- case 4: case 8: case 16: a = (n & ~(grain - 1)) + grain; break;
- default: a = n + (grain - r);
- };
- return (r ? a : n);
-}
-
-/// Offsets an iterator
-template <typename T>
-inline T advance (T i, ssize_t offset)
-{
- return (i + offset);
-}
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-/// Offsets a void pointer
-template <>
-inline const void* advance (const void* p, ssize_t offset)
-{
- assert (p || !offset);
- return (reinterpret_cast<const uint8_t*>(p) + offset);
-}
-
-/// Offsets a void pointer
-template <>
-inline void* advance (void* p, ssize_t offset)
-{
- assert (p || !offset);
- return (reinterpret_cast<uint8_t*>(p) + offset);
-}
-#endif
-
-/// Returns the difference \p p1 - \p p2
-template <typename T1, typename T2>
-inline ptrdiff_t distance (T1 i1, T2 i2)
-{
- return (i2 - i1);
-}
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-#define UNVOID_DISTANCE(T1const,T2const) \
-template <> inline ptrdiff_t distance (T1const void* p1, T2const void* p2) \
-{ return ((T2const uint8_t*)(p2) - (T1const uint8_t*)(p1)); }
-UNVOID_DISTANCE(,)
-UNVOID_DISTANCE(const,const)
-UNVOID_DISTANCE(,const)
-UNVOID_DISTANCE(const,)
-#undef UNVOID_DISTANCE
-#endif
-
-/// \brief Returns the absolute value of \p v
-/// Unlike the stdlib functions, this is inline and works with all types.
-template <typename T>
-inline T absv (T v)
-{
- return (v < 0 ? -v : v);
-}
-
-/// \brief Returns -1 for negative values, 1 for positive, and 0 for 0
-template <typename T>
-inline T sign (T v)
-{
- return ((0 < v) - (v < 0));
-}
-
-/// Returns the absolute value of the distance i1 and i2
-template <typename T1, typename T2>
-inline size_t abs_distance (T1 i1, T2 i2)
-{
- return (absv (distance(i1, i2)));
-}
-
-/// Returns the size of \p n elements of size \p T
-template <typename T>
-inline size_t size_of_elements (size_t n, const T*)
-{
- return (n * sizeof(T));
-}
-
-// Defined in byteswap.h, which is usually unusable.
-#undef bswap_16
-#undef bswap_32
-#undef bswap_64
-
-#if CPU_HAS_CMPXCHG8 // If it has that, it has bswap.
-inline uint16_t bswap_16 (uint16_t v) { asm ("rorw $8, %w0" : "=r"(v) : "0"(v) : "cc"); return (v); }
-inline uint32_t bswap_32 (uint32_t v) { asm ("bswap %0" : "=r"(v) : "0"(v)); return (v); }
-#else
-inline uint16_t bswap_16 (uint16_t v) { return (v << 8 | v >> 8); }
-inline uint32_t bswap_32 (uint32_t v) { return (v << 24 | (v & 0xFF00) << 8 | (v >> 8) & 0xFF00 | v >> 24); }
-#endif
-#if HAVE_INT64_T
-inline uint64_t bswap_64 (uint64_t v) { return ((uint64_t(bswap_32(v)) << 32) | bswap_32(v >> 32)); }
-#endif
-
-/// \brief Swaps the byteorder of \p v.
-template <typename T>
-inline T bswap (const T& v)
-{
- switch (BitsInType(T)) {
- default: return (v);
- case 16: return (T (bswap_16 (uint16_t (v))));
- case 32: return (T (bswap_32 (uint32_t (v))));
-#if HAVE_INT64_T
- case 64: return (T (bswap_64 (uint64_t (v))));
-#endif
- };
-}
-
-#if USTL_BYTE_ORDER == USTL_BIG_ENDIAN
-template <typename T> inline T le_to_native (const T& v) { return (bswap (v)); }
-template <typename T> inline T be_to_native (const T& v) { return (v); }
-template <typename T> inline T native_to_le (const T& v) { return (bswap (v)); }
-template <typename T> inline T native_to_be (const T& v) { return (v); }
-#elif USTL_BYTE_ORDER == USTL_LITTLE_ENDIAN
-template <typename T> inline T le_to_native (const T& v) { return (v); }
-template <typename T> inline T be_to_native (const T& v) { return (bswap (v)); }
-template <typename T> inline T native_to_le (const T& v) { return (v); }
-template <typename T> inline T native_to_be (const T& v) { return (bswap (v)); }
-#endif // USTL_BYTE_ORDER
-
-/// Deletes \p p and sets it to NULL
-template <typename T>
-inline void Delete (T*& p)
-{
- delete p;
- p = NULL;
-}
-
-/// Deletes \p p as an array and sets it to NULL
-template <typename T>
-inline void DeleteVector (T*& p)
-{
- delete [] p;
- p = NULL;
-}
-
-/// Template of making != from ! and ==
-template <typename T>
-inline bool operator!= (const T& x, const T& y)
-{
- return (!(x == y));
-}
-
-/// Template of making > from <
-template <typename T>
-inline bool operator> (const T& x, const T& y)
-{
- return (y < x);
-}
-
-/// Template of making <= from < and ==
-template <typename T>
-inline bool operator<= (const T& x, const T& y)
-{
- return (!(y < x));
-}
-
-/// Template of making >= from < and ==
-template <typename T>
-inline bool operator>= (const T& x, const T& y)
-{
- return (!(x < y));
-}
-
-/// Packs \p s multiple times into \p b. Useful for loop unrolling.
-template <typename TSmall, typename TBig>
-inline void pack_type (TSmall s, TBig& b)
-{
- const size_t n = sizeof(TBig) / sizeof(TSmall);
- b = s;
- // Calls to min are here to avoid warnings for shifts bigger than the type. min will be gone when optimized.
- if (n < 2) return;
- b = (b << min (BitsInType(TSmall), BitsInType(TBig))) | b;
- if (n < 4) return;
- b = (b << min (BitsInType(TSmall) * 2, BitsInType(TBig))) | b;
- if (n < 8) return;
- b = (b << min (BitsInType(TSmall) * 4, BitsInType(TBig))) | b;
-}
-
-#if __GNUC__ >= 3
-inline bool TestAndSet (int* pm) __attribute__((always_inline));
-#endif
-/// Sets the contents of \p pm to 1 and returns true if the previous value was 0.
-inline bool TestAndSet (int* pm)
-{
-#if CPU_HAS_CMPXCHG8
- bool rv;
- int oldVal (1);
- asm volatile ( // cmpxchg compares to %eax and swaps if equal
- "cmpxchgl %3, %1\n\t"
- "sete %0"
- : "=a" (rv), "=m" (*pm), "=r" (oldVal)
- : "2" (oldVal), "a" (0)
- : "memory");
- return (rv);
-#elif __i386__ || __x86_64__
- int oldVal (1);
- asm volatile ("xchgl %0, %1" : "=r"(oldVal), "=m"(*pm) : "0"(oldVal), "m"(*pm) : "memory");
- return (!oldVal);
-#elif __sparc32__ // This has not been tested
- int rv;
- asm volatile ("ldstub %1, %0" : "=r"(rv), "=m"(*pm) : "m"(pm));
- return (!rv);
-#else
- const int oldVal (*pm);
- *pm = 1;
- return (!oldVal);
-#endif
-}
-
-/// \brief This template is to be used for dereferencing a type-punned pointer without a warning.
-///
-/// When casting a local variable to an unrelated type through a pointer (for
-/// example, casting a float to a uint32_t without conversion), the resulting
-/// memory location can be accessed through either pointer, which violates the
-/// strict aliasing rule. While -fno-strict-aliasing option can be given to
-/// the compiler, eliminating this warning, inefficient code may result in
-/// some instances, because aliasing inhibits some optimizations. By using
-/// this template, and by ensuring the memory is accessed in one way only,
-/// efficient code can be produced without the warning. For gcc 4.1.0+.
-///
-template <typename DEST, typename SRC>
-inline DEST noalias (DEST, SRC* s)
-{
- union UPun { SRC s; DEST d; };
- return (((UPun*)(s))->d);
-}
-
-namespace simd {
- /// Call after you are done using SIMD algorithms for 64 bit tuples.
-#if CPU_HAS_MMX
- inline void reset_mmx (void) __attribute__((always_inline));
- #define ALL_MMX_REGS_CHANGELIST "mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7","st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)"
- #if CPU_HAS_3DNOW
- inline void reset_mmx (void) { asm ("femms":::ALL_MMX_REGS_CHANGELIST); }
- #else
- inline void reset_mmx (void) { asm ("emms":::ALL_MMX_REGS_CHANGELIST); }
- #endif
-#else
- inline void reset_mmx (void) {}
-#endif
-} // namespace simd
-
-/// \brief Type that is not size_t
-///
-/// Because size_t may be declared as unsigned long or unsigned int on
-/// different machines, this macro is convenient when defining overloads
-/// of size_t to use other types.
-///
-#if defined(SIZE_T_IS_LONG) && !defined(__ARM_EABI__)
- #define NOT_SIZE_T_I_OR_L unsigned int
-#else
- #define NOT_SIZE_T_I_OR_L unsigned long
-#endif
-
-/// \brief Required when you want to overload size_t and a pointer.
-///
-/// The compiler will happily cast a number to a pointer and declare
-/// that the overload is ambiguous unless you define overloads for all
-/// possible integral types that a number may represent. This behaviour,
-/// although braindead, is in the ANSI standard, and thus not a bug. If
-/// you want to change the standard, the best solution is to disallow any
-/// implicit casts to pointer from an integral type. Ironically, such an
-/// implicit cast is already detected by gcc.
-///
-#if defined(USTL_ANDROID_X86)
-#define OVERLOAD_POINTER_AND_SIZE_T_V2(name, arg1type)
-#else
-#define OVERLOAD_POINTER_AND_SIZE_T_V2(name, arg1type) \
- inline void name (arg1type a1, short a2) { name (a1, size_t(a2)); } \
- inline void name (arg1type a1, unsigned short a2) { name (a1, size_t(a2)); } \
- inline void name (arg1type a1, int a2) { name (a1, size_t(a2)); } \
- inline void name (arg1type a1, long a2) { name (a1, size_t(a2)); } \
- inline void name (arg1type a1, NOT_SIZE_T_I_OR_L a2) { name (a1, size_t(a2)); }
-#endif
-} // namespace ustl
-
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/ustl-1.0/uvector.h b/media/libdrm/mobile2/src/util/ustl-1.0/uvector.h
deleted file mode 100644
index ccbc45b..0000000
--- a/media/libdrm/mobile2/src/util/ustl-1.0/uvector.h
+++ /dev/null
@@ -1,277 +0,0 @@
-// This file is part of the ustl library, an STL implementation.
-//
-// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
-// This file is free software, distributed under the MIT License.
-//
-// uvector.h
-//
-
-#ifndef UVECTOR_H_00BB13AF082BEB7829C031B265518169
-#define UVECTOR_H_00BB13AF082BEB7829C031B265518169
-
-#include "uassert.h"
-#include "memblock.h"
-#include "umemory.h"
-
-namespace ustl {
-
-/// \class vector uvector.h ustl.h
-/// \ingroup Sequences
-///
-/// \brief STL vector equivalent.
-///
-/// Provides a typed array-like interface to a managed memory block, including
-/// element access, iteration, modification, resizing, and serialization. In
-/// this design elements frequently undergo bitwise move, so don't put it in
-/// here if it doesn't support it. This mostly means having no self-pointers.
-///
-template <typename T>
-class vector {
-public:
- typedef T value_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef pointer iterator;
- typedef const_pointer const_iterator;
- typedef memblock::size_type size_type;
- typedef memblock::written_size_type written_size_type;
- typedef memblock::difference_type difference_type;
- typedef ::ustl::reverse_iterator<iterator> reverse_iterator;
- typedef ::ustl::reverse_iterator<const_iterator> const_reverse_iterator;
-public:
- inline vector (void);
- inline explicit vector (size_type n);
- vector (size_type n, const T& v);
- vector (const vector<T>& v);
- vector (const_iterator i1, const_iterator i2);
- ~vector (void) throw();
- inline const vector<T>& operator= (const vector<T>& v);
- inline bool operator== (const vector<T>& v) { return (m_Data == v.m_Data); }
- inline operator cmemlink (void) const { return (cmemlink (m_Data)); }
- inline operator cmemlink (void) { return (cmemlink (m_Data)); }
- inline operator memlink (void) { return (memlink (m_Data)); }
- inline void reserve (size_type n, bool bExact = true);
- inline void resize (size_type n, bool bExact = true);
- inline size_type capacity (void) const { return (m_Data.capacity() / sizeof(T)); }
- inline size_type size (void) const { return (m_Data.size() / sizeof(T)); }
- inline size_type max_size (void) const { return (m_Data.max_size() / sizeof(T)); }
- inline bool empty (void) const { return (m_Data.empty()); }
- inline iterator begin (void) { return (iterator (m_Data.begin())); }
- inline const_iterator begin (void) const { return (const_iterator (m_Data.begin())); }
- inline iterator end (void) { return (iterator (m_Data.end())); }
- inline const_iterator end (void) const { return (const_iterator (m_Data.end())); }
- inline reverse_iterator rbegin (void) { return (reverse_iterator (end())); }
- inline const_reverse_iterator rbegin (void) const { return (const_reverse_iterator (end())); }
- inline reverse_iterator rend (void) { return (reverse_iterator (begin())); }
- inline const_reverse_iterator rend (void) const { return (const_reverse_iterator (begin())); }
- inline iterator iat (size_type i) { assert (i <= size()); return (begin() + i); }
- inline const_iterator iat (size_type i) const { assert (i <= size()); return (begin() + i); }
- inline reference at (size_type i) { assert (i < size()); return (begin()[i]); }
- inline const_reference at (size_type i) const { assert (i < size()); return (begin()[i]); }
- inline reference operator[] (size_type i) { return (at (i)); }
- inline const_reference operator[] (size_type i) const { return (at (i)); }
- inline reference front (void) { return (at(0)); }
- inline const_reference front (void) const { return (at(0)); }
- inline reference back (void) { assert (!empty()); return (end()[-1]); }
- inline const_reference back (void) const { assert (!empty()); return (end()[-1]); }
- inline void push_back (const T& v = T());
- inline void pop_back (void) { m_Data.memlink::resize (m_Data.size() - sizeof(T)); }
- inline void clear (void) { m_Data.clear(); }
- void deallocate (void) throw();
- inline void assign (const_iterator i1, const_iterator i2);
- inline void assign (size_type n, const T& v);
- inline void swap (vector<T>& v) { m_Data.swap (v.m_Data); }
- inline iterator insert (iterator ip, const T& v = T());
- inline iterator insert (iterator ip, size_type n, const T& v);
- inline iterator insert (iterator ip, const_iterator i1, const_iterator i2);
- inline iterator erase (iterator ep, size_type n = 1);
- inline iterator erase (iterator ep1, iterator ep2);
- inline void manage (pointer p, size_type n) { m_Data.manage (p, n * sizeof(T)); }
- inline bool is_linked (void) const { return (m_Data.is_linked()); }
- inline void unlink (void) { m_Data.unlink(); }
- inline void copy_link (void) { m_Data.copy_link(); }
- inline void link (const_pointer p, size_type n) { m_Data.link (p, n * sizeof(T)); }
- inline void link (pointer p, size_type n) { m_Data.link (p, n * sizeof(T)); }
- inline void link (const vector<T>& v) { m_Data.link (v); }
- inline void link (vector<T>& v) { m_Data.link (v); }
- inline void link (const_pointer first, const_pointer last) { m_Data.link (first, last); }
- inline void link (pointer first, pointer last) { m_Data.link (first, last); }
- OVERLOAD_POINTER_AND_SIZE_T_V2(link, pointer)
- OVERLOAD_POINTER_AND_SIZE_T_V2(link, const_pointer)
-private:
- inline iterator insert_space (iterator ip, size_type n);
-private:
- memblock m_Data; ///< Raw element data, consecutively stored.
-};
-
-/// Allocates space for at least \p n elements.
-template <typename T>
-void vector<T>::reserve (size_type n, bool bExact)
-{
- const size_type oldCapacity = capacity();
- m_Data.reserve (n * sizeof(T), bExact);
- if (capacity() > oldCapacity)
- construct (begin() + oldCapacity, begin() + capacity());
-}
-
-/// Resizes the vector to contain \p n elements.
-template <typename T>
-void vector<T>::resize (size_type n, bool bExact)
-{
- if (m_Data.capacity() < n * sizeof(T))
- reserve (n, bExact);
- m_Data.memlink::resize (n * sizeof(T));
-}
-
-/// Calls element destructors and frees storage.
-template <typename T>
-void vector<T>::deallocate (void) throw()
-{
- if (!is_linked())
- destroy (begin(), begin() + capacity());
- m_Data.deallocate();
-}
-
-/// Initializes empty vector.
-template <typename T>
-inline vector<T>::vector (void)
-: m_Data ()
-{
-}
-
-/// Initializes a vector of size \p n.
-template <typename T>
-inline vector<T>::vector (size_type n)
-: m_Data ()
-{
- resize (n);
-}
-
-/// Copies \p n elements from \p v.
-template <typename T>
-vector<T>::vector (size_type n, const T& v)
-: m_Data ()
-{
- resize (n);
- ::ustl::fill (begin(), end(), v);
-}
-
-/// Copies \p v.
-template <typename T>
-vector<T>::vector (const vector<T>& v)
-: m_Data ()
-{
- resize (v.size());
- ::ustl::copy (v.begin(), v.end(), begin());
-}
-
-/// Copies range [\p i1, \p i2]
-template <typename T>
-vector<T>::vector (const_iterator i1, const_iterator i2)
-: m_Data ()
-{
- resize (distance (i1, i2));
- ::ustl::copy (i1, i2, begin());
-}
-
-/// Destructor
-template <typename T>
-inline vector<T>::~vector (void) throw()
-{
- if (!numeric_limits<value_type>::is_integral)
- deallocate();
-}
-
-/// Copies the range [\p i1, \p i2]
-template <typename T>
-inline void vector<T>::assign (const_iterator i1, const_iterator i2)
-{
- assert (i1 <= i2);
- resize (distance (i1, i2));
- ::ustl::copy (i1, i2, begin());
-}
-
-/// Copies \p n elements with value \p v.
-template <typename T>
-inline void vector<T>::assign (size_type n, const T& v)
-{
- resize (n);
- ::ustl::fill (begin(), end(), v);
-}
-
-/// Copies contents of \p v.
-template <typename T>
-inline const vector<T>& vector<T>::operator= (const vector<T>& v)
-{
- assign (v.begin(), v.end());
- return (*this);
-}
-
-/// Inserts \p n uninitialized elements at \p ip.
-template <typename T>
-typename vector<T>::iterator vector<T>::insert_space (iterator ip, size_type n)
-{
- const uoff_t ipmi = distance (m_Data.begin(), memblock::iterator(ip));
- reserve (size() + n, false);
- return (iterator (m_Data.insert (m_Data.iat(ipmi), n * sizeof(T))));
-}
-
-/// Inserts \p n elements with value \p v at offsets \p ip.
-template <typename T>
-typename vector<T>::iterator vector<T>::insert (iterator ip, size_type n, const T& v)
-{
- ip = insert_space (ip, n);
- ::ustl::fill (ip, ip + n, v);
- return (ip);
-}
-
-/// Inserts value \p v at offset \p ip.
-template <typename T>
-typename vector<T>::iterator vector<T>::insert (iterator ip, const T& v)
-{
- *(ip = insert_space (ip, 1)) = v;
- return (ip);
-}
-
-/// Inserts range [\p i1, \p i2] at offset \p ip.
-template <typename T>
-typename vector<T>::iterator vector<T>::insert (iterator ip, const_iterator i1, const_iterator i2)
-{
- assert (i1 <= i2);
- ip = insert_space (ip, distance (i1, i2));
- ::ustl::copy (i1, i2, ip);
- return (ip);
-}
-
-/// Removes \p count elements at offset \p ep.
-template <typename T>
-inline typename vector<T>::iterator vector<T>::erase (iterator ep, size_type n)
-{
- return (iterator (m_Data.erase (memblock::iterator(ep), n * sizeof(T))));
-}
-
-/// Removes elements from \p ep1 to \p ep2.
-template <typename T>
-inline typename vector<T>::iterator vector<T>::erase (iterator ep1, iterator ep2)
-{
- assert (ep1 <= ep2);
- return (erase (ep1, distance(ep1, ep2)));
-}
-
-/// Inserts value \p v at the end of the vector.
-template <typename T>
-void vector<T>::push_back (const T& v)
-{
- resize (size() + 1, false);
- back() = v;
-}
-
-/// Use with vector classes to allocate and link to stack space. \p n is in elements.
-#define typed_alloca_link(m,T,n) (m).link ((T*) alloca ((n) * sizeof(T)), (n))
-
-} // namespace ustl
-
-#endif
-
diff --git a/media/libdrm/mobile2/src/util/xml/DomExpatAgent.cpp b/media/libdrm/mobile2/src/util/xml/DomExpatAgent.cpp
deleted file mode 100644
index 4cde706..0000000
--- a/media/libdrm/mobile2/src/util/xml/DomExpatAgent.cpp
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <util/xml/DomExpatAgent.h>
-#include <util/xml/XMLElementImpl.h>
-#include <ustring.h>
-#include <uios.h>
-using namespace ustl;
-
-/** see DomExpatAgent.h */
-DomExpatAgent::DomExpatAgent(XMLDocumentImpl* xmlDocPtr)
-{
- mXMLDocumentPtr = xmlDocPtr;
- mTopElementPtr = NULL;
-}
-
-/** see DomExpatAgent.h */
-DomExpatAgent::~DomExpatAgent()
-{
-
-}
-
-/** see DomExpatAgent.h */
-bool DomExpatAgent::generateDocumentFromXML(istringstream *xmlStream)
-{
- char ch;
- string content;
-
- if (NULL == mXMLDocumentPtr || NULL == xmlStream)
- {
- return false;
- }
-
- while ((ch = xmlStream->get()) != '\0')
- {
- content += ch;
- }
-
- if (ExpatWrapper::decode(content.c_str(), content.length(), 1) == 0)
-
- {
- return false;
- }
- return true;
-}
-
-/** see DomExpatAgent.h */
-void DomExpatAgent::pushTag(const DOMString *name, const XML_Char **atts)
-{
- ElementImpl *elementNode = mXMLDocumentPtr->createElement(name);
-
- if (NULL == elementNode)
- {
- return;
- }
-
- if (NULL != atts)
- {
- while (NULL != *atts)
- {
- //set attributes into element node.
- DOMString key(atts[0]), value(atts[1]);
- elementNode->setAttribute(&key, &value);
- atts += 2;
- }
- }
-
- if (!mStack.empty())
- {
- mTopElementPtr->appendChild(elementNode);
- }
- else
- {
- mXMLDocumentPtr->setFirstChild(elementNode);
- }
-
- mTopElementPtr = (XMLElementImpl *)elementNode;
- mStack.push_back(elementNode);
-}
-
-/** see DomExpatAgent.h */
-void DomExpatAgent::popTag(const DOMString *name)
-{
- if (NULL == name)
- {
- return;
- }
-
- if (mTopElementPtr != NULL)
- {
- if (!name->compare(mTopElementPtr->getTagName()->c_str()))
- {
- mStack.pop_back();
- if (!mStack.empty())
- {
- mTopElementPtr =(XMLElementImpl *) mStack.back();
- }
- else
- {
- mTopElementPtr = NULL;
- }
- }
- }
-}
-
-/** see DomExpatAgent.h */
-void DomExpatAgent::appendText(const DOMString *text)
-{
- if ((mTopElementPtr != NULL) && (text != NULL))
- {
- TextImpl *textNode = mXMLDocumentPtr->createTextNode(text);
-
- if (NULL == textNode)
- {
- return;
- }
-
- mTopElementPtr->appendChild(textNode);
- }
-}
-
-/** see DomExpatAgent.h */
-void DomExpatAgent::startElement(const XML_Char *name, const XML_Char **atts)
-{
- if (name)
- {
- DOMString tagName(name);
-
- pushTag(&tagName, atts);
- }
-}
-
-/** see DomExpatAgent.h */
-void DomExpatAgent::dataHandler(const XML_Char *s, int len)
-{
- if (s != NULL && len >= 1 && *s != '\n')
- {
- DOMString text;
- text.assign((char*)s, len);
- appendText(&text);
- }
-}
-
-/** see DomExpatAgent.h */
-void DomExpatAgent::endElement(const XML_Char *name)
-{
- if (name)
- {
- DOMString tagName(name);
- popTag(&tagName);
- }
-}
-
-/** see DomExpatAgent.h */
-ostringstream* DomExpatAgent::generateXMLFromDocument()
-{
- if (NULL == mXMLDocumentPtr)
- {
- return NULL;
- }
-
- ElementImpl *root = mXMLDocumentPtr->getDocumentElement();
-
- traverse(root);
-
- return &mXMLostream;
-}
-
-/** see DomExpatAgent.h */
-void DomExpatAgent::traverse(ElementImpl *root)
-{
- if (NULL == root)
- {
- return;
- }
-
- mXMLostream << "<" << *(root->getNodeName());
-
- if (root->hasAttributes())
- {
- mXMLostream << endl;
- const DOMStringMap* attrMapPtr = (static_cast<XMLElementImpl*>(root))->getAttributeMap();
- DOMStringMap::const_reverse_iterator pos;
-
- for (pos=attrMapPtr->rbegin(); pos != attrMapPtr->rend(); pos++)
- {
- mXMLostream << pos->first << "=" << "\"" << pos->second << "\"";
-
- if (pos + 1 != attrMapPtr->rend())
- {
- mXMLostream << endl;
- }
- }
- }
-
- mXMLostream << ">" << endl;
-
- NodeImpl *child = root->getFirstChild();
-
- while (child != NULL)
- {
- NodeType what = child->getNodeType();
-
- if (what == ELEMENT_NODE)
- {
- traverse(static_cast<ElementImpl*>(child));
- } else if (what == TEXT_NODE)
- {
- mXMLostream << *(static_cast<TextImpl*>(child)->getData()) << endl;
- }
-
- child = child->getNextSibling();
- }
-
- mXMLostream << "</" << *(root->getNodeName()) << ">" << endl;
-}
diff --git a/media/libdrm/mobile2/src/util/xml/ExpatWrapper.cpp b/media/libdrm/mobile2/src/util/xml/ExpatWrapper.cpp
deleted file mode 100644
index fe99a88..0000000
--- a/media/libdrm/mobile2/src/util/xml/ExpatWrapper.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <util/xml/ExpatWrapper.h>
-#include <ustring.h>
-using namespace ustl;
-
-/** see ExpatWrapper.h */
-ExpatWrapper::ExpatWrapper()
-{
- mParser = XML_ParserCreate(NULL);
- ::XML_SetUserData(mParser, this);
- ::XML_SetElementHandler(mParser, startElementCallback, endElementCallback);
- ::XML_SetCharacterDataHandler(mParser, dataHandlerCallback);
-
-}
-
-/** see ExpatWrapper.h */
-ExpatWrapper::~ExpatWrapper()
-{
- if (mParser)
- {
- ::XML_ParserFree(mParser);
- }
-}
-
-/** see ExpatWrapper.h */
-int ExpatWrapper::decode(const char* buf, int len, int isFinal)
-{
- return ::XML_Parse(mParser, buf, len, isFinal);
-}
-
-/** see ExpatWrapper.h */
-void ExpatWrapper::startElementCallback(void *userData, const XML_Char *name,
- const XML_Char **atts)
-{
- ((ExpatWrapper *)userData)->startElement(name, atts);
-}
-
-/** see ExpatWrapper.h */
-void ExpatWrapper::endElementCallback(void *userData, const XML_Char *name)
-{
- ((ExpatWrapper *)userData)->endElement(name);
-}
-
-/** see ExpatWrapper.h */
-void ExpatWrapper::dataHandlerCallback(void *userData, const XML_Char *s, int len)
-{
- ((ExpatWrapper *)userData)->dataHandler(s, len);
-}
-
-/** see ExpatWrapper.h */
-void ExpatWrapper::startElement(const XML_Char *name, const XML_Char **atts)
-{
-}
-
-/** see ExpatWrapper.h */
-void ExpatWrapper::endElement(const XML_Char *name)
-{
-}
-
-/** see ExpatWrapper.h */
-void ExpatWrapper::dataHandler(const XML_Char *s, int len)
-{
-}
diff --git a/media/libdrm/mobile2/src/util/xml/XMLDocumentImpl.cpp b/media/libdrm/mobile2/src/util/xml/XMLDocumentImpl.cpp
deleted file mode 100644
index c1fbc79..0000000
--- a/media/libdrm/mobile2/src/util/xml/XMLDocumentImpl.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <util/xml/XMLDocumentImpl.h>
-#include <util/xml/XMLElementImpl.h>
-
-/** see XMLDocumentImpl.h */
-XMLDocumentImpl::XMLDocumentImpl()
-{}
-
-/** see XMLDocumentImpl.h */
-XMLDocumentImpl::~XMLDocumentImpl()
-{}
-
-/** see XMLDocumentImpl.h */
-ElementImpl* XMLDocumentImpl::getDocumentElement() const
-{
- XMLElementImpl *element = (XMLElementImpl *)(this->getFirstChild());
- return element;
-}
-
-/** see XMLDocumentImpl.h */
-ElementImpl* XMLDocumentImpl::createElement(const DOMString* tagName) const throw (DOMException)
-{
- if (tagName)
- {
- XMLElementImpl *element = new XMLElementImpl(tagName);
- return element;
- }
- return NULL;
-}
-
-/** see XMLDocumentImpl.h */
-TextImpl* XMLDocumentImpl::createTextNode(const DOMString* data) const
-{
- if (data)
- {
- TextImpl *text = new TextImpl(data);
- return text;
- }
- return NULL;
-}
-
diff --git a/media/libdrm/mobile2/src/util/xml/XMLElementImpl.cpp b/media/libdrm/mobile2/src/util/xml/XMLElementImpl.cpp
deleted file mode 100644
index 5453902..0000000
--- a/media/libdrm/mobile2/src/util/xml/XMLElementImpl.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <util/xml/XMLElementImpl.h>
-#include <util/domcore/TextImpl.h>
-
-/** see XMLElementImpl.h */
-XMLElementImpl::XMLElementImpl(const DOMString *tag)
-{
- if (tag)
- {
- mTagName = *tag;
- }
-}
-
-/** see XMLElementImpl.h */
-XMLElementImpl::~XMLElementImpl()
-{
-}
-
-/** see XMLElementImpl.h */
-const DOMString* XMLElementImpl::getTagName() const
-{
- return &mTagName;
-}
-
-/** see XMLElementImpl.h */
-void XMLElementImpl::setAttribute(const DOMString* name, const DOMString* value)
- throw (DOMException)
-{
- if (name && value)
- {
- mAttributeMap[*name] = *value;
- }
-}
-
-/** see XMLElementImpl.h */
-void XMLElementImpl::removeAttribute(const DOMString* name) throw (DOMException)
-{
- if (name)
- {
- mAttributeMap.erase(*name);
- }
-}
-
-/** see XMLElementImpl.h */
-const DOMString* XMLElementImpl::getAttribute(const DOMString* name) const
-{
- if (name)
- {
- DOMStringMap::const_iterator pos = mAttributeMap.find(*name);
-
- if (pos != mAttributeMap.end())
- {
- return &(pos->second);
- }
-
- }
- return NULL;
-}
-
-/** see XMLElementImpl.h */
-bool XMLElementImpl::hasAttributes() const
-{
- return !mAttributeMap.empty();
-}
-
-/** see XMLElementImpl.h */
-const DOMStringMap* XMLElementImpl::getAttributeMap() const
-{
- return &mAttributeMap;
-}
-
-/** see XMLElementImpl.h */
-const NodeImpl* XMLElementImpl::findSoloChildNode(const char* tag) const
-{
- if (NULL == tag)
- {
- return NULL;
- }
-
- string token;
- NodeListImpl *nodeList = NULL;
- const NodeImpl *childNode = NULL;
-
- token.assign(tag);
- nodeList = getElementsByTagName(&token);
-
- if (nodeList->getLength() > 0)
- {
- childNode = nodeList->item(0);
- }
-
- return childNode;
-}
-
-/** see XMLElementImpl.h */
-const string* XMLElementImpl::getSoloText(const char* tag) const
-{
- const NodeImpl *textNode = this->findSoloChildNode(tag);
-
- if (textNode)
- {
- textNode = textNode->getFirstChild();
- if (textNode)
- {
- return static_cast<const TextImpl*>(textNode)->getData();
- }
- }
-
- return NULL;
-}
-
-/** see XMLElementImpl.h */
-const XMLElementImpl* XMLElementImpl::getSoloElement(const char* tag) const
-{
- const NodeImpl *node = findSoloChildNode(tag);
- if (node)
- {
- return static_cast<const XMLElementImpl*>(node);
- }
-
- return NULL;
-}
diff --git a/media/libmedia/Android.mk b/media/libmedia/Android.mk
deleted file mode 100644
index 8020da2..0000000
--- a/media/libmedia/Android.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- AudioTrack.cpp \
- IAudioFlinger.cpp \
- IAudioFlingerClient.cpp \
- IAudioTrack.cpp \
- IAudioRecord.cpp \
- AudioRecord.cpp \
- AudioSystem.cpp \
- mediaplayer.cpp \
- IMediaPlayerService.cpp \
- IMediaPlayerClient.cpp \
- IMediaPlayer.cpp \
- IMediaRecorder.cpp \
- mediarecorder.cpp \
- IMediaMetadataRetriever.cpp \
- mediametadataretriever.cpp \
- ToneGenerator.cpp \
- JetPlayer.cpp
-
-LOCAL_SHARED_LIBRARIES := \
- libui libcutils libutils libsonivox
-
-LOCAL_MODULE:= libmedia
-
-ifeq ($(TARGET_OS)-$(TARGET_SIMULATOR),linux-true)
-LOCAL_LDLIBS += -ldl
-endif
-
-ifneq ($(TARGET_SIMULATOR),true)
-LOCAL_SHARED_LIBRARIES += libdl
-endif
-
-LOCAL_C_INCLUDES := \
- $(call include-path-for, graphics corecg)
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp
deleted file mode 100644
index e833c85..0000000
--- a/media/libmedia/AudioRecord.cpp
+++ /dev/null
@@ -1,555 +0,0 @@
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "AudioRecord"
-
-#include <stdint.h>
-#include <sys/types.h>
-
-#include <sched.h>
-#include <sys/resource.h>
-
-#include <private/media/AudioTrackShared.h>
-
-#include <media/AudioSystem.h>
-#include <media/AudioRecord.h>
-
-#include <utils/IServiceManager.h>
-#include <utils/Log.h>
-#include <utils/MemoryDealer.h>
-#include <utils/Parcel.h>
-#include <utils/IPCThreadState.h>
-#include <utils/Timers.h>
-#include <cutils/atomic.h>
-
-#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true ))
-#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false ))
-
-namespace android {
-
-// ---------------------------------------------------------------------------
-
-AudioRecord::AudioRecord()
- : mStatus(NO_INIT)
-{
-}
-
-AudioRecord::AudioRecord(
- int streamType,
- uint32_t sampleRate,
- int format,
- int channelCount,
- int frameCount,
- uint32_t flags,
- callback_t cbf,
- void* user,
- int notificationFrames)
- : mStatus(NO_INIT)
-{
- mStatus = set(streamType, sampleRate, format, channelCount,
- frameCount, flags, cbf, user, notificationFrames);
-}
-
-AudioRecord::~AudioRecord()
-{
- if (mStatus == NO_ERROR) {
- // Make sure that callback function exits in the case where
- // it is looping on buffer empty condition in obtainBuffer().
- // Otherwise the callback thread will never exit.
- stop();
- if (mClientRecordThread != 0) {
- mCblk->cv.signal();
- mClientRecordThread->requestExitAndWait();
- mClientRecordThread.clear();
- }
- mAudioRecord.clear();
- IPCThreadState::self()->flushCommands();
- }
-}
-
-status_t AudioRecord::set(
- int streamType,
- uint32_t sampleRate,
- int format,
- int channelCount,
- int frameCount,
- uint32_t flags,
- callback_t cbf,
- void* user,
- int notificationFrames,
- bool threadCanCallJava)
-{
-
- LOGV("set(): sampleRate %d, channelCount %d, frameCount %d",sampleRate, channelCount, frameCount);
- if (mAudioFlinger != 0) {
- return INVALID_OPERATION;
- }
-
- const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger();
- if (audioFlinger == 0) {
- return NO_INIT;
- }
-
- if (streamType == DEFAULT_INPUT) {
- streamType = MIC_INPUT;
- }
-
- if (sampleRate == 0) {
- sampleRate = DEFAULT_SAMPLE_RATE;
- }
- // these below should probably come from the audioFlinger too...
- if (format == 0) {
- format = AudioSystem::PCM_16_BIT;
- }
- if (channelCount == 0) {
- channelCount = 1;
- }
-
- // validate parameters
- if (format != AudioSystem::PCM_16_BIT) {
- return BAD_VALUE;
- }
- if (channelCount != 1 && channelCount != 2) {
- return BAD_VALUE;
- }
-
- // TODO: Get input frame count from hardware.
- int minFrameCount = 1024*2;
-
- if (frameCount == 0) {
- frameCount = minFrameCount;
- } else if (frameCount < minFrameCount) {
- return BAD_VALUE;
- }
-
- if (notificationFrames == 0) {
- notificationFrames = frameCount/2;
- }
-
- // open record channel
- status_t status;
- sp<IAudioRecord> record = audioFlinger->openRecord(getpid(), streamType,
- sampleRate, format, channelCount, frameCount, flags, &status);
- if (record == 0) {
- LOGE("AudioFlinger could not create record track, status: %d", status);
- return status;
- }
- sp<IMemory> cblk = record->getCblk();
- if (cblk == 0) {
- return NO_INIT;
- }
- if (cbf != 0) {
- mClientRecordThread = new ClientRecordThread(*this, threadCanCallJava);
- if (mClientRecordThread == 0) {
- return NO_INIT;
- }
- }
-
- mStatus = NO_ERROR;
-
- mAudioFlinger = audioFlinger;
- mAudioRecord = record;
- mCblkMemory = cblk;
- mCblk = static_cast<audio_track_cblk_t*>(cblk->pointer());
- mCblk->buffers = (char*)mCblk + sizeof(audio_track_cblk_t);
- mCblk->out = 0;
- mSampleRate = sampleRate;
- mFormat = format;
- // Update buffer size in case it has been limited by AudioFlinger during track creation
- mFrameCount = mCblk->frameCount;
- mChannelCount = channelCount;
- mActive = 0;
- mCbf = cbf;
- mNotificationFrames = notificationFrames;
- mRemainingFrames = notificationFrames;
- mUserData = user;
- // TODO: add audio hardware input latency here
- mLatency = (1000*mFrameCount) / mSampleRate;
- mMarkerPosition = 0;
- mNewPosition = 0;
- mUpdatePeriod = 0;
-
- return NO_ERROR;
-}
-
-status_t AudioRecord::initCheck() const
-{
- return mStatus;
-}
-
-// -------------------------------------------------------------------------
-
-uint32_t AudioRecord::latency() const
-{
- return mLatency;
-}
-
-uint32_t AudioRecord::sampleRate() const
-{
- return mSampleRate;
-}
-
-int AudioRecord::format() const
-{
- return mFormat;
-}
-
-int AudioRecord::channelCount() const
-{
- return mChannelCount;
-}
-
-uint32_t AudioRecord::frameCount() const
-{
- return mFrameCount;
-}
-
-int AudioRecord::frameSize() const
-{
- return channelCount()*((format() == AudioSystem::PCM_8_BIT) ? sizeof(uint8_t) : sizeof(int16_t));
-}
-
-// -------------------------------------------------------------------------
-
-status_t AudioRecord::start()
-{
- status_t ret = NO_ERROR;
- sp<ClientRecordThread> t = mClientRecordThread;
-
- LOGV("start");
-
- if (t != 0) {
- if (t->exitPending()) {
- if (t->requestExitAndWait() == WOULD_BLOCK) {
- LOGE("AudioRecord::start called from thread");
- return WOULD_BLOCK;
- }
- }
- t->mLock.lock();
- }
-
- if (android_atomic_or(1, &mActive) == 0) {
- mNewPosition = mCblk->user + mUpdatePeriod;
- mCblk->bufferTimeoutMs = MAX_RUN_TIMEOUT_MS;
- mCblk->waitTimeMs = 0;
- if (t != 0) {
- t->run("ClientRecordThread", THREAD_PRIORITY_AUDIO_CLIENT);
- } else {
- setpriority(PRIO_PROCESS, 0, THREAD_PRIORITY_AUDIO_CLIENT);
- }
- ret = mAudioRecord->start();
- }
-
- if (t != 0) {
- t->mLock.unlock();
- }
-
- return ret;
-}
-
-status_t AudioRecord::stop()
-{
- sp<ClientRecordThread> t = mClientRecordThread;
-
- LOGV("stop");
-
- if (t != 0) {
- t->mLock.lock();
- }
-
- if (android_atomic_and(~1, &mActive) == 1) {
- mAudioRecord->stop();
- if (t != 0) {
- t->requestExit();
- } else {
- setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL);
- }
- }
-
- if (t != 0) {
- t->mLock.unlock();
- }
-
- return NO_ERROR;
-}
-
-bool AudioRecord::stopped() const
-{
- return !mActive;
-}
-
-status_t AudioRecord::setMarkerPosition(uint32_t marker)
-{
- if (mCbf == 0) return INVALID_OPERATION;
-
- mMarkerPosition = marker;
-
- return NO_ERROR;
-}
-
-status_t AudioRecord::getMarkerPosition(uint32_t *marker)
-{
- if (marker == 0) return BAD_VALUE;
-
- *marker = mMarkerPosition;
-
- return NO_ERROR;
-}
-
-status_t AudioRecord::setPositionUpdatePeriod(uint32_t updatePeriod)
-{
- if (mCbf == 0) return INVALID_OPERATION;
-
- uint32_t curPosition;
- getPosition(&curPosition);
- mNewPosition = curPosition + updatePeriod;
- mUpdatePeriod = updatePeriod;
-
- return NO_ERROR;
-}
-
-status_t AudioRecord::getPositionUpdatePeriod(uint32_t *updatePeriod)
-{
- if (updatePeriod == 0) return BAD_VALUE;
-
- *updatePeriod = mUpdatePeriod;
-
- return NO_ERROR;
-}
-
-status_t AudioRecord::getPosition(uint32_t *position)
-{
- if (position == 0) return BAD_VALUE;
-
- *position = mCblk->user;
-
- return NO_ERROR;
-}
-
-
-// -------------------------------------------------------------------------
-
-status_t AudioRecord::obtainBuffer(Buffer* audioBuffer, int32_t waitCount)
-{
- int active;
- int timeout = 0;
- status_t result;
- audio_track_cblk_t* cblk = mCblk;
- uint32_t framesReq = audioBuffer->frameCount;
-
- audioBuffer->frameCount = 0;
- audioBuffer->size = 0;
-
- uint32_t framesReady = cblk->framesReady();
-
- if (framesReady == 0) {
- Mutex::Autolock _l(cblk->lock);
- goto start_loop_here;
- while (framesReady == 0) {
- active = mActive;
- if (UNLIKELY(!active))
- return NO_MORE_BUFFERS;
- if (UNLIKELY(!waitCount))
- return WOULD_BLOCK;
- timeout = 0;
- result = cblk->cv.waitRelative(cblk->lock, milliseconds(WAIT_PERIOD_MS));
- if (__builtin_expect(result!=NO_ERROR, false)) {
- cblk->waitTimeMs += WAIT_PERIOD_MS;
- if (cblk->waitTimeMs >= cblk->bufferTimeoutMs) {
- LOGW( "obtainBuffer timed out (is the CPU pegged?) "
- "user=%08x, server=%08x", cblk->user, cblk->server);
- timeout = 1;
- cblk->waitTimeMs = 0;
- }
- if (--waitCount == 0) {
- return TIMED_OUT;
- }
- }
- // read the server count again
- start_loop_here:
- framesReady = cblk->framesReady();
- }
- }
-
- LOGW_IF(timeout,
- "*** SERIOUS WARNING *** obtainBuffer() timed out "
- "but didn't need to be locked. We recovered, but "
- "this shouldn't happen (user=%08x, server=%08x)", cblk->user, cblk->server);
-
- cblk->waitTimeMs = 0;
-
- if (framesReq > framesReady) {
- framesReq = framesReady;
- }
-
- uint32_t u = cblk->user;
- uint32_t bufferEnd = cblk->userBase + cblk->frameCount;
-
- if (u + framesReq > bufferEnd) {
- framesReq = bufferEnd - u;
- }
-
- audioBuffer->flags = 0;
- audioBuffer->channelCount= mChannelCount;
- audioBuffer->format = mFormat;
- audioBuffer->frameCount = framesReq;
- audioBuffer->size = framesReq*mChannelCount*sizeof(int16_t);
- audioBuffer->raw = (int8_t*)cblk->buffer(u);
- active = mActive;
- return active ? status_t(NO_ERROR) : status_t(STOPPED);
-}
-
-void AudioRecord::releaseBuffer(Buffer* audioBuffer)
-{
- audio_track_cblk_t* cblk = mCblk;
- cblk->stepUser(audioBuffer->frameCount);
-}
-
-// -------------------------------------------------------------------------
-
-ssize_t AudioRecord::read(void* buffer, size_t userSize)
-{
- ssize_t read = 0;
- Buffer audioBuffer;
- int8_t *dst = static_cast<int8_t*>(buffer);
-
- if (ssize_t(userSize) < 0) {
- // sanity-check. user is most-likely passing an error code.
- LOGE("AudioRecord::read(buffer=%p, size=%u (%d)",
- buffer, userSize, userSize);
- return BAD_VALUE;
- }
-
- LOGV("read size: %d", userSize);
-
- do {
-
- audioBuffer.frameCount = userSize/mChannelCount/sizeof(int16_t);
-
- // Calling obtainBuffer() with a negative wait count causes
- // an (almost) infinite wait time.
- status_t err = obtainBuffer(&audioBuffer, -1);
- if (err < 0) {
- // out of buffers, return #bytes written
- if (err == status_t(NO_MORE_BUFFERS))
- break;
- return ssize_t(err);
- }
-
- size_t bytesRead = audioBuffer.size;
- memcpy(dst, audioBuffer.i8, bytesRead);
-
- dst += bytesRead;
- userSize -= bytesRead;
- read += bytesRead;
-
- releaseBuffer(&audioBuffer);
- } while (userSize);
-
- return read;
-}
-
-// -------------------------------------------------------------------------
-
-bool AudioRecord::processAudioBuffer(const sp<ClientRecordThread>& thread)
-{
- Buffer audioBuffer;
- uint32_t frames = mRemainingFrames;
- size_t readSize;
-
- // Manage marker callback
- if (mMarkerPosition > 0) {
- if (mCblk->user >= mMarkerPosition) {
- mCbf(EVENT_MARKER, mUserData, (void *)&mMarkerPosition);
- mMarkerPosition = 0;
- }
- }
-
- // Manage new position callback
- if (mUpdatePeriod > 0) {
- while (mCblk->user >= mNewPosition) {
- mCbf(EVENT_NEW_POS, mUserData, (void *)&mNewPosition);
- mNewPosition += mUpdatePeriod;
- }
- }
-
- do {
- audioBuffer.frameCount = frames;
- // Calling obtainBuffer() with a wait count of 1
- // limits wait time to WAIT_PERIOD_MS. This prevents from being
- // stuck here not being able to handle timed events (position, markers).
- status_t err = obtainBuffer(&audioBuffer, 1);
- if (err < NO_ERROR) {
- if (err != TIMED_OUT) {
- LOGE("Error obtaining an audio buffer, giving up.");
- return false;
- }
- break;
- }
- if (err == status_t(STOPPED)) return false;
-
- size_t reqSize = audioBuffer.size;
- mCbf(EVENT_MORE_DATA, mUserData, &audioBuffer);
- readSize = audioBuffer.size;
-
- // Sanity check on returned size
- if (ssize_t(readSize) <= 0) break;
- if (readSize > reqSize) readSize = reqSize;
-
- audioBuffer.size = readSize;
- audioBuffer.frameCount = readSize/mChannelCount/sizeof(int16_t);
- frames -= audioBuffer.frameCount;
-
- releaseBuffer(&audioBuffer);
-
- } while (frames);
-
-
- // Manage overrun callback
- if (mActive && (mCblk->framesAvailable_l() == 0)) {
- LOGV("Overrun user: %x, server: %x, flowControlFlag %d", mCblk->user, mCblk->server, mCblk->flowControlFlag);
- if (mCblk->flowControlFlag == 0) {
- mCbf(EVENT_OVERRUN, mUserData, 0);
- mCblk->flowControlFlag = 1;
- }
- }
-
- if (frames == 0) {
- mRemainingFrames = mNotificationFrames;
- } else {
- mRemainingFrames = frames;
- }
- return true;
-}
-
-// =========================================================================
-
-AudioRecord::ClientRecordThread::ClientRecordThread(AudioRecord& receiver, bool bCanCallJava)
- : Thread(bCanCallJava), mReceiver(receiver)
-{
-}
-
-bool AudioRecord::ClientRecordThread::threadLoop()
-{
- return mReceiver.processAudioBuffer(this);
-}
-
-// -------------------------------------------------------------------------
-
-}; // namespace android
-
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp
deleted file mode 100644
index 63dfc3b..0000000
--- a/media/libmedia/AudioSystem.cpp
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (C) 2006-2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "AudioSystem"
-//#define LOG_NDEBUG 0
-
-#include <utils/Log.h>
-#include <utils/IServiceManager.h>
-#include <media/AudioSystem.h>
-#include <math.h>
-
-namespace android {
-
-// client singleton for AudioFlinger binder interface
-Mutex AudioSystem::gLock;
-sp<IAudioFlinger> AudioSystem::gAudioFlinger;
-sp<AudioSystem::AudioFlingerClient> AudioSystem::gAudioFlingerClient;
-audio_error_callback AudioSystem::gAudioErrorCallback = NULL;
-// Cached values
-int AudioSystem::gOutSamplingRate[NUM_AUDIO_OUTPUT_TYPES];
-int AudioSystem::gOutFrameCount[NUM_AUDIO_OUTPUT_TYPES];
-uint32_t AudioSystem::gOutLatency[NUM_AUDIO_OUTPUT_TYPES];
-bool AudioSystem::gA2dpEnabled;
-// Cached values for recording queries
-uint32_t AudioSystem::gPrevInSamplingRate = 16000;
-int AudioSystem::gPrevInFormat = AudioSystem::PCM_16_BIT;
-int AudioSystem::gPrevInChannelCount = 1;
-size_t AudioSystem::gInBuffSize = 0;
-
-
-// establish binder interface to AudioFlinger service
-const sp<IAudioFlinger>& AudioSystem::get_audio_flinger()
-{
- Mutex::Autolock _l(gLock);
- if (gAudioFlinger.get() == 0) {
- sp<IServiceManager> sm = defaultServiceManager();
- sp<IBinder> binder;
- do {
- binder = sm->getService(String16("media.audio_flinger"));
- if (binder != 0)
- break;
- LOGW("AudioFlinger not published, waiting...");
- usleep(500000); // 0.5 s
- } while(true);
- if (gAudioFlingerClient == NULL) {
- gAudioFlingerClient = new AudioFlingerClient();
- } else {
- if (gAudioErrorCallback) {
- gAudioErrorCallback(NO_ERROR);
- }
- }
- binder->linkToDeath(gAudioFlingerClient);
- gAudioFlinger = interface_cast<IAudioFlinger>(binder);
- gAudioFlinger->registerClient(gAudioFlingerClient);
- // Cache frequently accessed parameters
- for (int output = 0; output < NUM_AUDIO_OUTPUT_TYPES; output++) {
- gOutFrameCount[output] = (int)gAudioFlinger->frameCount(output);
- gOutSamplingRate[output] = (int)gAudioFlinger->sampleRate(output);
- gOutLatency[output] = gAudioFlinger->latency(output);
- }
- gA2dpEnabled = gAudioFlinger->isA2dpEnabled();
- }
- LOGE_IF(gAudioFlinger==0, "no AudioFlinger!?");
- return gAudioFlinger;
-}
-
-// routing helper functions
-status_t AudioSystem::speakerphone(bool state) {
- uint32_t routes = state ? ROUTE_SPEAKER : ROUTE_EARPIECE;
- return setRouting(MODE_IN_CALL, routes, ROUTE_ALL);
-}
-
-status_t AudioSystem::isSpeakerphoneOn(bool* state) {
- uint32_t routes = 0;
- status_t s = getRouting(MODE_IN_CALL, &routes);
- *state = !!(routes & ROUTE_SPEAKER);
- return s;
-}
-
-status_t AudioSystem::bluetoothSco(bool state) {
- uint32_t mask = ROUTE_BLUETOOTH_SCO;
- uint32_t routes = state ? mask : ROUTE_EARPIECE;
- return setRouting(MODE_IN_CALL, routes, ROUTE_ALL);
-}
-
-status_t AudioSystem::isBluetoothScoOn(bool* state) {
- uint32_t routes = 0;
- status_t s = getRouting(MODE_IN_CALL, &routes);
- *state = !!(routes & ROUTE_BLUETOOTH_SCO);
- return s;
-}
-
-status_t AudioSystem::muteMicrophone(bool state) {
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- return af->setMicMute(state);
-}
-
-status_t AudioSystem::isMicrophoneMuted(bool* state) {
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- *state = af->getMicMute();
- return NO_ERROR;
-}
-
-status_t AudioSystem::setMasterVolume(float value)
-{
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- af->setMasterVolume(value);
- return NO_ERROR;
-}
-
-status_t AudioSystem::setMasterMute(bool mute)
-{
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- af->setMasterMute(mute);
- return NO_ERROR;
-}
-
-status_t AudioSystem::getMasterVolume(float* volume)
-{
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- *volume = af->masterVolume();
- return NO_ERROR;
-}
-
-status_t AudioSystem::getMasterMute(bool* mute)
-{
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- *mute = af->masterMute();
- return NO_ERROR;
-}
-
-status_t AudioSystem::setStreamVolume(int stream, float value)
-{
- if (uint32_t(stream) >= NUM_STREAM_TYPES) return BAD_VALUE;
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- af->setStreamVolume(stream, value);
- return NO_ERROR;
-}
-
-status_t AudioSystem::setStreamMute(int stream, bool mute)
-{
- if (uint32_t(stream) >= NUM_STREAM_TYPES) return BAD_VALUE;
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- af->setStreamMute(stream, mute);
- return NO_ERROR;
-}
-
-status_t AudioSystem::getStreamVolume(int stream, float* volume)
-{
- if (uint32_t(stream) >= NUM_STREAM_TYPES) return BAD_VALUE;
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- *volume = af->streamVolume(stream);
- return NO_ERROR;
-}
-
-status_t AudioSystem::getStreamMute(int stream, bool* mute)
-{
- if (uint32_t(stream) >= NUM_STREAM_TYPES) return BAD_VALUE;
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- *mute = af->streamMute(stream);
- return NO_ERROR;
-}
-
-status_t AudioSystem::setMode(int mode)
-{
- if (mode >= NUM_MODES) return BAD_VALUE;
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- return af->setMode(mode);
-}
-
-status_t AudioSystem::getMode(int* mode)
-{
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- *mode = af->getMode();
- return NO_ERROR;
-}
-
-status_t AudioSystem::setRouting(int mode, uint32_t routes, uint32_t mask)
-{
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- return af->setRouting(mode, routes, mask);
-}
-
-status_t AudioSystem::getRouting(int mode, uint32_t* routes)
-{
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- uint32_t r = af->getRouting(mode);
- *routes = r;
- return NO_ERROR;
-}
-
-status_t AudioSystem::isMusicActive(bool* state) {
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- *state = af->isMusicActive();
- return NO_ERROR;
-}
-
-// Temporary interface, do not use
-// TODO: Replace with a more generic key:value get/set mechanism
-status_t AudioSystem::setParameter(const char* key, const char* value) {
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- return af->setParameter(key, value);
-}
-
-// convert volume steps to natural log scale
-
-// change this value to change volume scaling
-static const float dBPerStep = 0.5f;
-// shouldn't need to touch these
-static const float dBConvert = -dBPerStep * 2.302585093f / 20.0f;
-static const float dBConvertInverse = 1.0f / dBConvert;
-
-float AudioSystem::linearToLog(int volume)
-{
- // float v = volume ? exp(float(100 - volume) * dBConvert) : 0;
- // LOGD("linearToLog(%d)=%f", volume, v);
- // return v;
- return volume ? exp(float(100 - volume) * dBConvert) : 0;
-}
-
-int AudioSystem::logToLinear(float volume)
-{
- // int v = volume ? 100 - int(dBConvertInverse * log(volume) + 0.5) : 0;
- // LOGD("logTolinear(%d)=%f", v, volume);
- // return v;
- return volume ? 100 - int(dBConvertInverse * log(volume) + 0.5) : 0;
-}
-
-status_t AudioSystem::getOutputSamplingRate(int* samplingRate, int streamType)
-{
- int output = getOutput(streamType);
-
- if (gOutSamplingRate[output] == 0) {
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- // gOutSamplingRate is updated by get_audio_flinger()
- }
- LOGV("getOutputSamplingRate() streamType %d, output %d, sampling rate %d", streamType, output, gOutSamplingRate[output]);
- *samplingRate = gOutSamplingRate[output];
-
- return NO_ERROR;
-}
-
-status_t AudioSystem::getOutputFrameCount(int* frameCount, int streamType)
-{
- int output = getOutput(streamType);
-
- if (gOutFrameCount[output] == 0) {
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- // gOutFrameCount is updated by get_audio_flinger()
- }
- LOGV("getOutputFrameCount() streamType %d, output %d, frame count %d", streamType, output, gOutFrameCount[output]);
-
- *frameCount = gOutFrameCount[output];
- return NO_ERROR;
-}
-
-status_t AudioSystem::getOutputLatency(uint32_t* latency, int streamType)
-{
- int output = getOutput(streamType);
-
- if (gOutLatency[output] == 0) {
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) return PERMISSION_DENIED;
- // gOutLatency is updated by get_audio_flinger()
- }
- LOGV("getOutputLatency() streamType %d, output %d, latency %d", streamType, output, gOutLatency[output]);
-
- *latency = gOutLatency[output];
-
- return NO_ERROR;
-}
-
-status_t AudioSystem::getInputBufferSize(uint32_t sampleRate, int format, int channelCount,
- size_t* buffSize)
-{
- // Do we have a stale gInBufferSize or are we requesting the input buffer size for new values
- if ((gInBuffSize == 0) || (sampleRate != gPrevInSamplingRate) || (format != gPrevInFormat)
- || (channelCount != gPrevInChannelCount)) {
- // save the request params
- gPrevInSamplingRate = sampleRate;
- gPrevInFormat = format;
- gPrevInChannelCount = channelCount;
-
- gInBuffSize = 0;
- const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
- if (af == 0) {
- return PERMISSION_DENIED;
- }
- gInBuffSize = af->getInputBufferSize(sampleRate, format, channelCount);
- }
- *buffSize = gInBuffSize;
-
- return NO_ERROR;
-}
-
-// ---------------------------------------------------------------------------
-
-void AudioSystem::AudioFlingerClient::binderDied(const wp<IBinder>& who) {
- Mutex::Autolock _l(AudioSystem::gLock);
- AudioSystem::gAudioFlinger.clear();
-
- for (int output = 0; output < NUM_AUDIO_OUTPUT_TYPES; output++) {
- gOutFrameCount[output] = 0;
- gOutSamplingRate[output] = 0;
- gOutLatency[output] = 0;
- }
- AudioSystem::gInBuffSize = 0;
-
- if (gAudioErrorCallback) {
- gAudioErrorCallback(DEAD_OBJECT);
- }
- LOGW("AudioFlinger server died!");
-}
-
-void AudioSystem::AudioFlingerClient::a2dpEnabledChanged(bool enabled) {
- gA2dpEnabled = enabled;
- LOGV("AudioFlinger A2DP enabled status changed! %d", enabled);
-}
-
-void AudioSystem::setErrorCallback(audio_error_callback cb) {
- Mutex::Autolock _l(AudioSystem::gLock);
- gAudioErrorCallback = cb;
-}
-
-int AudioSystem::getOutput(int streamType)
-{
- if (streamType == DEFAULT) {
- streamType = MUSIC;
- }
- if (gA2dpEnabled && routedToA2dpOutput(streamType)) {
- return AUDIO_OUTPUT_A2DP;
- } else {
- return AUDIO_OUTPUT_HARDWARE;
- }
-}
-
-bool AudioSystem::routedToA2dpOutput(int streamType) {
- switch(streamType) {
- case MUSIC:
- case VOICE_CALL:
- case BLUETOOTH_SCO:
- case SYSTEM:
- return true;
- default:
- return false;
- }
-}
-
-
-
-}; // namespace android
-
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
deleted file mode 100644
index f8520a7..0000000
--- a/media/libmedia/AudioTrack.cpp
+++ /dev/null
@@ -1,1011 +0,0 @@
-/* //device/extlibs/pv/android/AudioTrack.cpp
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "AudioTrack"
-
-#include <stdint.h>
-#include <sys/types.h>
-#include <limits.h>
-
-#include <sched.h>
-#include <sys/resource.h>
-
-#include <private/media/AudioTrackShared.h>
-
-#include <media/AudioSystem.h>
-#include <media/AudioTrack.h>
-
-#include <utils/Log.h>
-#include <utils/MemoryDealer.h>
-#include <utils/Parcel.h>
-#include <utils/IPCThreadState.h>
-#include <utils/Timers.h>
-#include <cutils/atomic.h>
-
-#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true ))
-#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false ))
-
-namespace android {
-
-// ---------------------------------------------------------------------------
-
-AudioTrack::AudioTrack()
- : mStatus(NO_INIT)
-{
-}
-
-AudioTrack::AudioTrack(
- int streamType,
- uint32_t sampleRate,
- int format,
- int channelCount,
- int frameCount,
- uint32_t flags,
- callback_t cbf,
- void* user,
- int notificationFrames)
- : mStatus(NO_INIT)
-{
- mStatus = set(streamType, sampleRate, format, channelCount,
- frameCount, flags, cbf, user, notificationFrames, 0);
-}
-
-AudioTrack::AudioTrack(
- int streamType,
- uint32_t sampleRate,
- int format,
- int channelCount,
- const sp<IMemory>& sharedBuffer,
- uint32_t flags,
- callback_t cbf,
- void* user,
- int notificationFrames)
- : mStatus(NO_INIT)
-{
- mStatus = set(streamType, sampleRate, format, channelCount,
- 0, flags, cbf, user, notificationFrames, sharedBuffer);
-}
-
-AudioTrack::~AudioTrack()
-{
- LOGV_IF(mSharedBuffer != 0, "Destructor sharedBuffer: %p", mSharedBuffer->pointer());
-
- if (mStatus == NO_ERROR) {
- // Make sure that callback function exits in the case where
- // it is looping on buffer full condition in obtainBuffer().
- // Otherwise the callback thread will never exit.
- stop();
- if (mAudioTrackThread != 0) {
- mCblk->cv.signal();
- mAudioTrackThread->requestExitAndWait();
- mAudioTrackThread.clear();
- }
- mAudioTrack.clear();
- IPCThreadState::self()->flushCommands();
- }
-}
-
-status_t AudioTrack::set(
- int streamType,
- uint32_t sampleRate,
- int format,
- int channelCount,
- int frameCount,
- uint32_t flags,
- callback_t cbf,
- void* user,
- int notificationFrames,
- const sp<IMemory>& sharedBuffer,
- bool threadCanCallJava)
-{
-
- LOGV_IF(sharedBuffer != 0, "sharedBuffer: %p, size: %d", sharedBuffer->pointer(), sharedBuffer->size());
-
- if (mAudioFlinger != 0) {
- LOGE("Track already in use");
- return INVALID_OPERATION;
- }
-
- const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger();
- if (audioFlinger == 0) {
- LOGE("Could not get audioflinger");
- return NO_INIT;
- }
- int afSampleRate;
- if (AudioSystem::getOutputSamplingRate(&afSampleRate, streamType) != NO_ERROR) {
- return NO_INIT;
- }
- int afFrameCount;
- if (AudioSystem::getOutputFrameCount(&afFrameCount, streamType) != NO_ERROR) {
- return NO_INIT;
- }
- uint32_t afLatency;
- if (AudioSystem::getOutputLatency(&afLatency, streamType) != NO_ERROR) {
- return NO_INIT;
- }
-
- // handle default values first.
- if (streamType == AudioSystem::DEFAULT) {
- streamType = AudioSystem::MUSIC;
- }
- if (sampleRate == 0) {
- sampleRate = afSampleRate;
- }
- // these below should probably come from the audioFlinger too...
- if (format == 0) {
- format = AudioSystem::PCM_16_BIT;
- }
- if (channelCount == 0) {
- channelCount = 2;
- }
-
- // validate parameters
- if (((format != AudioSystem::PCM_8_BIT) || sharedBuffer != 0) &&
- (format != AudioSystem::PCM_16_BIT)) {
- LOGE("Invalid format");
- return BAD_VALUE;
- }
- if (channelCount != 1 && channelCount != 2) {
- LOGE("Invalid channel number");
- return BAD_VALUE;
- }
-
- // Ensure that buffer depth covers at least audio hardware latency
- uint32_t minBufCount = afLatency / ((1000 * afFrameCount)/afSampleRate);
- // When playing from shared buffer, playback will start even if last audioflinger
- // block is partly filled.
- if (sharedBuffer != 0 && minBufCount > 1) {
- minBufCount--;
- }
-
- int minFrameCount = (afFrameCount*sampleRate*minBufCount)/afSampleRate;
-
- if (sharedBuffer == 0) {
- if (frameCount == 0) {
- frameCount = minFrameCount;
- }
- if (notificationFrames == 0) {
- notificationFrames = frameCount/2;
- }
- // Make sure that application is notified with sufficient margin
- // before underrun
- if (notificationFrames > frameCount/2) {
- notificationFrames = frameCount/2;
- }
- } else {
- // Ensure that buffer alignment matches channelcount
- if (((uint32_t)sharedBuffer->pointer() & (channelCount | 1)) != 0) {
- LOGE("Invalid buffer alignement: address %p, channelCount %d", sharedBuffer->pointer(), channelCount);
- return BAD_VALUE;
- }
- frameCount = sharedBuffer->size()/channelCount/sizeof(int16_t);
- }
-
- if (frameCount < minFrameCount) {
- LOGE("Invalid buffer size: minFrameCount %d, frameCount %d", minFrameCount, frameCount);
- return BAD_VALUE;
- }
-
- // create the track
- status_t status;
- sp<IAudioTrack> track = audioFlinger->createTrack(getpid(),
- streamType, sampleRate, format, channelCount, frameCount, flags, sharedBuffer, &status);
-
- if (track == 0) {
- LOGE("AudioFlinger could not create track, status: %d", status);
- return status;
- }
- sp<IMemory> cblk = track->getCblk();
- if (cblk == 0) {
- LOGE("Could not get control block");
- return NO_INIT;
- }
- if (cbf != 0) {
- mAudioTrackThread = new AudioTrackThread(*this, threadCanCallJava);
- if (mAudioTrackThread == 0) {
- LOGE("Could not create callback thread");
- return NO_INIT;
- }
- }
-
- mStatus = NO_ERROR;
-
- mAudioFlinger = audioFlinger;
- mAudioTrack = track;
- mCblkMemory = cblk;
- mCblk = static_cast<audio_track_cblk_t*>(cblk->pointer());
- mCblk->out = 1;
- // Update buffer size in case it has been limited by AudioFlinger during track creation
- mFrameCount = mCblk->frameCount;
- if (sharedBuffer == 0) {
- mCblk->buffers = (char*)mCblk + sizeof(audio_track_cblk_t);
- } else {
- mCblk->buffers = sharedBuffer->pointer();
- // Force buffer full condition as data is already present in shared memory
- mCblk->stepUser(mFrameCount);
- }
- mCblk->volume[0] = mCblk->volume[1] = 0x1000;
- mVolume[LEFT] = 1.0f;
- mVolume[RIGHT] = 1.0f;
- mSampleRate = sampleRate;
- mStreamType = streamType;
- mFormat = format;
- mChannelCount = channelCount;
- mSharedBuffer = sharedBuffer;
- mMuted = false;
- mActive = 0;
- mCbf = cbf;
- mNotificationFrames = notificationFrames;
- mRemainingFrames = notificationFrames;
- mUserData = user;
- mLatency = afLatency + (1000*mFrameCount) / mSampleRate;
- mLoopCount = 0;
- mMarkerPosition = 0;
- mNewPosition = 0;
- mUpdatePeriod = 0;
-
- return NO_ERROR;
-}
-
-status_t AudioTrack::initCheck() const
-{
- return mStatus;
-}
-
-// -------------------------------------------------------------------------
-
-uint32_t AudioTrack::latency() const
-{
- return mLatency;
-}
-
-int AudioTrack::streamType() const
-{
- return mStreamType;
-}
-
-uint32_t AudioTrack::sampleRate() const
-{
- return mSampleRate;
-}
-
-int AudioTrack::format() const
-{
- return mFormat;
-}
-
-int AudioTrack::channelCount() const
-{
- return mChannelCount;
-}
-
-uint32_t AudioTrack::frameCount() const
-{
- return mFrameCount;
-}
-
-int AudioTrack::frameSize() const
-{
- return channelCount()*((format() == AudioSystem::PCM_8_BIT) ? sizeof(uint8_t) : sizeof(int16_t));
-}
-
-sp<IMemory>& AudioTrack::sharedBuffer()
-{
- return mSharedBuffer;
-}
-
-// -------------------------------------------------------------------------
-
-void AudioTrack::start()
-{
- sp<AudioTrackThread> t = mAudioTrackThread;
-
- LOGV("start");
- if (t != 0) {
- if (t->exitPending()) {
- if (t->requestExitAndWait() == WOULD_BLOCK) {
- LOGE("AudioTrack::start called from thread");
- return;
- }
- }
- t->mLock.lock();
- }
-
- if (android_atomic_or(1, &mActive) == 0) {
- mNewPosition = mCblk->server + mUpdatePeriod;
- mCblk->bufferTimeoutMs = MAX_STARTUP_TIMEOUT_MS;
- mCblk->waitTimeMs = 0;
- if (t != 0) {
- t->run("AudioTrackThread", THREAD_PRIORITY_AUDIO_CLIENT);
- } else {
- setpriority(PRIO_PROCESS, 0, THREAD_PRIORITY_AUDIO_CLIENT);
- }
- mAudioTrack->start();
- }
-
- if (t != 0) {
- t->mLock.unlock();
- }
-}
-
-void AudioTrack::stop()
-{
- sp<AudioTrackThread> t = mAudioTrackThread;
-
- LOGV("stop");
- if (t != 0) {
- t->mLock.lock();
- }
-
- if (android_atomic_and(~1, &mActive) == 1) {
- mAudioTrack->stop();
- // Cancel loops (If we are in the middle of a loop, playback
- // would not stop until loopCount reaches 0).
- setLoop(0, 0, 0);
- // Force flush if a shared buffer is used otherwise audioflinger
- // will not stop before end of buffer is reached.
- if (mSharedBuffer != 0) {
- flush();
- }
- if (t != 0) {
- t->requestExit();
- } else {
- setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL);
- }
- }
-
- if (t != 0) {
- t->mLock.unlock();
- }
-}
-
-bool AudioTrack::stopped() const
-{
- return !mActive;
-}
-
-void AudioTrack::flush()
-{
- LOGV("flush");
-
- if (!mActive) {
- mCblk->lock.lock();
- mAudioTrack->flush();
- // Release AudioTrack callback thread in case it was waiting for new buffers
- // in AudioTrack::obtainBuffer()
- mCblk->cv.signal();
- mCblk->lock.unlock();
- }
-}
-
-void AudioTrack::pause()
-{
- LOGV("pause");
- if (android_atomic_and(~1, &mActive) == 1) {
- mActive = 0;
- mAudioTrack->pause();
- }
-}
-
-void AudioTrack::mute(bool e)
-{
- mAudioTrack->mute(e);
- mMuted = e;
-}
-
-bool AudioTrack::muted() const
-{
- return mMuted;
-}
-
-void AudioTrack::setVolume(float left, float right)
-{
- mVolume[LEFT] = left;
- mVolume[RIGHT] = right;
-
- // write must be atomic
- mCblk->volumeLR = (int32_t(int16_t(left * 0x1000)) << 16) | int16_t(right * 0x1000);
-}
-
-void AudioTrack::getVolume(float* left, float* right)
-{
- *left = mVolume[LEFT];
- *right = mVolume[RIGHT];
-}
-
-void AudioTrack::setSampleRate(int rate)
-{
- int afSamplingRate;
-
- if (AudioSystem::getOutputSamplingRate(&afSamplingRate, mStreamType) != NO_ERROR) {
- return;
- }
- // Resampler implementation limits input sampling rate to 2 x output sampling rate.
- if (rate > afSamplingRate*2) rate = afSamplingRate*2;
-
- if (rate > MAX_SAMPLE_RATE) rate = MAX_SAMPLE_RATE;
-
- mCblk->sampleRate = rate;
-}
-
-uint32_t AudioTrack::getSampleRate()
-{
- return uint32_t(mCblk->sampleRate);
-}
-
-status_t AudioTrack::setLoop(uint32_t loopStart, uint32_t loopEnd, int loopCount)
-{
- audio_track_cblk_t* cblk = mCblk;
-
-
- Mutex::Autolock _l(cblk->lock);
-
- if (loopCount == 0) {
- cblk->loopStart = UINT_MAX;
- cblk->loopEnd = UINT_MAX;
- cblk->loopCount = 0;
- mLoopCount = 0;
- return NO_ERROR;
- }
-
- if (loopStart >= loopEnd ||
- loopEnd - loopStart > mFrameCount) {
- LOGW("setLoop invalid value: loopStart %d, loopEnd %d, loopCount %d, framecount %d, user %d", loopStart, loopEnd, loopCount, mFrameCount, cblk->user);
- return BAD_VALUE;
- }
- // TODO handle shared buffer here: limit loop end to framecount
-
- cblk->loopStart = loopStart;
- cblk->loopEnd = loopEnd;
- cblk->loopCount = loopCount;
- mLoopCount = loopCount;
-
- return NO_ERROR;
-}
-
-status_t AudioTrack::getLoop(uint32_t *loopStart, uint32_t *loopEnd, int *loopCount)
-{
- if (loopStart != 0) {
- *loopStart = mCblk->loopStart;
- }
- if (loopEnd != 0) {
- *loopEnd = mCblk->loopEnd;
- }
- if (loopCount != 0) {
- if (mCblk->loopCount < 0) {
- *loopCount = -1;
- } else {
- *loopCount = mCblk->loopCount;
- }
- }
-
- return NO_ERROR;
-}
-
-status_t AudioTrack::setMarkerPosition(uint32_t marker)
-{
- if (mCbf == 0) return INVALID_OPERATION;
-
- mMarkerPosition = marker;
-
- return NO_ERROR;
-}
-
-status_t AudioTrack::getMarkerPosition(uint32_t *marker)
-{
- if (marker == 0) return BAD_VALUE;
-
- *marker = mMarkerPosition;
-
- return NO_ERROR;
-}
-
-status_t AudioTrack::setPositionUpdatePeriod(uint32_t updatePeriod)
-{
- if (mCbf == 0) return INVALID_OPERATION;
-
- uint32_t curPosition;
- getPosition(&curPosition);
- mNewPosition = curPosition + updatePeriod;
- mUpdatePeriod = updatePeriod;
-
- return NO_ERROR;
-}
-
-status_t AudioTrack::getPositionUpdatePeriod(uint32_t *updatePeriod)
-{
- if (updatePeriod == 0) return BAD_VALUE;
-
- *updatePeriod = mUpdatePeriod;
-
- return NO_ERROR;
-}
-
-status_t AudioTrack::setPosition(uint32_t position)
-{
- Mutex::Autolock _l(mCblk->lock);
-
- if (!stopped()) return INVALID_OPERATION;
-
- if (position > mCblk->user) return BAD_VALUE;
-
- mCblk->server = position;
- mCblk->forceReady = 1;
-
- return NO_ERROR;
-}
-
-status_t AudioTrack::getPosition(uint32_t *position)
-{
- if (position == 0) return BAD_VALUE;
-
- *position = mCblk->server;
-
- return NO_ERROR;
-}
-
-status_t AudioTrack::reload()
-{
- if (!stopped()) return INVALID_OPERATION;
-
- flush();
-
- mCblk->stepUser(mFrameCount);
-
- return NO_ERROR;
-}
-
-// -------------------------------------------------------------------------
-
-status_t AudioTrack::obtainBuffer(Buffer* audioBuffer, int32_t waitCount)
-{
- int active;
- int timeout = 0;
- status_t result;
- audio_track_cblk_t* cblk = mCblk;
- uint32_t framesReq = audioBuffer->frameCount;
-
- audioBuffer->frameCount = 0;
- audioBuffer->size = 0;
-
- uint32_t framesAvail = cblk->framesAvailable();
-
- if (framesAvail == 0) {
- Mutex::Autolock _l(cblk->lock);
- goto start_loop_here;
- while (framesAvail == 0) {
- active = mActive;
- if (UNLIKELY(!active)) {
- LOGV("Not active and NO_MORE_BUFFERS");
- return NO_MORE_BUFFERS;
- }
- if (UNLIKELY(!waitCount))
- return WOULD_BLOCK;
- timeout = 0;
- result = cblk->cv.waitRelative(cblk->lock, milliseconds(WAIT_PERIOD_MS));
- if (__builtin_expect(result!=NO_ERROR, false)) {
- cblk->waitTimeMs += WAIT_PERIOD_MS;
- if (cblk->waitTimeMs >= cblk->bufferTimeoutMs) {
- // timing out when a loop has been set and we have already written upto loop end
- // is a normal condition: no need to wake AudioFlinger up.
- if (cblk->user < cblk->loopEnd) {
- LOGW( "obtainBuffer timed out (is the CPU pegged?) "
- "user=%08x, server=%08x", cblk->user, cblk->server);
- mAudioFlinger->wakeUp();
- timeout = 1;
- }
- cblk->waitTimeMs = 0;
- }
-
- if (--waitCount == 0) {
- return TIMED_OUT;
- }
- }
- // read the server count again
- start_loop_here:
- framesAvail = cblk->framesAvailable_l();
- }
- }
-
- cblk->waitTimeMs = 0;
-
- if (framesReq > framesAvail) {
- framesReq = framesAvail;
- }
-
- uint32_t u = cblk->user;
- uint32_t bufferEnd = cblk->userBase + cblk->frameCount;
-
- if (u + framesReq > bufferEnd) {
- framesReq = bufferEnd - u;
- }
-
- LOGW_IF(timeout,
- "*** SERIOUS WARNING *** obtainBuffer() timed out "
- "but didn't need to be locked. We recovered, but "
- "this shouldn't happen (user=%08x, server=%08x)", cblk->user, cblk->server);
-
- audioBuffer->flags = mMuted ? Buffer::MUTE : 0;
- audioBuffer->channelCount= mChannelCount;
- audioBuffer->format = AudioSystem::PCM_16_BIT;
- audioBuffer->frameCount = framesReq;
- audioBuffer->size = framesReq*mChannelCount*sizeof(int16_t);
- audioBuffer->raw = (int8_t *)cblk->buffer(u);
- active = mActive;
- return active ? status_t(NO_ERROR) : status_t(STOPPED);
-}
-
-void AudioTrack::releaseBuffer(Buffer* audioBuffer)
-{
- audio_track_cblk_t* cblk = mCblk;
- cblk->stepUser(audioBuffer->frameCount);
-}
-
-// -------------------------------------------------------------------------
-
-ssize_t AudioTrack::write(const void* buffer, size_t userSize)
-{
-
- if (mSharedBuffer != 0) return INVALID_OPERATION;
-
- if (ssize_t(userSize) < 0) {
- // sanity-check. user is most-likely passing an error code.
- LOGE("AudioTrack::write(buffer=%p, size=%u (%d)",
- buffer, userSize, userSize);
- return BAD_VALUE;
- }
-
- LOGV("write %d bytes, mActive=%d", userSize, mActive);
-
- ssize_t written = 0;
- const int8_t *src = (const int8_t *)buffer;
- Buffer audioBuffer;
-
- do {
- audioBuffer.frameCount = userSize/mChannelCount;
- if (mFormat == AudioSystem::PCM_16_BIT) {
- audioBuffer.frameCount >>= 1;
- }
- // Calling obtainBuffer() with a negative wait count causes
- // an (almost) infinite wait time.
- status_t err = obtainBuffer(&audioBuffer, -1);
- if (err < 0) {
- // out of buffers, return #bytes written
- if (err == status_t(NO_MORE_BUFFERS))
- break;
- return ssize_t(err);
- }
-
- size_t toWrite;
- if (mFormat == AudioSystem::PCM_8_BIT) {
- // Divide capacity by 2 to take expansion into account
- toWrite = audioBuffer.size>>1;
- // 8 to 16 bit conversion
- int count = toWrite;
- int16_t *dst = (int16_t *)(audioBuffer.i8);
- while(count--) {
- *dst++ = (int16_t)(*src++^0x80) << 8;
- }
- }else {
- toWrite = audioBuffer.size;
- memcpy(audioBuffer.i8, src, toWrite);
- src += toWrite;
- }
- userSize -= toWrite;
- written += toWrite;
-
- releaseBuffer(&audioBuffer);
- } while (userSize);
-
- return written;
-}
-
-// -------------------------------------------------------------------------
-
-bool AudioTrack::processAudioBuffer(const sp<AudioTrackThread>& thread)
-{
- Buffer audioBuffer;
- uint32_t frames;
- size_t writtenSize;
-
- // Manage underrun callback
- if (mActive && (mCblk->framesReady() == 0)) {
- LOGV("Underrun user: %x, server: %x, flowControlFlag %d", mCblk->user, mCblk->server, mCblk->flowControlFlag);
- if (mCblk->flowControlFlag == 0) {
- mCbf(EVENT_UNDERRUN, mUserData, 0);
- if (mCblk->server == mCblk->frameCount) {
- mCbf(EVENT_BUFFER_END, mUserData, 0);
- }
- mCblk->flowControlFlag = 1;
- if (mSharedBuffer != 0) return false;
- }
- }
-
- // Manage loop end callback
- while (mLoopCount > mCblk->loopCount) {
- int loopCount = -1;
- mLoopCount--;
- if (mLoopCount >= 0) loopCount = mLoopCount;
-
- mCbf(EVENT_LOOP_END, mUserData, (void *)&loopCount);
- }
-
- // Manage marker callback
- if(mMarkerPosition > 0) {
- if (mCblk->server >= mMarkerPosition) {
- mCbf(EVENT_MARKER, mUserData, (void *)&mMarkerPosition);
- mMarkerPosition = 0;
- }
- }
-
- // Manage new position callback
- if(mUpdatePeriod > 0) {
- while (mCblk->server >= mNewPosition) {
- mCbf(EVENT_NEW_POS, mUserData, (void *)&mNewPosition);
- mNewPosition += mUpdatePeriod;
- }
- }
-
- // If Shared buffer is used, no data is requested from client.
- if (mSharedBuffer != 0) {
- frames = 0;
- } else {
- frames = mRemainingFrames;
- }
-
- do {
-
- audioBuffer.frameCount = frames;
-
- // Calling obtainBuffer() with a wait count of 1
- // limits wait time to WAIT_PERIOD_MS. This prevents from being
- // stuck here not being able to handle timed events (position, markers, loops).
- status_t err = obtainBuffer(&audioBuffer, 1);
- if (err < NO_ERROR) {
- if (err != TIMED_OUT) {
- LOGE("Error obtaining an audio buffer, giving up.");
- return false;
- }
- break;
- }
- if (err == status_t(STOPPED)) return false;
-
- // Divide buffer size by 2 to take into account the expansion
- // due to 8 to 16 bit conversion: the callback must fill only half
- // of the destination buffer
- if (mFormat == AudioSystem::PCM_8_BIT) {
- audioBuffer.size >>= 1;
- }
-
- size_t reqSize = audioBuffer.size;
- mCbf(EVENT_MORE_DATA, mUserData, &audioBuffer);
- writtenSize = audioBuffer.size;
-
- // Sanity check on returned size
- if (ssize_t(writtenSize) <= 0) break;
- if (writtenSize > reqSize) writtenSize = reqSize;
-
- if (mFormat == AudioSystem::PCM_8_BIT) {
- // 8 to 16 bit conversion
- const int8_t *src = audioBuffer.i8 + writtenSize-1;
- int count = writtenSize;
- int16_t *dst = audioBuffer.i16 + writtenSize-1;
- while(count--) {
- *dst-- = (int16_t)(*src--^0x80) << 8;
- }
- writtenSize <<= 1;
- }
-
- audioBuffer.size = writtenSize;
- audioBuffer.frameCount = writtenSize/mChannelCount/sizeof(int16_t);
- frames -= audioBuffer.frameCount;
-
- releaseBuffer(&audioBuffer);
- }
- while (frames);
-
- if (frames == 0) {
- mRemainingFrames = mNotificationFrames;
- } else {
- mRemainingFrames = frames;
- }
- return true;
-}
-
-status_t AudioTrack::dump(int fd, const Vector<String16>& args) const
-{
-
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- result.append(" AudioTrack::dump\n");
- snprintf(buffer, 255, " stream type(%d), left - right volume(%f, %f)\n", mStreamType, mVolume[0], mVolume[1]);
- result.append(buffer);
- snprintf(buffer, 255, " format(%d), channel count(%d), frame count(%d)\n", mFormat, mChannelCount, mFrameCount);
- result.append(buffer);
- snprintf(buffer, 255, " sample rate(%d), status(%d), muted(%d)\n", mSampleRate, mStatus, mMuted);
- result.append(buffer);
- snprintf(buffer, 255, " active(%d), latency (%d)\n", mActive, mLatency);
- result.append(buffer);
- ::write(fd, result.string(), result.size());
- return NO_ERROR;
-}
-
-// =========================================================================
-
-AudioTrack::AudioTrackThread::AudioTrackThread(AudioTrack& receiver, bool bCanCallJava)
- : Thread(bCanCallJava), mReceiver(receiver)
-{
-}
-
-bool AudioTrack::AudioTrackThread::threadLoop()
-{
- return mReceiver.processAudioBuffer(this);
-}
-
-status_t AudioTrack::AudioTrackThread::readyToRun()
-{
- return NO_ERROR;
-}
-
-void AudioTrack::AudioTrackThread::onFirstRef()
-{
-}
-
-// =========================================================================
-
-audio_track_cblk_t::audio_track_cblk_t()
- : user(0), server(0), userBase(0), serverBase(0), buffers(0), frameCount(0),
- loopStart(UINT_MAX), loopEnd(UINT_MAX), loopCount(0), volumeLR(0), flowControlFlag(1), forceReady(0)
-{
-}
-
-uint32_t audio_track_cblk_t::stepUser(uint32_t frameCount)
-{
- uint32_t u = this->user;
-
- u += frameCount;
- // Ensure that user is never ahead of server for AudioRecord
- if (out) {
- // If stepServer() has been called once, switch to normal obtainBuffer() timeout period
- if (bufferTimeoutMs == MAX_STARTUP_TIMEOUT_MS-1) {
- bufferTimeoutMs = MAX_RUN_TIMEOUT_MS;
- }
- } else if (u > this->server) {
- LOGW("stepServer occured after track reset");
- u = this->server;
- }
-
- if (u >= userBase + this->frameCount) {
- userBase += this->frameCount;
- }
-
- this->user = u;
-
- // Clear flow control error condition as new data has been written/read to/from buffer.
- flowControlFlag = 0;
-
- return u;
-}
-
-bool audio_track_cblk_t::stepServer(uint32_t frameCount)
-{
- // the code below simulates lock-with-timeout
- // we MUST do this to protect the AudioFlinger server
- // as this lock is shared with the client.
- status_t err;
-
- err = lock.tryLock();
- if (err == -EBUSY) { // just wait a bit
- usleep(1000);
- err = lock.tryLock();
- }
- if (err != NO_ERROR) {
- // probably, the client just died.
- return false;
- }
-
- uint32_t s = this->server;
-
- s += frameCount;
- if (out) {
- // Mark that we have read the first buffer so that next time stepUser() is called
- // we switch to normal obtainBuffer() timeout period
- if (bufferTimeoutMs == MAX_STARTUP_TIMEOUT_MS) {
- bufferTimeoutMs = MAX_RUN_TIMEOUT_MS - 1;
- }
- // It is possible that we receive a flush()
- // while the mixer is processing a block: in this case,
- // stepServer() is called After the flush() has reset u & s and
- // we have s > u
- if (s > this->user) {
- LOGW("stepServer occured after track reset");
- s = this->user;
- }
- }
-
- if (s >= loopEnd) {
- LOGW_IF(s > loopEnd, "stepServer: s %u > loopEnd %u", s, loopEnd);
- s = loopStart;
- if (--loopCount == 0) {
- loopEnd = UINT_MAX;
- loopStart = UINT_MAX;
- }
- }
- if (s >= serverBase + this->frameCount) {
- serverBase += this->frameCount;
- }
-
- this->server = s;
-
- cv.signal();
- lock.unlock();
- return true;
-}
-
-void* audio_track_cblk_t::buffer(uint32_t offset) const
-{
- return (int16_t *)this->buffers + (offset-userBase)*this->channels;
-}
-
-uint32_t audio_track_cblk_t::framesAvailable()
-{
- Mutex::Autolock _l(lock);
- return framesAvailable_l();
-}
-
-uint32_t audio_track_cblk_t::framesAvailable_l()
-{
- uint32_t u = this->user;
- uint32_t s = this->server;
-
- if (out) {
- uint32_t limit = (s < loopStart) ? s : loopStart;
- return limit + frameCount - u;
- } else {
- return frameCount + u - s;
- }
-}
-
-uint32_t audio_track_cblk_t::framesReady()
-{
- uint32_t u = this->user;
- uint32_t s = this->server;
-
- if (out) {
- if (u < loopEnd) {
- return u - s;
- } else {
- Mutex::Autolock _l(lock);
- if (loopCount >= 0) {
- return (loopEnd - loopStart)*loopCount + u - s;
- } else {
- return UINT_MAX;
- }
- }
- } else {
- return s - u;
- }
-}
-
-// -------------------------------------------------------------------------
-
-}; // namespace android
-
diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp
deleted file mode 100644
index 5cbb25c..0000000
--- a/media/libmedia/IAudioFlinger.cpp
+++ /dev/null
@@ -1,553 +0,0 @@
-/* //device/extlibs/pv/android/IAudioflinger.cpp
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#define LOG_TAG "IAudioFlinger"
-#include <utils/Log.h>
-
-#include <stdint.h>
-#include <sys/types.h>
-
-#include <utils/Parcel.h>
-
-#include <media/IAudioFlinger.h>
-
-namespace android {
-
-enum {
- CREATE_TRACK = IBinder::FIRST_CALL_TRANSACTION,
- OPEN_RECORD,
- SAMPLE_RATE,
- CHANNEL_COUNT,
- FORMAT,
- FRAME_COUNT,
- LATENCY,
- SET_MASTER_VOLUME,
- SET_MASTER_MUTE,
- MASTER_VOLUME,
- MASTER_MUTE,
- SET_STREAM_VOLUME,
- SET_STREAM_MUTE,
- STREAM_VOLUME,
- STREAM_MUTE,
- SET_MODE,
- GET_MODE,
- SET_ROUTING,
- GET_ROUTING,
- SET_MIC_MUTE,
- GET_MIC_MUTE,
- IS_MUSIC_ACTIVE,
- SET_PARAMETER,
- REGISTER_CLIENT,
- GET_INPUTBUFFERSIZE,
- WAKE_UP,
- IS_A2DP_ENABLED
-};
-
-class BpAudioFlinger : public BpInterface<IAudioFlinger>
-{
-public:
- BpAudioFlinger(const sp<IBinder>& impl)
- : BpInterface<IAudioFlinger>(impl)
- {
- }
-
- virtual sp<IAudioTrack> createTrack(
- pid_t pid,
- int streamType,
- uint32_t sampleRate,
- int format,
- int channelCount,
- int frameCount,
- uint32_t flags,
- const sp<IMemory>& sharedBuffer,
- status_t *status)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(pid);
- data.writeInt32(streamType);
- data.writeInt32(sampleRate);
- data.writeInt32(format);
- data.writeInt32(channelCount);
- data.writeInt32(frameCount);
- data.writeInt32(flags);
- data.writeStrongBinder(sharedBuffer->asBinder());
- status_t lStatus = remote()->transact(CREATE_TRACK, data, &reply);
- if (lStatus != NO_ERROR) {
- LOGE("createTrack error: %s", strerror(-lStatus));
- }
- lStatus = reply.readInt32();
- if (status) {
- *status = lStatus;
- }
- return interface_cast<IAudioTrack>(reply.readStrongBinder());
- }
-
- virtual sp<IAudioRecord> openRecord(
- pid_t pid,
- int streamType,
- uint32_t sampleRate,
- int format,
- int channelCount,
- int frameCount,
- uint32_t flags,
- status_t *status)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(pid);
- data.writeInt32(streamType);
- data.writeInt32(sampleRate);
- data.writeInt32(format);
- data.writeInt32(channelCount);
- data.writeInt32(frameCount);
- data.writeInt32(flags);
- remote()->transact(OPEN_RECORD, data, &reply);
- status_t lStatus = reply.readInt32();
- if (status) {
- *status = lStatus;
- }
- return interface_cast<IAudioRecord>(reply.readStrongBinder());
- }
-
- virtual uint32_t sampleRate(int output) const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(output);
- remote()->transact(SAMPLE_RATE, data, &reply);
- return reply.readInt32();
- }
-
- virtual int channelCount(int output) const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(output);
- remote()->transact(CHANNEL_COUNT, data, &reply);
- return reply.readInt32();
- }
-
- virtual int format(int output) const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(output);
- remote()->transact(FORMAT, data, &reply);
- return reply.readInt32();
- }
-
- virtual size_t frameCount(int output) const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(output);
- remote()->transact(FRAME_COUNT, data, &reply);
- return reply.readInt32();
- }
-
- virtual uint32_t latency(int output) const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(output);
- remote()->transact(LATENCY, data, &reply);
- return reply.readInt32();
- }
-
- virtual status_t setMasterVolume(float value)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeFloat(value);
- remote()->transact(SET_MASTER_VOLUME, data, &reply);
- return reply.readInt32();
- }
-
- virtual status_t setMasterMute(bool muted)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(muted);
- remote()->transact(SET_MASTER_MUTE, data, &reply);
- return reply.readInt32();
- }
-
- virtual float masterVolume() const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- remote()->transact(MASTER_VOLUME, data, &reply);
- return reply.readFloat();
- }
-
- virtual bool masterMute() const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- remote()->transact(MASTER_MUTE, data, &reply);
- return reply.readInt32();
- }
-
- virtual status_t setStreamVolume(int stream, float value)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(stream);
- data.writeFloat(value);
- remote()->transact(SET_STREAM_VOLUME, data, &reply);
- return reply.readInt32();
- }
-
- virtual status_t setStreamMute(int stream, bool muted)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(stream);
- data.writeInt32(muted);
- remote()->transact(SET_STREAM_MUTE, data, &reply);
- return reply.readInt32();
- }
-
- virtual float streamVolume(int stream) const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(stream);
- remote()->transact(STREAM_VOLUME, data, &reply);
- return reply.readFloat();
- }
-
- virtual bool streamMute(int stream) const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(stream);
- remote()->transact(STREAM_MUTE, data, &reply);
- return reply.readInt32();
- }
-
- virtual status_t setRouting(int mode, uint32_t routes, uint32_t mask)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(mode);
- data.writeInt32(routes);
- data.writeInt32(mask);
- remote()->transact(SET_ROUTING, data, &reply);
- return reply.readInt32();
- }
-
- virtual uint32_t getRouting(int mode) const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(mode);
- remote()->transact(GET_ROUTING, data, &reply);
- return reply.readInt32();
- }
-
- virtual status_t setMode(int mode)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(mode);
- remote()->transact(SET_MODE, data, &reply);
- return reply.readInt32();
- }
-
- virtual int getMode() const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- remote()->transact(GET_MODE, data, &reply);
- return reply.readInt32();
- }
-
- virtual status_t setMicMute(bool state)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(state);
- remote()->transact(SET_MIC_MUTE, data, &reply);
- return reply.readInt32();
- }
-
- virtual bool getMicMute() const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- remote()->transact(GET_MIC_MUTE, data, &reply);
- return reply.readInt32();
- }
-
- virtual bool isMusicActive() const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- remote()->transact(IS_MUSIC_ACTIVE, data, &reply);
- return reply.readInt32();
- }
-
- virtual status_t setParameter(const char* key, const char* value)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeCString(key);
- data.writeCString(value);
- remote()->transact(SET_PARAMETER, data, &reply);
- return reply.readInt32();
- }
-
- virtual void registerClient(const sp<IAudioFlingerClient>& client)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeStrongBinder(client->asBinder());
- remote()->transact(REGISTER_CLIENT, data, &reply);
- }
-
- virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32(sampleRate);
- data.writeInt32(format);
- data.writeInt32(channelCount);
- remote()->transact(GET_INPUTBUFFERSIZE, data, &reply);
- return reply.readInt32();
- }
-
- virtual void wakeUp()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- remote()->transact(WAKE_UP, data, &reply);
- return;
- }
-
- virtual bool isA2dpEnabled() const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- remote()->transact(IS_A2DP_ENABLED, data, &reply);
- return (bool)reply.readInt32();
- }
-};
-
-IMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger");
-
-// ----------------------------------------------------------------------
-
-#define CHECK_INTERFACE(interface, data, reply) \
- do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
- LOGW("Call incorrectly routed to " #interface); \
- return PERMISSION_DENIED; \
- } } while (0)
-
-status_t BnAudioFlinger::onTransact(
- uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
- switch(code) {
- case CREATE_TRACK: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- pid_t pid = data.readInt32();
- int streamType = data.readInt32();
- uint32_t sampleRate = data.readInt32();
- int format = data.readInt32();
- int channelCount = data.readInt32();
- size_t bufferCount = data.readInt32();
- uint32_t flags = data.readInt32();
- sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder());
- status_t status;
- sp<IAudioTrack> track = createTrack(pid,
- streamType, sampleRate, format,
- channelCount, bufferCount, flags, buffer, &status);
- reply->writeInt32(status);
- reply->writeStrongBinder(track->asBinder());
- return NO_ERROR;
- } break;
- case OPEN_RECORD: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- pid_t pid = data.readInt32();
- int streamType = data.readInt32();
- uint32_t sampleRate = data.readInt32();
- int format = data.readInt32();
- int channelCount = data.readInt32();
- size_t bufferCount = data.readInt32();
- uint32_t flags = data.readInt32();
- status_t status;
- sp<IAudioRecord> record = openRecord(pid, streamType,
- sampleRate, format, channelCount, bufferCount, flags, &status);
- reply->writeInt32(status);
- reply->writeStrongBinder(record->asBinder());
- return NO_ERROR;
- } break;
- case SAMPLE_RATE: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int output = data.readInt32();
- reply->writeInt32( sampleRate(output) );
- return NO_ERROR;
- } break;
- case CHANNEL_COUNT: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int output = data.readInt32();
- reply->writeInt32( channelCount(output) );
- return NO_ERROR;
- } break;
- case FORMAT: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int output = data.readInt32();
- reply->writeInt32( format(output) );
- return NO_ERROR;
- } break;
- case FRAME_COUNT: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int output = data.readInt32();
- reply->writeInt32( frameCount(output) );
- return NO_ERROR;
- } break;
- case LATENCY: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int output = data.readInt32();
- reply->writeInt32( latency(output) );
- return NO_ERROR;
- } break;
- case SET_MASTER_VOLUME: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- reply->writeInt32( setMasterVolume(data.readFloat()) );
- return NO_ERROR;
- } break;
- case SET_MASTER_MUTE: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- reply->writeInt32( setMasterMute(data.readInt32()) );
- return NO_ERROR;
- } break;
- case MASTER_VOLUME: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- reply->writeFloat( masterVolume() );
- return NO_ERROR;
- } break;
- case MASTER_MUTE: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- reply->writeInt32( masterMute() );
- return NO_ERROR;
- } break;
- case SET_STREAM_VOLUME: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int stream = data.readInt32();
- reply->writeInt32( setStreamVolume(stream, data.readFloat()) );
- return NO_ERROR;
- } break;
- case SET_STREAM_MUTE: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int stream = data.readInt32();
- reply->writeInt32( setStreamMute(stream, data.readInt32()) );
- return NO_ERROR;
- } break;
- case STREAM_VOLUME: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int stream = data.readInt32();
- reply->writeFloat( streamVolume(stream) );
- return NO_ERROR;
- } break;
- case STREAM_MUTE: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int stream = data.readInt32();
- reply->writeInt32( streamMute(stream) );
- return NO_ERROR;
- } break;
- case SET_ROUTING: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int mode = data.readInt32();
- uint32_t routes = data.readInt32();
- uint32_t mask = data.readInt32();
- reply->writeInt32( setRouting(mode, routes, mask) );
- return NO_ERROR;
- } break;
- case GET_ROUTING: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int mode = data.readInt32();
- reply->writeInt32( getRouting(mode) );
- return NO_ERROR;
- } break;
- case SET_MODE: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int mode = data.readInt32();
- reply->writeInt32( setMode(mode) );
- return NO_ERROR;
- } break;
- case GET_MODE: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- reply->writeInt32( getMode() );
- return NO_ERROR;
- } break;
- case SET_MIC_MUTE: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- int state = data.readInt32();
- reply->writeInt32( setMicMute(state) );
- return NO_ERROR;
- } break;
- case GET_MIC_MUTE: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- reply->writeInt32( getMicMute() );
- return NO_ERROR;
- } break;
- case IS_MUSIC_ACTIVE: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- reply->writeInt32( isMusicActive() );
- return NO_ERROR;
- } break;
- case SET_PARAMETER: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- const char *key = data.readCString();
- const char *value = data.readCString();
- reply->writeInt32( setParameter(key, value) );
- return NO_ERROR;
- } break;
- case REGISTER_CLIENT: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- sp<IAudioFlingerClient> client = interface_cast<IAudioFlingerClient>(data.readStrongBinder());
- registerClient(client);
- return NO_ERROR;
- } break;
- case GET_INPUTBUFFERSIZE: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- uint32_t sampleRate = data.readInt32();
- int format = data.readInt32();
- int channelCount = data.readInt32();
- reply->writeInt32( getInputBufferSize(sampleRate, format, channelCount) );
- return NO_ERROR;
- } break;
- case WAKE_UP: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- wakeUp();
- return NO_ERROR;
- } break;
- case IS_A2DP_ENABLED: {
- CHECK_INTERFACE(IAudioFlinger, data, reply);
- reply->writeInt32( (int)isA2dpEnabled() );
- return NO_ERROR;
- } break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
-// ----------------------------------------------------------------------------
-
-}; // namespace android
diff --git a/media/libmedia/IAudioFlingerClient.cpp b/media/libmedia/IAudioFlingerClient.cpp
deleted file mode 100644
index 5feb11f..0000000
--- a/media/libmedia/IAudioFlingerClient.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "IAudioFlingerClient"
-#include <utils/Log.h>
-
-#include <stdint.h>
-#include <sys/types.h>
-
-#include <utils/Parcel.h>
-
-#include <media/IAudioFlingerClient.h>
-
-namespace android {
-
-enum {
- AUDIO_OUTPUT_CHANGED = IBinder::FIRST_CALL_TRANSACTION
-};
-
-class BpAudioFlingerClient : public BpInterface<IAudioFlingerClient>
-{
-public:
- BpAudioFlingerClient(const sp<IBinder>& impl)
- : BpInterface<IAudioFlingerClient>(impl)
- {
- }
-
- void a2dpEnabledChanged(bool enabled)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioFlingerClient::getInterfaceDescriptor());
- data.writeInt32((int)enabled);
- remote()->transact(AUDIO_OUTPUT_CHANGED, data, &reply);
- }
-};
-
-IMPLEMENT_META_INTERFACE(AudioFlingerClient, "android.media.IAudioFlingerClient");
-
-// ----------------------------------------------------------------------
-
-#define CHECK_INTERFACE(interface, data, reply) \
- do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
- LOGW("Call incorrectly routed to " #interface); \
- return PERMISSION_DENIED; \
- } } while (0)
-
-status_t BnAudioFlingerClient::onTransact(
- uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
- switch(code) {
- case AUDIO_OUTPUT_CHANGED: {
- CHECK_INTERFACE(IAudioFlingerClient, data, reply);
- bool enabled = (bool)data.readInt32();
- a2dpEnabledChanged(enabled);
- return NO_ERROR;
- } break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
-// ----------------------------------------------------------------------------
-
-}; // namespace android
diff --git a/media/libmedia/IAudioRecord.cpp b/media/libmedia/IAudioRecord.cpp
deleted file mode 100644
index 6e42dac..0000000
--- a/media/libmedia/IAudioRecord.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#include <stdint.h>
-#include <sys/types.h>
-
-#include <utils/Parcel.h>
-
-#include <media/IAudioRecord.h>
-
-namespace android {
-
-enum {
- GET_CBLK = IBinder::FIRST_CALL_TRANSACTION,
- START,
- STOP
-};
-
-class BpAudioRecord : public BpInterface<IAudioRecord>
-{
-public:
- BpAudioRecord(const sp<IBinder>& impl)
- : BpInterface<IAudioRecord>(impl)
- {
- }
-
- virtual status_t start()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioRecord::getInterfaceDescriptor());
- remote()->transact(START, data, &reply);
- return reply.readInt32();
- }
-
- virtual void stop()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioRecord::getInterfaceDescriptor());
- remote()->transact(STOP, data, &reply);
- }
-
- virtual sp<IMemory> getCblk() const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioRecord::getInterfaceDescriptor());
- remote()->transact(GET_CBLK, data, &reply);
- return interface_cast<IMemory>(reply.readStrongBinder());
- }
-};
-
-IMPLEMENT_META_INTERFACE(AudioRecord, "android.media.IAudioRecord");
-
-// ----------------------------------------------------------------------
-
-#define CHECK_INTERFACE(interface, data, reply) \
- do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
- LOGW("Call incorrectly routed to " #interface); \
- return PERMISSION_DENIED; \
- } } while (0)
-
-status_t BnAudioRecord::onTransact(
- uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
- switch(code) {
- case GET_CBLK: {
- CHECK_INTERFACE(IAudioRecord, data, reply);
- reply->writeStrongBinder(getCblk()->asBinder());
- return NO_ERROR;
- } break;
- case START: {
- CHECK_INTERFACE(IAudioRecord, data, reply);
- reply->writeInt32(start());
- return NO_ERROR;
- } break;
- case STOP: {
- CHECK_INTERFACE(IAudioRecord, data, reply);
- stop();
- return NO_ERROR;
- } break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
-}; // namespace android
-
diff --git a/media/libmedia/IAudioTrack.cpp b/media/libmedia/IAudioTrack.cpp
deleted file mode 100644
index abc202d..0000000
--- a/media/libmedia/IAudioTrack.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/* //device/extlibs/pv/android/IAudioTrack.cpp
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#include <stdint.h>
-#include <sys/types.h>
-
-#include <utils/Parcel.h>
-
-#include <media/IAudioTrack.h>
-
-namespace android {
-
-enum {
- GET_CBLK = IBinder::FIRST_CALL_TRANSACTION,
- START,
- STOP,
- FLUSH,
- MUTE,
- PAUSE
-};
-
-class BpAudioTrack : public BpInterface<IAudioTrack>
-{
-public:
- BpAudioTrack(const sp<IBinder>& impl)
- : BpInterface<IAudioTrack>(impl)
- {
- }
-
- virtual status_t start()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
- remote()->transact(START, data, &reply);
- return reply.readInt32();
- }
-
- virtual void stop()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
- remote()->transact(STOP, data, &reply);
- }
-
- virtual void flush()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
- remote()->transact(FLUSH, data, &reply);
- }
-
- virtual void mute(bool e)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
- data.writeInt32(e);
- remote()->transact(MUTE, data, &reply);
- }
-
- virtual void pause()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
- remote()->transact(PAUSE, data, &reply);
- }
-
- virtual sp<IMemory> getCblk() const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
- remote()->transact(GET_CBLK, data, &reply);
- return interface_cast<IMemory>(reply.readStrongBinder());
- }
-};
-
-IMPLEMENT_META_INTERFACE(AudioTrack, "android.media.IAudioTrack");
-
-// ----------------------------------------------------------------------
-
-#define CHECK_INTERFACE(interface, data, reply) \
- do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
- LOGW("Call incorrectly routed to " #interface); \
- return PERMISSION_DENIED; \
- } } while (0)
-
-status_t BnAudioTrack::onTransact(
- uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
- switch(code) {
- case GET_CBLK: {
- CHECK_INTERFACE(IAudioTrack, data, reply);
- reply->writeStrongBinder(getCblk()->asBinder());
- return NO_ERROR;
- } break;
- case START: {
- CHECK_INTERFACE(IAudioTrack, data, reply);
- reply->writeInt32(start());
- return NO_ERROR;
- } break;
- case STOP: {
- CHECK_INTERFACE(IAudioTrack, data, reply);
- stop();
- return NO_ERROR;
- } break;
- case FLUSH: {
- CHECK_INTERFACE(IAudioTrack, data, reply);
- flush();
- return NO_ERROR;
- } break;
- case MUTE: {
- CHECK_INTERFACE(IAudioTrack, data, reply);
- mute( data.readInt32() );
- return NO_ERROR;
- } break;
- case PAUSE: {
- CHECK_INTERFACE(IAudioTrack, data, reply);
- pause();
- return NO_ERROR;
- }
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
-}; // namespace android
-
diff --git a/media/libmedia/IMediaMetadataRetriever.cpp b/media/libmedia/IMediaMetadataRetriever.cpp
deleted file mode 100644
index 85b5944..0000000
--- a/media/libmedia/IMediaMetadataRetriever.cpp
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
-**
-** Copyright (C) 2008 The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#include <stdint.h>
-#include <sys/types.h>
-#include <utils/Parcel.h>
-#include <SkBitmap.h>
-#include <media/IMediaMetadataRetriever.h>
-
-namespace android {
-
-enum {
- DISCONNECT = IBinder::FIRST_CALL_TRANSACTION,
- SET_DATA_SOURCE_URL,
- SET_DATA_SOURCE_FD,
- SET_MODE,
- GET_MODE,
- CAPTURE_FRAME,
- EXTARCT_ALBUM_ART,
- EXTRACT_METADATA,
-};
-
-class BpMediaMetadataRetriever: public BpInterface<IMediaMetadataRetriever>
-{
-public:
- BpMediaMetadataRetriever(const sp<IBinder>& impl)
- : BpInterface<IMediaMetadataRetriever>(impl)
- {
- }
-
- // disconnect from media metadata retriever service
- void disconnect()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor());
- remote()->transact(DISCONNECT, data, &reply);
- }
-
- status_t setDataSource(const char* srcUrl)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor());
- data.writeCString(srcUrl);
- remote()->transact(SET_DATA_SOURCE_URL, data, &reply);
- return reply.readInt32();
- }
-
- status_t setDataSource(int fd, int64_t offset, int64_t length)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor());
- data.writeFileDescriptor(fd);
- data.writeInt64(offset);
- data.writeInt64(length);
- remote()->transact(SET_DATA_SOURCE_FD, data, &reply);
- return reply.readInt32();
- }
-
- status_t setMode(int mode)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor());
- data.writeInt32(mode);
- remote()->transact(SET_MODE, data, &reply);
- return reply.readInt32();
- }
-
- status_t getMode(int* mode) const
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor());
- remote()->transact(GET_MODE, data, &reply);
- *mode = reply.readInt32();
- return reply.readInt32();
- }
-
- sp<IMemory> captureFrame()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor());
- remote()->transact(CAPTURE_FRAME, data, &reply);
- status_t ret = reply.readInt32();
- if (ret != NO_ERROR) {
- return NULL;
- }
- return interface_cast<IMemory>(reply.readStrongBinder());
- }
-
- sp<IMemory> extractAlbumArt()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor());
- remote()->transact(EXTARCT_ALBUM_ART, data, &reply);
- status_t ret = reply.readInt32();
- if (ret != NO_ERROR) {
- return NULL;
- }
- return interface_cast<IMemory>(reply.readStrongBinder());
- }
-
- const char* extractMetadata(int keyCode)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor());
- data.writeInt32(keyCode);
- remote()->transact(EXTRACT_METADATA, data, &reply);
- status_t ret = reply.readInt32();
- if (ret != NO_ERROR) {
- return NULL;
- }
- return reply.readCString();
- }
-};
-
-IMPLEMENT_META_INTERFACE(MediaMetadataRetriever, "android.hardware.IMediaMetadataRetriever");
-
-// ----------------------------------------------------------------------
-
-#define CHECK_INTERFACE(interface, data, reply) \
- do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
- LOGW("Call incorrectly routed to " #interface); \
- return PERMISSION_DENIED; \
- } } while (0)
-
-status_t BnMediaMetadataRetriever::onTransact(
- uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
- switch (code) {
- case DISCONNECT: {
- CHECK_INTERFACE(IMediaMetadataRetriever, data, reply);
- disconnect();
- return NO_ERROR;
- } break;
- case SET_DATA_SOURCE_URL: {
- CHECK_INTERFACE(IMediaMetadataRetriever, data, reply);
- const char* srcUrl = data.readCString();
- reply->writeInt32(setDataSource(srcUrl));
- return NO_ERROR;
- } break;
- case SET_DATA_SOURCE_FD: {
- CHECK_INTERFACE(IMediaMetadataRetriever, data, reply);
- int fd = dup(data.readFileDescriptor());
- int64_t offset = data.readInt64();
- int64_t length = data.readInt64();
- reply->writeInt32(setDataSource(fd, offset, length));
- return NO_ERROR;
- } break;
- case SET_MODE: {
- CHECK_INTERFACE(IMediaMetadataRetriever, data, reply);
- int mode = data.readInt32();
- reply->writeInt32(setMode(mode));
- return NO_ERROR;
- } break;
- case GET_MODE: {
- CHECK_INTERFACE(IMediaMetadataRetriever, data, reply);
- int mode;
- status_t status = getMode(&mode);
- reply->writeInt32(mode);
- reply->writeInt32(status);
- return NO_ERROR;
- } break;
- case CAPTURE_FRAME: {
- CHECK_INTERFACE(IMediaMetadataRetriever, data, reply);
- sp<IMemory> bitmap = captureFrame();
- if (bitmap != 0) { // Don't send NULL across the binder interface
- reply->writeInt32(NO_ERROR);
- reply->writeStrongBinder(bitmap->asBinder());
- } else {
- reply->writeInt32(UNKNOWN_ERROR);
- }
- return NO_ERROR;
- } break;
- case EXTARCT_ALBUM_ART: {
- CHECK_INTERFACE(IMediaMetadataRetriever, data, reply);
- sp<IMemory> albumArt = extractAlbumArt();
- if (albumArt != 0) { // Don't send NULL across the binder interface
- reply->writeInt32(NO_ERROR);
- reply->writeStrongBinder(albumArt->asBinder());
- } else {
- reply->writeInt32(UNKNOWN_ERROR);
- }
- return NO_ERROR;
- } break;
- case EXTRACT_METADATA: {
- CHECK_INTERFACE(IMediaMetadataRetriever, data, reply);
- int keyCode = data.readInt32();
- const char* value = extractMetadata(keyCode);
- if (value != NULL) { // Don't send NULL across the binder interface
- reply->writeInt32(NO_ERROR);
- reply->writeCString(value);
- } else {
- reply->writeInt32(UNKNOWN_ERROR);
- }
- return NO_ERROR;
- } break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
-// ----------------------------------------------------------------------------
-
-}; // namespace android
-
diff --git a/media/libmedia/IMediaPlayer.cpp b/media/libmedia/IMediaPlayer.cpp
deleted file mode 100644
index f37519f..0000000
--- a/media/libmedia/IMediaPlayer.cpp
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#include <stdint.h>
-#include <sys/types.h>
-
-#include <utils/Parcel.h>
-
-#include <media/IMediaPlayer.h>
-#include <ui/ISurface.h>
-
-namespace android {
-
-enum {
- DISCONNECT = IBinder::FIRST_CALL_TRANSACTION,
- SET_VIDEO_SURFACE,
- PREPARE_ASYNC,
- START,
- STOP,
- IS_PLAYING,
- PAUSE,
- SEEK_TO,
- GET_CURRENT_POSITION,
- GET_DURATION,
- RESET,
- SET_AUDIO_STREAM_TYPE,
- SET_LOOPING,
- SET_VOLUME
-};
-
-class BpMediaPlayer: public BpInterface<IMediaPlayer>
-{
-public:
- BpMediaPlayer(const sp<IBinder>& impl)
- : BpInterface<IMediaPlayer>(impl)
- {
- }
-
- // disconnect from media player service
- void disconnect()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- remote()->transact(DISCONNECT, data, &reply);
- }
-
- status_t setVideoSurface(const sp<ISurface>& surface)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- data.writeStrongBinder(surface->asBinder());
- remote()->transact(SET_VIDEO_SURFACE, data, &reply);
- return reply.readInt32();
- }
-
- status_t prepareAsync()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- remote()->transact(PREPARE_ASYNC, data, &reply);
- return reply.readInt32();
- }
-
- status_t start()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- remote()->transact(START, data, &reply);
- return reply.readInt32();
- }
-
- status_t stop()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- remote()->transact(STOP, data, &reply);
- return reply.readInt32();
- }
-
- status_t isPlaying(bool* state)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- remote()->transact(IS_PLAYING, data, &reply);
- *state = reply.readInt32();
- return reply.readInt32();
- }
-
- status_t pause()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- remote()->transact(PAUSE, data, &reply);
- return reply.readInt32();
- }
-
- status_t seekTo(int msec)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- data.writeInt32(msec);
- remote()->transact(SEEK_TO, data, &reply);
- return reply.readInt32();
- }
-
- status_t getCurrentPosition(int* msec)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- remote()->transact(GET_CURRENT_POSITION, data, &reply);
- *msec = reply.readInt32();
- return reply.readInt32();
- }
-
- status_t getDuration(int* msec)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- remote()->transact(GET_DURATION, data, &reply);
- *msec = reply.readInt32();
- return reply.readInt32();
- }
-
- status_t reset()
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- remote()->transact(RESET, data, &reply);
- return reply.readInt32();
- }
-
- status_t setAudioStreamType(int type)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- data.writeInt32(type);
- remote()->transact(SET_AUDIO_STREAM_TYPE, data, &reply);
- return reply.readInt32();
- }
-
- status_t setLooping(int loop)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
- data.writeInt32(loop);
- remote()->transact(SET_LOOPING, data, &reply);
- return reply.readInt32();
- }
-
- status_t setVolume(float leftVolume, float rightVolume)
- {
- Parcel data, reply;
- data.writeFloat(leftVolume);
- data.writeFloat(rightVolume);
- remote()->transact(SET_VOLUME, data, &reply);
- return reply.readInt32();
- }
-};
-
-IMPLEMENT_META_INTERFACE(MediaPlayer, "android.hardware.IMediaPlayer");
-
-// ----------------------------------------------------------------------
-
-#define CHECK_INTERFACE(interface, data, reply) \
- do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
- LOGW("Call incorrectly routed to " #interface); \
- return PERMISSION_DENIED; \
- } } while (0)
-
-status_t BnMediaPlayer::onTransact(
- uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
- switch(code) {
- case DISCONNECT: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- disconnect();
- return NO_ERROR;
- } break;
- case SET_VIDEO_SURFACE: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- sp<ISurface> surface = interface_cast<ISurface>(data.readStrongBinder());
- reply->writeInt32(setVideoSurface(surface));
- return NO_ERROR;
- } break;
- case PREPARE_ASYNC: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- reply->writeInt32(prepareAsync());
- return NO_ERROR;
- } break;
- case START: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- reply->writeInt32(start());
- return NO_ERROR;
- } break;
- case STOP: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- reply->writeInt32(stop());
- return NO_ERROR;
- } break;
- case IS_PLAYING: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- bool state;
- status_t ret = isPlaying(&state);
- reply->writeInt32(state);
- reply->writeInt32(ret);
- return NO_ERROR;
- } break;
- case PAUSE: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- reply->writeInt32(pause());
- return NO_ERROR;
- } break;
- case SEEK_TO: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- reply->writeInt32(seekTo(data.readInt32()));
- return NO_ERROR;
- } break;
- case GET_CURRENT_POSITION: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- int msec;
- status_t ret = getCurrentPosition(&msec);
- reply->writeInt32(msec);
- reply->writeInt32(ret);
- return NO_ERROR;
- } break;
- case GET_DURATION: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- int msec;
- status_t ret = getDuration(&msec);
- reply->writeInt32(msec);
- reply->writeInt32(ret);
- return NO_ERROR;
- } break;
- case RESET: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- reply->writeInt32(reset());
- return NO_ERROR;
- } break;
- case SET_AUDIO_STREAM_TYPE: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- reply->writeInt32(setAudioStreamType(data.readInt32()));
- return NO_ERROR;
- } break;
- case SET_LOOPING: {
- CHECK_INTERFACE(IMediaPlayer, data, reply);
- reply->writeInt32(setLooping(data.readInt32()));
- return NO_ERROR;
- } break;
- case SET_VOLUME: {
- reply->writeInt32(setVolume(data.readFloat(), data.readFloat()));
- return NO_ERROR;
- } break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
-// ----------------------------------------------------------------------------
-
-}; // namespace android
-
diff --git a/media/libmedia/IMediaPlayerClient.cpp b/media/libmedia/IMediaPlayerClient.cpp
deleted file mode 100644
index 65022cd..0000000
--- a/media/libmedia/IMediaPlayerClient.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#include <utils/RefBase.h>
-#include <utils/IInterface.h>
-#include <utils/Parcel.h>
-
-#include <media/IMediaPlayerClient.h>
-
-namespace android {
-
-enum {
- NOTIFY = IBinder::FIRST_CALL_TRANSACTION,
-};
-
-class BpMediaPlayerClient: public BpInterface<IMediaPlayerClient>
-{
-public:
- BpMediaPlayerClient(const sp<IBinder>& impl)
- : BpInterface<IMediaPlayerClient>(impl)
- {
- }
-
- virtual void notify(int msg, int ext1, int ext2)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayerClient::getInterfaceDescriptor());
- data.writeInt32(msg);
- data.writeInt32(ext1);
- data.writeInt32(ext2);
- remote()->transact(NOTIFY, data, &reply, IBinder::FLAG_ONEWAY);
- }
-};
-
-IMPLEMENT_META_INTERFACE(MediaPlayerClient, "android.hardware.IMediaPlayerClient");
-
-// ----------------------------------------------------------------------
-
-#define CHECK_INTERFACE(interface, data, reply) \
- do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
- LOGW("Call incorrectly routed to " #interface); \
- return PERMISSION_DENIED; \
- } } while (0)
-
-status_t BnMediaPlayerClient::onTransact(
- uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
- switch(code) {
- case NOTIFY: {
- CHECK_INTERFACE(IMediaPlayerClient, data, reply);
- int msg = data.readInt32();
- int ext1 = data.readInt32();
- int ext2 = data.readInt32();
- notify(msg, ext1, ext2);
- return NO_ERROR;
- } break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
-}; // namespace android
-
diff --git a/media/libmedia/IMediaPlayerService.cpp b/media/libmedia/IMediaPlayerService.cpp
deleted file mode 100644
index 370e3fb..0000000
--- a/media/libmedia/IMediaPlayerService.cpp
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#include <stdint.h>
-#include <sys/types.h>
-#include <utils/Parcel.h>
-
-#include <utils/IMemory.h>
-#include <media/IMediaPlayerService.h>
-#include <media/IMediaRecorder.h>
-
-namespace android {
-
-enum {
- CREATE_URL = IBinder::FIRST_CALL_TRANSACTION,
- CREATE_FD,
- DECODE_URL,
- DECODE_FD,
- CREATE_MEDIA_RECORDER,
- CREATE_METADATA_RETRIEVER,
-};
-
-class BpMediaPlayerService: public BpInterface<IMediaPlayerService>
-{
-public:
- BpMediaPlayerService(const sp<IBinder>& impl)
- : BpInterface<IMediaPlayerService>(impl)
- {
- }
-
- virtual sp<IMediaMetadataRetriever> createMetadataRetriever(pid_t pid)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor());
- data.writeInt32(pid);
- remote()->transact(CREATE_METADATA_RETRIEVER, data, &reply);
- return interface_cast<IMediaMetadataRetriever>(reply.readStrongBinder());
- }
-
- virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, const char* url)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor());
- data.writeInt32(pid);
- data.writeStrongBinder(client->asBinder());
- data.writeCString(url);
- remote()->transact(CREATE_URL, data, &reply);
- return interface_cast<IMediaPlayer>(reply.readStrongBinder());
- }
-
- virtual sp<IMediaRecorder> createMediaRecorder(pid_t pid)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor());
- data.writeInt32(pid);
- remote()->transact(CREATE_MEDIA_RECORDER, data, &reply);
- return interface_cast<IMediaRecorder>(reply.readStrongBinder());
- }
-
- virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, int fd, int64_t offset, int64_t length)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor());
- data.writeInt32(pid);
- data.writeStrongBinder(client->asBinder());
- data.writeFileDescriptor(fd);
- data.writeInt64(offset);
- data.writeInt64(length);
- remote()->transact(CREATE_FD, data, &reply);
- return interface_cast<IMediaPlayer>(reply.readStrongBinder());
- }
-
- virtual sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor());
- data.writeCString(url);
- remote()->transact(DECODE_URL, data, &reply);
- *pSampleRate = uint32_t(reply.readInt32());
- *pNumChannels = reply.readInt32();
- *pFormat = reply.readInt32();
- return interface_cast<IMemory>(reply.readStrongBinder());
- }
-
- virtual sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor());
- data.writeFileDescriptor(fd);
- data.writeInt64(offset);
- data.writeInt64(length);
- remote()->transact(DECODE_FD, data, &reply);
- *pSampleRate = uint32_t(reply.readInt32());
- *pNumChannels = reply.readInt32();
- *pFormat = reply.readInt32();
- return interface_cast<IMemory>(reply.readStrongBinder());
- }
-};
-
-IMPLEMENT_META_INTERFACE(MediaPlayerService, "android.hardware.IMediaPlayerService");
-
-// ----------------------------------------------------------------------
-
-#define CHECK_INTERFACE(interface, data, reply) \
- do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
- LOGW("Call incorrectly routed to " #interface); \
- return PERMISSION_DENIED; \
- } } while (0)
-
-status_t BnMediaPlayerService::onTransact(
- uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
- switch(code) {
- case CREATE_URL: {
- CHECK_INTERFACE(IMediaPlayerService, data, reply);
- pid_t pid = data.readInt32();
- sp<IMediaPlayerClient> client = interface_cast<IMediaPlayerClient>(data.readStrongBinder());
- const char* url = data.readCString();
- sp<IMediaPlayer> player = create(pid, client, url);
- reply->writeStrongBinder(player->asBinder());
- return NO_ERROR;
- } break;
- case CREATE_FD: {
- CHECK_INTERFACE(IMediaPlayerService, data, reply);
- pid_t pid = data.readInt32();
- sp<IMediaPlayerClient> client = interface_cast<IMediaPlayerClient>(data.readStrongBinder());
- int fd = dup(data.readFileDescriptor());
- int64_t offset = data.readInt64();
- int64_t length = data.readInt64();
- sp<IMediaPlayer> player = create(pid, client, fd, offset, length);
- reply->writeStrongBinder(player->asBinder());
- return NO_ERROR;
- } break;
- case DECODE_URL: {
- CHECK_INTERFACE(IMediaPlayerService, data, reply);
- const char* url = data.readCString();
- uint32_t sampleRate;
- int numChannels;
- int format;
- sp<IMemory> player = decode(url, &sampleRate, &numChannels, &format);
- reply->writeInt32(sampleRate);
- reply->writeInt32(numChannels);
- reply->writeInt32(format);
- reply->writeStrongBinder(player->asBinder());
- return NO_ERROR;
- } break;
- case DECODE_FD: {
- CHECK_INTERFACE(IMediaPlayerService, data, reply);
- int fd = dup(data.readFileDescriptor());
- int64_t offset = data.readInt64();
- int64_t length = data.readInt64();
- uint32_t sampleRate;
- int numChannels;
- int format;
- sp<IMemory> player = decode(fd, offset, length, &sampleRate, &numChannels, &format);
- reply->writeInt32(sampleRate);
- reply->writeInt32(numChannels);
- reply->writeInt32(format);
- reply->writeStrongBinder(player->asBinder());
- return NO_ERROR;
- } break;
- case CREATE_MEDIA_RECORDER: {
- CHECK_INTERFACE(IMediaPlayerService, data, reply);
- pid_t pid = data.readInt32();
- sp<IMediaRecorder> recorder = createMediaRecorder(pid);
- reply->writeStrongBinder(recorder->asBinder());
- return NO_ERROR;
- } break;
- case CREATE_METADATA_RETRIEVER: {
- CHECK_INTERFACE(IMediaPlayerService, data, reply);
- pid_t pid = data.readInt32();
- sp<IMediaMetadataRetriever> retriever = createMetadataRetriever(pid);
- reply->writeStrongBinder(retriever->asBinder());
- return NO_ERROR;
- } break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
-// ----------------------------------------------------------------------------
-
-}; // namespace android
-
diff --git a/media/libmedia/IMediaRecorder.cpp b/media/libmedia/IMediaRecorder.cpp
deleted file mode 100644
index 507d03e..0000000
--- a/media/libmedia/IMediaRecorder.cpp
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
- **
- ** Copyright 2008, HTC Inc.
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "IMediaRecorder"
-#include <utils/Log.h>
-#include <utils/Parcel.h>
-#include <ui/ISurface.h>
-#include <ui/ICamera.h>
-#include <media/IMediaRecorder.h>
-
-namespace android {
-
-enum {
- RELEASE = IBinder::FIRST_CALL_TRANSACTION,
- INIT,
- CLOSE,
- RESET,
- STOP,
- START,
- PREPARE,
- GET_MAX_AMPLITUDE,
- SET_VIDEO_SOURCE,
- SET_AUDIO_SOURCE,
- SET_OUTPUT_FORMAT,
- SET_VIDEO_ENCODER,
- SET_AUDIO_ENCODER,
- SET_OUTPUT_FILE_PATH,
- SET_OUTPUT_FILE_FD,
- SET_VIDEO_SIZE,
- SET_VIDEO_FRAMERATE,
- SET_PREVIEW_SURFACE,
- SET_CAMERA
-};
-
-class BpMediaRecorder: public BpInterface<IMediaRecorder>
-{
-public:
- BpMediaRecorder(const sp<IBinder>& impl)
- : BpInterface<IMediaRecorder>(impl)
- {
- }
-
- status_t setCamera(const sp<ICamera>& camera)
- {
- LOGV("setCamera(%p)", camera.get());
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeStrongBinder(camera->asBinder());
- remote()->transact(SET_CAMERA, data, &reply);
- return reply.readInt32();
- }
-
- status_t setPreviewSurface(const sp<ISurface>& surface)
- {
- LOGV("setPreviewSurface(%p)", surface.get());
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeStrongBinder(surface->asBinder());
- remote()->transact(SET_PREVIEW_SURFACE, data, &reply);
- return reply.readInt32();
- }
-
- status_t init()
- {
- LOGV("init");
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- remote()->transact(INIT, data, &reply);
- return reply.readInt32();
- }
-
- status_t setVideoSource(int vs)
- {
- LOGV("setVideoSource(%d)", vs);
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeInt32(vs);
- remote()->transact(SET_VIDEO_SOURCE, data, &reply);
- return reply.readInt32();
- }
-
- status_t setAudioSource(int as)
- {
- LOGV("setAudioSource(%d)", as);
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeInt32(as);
- remote()->transact(SET_AUDIO_SOURCE, data, &reply);
- return reply.readInt32();
- }
-
- status_t setOutputFormat(int of)
- {
- LOGV("setOutputFormat(%d)", of);
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeInt32(of);
- remote()->transact(SET_OUTPUT_FORMAT, data, &reply);
- return reply.readInt32();
- }
-
- status_t setVideoEncoder(int ve)
- {
- LOGV("setVideoEncoder(%d)", ve);
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeInt32(ve);
- remote()->transact(SET_VIDEO_ENCODER, data, &reply);
- return reply.readInt32();
- }
-
- status_t setAudioEncoder(int ae)
- {
- LOGV("setAudioEncoder(%d)", ae);
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeInt32(ae);
- remote()->transact(SET_AUDIO_ENCODER, data, &reply);
- return reply.readInt32();
- }
-
- status_t setOutputFile(const char* path)
- {
- LOGV("setOutputFile(%s)", path);
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeCString(path);
- remote()->transact(SET_OUTPUT_FILE_PATH, data, &reply);
- return reply.readInt32();
- }
-
- status_t setOutputFile(int fd, int64_t offset, int64_t length) {
- LOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length);
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeFileDescriptor(fd);
- data.writeInt64(offset);
- data.writeInt64(length);
- remote()->transact(SET_OUTPUT_FILE_FD, data, &reply);
- return reply.readInt32();
- }
-
- status_t setVideoSize(int width, int height)
- {
- LOGV("setVideoSize(%dx%d)", width, height);
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeInt32(width);
- data.writeInt32(height);
- remote()->transact(SET_VIDEO_SIZE, data, &reply);
- return reply.readInt32();
- }
-
- status_t setVideoFrameRate(int frames_per_second)
- {
- LOGV("setVideoFrameRate(%d)", frames_per_second);
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeInt32(frames_per_second);
- remote()->transact(SET_VIDEO_FRAMERATE, data, &reply);
- return reply.readInt32();
- }
-
- status_t prepare()
- {
- LOGV("prepare");
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- remote()->transact(PREPARE, data, &reply);
- return reply.readInt32();
- }
-
- status_t getMaxAmplitude(int* max)
- {
- LOGV("getMaxAmplitude");
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- remote()->transact(GET_MAX_AMPLITUDE, data, &reply);
- *max = reply.readInt32();
- return reply.readInt32();
- }
-
- status_t start()
- {
- LOGV("start");
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- remote()->transact(START, data, &reply);
- return reply.readInt32();
- }
-
- status_t stop()
- {
- LOGV("stop");
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- remote()->transact(STOP, data, &reply);
- return reply.readInt32();
- }
-
- status_t reset()
- {
- LOGV("reset");
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- remote()->transact(RESET, data, &reply);
- return reply.readInt32();
- }
-
- status_t close()
- {
- LOGV("close");
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- remote()->transact(CLOSE, data, &reply);
- return reply.readInt32();
- }
-
- status_t release()
- {
- LOGV("release");
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- remote()->transact(RELEASE, data, &reply);
- return reply.readInt32();
- }
-};
-
-IMPLEMENT_META_INTERFACE(MediaRecorder, "android.hardware.IMediaRecorder");
-
-// ----------------------------------------------------------------------
-
-#define CHECK_INTERFACE(interface, data, reply) \
- do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
- LOGW("Call incorrectly routed to " #interface); \
- return PERMISSION_DENIED; \
- } } while (0)
-
-status_t BnMediaRecorder::onTransact(
- uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
- switch(code) {
- case RELEASE: {
- LOGV("RELEASE");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- reply->writeInt32(release());
- return NO_ERROR;
- } break;
- case INIT: {
- LOGV("INIT");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- reply->writeInt32(init());
- return NO_ERROR;
- } break;
- case CLOSE: {
- LOGV("CLOSE");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- reply->writeInt32(close());
- return NO_ERROR;
- } break;
- case RESET: {
- LOGV("RESET");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- reply->writeInt32(reset());
- return NO_ERROR;
- } break;
- case STOP: {
- LOGV("STOP");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- reply->writeInt32(stop());
- return NO_ERROR;
- } break;
- case START: {
- LOGV("START");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- reply->writeInt32(start());
- return NO_ERROR;
- } break;
- case PREPARE: {
- LOGV("PREPARE");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- reply->writeInt32(prepare());
- return NO_ERROR;
- } break;
- case GET_MAX_AMPLITUDE: {
- LOGV("GET_MAX_AMPLITUDE");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- int max = 0;
- status_t ret = getMaxAmplitude(&max);
- reply->writeInt32(max);
- reply->writeInt32(ret);
- return NO_ERROR;
- } break;
- case SET_VIDEO_SOURCE: {
- LOGV("SET_VIDEO_SOURCE");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- int vs = data.readInt32();
- reply->writeInt32(setVideoSource(vs));
- return NO_ERROR;
- } break;
- case SET_AUDIO_SOURCE: {
- LOGV("SET_AUDIO_SOURCE");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- int as = data.readInt32();
- reply->writeInt32(setAudioSource(as));
- return NO_ERROR;
- } break;
- case SET_OUTPUT_FORMAT: {
- LOGV("SET_OUTPUT_FORMAT");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- int of = data.readInt32();
- reply->writeInt32(setOutputFormat(of));
- return NO_ERROR;
- } break;
- case SET_VIDEO_ENCODER: {
- LOGV("SET_VIDEO_ENCODER");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- int ve = data.readInt32();
- reply->writeInt32(setVideoEncoder(ve));
- return NO_ERROR;
- } break;
- case SET_AUDIO_ENCODER: {
- LOGV("SET_AUDIO_ENCODER");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- int ae = data.readInt32();
- reply->writeInt32(setAudioEncoder(ae));
- return NO_ERROR;
-
- } break;
- case SET_OUTPUT_FILE_PATH: {
- LOGV("SET_OUTPUT_FILE_PATH");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- const char* path = data.readCString();
- reply->writeInt32(setOutputFile(path));
- return NO_ERROR;
- } break;
- case SET_OUTPUT_FILE_FD: {
- LOGV("SET_OUTPUT_FILE_FD");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- int fd = dup(data.readFileDescriptor());
- int64_t offset = data.readInt64();
- int64_t length = data.readInt64();
- reply->writeInt32(setOutputFile(fd, offset, length));
- return NO_ERROR;
- } break;
- case SET_VIDEO_SIZE: {
- LOGV("SET_VIDEO_SIZE");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- int width = data.readInt32();
- int height = data.readInt32();
- reply->writeInt32(setVideoSize(width, height));
- return NO_ERROR;
- } break;
- case SET_VIDEO_FRAMERATE: {
- LOGV("SET_VIDEO_FRAMERATE");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- int frames_per_second = data.readInt32();
- reply->writeInt32(setVideoFrameRate(frames_per_second));
- return NO_ERROR;
- } break;
- case SET_PREVIEW_SURFACE: {
- LOGV("SET_PREVIEW_SURFACE");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- sp<ISurface> surface = interface_cast<ISurface>(data.readStrongBinder());
- reply->writeInt32(setPreviewSurface(surface));
- return NO_ERROR;
- } break;
- case SET_CAMERA: {
- LOGV("SET_CAMERA");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- sp<ICamera> camera = interface_cast<ICamera>(data.readStrongBinder());
- reply->writeInt32(setCamera(camera));
- return NO_ERROR;
- } break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
-// ----------------------------------------------------------------------------
-
-}; // namespace android
diff --git a/media/libmedia/JetPlayer.cpp b/media/libmedia/JetPlayer.cpp
deleted file mode 100644
index 2c62104..0000000
--- a/media/libmedia/JetPlayer.cpp
+++ /dev/null
@@ -1,489 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_NDEBUG 0
-#define LOG_TAG "JetPlayer-C"
-
-#include <utils/Log.h>
-#include <utils/threads.h>
-
-#include <media/JetPlayer.h>
-
-
-#ifdef HAVE_GETTID
-static pid_t myTid() { return gettid(); }
-#else
-static pid_t myTid() { return getpid(); }
-#endif
-
-
-namespace android
-{
-
-static const int MIX_NUM_BUFFERS = 4;
-static const S_EAS_LIB_CONFIG* pLibConfig = NULL;
-
-//-------------------------------------------------------------------------------------------------
-JetPlayer::JetPlayer(jobject javaJetPlayer, int maxTracks, int trackBufferSize) :
- mEventCallback(NULL),
- mJavaJetPlayerRef(javaJetPlayer),
- mTid(-1),
- mRender(false),
- mPaused(false),
- mMaxTracks(maxTracks),
- mEasData(NULL),
- mEasJetFileLoc(NULL),
- mAudioTrack(NULL),
- mTrackBufferSize(trackBufferSize)
-{
- LOGV("JetPlayer constructor");
- mPreviousJetStatus.currentUserID = -1;
- mPreviousJetStatus.segmentRepeatCount = -1;
- mPreviousJetStatus.numQueuedSegments = -1;
- mPreviousJetStatus.paused = true;
-}
-
-//-------------------------------------------------------------------------------------------------
-JetPlayer::~JetPlayer()
-{
- LOGV("~JetPlayer");
- release();
-
-}
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::init()
-{
- //Mutex::Autolock lock(&mMutex);
-
- EAS_RESULT result;
-
- // retrieve the EAS library settings
- if (pLibConfig == NULL)
- pLibConfig = EAS_Config();
- if (pLibConfig == NULL) {
- LOGE("JetPlayer::init(): EAS library configuration could not be retrieved, aborting.");
- return EAS_FAILURE;
- }
-
- // init the EAS library
- result = EAS_Init(&mEasData);
- if( result != EAS_SUCCESS) {
- LOGE("JetPlayer::init(): Error initializing Sonivox EAS library, aborting.");
- mState = EAS_STATE_ERROR;
- return result;
- }
- // init the JET library with the default app event controller range
- result = JET_Init(mEasData, NULL, sizeof(S_JET_CONFIG));
- if( result != EAS_SUCCESS) {
- LOGE("JetPlayer::init(): Error initializing JET library, aborting.");
- mState = EAS_STATE_ERROR;
- return result;
- }
-
- // create the output AudioTrack
- mAudioTrack = new AudioTrack();
- mAudioTrack->set(AudioSystem::MUSIC, //TODO parametrize this
- pLibConfig->sampleRate,
- 1, // format = PCM 16bits per sample,
- pLibConfig->numChannels,
- mTrackBufferSize,
- 0);
-
- // create render and playback thread
- {
- Mutex::Autolock l(mMutex);
- LOGV("JetPlayer::init(): trying to start render thread");
- createThreadEtc(renderThread, this, "jetRenderThread", ANDROID_PRIORITY_AUDIO);
- mCondition.wait(mMutex);
- }
- if (mTid > 0) {
- // render thread started, we're ready
- LOGV("JetPlayer::init(): render thread(%d) successfully started.", mTid);
- mState = EAS_STATE_READY;
- } else {
- LOGE("JetPlayer::init(): failed to start render thread.");
- mState = EAS_STATE_ERROR;
- return EAS_FAILURE;
- }
-
- return EAS_SUCCESS;
-}
-
-void JetPlayer::setEventCallback(jetevent_callback eventCallback)
-{
- Mutex::Autolock l(mMutex);
- mEventCallback = eventCallback;
-}
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::release()
-{
- LOGV("JetPlayer::release()");
- Mutex::Autolock lock(mMutex);
- mPaused = true;
- mRender = false;
- if (mEasData) {
- JET_Pause(mEasData);
- JET_CloseFile(mEasData);
- JET_Shutdown(mEasData);
- EAS_Shutdown(mEasData);
- }
- if (mEasJetFileLoc) {
- free(mEasJetFileLoc);
- mEasJetFileLoc = NULL;
- }
- if (mAudioTrack) {
- mAudioTrack->stop();
- mAudioTrack->flush();
- delete mAudioTrack;
- mAudioTrack = NULL;
- }
- if (mAudioBuffer) {
- delete mAudioBuffer;
- mAudioBuffer = NULL;
- }
- mEasData = NULL;
-
- return EAS_SUCCESS;
-}
-
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::renderThread(void* p) {
-
- return ((JetPlayer*)p)->render();
-}
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::render() {
- EAS_RESULT result = EAS_FAILURE;
- EAS_I32 count;
- int temp;
- bool audioStarted = false;
-
- LOGV("JetPlayer::render(): entering");
-
- // allocate render buffer
- mAudioBuffer =
- new EAS_PCM[pLibConfig->mixBufferSize * pLibConfig->numChannels * MIX_NUM_BUFFERS];
- if (!mAudioBuffer) {
- LOGE("JetPlayer::render(): mAudioBuffer allocate failed");
- goto threadExit;
- }
-
- // signal main thread that we started
- {
- Mutex::Autolock l(mMutex);
- mTid = myTid();
- LOGV("JetPlayer::render(): render thread(%d) signal", mTid);
- mCondition.signal();
- }
-
- while (1) {
- mMutex.lock(); // [[[[[[[[ LOCK ---------------------------------------
-
- // nothing to render, wait for client thread to wake us up
- while (!mRender)
- {
- LOGV("JetPlayer::render(): signal wait");
- if (audioStarted) {
- mAudioTrack->pause();
- // we have to restart the playback once we start rendering again
- audioStarted = false;
- }
- mCondition.wait(mMutex);
- LOGV("JetPlayer::render(): signal rx'd");
- }
-
- // render midi data into the input buffer
- int num_output = 0;
- EAS_PCM* p = mAudioBuffer;
- for (int i = 0; i < MIX_NUM_BUFFERS; i++) {
- result = EAS_Render(mEasData, p, pLibConfig->mixBufferSize, &count);
- if (result != EAS_SUCCESS) {
- LOGE("JetPlayer::render(): EAS_Render returned error %ld", result);
- }
- p += count * pLibConfig->numChannels;
- num_output += count * pLibConfig->numChannels * sizeof(EAS_PCM);
-
- // send events that were generated (if any) to the event callback
- fireEventsFromJetQueue();
- }
-
- // update playback state
- //LOGV("JetPlayer::render(): updating state");
- JET_Status(mEasData, &mJetStatus);
- fireUpdateOnStatusChange();
- mPaused = mJetStatus.paused;
-
- mMutex.unlock(); // UNLOCK ]]]]]]]] -----------------------------------
-
- // check audio output track
- if (mAudioTrack == NULL) {
- LOGE("JetPlayer::render(): output AudioTrack was not created");
- goto threadExit;
- }
-
- // Write data to the audio hardware
- //LOGV("JetPlayer::render(): writing to audio output");
- if ((temp = mAudioTrack->write(mAudioBuffer, num_output)) < 0) {
- LOGE("JetPlayer::render(): Error in writing:%d",temp);
- return temp;
- }
-
- // start audio output if necessary
- if (!audioStarted) {
- LOGV("JetPlayer::render(): starting audio playback");
- mAudioTrack->start();
- audioStarted = true;
- }
-
- }//while (1)
-
-threadExit:
- mAudioTrack->flush();
- if (mAudioBuffer) {
- delete [] mAudioBuffer;
- mAudioBuffer = NULL;
- }
- mMutex.lock();
- mTid = -1;
- mCondition.signal();
- mMutex.unlock();
- return result;
-}
-
-
-//-------------------------------------------------------------------------------------------------
-// fire up an update if any of the status fields has changed
-// precondition: mMutex locked
-void JetPlayer::fireUpdateOnStatusChange()
-{
- if( (mJetStatus.currentUserID != mPreviousJetStatus.currentUserID)
- ||(mJetStatus.segmentRepeatCount != mPreviousJetStatus.segmentRepeatCount) ) {
- if(mEventCallback) {
- mEventCallback(
- JetPlayer::JET_USERID_UPDATE,
- mJetStatus.currentUserID,
- mJetStatus.segmentRepeatCount,
- mJavaJetPlayerRef);
- }
- mPreviousJetStatus.currentUserID = mJetStatus.currentUserID;
- mPreviousJetStatus.segmentRepeatCount = mJetStatus.segmentRepeatCount;
- }
-
- if(mJetStatus.numQueuedSegments != mPreviousJetStatus.numQueuedSegments) {
- if(mEventCallback) {
- mEventCallback(
- JetPlayer::JET_NUMQUEUEDSEGMENT_UPDATE,
- mJetStatus.numQueuedSegments,
- -1,
- mJavaJetPlayerRef);
- }
- mPreviousJetStatus.numQueuedSegments = mJetStatus.numQueuedSegments;
- }
-
- if(mJetStatus.paused != mPreviousJetStatus.paused) {
- if(mEventCallback) {
- mEventCallback(JetPlayer::JET_PAUSE_UPDATE,
- mJetStatus.paused,
- -1,
- mJavaJetPlayerRef);
- }
- mPreviousJetStatus.paused = mJetStatus.paused;
- }
-
-}
-
-
-//-------------------------------------------------------------------------------------------------
-// fire up all the JET events in the JET engine queue (until the queue is empty)
-// precondition: mMutex locked
-void JetPlayer::fireEventsFromJetQueue()
-{
- if(!mEventCallback) {
- // no callback, just empty the event queue
- while (JET_GetEvent(mEasData, NULL, NULL)) { }
- return;
- }
-
- EAS_U32 rawEvent;
- while (JET_GetEvent(mEasData, &rawEvent, NULL)) {
- mEventCallback(
- JetPlayer::JET_EVENT,
- rawEvent,
- -1,
- mJavaJetPlayerRef);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::loadFromFile(const char* path)
-{
- LOGV("JetPlayer::loadFromFile(): path=%s", path);
-
- Mutex::Autolock lock(mMutex);
-
- mEasJetFileLoc = (EAS_FILE_LOCATOR) malloc(sizeof(EAS_FILE));
- memset(mJetFilePath, 0, 256);
- strncpy(mJetFilePath, path, strlen(path));
- mEasJetFileLoc->path = mJetFilePath;
-
- mEasJetFileLoc->fd = 0;
- mEasJetFileLoc->length = 0;
- mEasJetFileLoc->offset = 0;
-
- EAS_RESULT result = JET_OpenFile(mEasData, mEasJetFileLoc);
- if(result != EAS_SUCCESS)
- mState = EAS_STATE_ERROR;
- else
- mState = EAS_STATE_OPEN;
- return( result );
-}
-
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::loadFromFD(const int fd, const long long offset, const long long length)
-{
- LOGV("JetPlayer::loadFromFD(): fd=%d offset=%lld length=%lld", fd, offset, length);
-
- Mutex::Autolock lock(mMutex);
-
- mEasJetFileLoc = (EAS_FILE_LOCATOR) malloc(sizeof(EAS_FILE));
- mEasJetFileLoc->fd = fd;
- mEasJetFileLoc->offset = offset;
- mEasJetFileLoc->length = length;
- mEasJetFileLoc->path = NULL;
-
- EAS_RESULT result = JET_OpenFile(mEasData, mEasJetFileLoc);
- if(result != EAS_SUCCESS)
- mState = EAS_STATE_ERROR;
- else
- mState = EAS_STATE_OPEN;
- return( result );
-}
-
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::closeFile()
-{
- Mutex::Autolock lock(mMutex);
- return JET_CloseFile(mEasData);
-}
-
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::play()
-{
- LOGV("JetPlayer::play(): entering");
- Mutex::Autolock lock(mMutex);
-
- EAS_RESULT result = JET_Play(mEasData);
-
- mPaused = false;
- mRender = true;
-
- JET_Status(mEasData, &mJetStatus);
- this->dumpJetStatus(&mJetStatus);
-
- fireUpdateOnStatusChange();
-
- // wake up render thread
- LOGV("JetPlayer::play(): wakeup render thread");
- mCondition.signal();
-
- return result;
-}
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::pause()
-{
- Mutex::Autolock lock(mMutex);
- mPaused = true;
- EAS_RESULT result = JET_Pause(mEasData);
-
- mRender = false;
-
- JET_Status(mEasData, &mJetStatus);
- this->dumpJetStatus(&mJetStatus);
- fireUpdateOnStatusChange();
-
-
- return result;
-}
-
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::queueSegment(int segmentNum, int libNum, int repeatCount, int transpose,
- EAS_U32 muteFlags, EAS_U8 userID)
-{
- LOGV("JetPlayer::queueSegment segmentNum=%d, libNum=%d, repeatCount=%d, transpose=%d",
- segmentNum, libNum, repeatCount, transpose);
- Mutex::Autolock lock(mMutex);
- return JET_QueueSegment(mEasData, segmentNum, libNum, repeatCount, transpose, muteFlags, userID);
-}
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::setMuteFlags(EAS_U32 muteFlags, bool sync)
-{
- Mutex::Autolock lock(mMutex);
- return JET_SetMuteFlags(mEasData, muteFlags, sync);
-}
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::setMuteFlag(int trackNum, bool muteFlag, bool sync)
-{
- Mutex::Autolock lock(mMutex);
- return JET_SetMuteFlag(mEasData, trackNum, muteFlag, sync);
-}
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::triggerClip(int clipId)
-{
- LOGV("JetPlayer::triggerClip clipId=%d", clipId);
- Mutex::Autolock lock(mMutex);
- return JET_TriggerClip(mEasData, clipId);
-}
-
-//-------------------------------------------------------------------------------------------------
-int JetPlayer::clearQueue()
-{
- LOGV("JetPlayer::clearQueue");
- Mutex::Autolock lock(mMutex);
- return JET_Clear_Queue(mEasData);
-}
-
-//-------------------------------------------------------------------------------------------------
-void JetPlayer::dump()
-{
- LOGE("JetPlayer dump: JET file=%s", mEasJetFileLoc->path);
-}
-
-void JetPlayer::dumpJetStatus(S_JET_STATUS* pJetStatus)
-{
- if(pJetStatus!=NULL)
- LOGV(">> current JET player status: userID=%d segmentRepeatCount=%d numQueuedSegments=%d paused=%d",
- pJetStatus->currentUserID, pJetStatus->segmentRepeatCount,
- pJetStatus->numQueuedSegments, pJetStatus->paused);
- else
- LOGE(">> JET player status is NULL");
-}
-
-
-} // end namespace android
-
diff --git a/media/libmedia/MODULE_LICENSE_APACHE2 b/media/libmedia/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/media/libmedia/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/media/libmedia/NOTICE b/media/libmedia/NOTICE
deleted file mode 100644
index c5b1efa..0000000
--- a/media/libmedia/NOTICE
+++ /dev/null
@@ -1,190 +0,0 @@
-
- Copyright (c) 2005-2008, The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
diff --git a/media/libmedia/ToneGenerator.cpp b/media/libmedia/ToneGenerator.cpp
deleted file mode 100644
index 5416629..0000000
--- a/media/libmedia/ToneGenerator.cpp
+++ /dev/null
@@ -1,730 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "ToneGenerator"
-#include <utils/threads.h>
-
-#include <stdio.h>
-#include <math.h>
-#include <utils/Log.h>
-#include <sys/resource.h>
-#include <utils/RefBase.h>
-#include <utils/Timers.h>
-#include "media/ToneGenerator.h"
-
-namespace android {
-
-// Descriptors for all available tones (See ToneGenerator::ToneDescriptor class declaration for details)
-const ToneGenerator::ToneDescriptor
- ToneGenerator::toneDescriptors[NUM_TONES] = {
- // waveFreq[] segments[] repeatCnt
- { { 1336, 941, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_0
- { { 1209, 697, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_1
- { { 1336, 697, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_2
- { { 1477, 697, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_3
- { { 1209, 770, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_4
- { { 1336, 770, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_5
- { { 1477, 770, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_6
- { { 1209, 852, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_7
- { { 1336, 852, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_8
- { { 1477, 852, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_9
- { { 1209, 941, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_S
- { { 1477, 941, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_P
- { { 1633, 697, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_A
- { { 1633, 770, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_B
- { { 1633, 852, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_C
- { { 1633, 941, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_DTMF_D
- { { 425, 0 }, { ToneGenerator::TONEGEN_INF, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_SUP_DIAL
- { { 425, 0 }, { 500, 500, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_SUP_BUSY
- { { 425, 0 }, { 200, 200, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_SUP_CONGESTION
- { { 425, 0 }, { 200, 0 }, 0 }, // TONE_SUP_RADIO_ACK
- { { 425, 0 }, { 200, 200, 0 }, 2 }, // TONE_SUP_RADIO_NOTAVAIL
- { { 950, 1400, 1800, 0 }, { 330, 1000, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_SUP_ERROR
- { { 425, 0 }, { 200, 600, 200, 3000, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_SUP_CALL_WAITING
- { { 425, 0 }, { 1000, 4000, 0 }, ToneGenerator::TONEGEN_INF }, // TONE_SUP_RINGTONE
- { { 400, 1200, 0 }, { 40, 0 }, 0 }, // TONE_PROP_BEEP
- { { 1200, 0 }, { 100, 100, 0 }, 1 }, // TONE_PROP_ACK
- { { 300, 400, 500, 0 }, { 400, 0 }, 0 }, // TONE_PROP_NACK
- { { 400, 1200, 0 }, { 200, 0 }, 0 }, // TONE_PROP_PROMPT
- { { 400, 1200, 0 }, { 40, 200, 40, 0 }, 0 } // TONE_PROP_BEEP2
- };
-
-////////////////////////////////////////////////////////////////////////////////
-// ToneGenerator class Implementation
-////////////////////////////////////////////////////////////////////////////////
-
-
-//---------------------------------- public methods ----------------------------
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: ToneGenerator::ToneGenerator()
-//
-// Description: Constructor. Initializes the tone sequencer, intantiates required sine wave
-// generators, instantiates output audio track.
-//
-// Input:
-// toneType: Type of tone generated (values in enum tone_type)
-// streamType: Type of stream used for tone playback (enum AudioTrack::stream_type)
-// volume: volume applied to tone (0.0 to 1.0)
-//
-// Output:
-// none
-//
-////////////////////////////////////////////////////////////////////////////////
-ToneGenerator::ToneGenerator(int streamType, float volume) {
-
- LOGV("ToneGenerator constructor: streamType=%d, volume=%f\n", streamType, volume);
-
- mState = TONE_IDLE;
-
- if (AudioSystem::getOutputSamplingRate(&mSamplingRate, streamType) != NO_ERROR) {
- LOGE("Unable to marshal AudioFlinger");
- return;
- }
- mStreamType = streamType;
- mVolume = volume;
- mpAudioTrack = 0;
- mpToneDesc = 0;
- mpNewToneDesc = 0;
- // Generate tone by chunks of 20 ms to keep cadencing precision
- mProcessSize = (mSamplingRate * 20) / 1000;
-
- if (initAudioTrack()) {
- LOGV("ToneGenerator INIT OK, time: %d\n", (unsigned int)(systemTime()/1000000));
- } else {
- LOGV("!!!ToneGenerator INIT FAILED!!!\n");
- }
-}
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: ToneGenerator::~ToneGenerator()
-//
-// Description: Destructor. Stop sound playback and delete audio track if
-// needed and delete sine wave generators.
-//
-// Input:
-// none
-//
-// Output:
-// none
-//
-////////////////////////////////////////////////////////////////////////////////
-ToneGenerator::~ToneGenerator() {
- LOGV("ToneGenerator destructor\n");
-
- if (mpAudioTrack) {
- stopTone();
- LOGV("Delete Track: %p\n", mpAudioTrack);
- delete mpAudioTrack;
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: ToneGenerator::startTone()
-//
-// Description: Starts tone playback.
-//
-// Input:
-// none
-//
-// Output:
-// none
-//
-////////////////////////////////////////////////////////////////////////////////
-bool ToneGenerator::startTone(int toneType) {
- bool lResult = false;
-
- if (toneType >= NUM_TONES)
- return lResult;
-
- if (mState == TONE_IDLE) {
- LOGV("startTone: try to re-init AudioTrack");
- if (!initAudioTrack()) {
- return lResult;
- }
- }
-
- LOGV("startTone\n");
-
- mLock.lock();
-
- // Get descriptor for requested tone
- mpNewToneDesc = &toneDescriptors[toneType];
-
- if (mState == TONE_INIT) {
- if (prepareWave()) {
- LOGV("Immediate start, time %d\n", (unsigned int)(systemTime()/1000000));
- lResult = true;
- mState = TONE_STARTING;
- mLock.unlock();
- mpAudioTrack->start();
- mLock.lock();
- if (mState == TONE_STARTING) {
- LOGV("Wait for start callback");
- if (mWaitCbkCond.waitRelative(mLock, seconds(1)) != NO_ERROR) {
- LOGE("--- Immediate start timed out");
- mState = TONE_IDLE;
- lResult = false;
- }
- }
- } else {
- mState == TONE_IDLE;
- }
- } else {
- LOGV("Delayed start\n");
-
- mState = TONE_RESTARTING;
- if (mWaitCbkCond.waitRelative(mLock, seconds(1)) == NO_ERROR) {
- if (mState != TONE_IDLE) {
- lResult = true;
- }
- LOGV("cond received");
- } else {
- LOGE("--- Delayed start timed out");
- mState = TONE_IDLE;
- }
- }
- mLock.unlock();
-
- LOGV_IF(lResult, "Tone started, time %d\n", (unsigned int)(systemTime()/1000000));
- LOGW_IF(!lResult, "Tone start failed!!!, time %d\n", (unsigned int)(systemTime()/1000000));
-
- return lResult;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: ToneGenerator::stopTone()
-//
-// Description: Stops tone playback.
-//
-// Input:
-// none
-//
-// Output:
-// none
-//
-////////////////////////////////////////////////////////////////////////////////
-void ToneGenerator::stopTone() {
- LOGV("stopTone");
-
- mLock.lock();
- if (mState == TONE_PLAYING || mState == TONE_STARTING || mState == TONE_RESTARTING) {
- mState = TONE_STOPPING;
- LOGV("waiting cond");
- status_t lStatus = mWaitCbkCond.waitRelative(mLock, seconds(1));
- if (lStatus == NO_ERROR) {
- LOGV("track stop complete, time %d", (unsigned int)(systemTime()/1000000));
- } else {
- LOGE("--- Stop timed out");
- mState = TONE_IDLE;
- mpAudioTrack->stop();
- }
- }
-
- clearWaveGens();
-
- mLock.unlock();
-}
-
-//---------------------------------- private methods ---------------------------
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: ToneGenerator::initAudioTrack()
-//
-// Description: Allocates and configures AudioTrack used for PCM output.
-//
-// Input:
-// none
-//
-// Output:
-// none
-//
-////////////////////////////////////////////////////////////////////////////////
-bool ToneGenerator::initAudioTrack() {
-
- if (mpAudioTrack) {
- delete mpAudioTrack;
- mpAudioTrack = 0;
- }
-
- // Open audio track in mono, PCM 16bit, default sampling rate, default buffer size
- mpAudioTrack
- = new AudioTrack(mStreamType, 0, AudioSystem::PCM_16_BIT, 1, 0, 0, audioCallback, this, 0);
-
- if (mpAudioTrack == 0) {
- LOGE("AudioTrack allocation failed");
- goto initAudioTrack_exit;
- }
- LOGV("Create Track: %p\n", mpAudioTrack);
-
- if (mpAudioTrack->initCheck() != NO_ERROR) {
- LOGE("AudioTrack->initCheck failed");
- goto initAudioTrack_exit;
- }
-
- mpAudioTrack->setVolume(mVolume, mVolume);
-
- mState = TONE_INIT;
-
- return true;
-
-initAudioTrack_exit:
-
- // Cleanup
- if (mpAudioTrack) {
- LOGV("Delete Track I: %p\n", mpAudioTrack);
- delete mpAudioTrack;
- mpAudioTrack = 0;
- }
-
- return false;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: ToneGenerator::audioCallback()
-//
-// Description: AudioTrack callback implementation. Generates a block of
-// PCM samples
-// and manages tone generator sequencer: tones pulses, tone duration...
-//
-// Input:
-// user reference (pointer to our ToneGenerator)
-// info audio buffer descriptor
-//
-// Output:
-// returned value: always true.
-//
-////////////////////////////////////////////////////////////////////////////////
-void ToneGenerator::audioCallback(int event, void* user, void *info) {
-
- if (event != AudioTrack::EVENT_MORE_DATA) return;
-
- const AudioTrack::Buffer *buffer = static_cast<const AudioTrack::Buffer *>(info);
- ToneGenerator *lpToneGen = static_cast<ToneGenerator *>(user);
- short *lpOut = buffer->i16;
- unsigned int lNumSmp = buffer->size/sizeof(short);
-
- if (buffer->size == 0) return;
-
-
- // Clear output buffer: WaveGenerator accumulates into lpOut buffer
- memset(lpOut, 0, buffer->size);
-
- while (lNumSmp) {
- unsigned int lReqSmp = lNumSmp < lpToneGen->mProcessSize*2 ? lNumSmp : lpToneGen->mProcessSize;
- unsigned int lGenSmp;
- unsigned int lWaveCmd = WaveGenerator::WAVEGEN_CONT;
- bool lSignal = false;
-
- lpToneGen->mLock.lock();
-
- // Update pcm frame count and end time (current time at the end of this process)
- lpToneGen->mTotalSmp += lReqSmp;
-
- // Update tone gen state machine and select wave gen command
- switch (lpToneGen->mState) {
- case TONE_PLAYING:
- lWaveCmd = WaveGenerator::WAVEGEN_CONT;
- break;
- case TONE_STARTING:
- LOGV("Starting Cbk");
-
- lWaveCmd = WaveGenerator::WAVEGEN_START;
- break;
- case TONE_STOPPING:
- case TONE_RESTARTING:
- LOGV("Stop/restart Cbk");
-
- lWaveCmd = WaveGenerator::WAVEGEN_STOP;
- lpToneGen->mNextSegSmp = TONEGEN_INF; // forced to skip state machine management below
- break;
- default:
- LOGV("Extra Cbk");
- goto audioCallback_EndLoop;
- }
-
-
- // Exit if tone sequence is over
- if (lpToneGen->mpToneDesc->segments[lpToneGen->mCurSegment] == 0) {
- if (lpToneGen->mState == TONE_PLAYING) {
- lpToneGen->mState = TONE_STOPPING;
- }
- goto audioCallback_EndLoop;
- }
-
- if (lpToneGen->mTotalSmp > lpToneGen->mNextSegSmp) {
- // Time to go to next sequence segment
-
- LOGV("End Segment, time: %d\n", (unsigned int)(systemTime()/1000000));
-
- lGenSmp = lReqSmp;
-
- if (lpToneGen->mCurSegment & 0x0001) {
- // If odd segment, OFF -> ON transition : reset wave generator
- lWaveCmd = WaveGenerator::WAVEGEN_START;
-
- LOGV("OFF->ON, lGenSmp: %d, lReqSmp: %d\n", lGenSmp, lReqSmp);
- } else {
- // If even segment, ON -> OFF transition : ramp volume down
- lWaveCmd = WaveGenerator::WAVEGEN_STOP;
-
- LOGV("ON->OFF, lGenSmp: %d, lReqSmp: %d\n", lGenSmp, lReqSmp);
- }
-
- // Pre increment segment index and handle loop if last segment reached
- if (lpToneGen->mpToneDesc->segments[++lpToneGen->mCurSegment] == 0) {
- LOGV("Last Seg: %d\n", lpToneGen->mCurSegment);
-
- // Pre increment loop count and restart if total count not reached. Stop sequence otherwise
- if (++lpToneGen->mCurCount <= lpToneGen->mpToneDesc->repeatCnt) {
- LOGV("Repeating Count: %d\n", lpToneGen->mCurCount);
-
- lpToneGen->mCurSegment = 0;
-
- LOGV("New segment %d, Next Time: %d\n", lpToneGen->mCurSegment,
- (lpToneGen->mNextSegSmp*1000)/lpToneGen->mSamplingRate);
-
- } else {
- LOGV("End repeat, time: %d\n", (unsigned int)(systemTime()/1000000));
-
- // Cancel OFF->ON transition in case previous segment tone state was OFF
- if (!(lpToneGen->mCurSegment & 0x0001)) {
- lGenSmp = 0;
- }
- }
- } else {
- LOGV("New segment %d, Next Time: %d\n", lpToneGen->mCurSegment,
- (lpToneGen->mNextSegSmp*1000)/lpToneGen->mSamplingRate);
- }
-
- // Update next segment transition position. No harm to do it also for last segment as lpToneGen->mNextSegSmp won't be used any more
- lpToneGen->mNextSegSmp
- += (lpToneGen->mpToneDesc->segments[lpToneGen->mCurSegment] * lpToneGen->mSamplingRate) / 1000;
-
- } else {
- // Inside a segment keep tone ON or OFF
- if (lpToneGen->mCurSegment & 0x0001) {
- lGenSmp = 0; // If odd segment, tone is currently OFF
- } else {
- lGenSmp = lReqSmp; // If event segment, tone is currently ON
- }
- }
-
- if (lGenSmp) {
- // If samples must be generated, call all active wave generators and acumulate waves in lpOut
- unsigned int lWaveIdx;
-
- for (lWaveIdx = 0; lWaveIdx < (unsigned int)lpToneGen->mWaveGens.size(); lWaveIdx++) {
- WaveGenerator *lpWaveGen = lpToneGen->mWaveGens[lWaveIdx];
- lpWaveGen->getSamples(lpOut, lGenSmp, lWaveCmd);
- }
- }
-
- lNumSmp -= lReqSmp;
- lpOut += lReqSmp;
-
-audioCallback_EndLoop:
-
- switch (lpToneGen->mState) {
- case TONE_RESTARTING:
- LOGV("Cbk restarting track\n");
- if (lpToneGen->prepareWave()) {
- lpToneGen->mState = TONE_STARTING;
- } else {
- LOGW("Cbk restarting prepareWave() failed\n");
- lpToneGen->mState = TONE_IDLE;
- lpToneGen->mpAudioTrack->stop();
- // Force loop exit
- lNumSmp = 0;
- }
- lSignal = true;
- break;
- case TONE_STOPPING:
- lpToneGen->mState = TONE_INIT;
- LOGV("Cbk Stopping track\n");
- lSignal = true;
- lpToneGen->mpAudioTrack->stop();
-
- // Force loop exit
- lNumSmp = 0;
- break;
- case TONE_STARTING:
- LOGV("Cbk starting track\n");
- lpToneGen->mState = TONE_PLAYING;
- lSignal = true;
- break;
- default:
- break;
- }
-
- if (lSignal)
- lpToneGen->mWaitCbkCond.signal();
- lpToneGen->mLock.unlock();
- }
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: ToneGenerator::prepareWave()
-//
-// Description: Prepare wave generators and reset tone sequencer state machine.
-// mpNewToneDesc must have been initialized befoire calling this function.
-// Input:
-// none
-//
-// Output:
-// returned value: true if wave generators have been created, false otherwise
-//
-////////////////////////////////////////////////////////////////////////////////
-bool ToneGenerator::prepareWave() {
- unsigned int lCnt = 0;
- unsigned int lNumWaves;
-
- if (!mpNewToneDesc) {
- return false;
- }
- // Remove existing wave generators if any
- clearWaveGens();
-
- mpToneDesc = mpNewToneDesc;
-
- // Get total number of sine waves: needed to adapt sine wave gain.
- lNumWaves = numWaves();
-
- // Instantiate as many wave generators as listed in descriptor
- while (lCnt < lNumWaves) {
- ToneGenerator::WaveGenerator *lpWaveGen =
- new ToneGenerator::WaveGenerator((unsigned short)mSamplingRate,
- mpToneDesc->waveFreq[lCnt],
- TONEGEN_GAIN/lNumWaves);
- if (lpWaveGen == 0) {
- goto prepareWave_exit;
- }
-
- mWaveGens.push(lpWaveGen);
- LOGV("Create sine: %d\n", mpToneDesc->waveFreq[lCnt]);
- lCnt++;
- }
-
- // Initialize tone sequencer
- mTotalSmp = 0;
- mCurSegment = 0;
- mCurCount = 0;
- mNextSegSmp = (mpToneDesc->segments[0] * mSamplingRate) / 1000;
-
- return true;
-
-prepareWave_exit:
-
- clearWaveGens();
-
- return false;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: ToneGenerator::numWaves()
-//
-// Description: Count number of sine waves needed to generate tone (e.g 2 for DTMF).
-//
-// Input:
-// none
-//
-// Output:
-// returned value: nummber of sine waves
-//
-////////////////////////////////////////////////////////////////////////////////
-unsigned int ToneGenerator::numWaves() {
- unsigned int lCnt = 0;
-
- while (mpToneDesc->waveFreq[lCnt]) {
- lCnt++;
- }
-
- return lCnt;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: ToneGenerator::clearWaveGens()
-//
-// Description: Removes all wave generators.
-//
-// Input:
-// none
-//
-// Output:
-// none
-//
-////////////////////////////////////////////////////////////////////////////////
-void ToneGenerator::clearWaveGens() {
- LOGV("Clearing mWaveGens:");
-
- while (!mWaveGens.isEmpty()) {
- delete mWaveGens.top();
- mWaveGens.pop();
- }
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-// WaveGenerator::WaveGenerator class Implementation
-////////////////////////////////////////////////////////////////////////////////
-
-//---------------------------------- public methods ----------------------------
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: WaveGenerator::WaveGenerator()
-//
-// Description: Constructor.
-//
-// Input:
-// samplingRate: Output sampling rate in Hz
-// frequency: Frequency of the sine wave to generate in Hz
-// volume: volume (0.0 to 1.0)
-//
-// Output:
-// none
-//
-////////////////////////////////////////////////////////////////////////////////
-ToneGenerator::WaveGenerator::WaveGenerator(unsigned short samplingRate,
- unsigned short frequency, float volume) {
- double d0;
- double F_div_Fs; // frequency / samplingRate
-
- F_div_Fs = frequency / (double)samplingRate;
- d0 = - (float)GEN_AMP * sin(2 * M_PI * F_div_Fs);
- mS2_0 = (short)d0;
- mS1 = 0;
- mS2 = mS2_0;
-
- mAmplitude_Q15 = (short)(32767. * 32767. * volume / GEN_AMP);
- // take some margin for amplitude fluctuation
- if (mAmplitude_Q15 > 32500)
- mAmplitude_Q15 = 32500;
-
- d0 = 32768.0 * cos(2 * M_PI * F_div_Fs); // Q14*2*cos()
- if (d0 > 32767)
- d0 = 32767;
- mA1_Q14 = (short) d0;
-
- LOGV("WaveGenerator init, mA1_Q14: %d, mS2_0: %d, mAmplitude_Q15: %d\n",
- mA1_Q14, mS2_0, mAmplitude_Q15);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: WaveGenerator::~WaveGenerator()
-//
-// Description: Destructor.
-//
-// Input:
-// none
-//
-// Output:
-// none
-//
-////////////////////////////////////////////////////////////////////////////////
-ToneGenerator::WaveGenerator::~WaveGenerator() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Method: WaveGenerator::getSamples()
-//
-// Description: Generates count samples of a sine wave and accumulates
-// result in outBuffer.
-//
-// Input:
-// outBuffer: Output buffer where to accumulate samples.
-// count: number of samples to produce.
-// command: special action requested (see enum gen_command).
-//
-// Output:
-// none
-//
-////////////////////////////////////////////////////////////////////////////////
-void ToneGenerator::WaveGenerator::getSamples(short *outBuffer,
- unsigned int count, unsigned int command) {
- long lS1, lS2;
- long lA1, lAmplitude;
- long Sample; // current sample
-
- // init local
- if (command == WAVEGEN_START) {
- lS1 = (long)0;
- lS2 = (long)mS2_0;
- } else {
- lS1 = (long)mS1;
- lS2 = (long)mS2;
- }
- lA1 = (long)mA1_Q14;
- lAmplitude = (long)mAmplitude_Q15;
-
- if (command == WAVEGEN_STOP) {
- lAmplitude <<= 16;
- if (count == 0) {
- return;
- }
- long dec = lAmplitude/count;
- // loop generation
- while (count--) {
- Sample = ((lA1 * lS1) >> S_Q14) - lS2;
- // shift delay
- lS2 = lS1;
- lS1 = Sample;
- Sample = ((lAmplitude>>16) * Sample) >> S_Q15;
- *(outBuffer++) += (short)Sample; // put result in buffer
- lAmplitude -= dec;
- }
- } else {
- // loop generation
- while (count--) {
- Sample = ((lA1 * lS1) >> S_Q14) - lS2;
- // shift delay
- lS2 = lS1;
- lS1 = Sample;
- Sample = (lAmplitude * Sample) >> S_Q15;
- *(outBuffer++) += (short)Sample; // put result in buffer
- }
- }
-
- // save status
- mS1 = (short)lS1;
- mS2 = (short)lS2;
-}
-
-} // end namespace android
-
diff --git a/media/libmedia/mediametadataretriever.cpp b/media/libmedia/mediametadataretriever.cpp
deleted file mode 100644
index 09afc6c..0000000
--- a/media/libmedia/mediametadataretriever.cpp
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "MediaMetadataRetriever"
-
-#include <utils/IServiceManager.h>
-#include <utils/IPCThreadState.h>
-#include <media/mediametadataretriever.h>
-#include <media/IMediaPlayerService.h>
-#include <utils/Log.h>
-#include <dlfcn.h>
-
-namespace android {
-
-// client singleton for binder interface to service
-Mutex MediaMetadataRetriever::sServiceLock;
-sp<IMediaPlayerService> MediaMetadataRetriever::sService;
-sp<MediaMetadataRetriever::DeathNotifier> MediaMetadataRetriever::sDeathNotifier;
-
-const sp<IMediaPlayerService>& MediaMetadataRetriever::getService()
-{
- Mutex::Autolock lock(sServiceLock);
- if (sService.get() == 0) {
- sp<IServiceManager> sm = defaultServiceManager();
- sp<IBinder> binder;
- do {
- binder = sm->getService(String16("media.player"));
- if (binder != 0) {
- break;
- }
- LOGW("MediaPlayerService not published, waiting...");
- usleep(500000); // 0.5 s
- } while(true);
- if (sDeathNotifier == NULL) {
- sDeathNotifier = new DeathNotifier();
- }
- binder->linkToDeath(sDeathNotifier);
- sService = interface_cast<IMediaPlayerService>(binder);
- }
- LOGE_IF(sService == 0, "no MediaPlayerService!?");
- return sService;
-}
-
-MediaMetadataRetriever::MediaMetadataRetriever()
-{
- LOGV("constructor");
- const sp<IMediaPlayerService>& service(getService());
- if (service == 0) {
- LOGE("failed to obtain MediaMetadataRetrieverService");
- return;
- }
- sp<IMediaMetadataRetriever> retriever(service->createMetadataRetriever(getpid()));
- if (retriever == 0) {
- LOGE("failed to create IMediaMetadataRetriever object from server");
- }
- mRetriever = retriever;
-}
-
-MediaMetadataRetriever::~MediaMetadataRetriever()
-{
- LOGV("destructor");
- disconnect();
- IPCThreadState::self()->flushCommands();
-}
-
-void MediaMetadataRetriever::disconnect()
-{
- LOGV("disconnect");
- sp<IMediaMetadataRetriever> retriever;
- {
- Mutex::Autolock _l(mLock);
- retriever = mRetriever;
- mRetriever.clear();
- }
- if (retriever != 0) {
- retriever->disconnect();
- }
-}
-
-status_t MediaMetadataRetriever::setDataSource(const char* srcUrl)
-{
- LOGV("setDataSource");
- if (mRetriever == 0) {
- LOGE("retriever is not initialized");
- return INVALID_OPERATION;
- }
- if (srcUrl == NULL) {
- LOGE("data source is a null pointer");
- return UNKNOWN_ERROR;
- }
- LOGV("data source (%s)", srcUrl);
- return mRetriever->setDataSource(srcUrl);
-}
-
-status_t MediaMetadataRetriever::setDataSource(int fd, int64_t offset, int64_t length)
-{
- LOGV("setDataSource(%d, %lld, %lld)", fd, offset, length);
- if (mRetriever == 0) {
- LOGE("retriever is not initialized");
- return INVALID_OPERATION;
- }
- if (fd < 0 || offset < 0 || length < 0) {
- LOGE("Invalid negative argument");
- return UNKNOWN_ERROR;
- }
- return mRetriever->setDataSource(fd, offset, length);
-}
-
-status_t MediaMetadataRetriever::setMode(int mode)
-{
- LOGV("setMode(%d)", mode);
- if (mRetriever == 0) {
- LOGE("retriever is not initialized");
- return INVALID_OPERATION;
- }
- return mRetriever->setMode(mode);
-}
-
-status_t MediaMetadataRetriever::getMode(int* mode)
-{
- LOGV("getMode");
- if (mRetriever == 0) {
- LOGE("retriever is not initialized");
- return INVALID_OPERATION;
- }
- return mRetriever->getMode(mode);
-}
-
-sp<IMemory> MediaMetadataRetriever::captureFrame()
-{
- LOGV("captureFrame");
- if (mRetriever == 0) {
- LOGE("retriever is not initialized");
- return NULL;
- }
- return mRetriever->captureFrame();
-}
-
-const char* MediaMetadataRetriever::extractMetadata(int keyCode)
-{
- LOGV("extractMetadata(%d)", keyCode);
- if (mRetriever == 0) {
- LOGE("retriever is not initialized");
- return NULL;
- }
- return mRetriever->extractMetadata(keyCode);
-}
-
-sp<IMemory> MediaMetadataRetriever::extractAlbumArt()
-{
- LOGV("extractAlbumArt");
- if (mRetriever == 0) {
- LOGE("retriever is not initialized");
- return NULL;
- }
- return mRetriever->extractAlbumArt();
-}
-
-void MediaMetadataRetriever::DeathNotifier::binderDied(const wp<IBinder>& who) {
- Mutex::Autolock lock(MediaMetadataRetriever::sServiceLock);
- MediaMetadataRetriever::sService.clear();
- LOGW("MediaMetadataRetriever server died!");
-}
-
-MediaMetadataRetriever::DeathNotifier::~DeathNotifier()
-{
- Mutex::Autolock lock(sServiceLock);
- if (sService != 0) {
- sService->asBinder()->unlinkToDeath(this);
- }
-}
-
-}; // namespace android
diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp
deleted file mode 100644
index bd8579c..0000000
--- a/media/libmedia/mediaplayer.cpp
+++ /dev/null
@@ -1,624 +0,0 @@
-/* mediaplayer.cpp
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "MediaPlayer"
-#include <utils/Log.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#include <utils/IServiceManager.h>
-#include <utils/IPCThreadState.h>
-
-#include <media/mediaplayer.h>
-#include <media/AudioTrack.h>
-
-#include <utils/MemoryBase.h>
-
-namespace android {
-
-// client singleton for binder interface to service
-Mutex MediaPlayer::sServiceLock;
-sp<IMediaPlayerService> MediaPlayer::sMediaPlayerService;
-sp<MediaPlayer::DeathNotifier> MediaPlayer::sDeathNotifier;
-SortedVector< wp<MediaPlayer> > MediaPlayer::sObitRecipients;
-
-// establish binder interface to service
-const sp<IMediaPlayerService>& MediaPlayer::getMediaPlayerService()
-{
- Mutex::Autolock _l(sServiceLock);
- if (sMediaPlayerService.get() == 0) {
- sp<IServiceManager> sm = defaultServiceManager();
- sp<IBinder> binder;
- do {
- binder = sm->getService(String16("media.player"));
- if (binder != 0)
- break;
- LOGW("MediaPlayerService not published, waiting...");
- usleep(500000); // 0.5 s
- } while(true);
- if (sDeathNotifier == NULL) {
- sDeathNotifier = new DeathNotifier();
- }
- binder->linkToDeath(sDeathNotifier);
- sMediaPlayerService = interface_cast<IMediaPlayerService>(binder);
- }
- LOGE_IF(sMediaPlayerService==0, "no MediaPlayerService!?");
- return sMediaPlayerService;
-}
-
-void MediaPlayer::addObitRecipient(const wp<MediaPlayer>& recipient)
-{
- Mutex::Autolock _l(sServiceLock);
- sObitRecipients.add(recipient);
-}
-
-void MediaPlayer::removeObitRecipient(const wp<MediaPlayer>& recipient)
-{
- Mutex::Autolock _l(sServiceLock);
- sObitRecipients.remove(recipient);
-}
-
-MediaPlayer::MediaPlayer()
-{
- LOGV("constructor");
- mListener = NULL;
- mCookie = NULL;
- mDuration = -1;
- mStreamType = AudioSystem::MUSIC;
- mCurrentPosition = -1;
- mSeekPosition = -1;
- mCurrentState = MEDIA_PLAYER_IDLE;
- mPrepareSync = false;
- mPrepareStatus = NO_ERROR;
- mLoop = false;
- mLeftVolume = mRightVolume = 1.0;
- mVideoWidth = mVideoHeight = 0;
-}
-
-void MediaPlayer::onFirstRef()
-{
- addObitRecipient(this);
-}
-
-MediaPlayer::~MediaPlayer()
-{
- LOGV("destructor");
- removeObitRecipient(this);
- disconnect();
- IPCThreadState::self()->flushCommands();
-}
-
-void MediaPlayer::disconnect()
-{
- LOGV("disconnect");
- sp<IMediaPlayer> p;
- {
- Mutex::Autolock _l(mLock);
- p = mPlayer;
- mPlayer.clear();
- }
-
- if (p != 0) {
- p->disconnect();
- }
-}
-
-// always call with lock held
-void MediaPlayer::clear_l()
-{
- mDuration = -1;
- mCurrentPosition = -1;
- mSeekPosition = -1;
- mVideoWidth = mVideoHeight = 0;
-}
-
-status_t MediaPlayer::setListener(const sp<MediaPlayerListener>& listener)
-{
- LOGV("setListener");
- Mutex::Autolock _l(mLock);
- mListener = listener;
- return NO_ERROR;
-}
-
-
-status_t MediaPlayer::setDataSource(const sp<IMediaPlayer>& player)
-{
- status_t err = UNKNOWN_ERROR;
- sp<IMediaPlayer> p;
- { // scope for the lock
- Mutex::Autolock _l(mLock);
-
- if ( !( mCurrentState & ( MEDIA_PLAYER_IDLE | MEDIA_PLAYER_STATE_ERROR ) ) ) {
- LOGE("setDataSource called in state %d", mCurrentState);
- return INVALID_OPERATION;
- }
-
- clear_l();
- p = mPlayer;
- mPlayer = player;
- if (player != 0) {
- mCurrentState = MEDIA_PLAYER_INITIALIZED;
- err = NO_ERROR;
- } else {
- LOGE("Unable to to create media player");
- }
- }
-
- if (p != 0) {
- p->disconnect();
- }
-
- return err;
-}
-
-status_t MediaPlayer::setDataSource(const char *url)
-{
- LOGV("setDataSource(%s)", url);
- status_t err = BAD_VALUE;
- if (url != NULL) {
- const sp<IMediaPlayerService>& service(getMediaPlayerService());
- if (service != 0) {
- sp<IMediaPlayer> player(service->create(getpid(), this, url));
- err = setDataSource(player);
- }
- }
- return err;
-}
-
-status_t MediaPlayer::setDataSource(int fd, int64_t offset, int64_t length)
-{
- LOGV("setDataSource(%d, %lld, %lld)", fd, offset, length);
- status_t err = UNKNOWN_ERROR;
- const sp<IMediaPlayerService>& service(getMediaPlayerService());
- if (service != 0) {
- sp<IMediaPlayer> player(service->create(getpid(), this, fd, offset, length));
- err = setDataSource(player);
- }
- return err;
-}
-
-status_t MediaPlayer::setVideoSurface(const sp<Surface>& surface)
-{
- LOGV("setVideoSurface");
- Mutex::Autolock _l(mLock);
- if (mPlayer == 0) return NO_INIT;
- return mPlayer->setVideoSurface(surface->getISurface());
-}
-
-// must call with lock held
-status_t MediaPlayer::prepareAsync_l()
-{
- if ( (mPlayer != 0) && ( mCurrentState & ( MEDIA_PLAYER_INITIALIZED | MEDIA_PLAYER_STOPPED) ) ) {
- mPlayer->setAudioStreamType(mStreamType);
- mCurrentState = MEDIA_PLAYER_PREPARING;
- return mPlayer->prepareAsync();
- }
- LOGE("prepareAsync called in state %d", mCurrentState);
- return INVALID_OPERATION;
-}
-
-status_t MediaPlayer::prepare()
-{
- LOGV("prepare");
- Mutex::Autolock _l(mLock);
- if (mPrepareSync) return -EALREADY;
- mPrepareSync = true;
- status_t ret = prepareAsync_l();
- if (ret != NO_ERROR) return ret;
-
- if (mPrepareSync) {
- mSignal.wait(mLock); // wait for prepare done
- mPrepareSync = false;
- }
- LOGV("prepare complete - status=%d", mPrepareStatus);
- return mPrepareStatus;
-}
-
-status_t MediaPlayer::prepareAsync()
-{
- LOGV("prepareAsync");
- Mutex::Autolock _l(mLock);
- return prepareAsync_l();
-}
-
-status_t MediaPlayer::start()
-{
- LOGV("start");
- Mutex::Autolock _l(mLock);
- if (mCurrentState & MEDIA_PLAYER_STARTED)
- return NO_ERROR;
- if ( (mPlayer != 0) && ( mCurrentState & ( MEDIA_PLAYER_PREPARED |
- MEDIA_PLAYER_PLAYBACK_COMPLETE | MEDIA_PLAYER_PAUSED ) ) ) {
- mPlayer->setLooping(mLoop);
- mPlayer->setVolume(mLeftVolume, mRightVolume);
- mCurrentState = MEDIA_PLAYER_STARTED;
- status_t ret = mPlayer->start();
- if (ret != NO_ERROR) {
- mCurrentState = MEDIA_PLAYER_STATE_ERROR;
- } else {
- if (mCurrentState == MEDIA_PLAYER_PLAYBACK_COMPLETE) {
- LOGV("playback completed immediately following start()");
- }
- }
- return ret;
- }
- LOGE("start called in state %d", mCurrentState);
- return INVALID_OPERATION;
-}
-
-status_t MediaPlayer::stop()
-{
- LOGV("stop");
- Mutex::Autolock _l(mLock);
- if (mCurrentState & MEDIA_PLAYER_STOPPED) return NO_ERROR;
- if ( (mPlayer != 0) && ( mCurrentState & ( MEDIA_PLAYER_STARTED | MEDIA_PLAYER_PREPARED |
- MEDIA_PLAYER_PAUSED | MEDIA_PLAYER_PLAYBACK_COMPLETE ) ) ) {
- status_t ret = mPlayer->stop();
- if (ret != NO_ERROR) {
- mCurrentState = MEDIA_PLAYER_STATE_ERROR;
- } else {
- mCurrentState = MEDIA_PLAYER_STOPPED;
- }
- return ret;
- }
- LOGE("stop called in state %d", mCurrentState);
- return INVALID_OPERATION;
-}
-
-status_t MediaPlayer::pause()
-{
- LOGV("pause");
- Mutex::Autolock _l(mLock);
- if (mCurrentState & MEDIA_PLAYER_PAUSED)
- return NO_ERROR;
- if ((mPlayer != 0) && (mCurrentState & MEDIA_PLAYER_STARTED)) {
- status_t ret = mPlayer->pause();
- if (ret != NO_ERROR) {
- mCurrentState = MEDIA_PLAYER_STATE_ERROR;
- } else {
- mCurrentState = MEDIA_PLAYER_PAUSED;
- }
- return ret;
- }
- LOGE("pause called in state %d", mCurrentState);
- return INVALID_OPERATION;
-}
-
-bool MediaPlayer::isPlaying()
-{
- Mutex::Autolock _l(mLock);
- if (mPlayer != 0) {
- bool temp = false;
- mPlayer->isPlaying(&temp);
- LOGV("isPlaying: %d", temp);
- if ((mCurrentState & MEDIA_PLAYER_STARTED) && ! temp) {
- LOGE("internal/external state mismatch corrected");
- mCurrentState = MEDIA_PLAYER_PAUSED;
- }
- return temp;
- }
- LOGV("isPlaying: no active player");
- return false;
-}
-
-status_t MediaPlayer::getVideoWidth(int *w)
-{
- LOGV("getVideoWidth");
- Mutex::Autolock _l(mLock);
- if (mPlayer == 0) return INVALID_OPERATION;
- *w = mVideoWidth;
- return NO_ERROR;
-}
-
-status_t MediaPlayer::getVideoHeight(int *h)
-{
- LOGV("getVideoHeight");
- Mutex::Autolock _l(mLock);
- if (mPlayer == 0) return INVALID_OPERATION;
- *h = mVideoHeight;
- return NO_ERROR;
-}
-
-status_t MediaPlayer::getCurrentPosition(int *msec)
-{
- LOGV("getCurrentPosition");
- Mutex::Autolock _l(mLock);
- if (mPlayer != 0) {
- if (mCurrentPosition >= 0) {
- LOGV("Using cached seek position: %d", mCurrentPosition);
- *msec = mCurrentPosition;
- return NO_ERROR;
- }
- return mPlayer->getCurrentPosition(msec);
- }
- return INVALID_OPERATION;
-}
-
-status_t MediaPlayer::getDuration_l(int *msec)
-{
- LOGV("getDuration");
- bool isValidState = (mCurrentState & (MEDIA_PLAYER_PREPARED | MEDIA_PLAYER_STARTED | MEDIA_PLAYER_PAUSED | MEDIA_PLAYER_STOPPED | MEDIA_PLAYER_PLAYBACK_COMPLETE));
- if (mPlayer != 0 && isValidState) {
- status_t ret = NO_ERROR;
- if (mDuration <= 0)
- ret = mPlayer->getDuration(&mDuration);
- if (msec)
- *msec = mDuration;
- return ret;
- }
- LOGE("Attempt to call getDuration without a valid mediaplayer");
- return INVALID_OPERATION;
-}
-
-status_t MediaPlayer::getDuration(int *msec)
-{
- Mutex::Autolock _l(mLock);
- return getDuration_l(msec);
-}
-
-status_t MediaPlayer::seekTo_l(int msec)
-{
- LOGV("seekTo %d", msec);
- if ((mPlayer != 0) && ( mCurrentState & ( MEDIA_PLAYER_STARTED | MEDIA_PLAYER_PREPARED | MEDIA_PLAYER_PAUSED | MEDIA_PLAYER_PLAYBACK_COMPLETE) ) ) {
- if ( msec < 0 ) {
- LOGW("Attempt to seek to invalid position: %d", msec);
- msec = 0;
- } else if ((mDuration > 0) && (msec > mDuration)) {
- LOGW("Attempt to seek to past end of file: request = %d, EOF = %d", msec, mDuration);
- msec = mDuration;
- }
- // cache duration
- mCurrentPosition = msec;
- if (mSeekPosition < 0) {
- getDuration_l(NULL);
- mSeekPosition = msec;
- return mPlayer->seekTo(msec);
- }
- else {
- LOGV("Seek in progress - queue up seekTo[%d]", msec);
- return NO_ERROR;
- }
- }
- LOGE("Attempt to perform seekTo in wrong state: mPlayer=%p, mCurrentState=%u", mPlayer.get(), mCurrentState);
- return INVALID_OPERATION;
-}
-
-status_t MediaPlayer::seekTo(int msec)
-{
- Mutex::Autolock _l(mLock);
- return seekTo_l(msec);
-}
-
-status_t MediaPlayer::reset()
-{
- LOGV("reset");
- Mutex::Autolock _l(mLock);
- mLoop = false;
- if (mCurrentState == MEDIA_PLAYER_IDLE) return NO_ERROR;
- mPrepareSync = false;
- if (mPlayer != 0) {
- status_t ret = mPlayer->reset();
- if (ret != NO_ERROR) {
- LOGE("reset() failed with return code (%d)", ret);
- mCurrentState = MEDIA_PLAYER_STATE_ERROR;
- } else {
- mCurrentState = MEDIA_PLAYER_IDLE;
- }
- return ret;
- }
- clear_l();
- return NO_ERROR;
-}
-
-status_t MediaPlayer::setAudioStreamType(int type)
-{
- LOGV("MediaPlayer::setAudioStreamType");
- Mutex::Autolock _l(mLock);
- if (mStreamType == type) return NO_ERROR;
- if (mCurrentState & ( MEDIA_PLAYER_PREPARED | MEDIA_PLAYER_STARTED |
- MEDIA_PLAYER_PAUSED | MEDIA_PLAYER_PLAYBACK_COMPLETE ) ) {
- // Can't change the stream type after prepare
- LOGE("setAudioStream called in state %d", mCurrentState);
- return INVALID_OPERATION;
- }
- // cache
- mStreamType = type;
- return OK;
-}
-
-status_t MediaPlayer::setLooping(int loop)
-{
- LOGV("MediaPlayer::setLooping");
- Mutex::Autolock _l(mLock);
- mLoop = (loop != 0);
- if (mPlayer != 0) {
- return mPlayer->setLooping(loop);
- }
- return OK;
-}
-
-bool MediaPlayer::isLooping() {
- LOGV("isLooping");
- Mutex::Autolock _l(mLock);
- if (mPlayer != 0) {
- return mLoop;
- }
- LOGV("isLooping: no active player");
- return false;
-}
-
-status_t MediaPlayer::setVolume(float leftVolume, float rightVolume)
-{
- LOGV("MediaPlayer::setVolume(%f, %f)", leftVolume, rightVolume);
- Mutex::Autolock _l(mLock);
- mLeftVolume = leftVolume;
- mRightVolume = rightVolume;
- if (mPlayer != 0) {
- return mPlayer->setVolume(leftVolume, rightVolume);
- }
- return OK;
-}
-
-void MediaPlayer::notify(int msg, int ext1, int ext2)
-{
- LOGV("message received msg=%d, ext1=%d, ext2=%d", msg, ext1, ext2);
- bool send = true;
-
- // TODO: In the future, we might be on the same thread if the app is
- // running in the same process as the media server. In that case,
- // this will deadlock.
- mLock.lock();
- if (mPlayer == 0) {
- LOGV("notify(%d, %d, %d) callback on disconnected mediaplayer", msg, ext1, ext2);
- mLock.unlock(); // release the lock when done.
- return;
- }
-
- switch (msg) {
- case MEDIA_NOP: // interface test message
- break;
- case MEDIA_PREPARED:
- LOGV("prepared");
- mCurrentState = MEDIA_PLAYER_PREPARED;
- if (mPrepareSync) {
- LOGV("signal application thread");
- mPrepareSync = false;
- mPrepareStatus = NO_ERROR;
- mSignal.signal();
- }
- break;
- case MEDIA_PLAYBACK_COMPLETE:
- LOGV("playback complete");
- if (!mLoop) {
- mCurrentState = MEDIA_PLAYER_PLAYBACK_COMPLETE;
- }
- break;
- case MEDIA_ERROR:
- // Always log errors
- LOGE("error (%d, %d)", ext1, ext2);
- mCurrentState = MEDIA_PLAYER_STATE_ERROR;
- if (mPrepareSync)
- {
- LOGV("signal application thread");
- mPrepareSync = false;
- mPrepareStatus = ext1;
- mSignal.signal();
- send = false;
- }
- break;
- case MEDIA_SEEK_COMPLETE:
- LOGV("Received seek complete");
- if (mSeekPosition != mCurrentPosition) {
- LOGV("Executing queued seekTo(%d)", mSeekPosition);
- mSeekPosition = -1;
- seekTo_l(mCurrentPosition);
- }
- else {
- LOGV("All seeks complete - return to regularly scheduled program");
- mCurrentPosition = mSeekPosition = -1;
- }
- break;
- case MEDIA_BUFFERING_UPDATE:
- LOGV("buffering %d", ext1);
- break;
- case MEDIA_SET_VIDEO_SIZE:
- LOGV("New video size %d x %d", ext1, ext2);
- mVideoWidth = ext1;
- mVideoHeight = ext2;
- break;
- default:
- LOGV("unrecognized message: (%d, %d, %d)", msg, ext1, ext2);
- break;
- }
-
- sp<MediaPlayerListener> listener = mListener;
- mLock.unlock();
-
- // this prevents re-entrant calls into client code
- if ((listener != 0) && send) {
- Mutex::Autolock _l(mNotifyLock);
- LOGV("callback application");
- listener->notify(msg, ext1, ext2);
- LOGV("back from callback");
- }
-}
-
-void MediaPlayer::DeathNotifier::binderDied(const wp<IBinder>& who) {
- LOGW("MediaPlayer server died!");
-
- // Need to do this with the lock held
- SortedVector< wp<MediaPlayer> > list;
- {
- Mutex::Autolock _l(MediaPlayer::sServiceLock);
- MediaPlayer::sMediaPlayerService.clear();
- list = sObitRecipients;
- }
-
- // Notify application when media server dies.
- // Don't hold the static lock during callback in case app
- // makes a call that needs the lock.
- size_t count = list.size();
- for (size_t iter = 0; iter < count; ++iter) {
- sp<MediaPlayer> player = list[iter].promote();
- if ((player != 0) && (player->mPlayer != 0)) {
- player->notify(MEDIA_ERROR, MEDIA_ERROR_SERVER_DIED, 0);
- }
- }
-}
-
-MediaPlayer::DeathNotifier::~DeathNotifier()
-{
- Mutex::Autolock _l(sServiceLock);
- sObitRecipients.clear();
- if (sMediaPlayerService != 0) {
- sMediaPlayerService->asBinder()->unlinkToDeath(this);
- }
-}
-
-/*static*/ sp<IMemory> MediaPlayer::decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat)
-{
- LOGV("decode(%s)", url);
- sp<IMemory> p;
- const sp<IMediaPlayerService>& service = getMediaPlayerService();
- if (service != 0) {
- p = sMediaPlayerService->decode(url, pSampleRate, pNumChannels, pFormat);
- } else {
- LOGE("Unable to locate media service");
- }
- return p;
-
-}
-
-/*static*/ sp<IMemory> MediaPlayer::decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat)
-{
- LOGV("decode(%d, %lld, %lld)", fd, offset, length);
- sp<IMemory> p;
- const sp<IMediaPlayerService>& service = getMediaPlayerService();
- if (service != 0) {
- p = sMediaPlayerService->decode(fd, offset, length, pSampleRate, pNumChannels, pFormat);
- } else {
- LOGE("Unable to locate media service");
- }
- return p;
-
-}
-
-}; // namespace android
diff --git a/media/libmedia/mediarecorder.cpp b/media/libmedia/mediarecorder.cpp
deleted file mode 100644
index 4ab26ac..0000000
--- a/media/libmedia/mediarecorder.cpp
+++ /dev/null
@@ -1,542 +0,0 @@
-/*
- **
- ** Copyright (c) 2008 The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "MediaRecorder"
-#include <utils/Log.h>
-#include <ui/Surface.h>
-#include <media/mediarecorder.h>
-#include <utils/IServiceManager.h>
-#include <media/IMediaPlayerService.h>
-#include <media/IMediaRecorder.h>
-
-namespace android {
-
-status_t MediaRecorder::setCamera(const sp<ICamera>& camera)
-{
- LOGV("setCamera(%p)", camera.get());
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_IDLE)) {
- LOGE("setCamera called in an invalid state(%d)", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->setCamera(camera);
- if (OK != ret) {
- LOGV("setCamera failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- return ret;
-}
-
-status_t MediaRecorder::setPreviewSurface(const sp<Surface>& surface)
-{
- LOGV("setPreviewSurface(%p)", surface.get());
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
- LOGE("setPreviewSurface called in an invalid state(%d)", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->setPreviewSurface(surface->getISurface());
- if (OK != ret) {
- LOGV("setPreviewSurface failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- return ret;
-}
-
-status_t MediaRecorder::init()
-{
- LOGV("init");
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_IDLE)) {
- LOGE("init called in an invalid state(%d)", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->init();
- if (OK != ret) {
- LOGV("init failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- mCurrentState = MEDIA_RECORDER_INITIALIZED;
- return ret;
-}
-
-status_t MediaRecorder::setVideoSource(int vs)
-{
- LOGV("setVideoSource(%d)", vs);
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (mIsVideoSourceSet) {
- LOGE("video source has already been set");
- return INVALID_OPERATION;
- }
- if (mCurrentState & MEDIA_RECORDER_IDLE) {
- LOGV("Call init() since the media recorder is not initialized yet");
- status_t ret = init();
- if (OK != ret) {
- return ret;
- }
- }
- if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) {
- LOGE("setVideoSource called in an invalid state(%d)", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->setVideoSource(vs);
- if (OK != ret) {
- LOGV("setVideoSource failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- mIsVideoSourceSet = true;
- return ret;
-}
-
-status_t MediaRecorder::setAudioSource(int as)
-{
- LOGV("setAudioSource(%d)", as);
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (mCurrentState & MEDIA_RECORDER_IDLE) {
- LOGV("Call init() since the media recorder is not initialized yet");
- status_t ret = init();
- if (OK != ret) {
- return ret;
- }
- }
- if (mIsAudioSourceSet) {
- LOGE("audio source has already been set");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) {
- LOGE("setAudioSource called in an invalid state(%d)", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->setAudioSource(as);
- if (OK != ret) {
- LOGV("setAudioSource failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- mIsAudioSourceSet = true;
- return ret;
-}
-
-status_t MediaRecorder::setOutputFormat(int of)
-{
- LOGV("setOutputFormat(%d)", of);
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) {
- LOGE("setOutputFormat called in an invalid state: %d", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->setOutputFormat(of);
- if (OK != ret) {
- LOGE("setOutputFormat failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- mCurrentState = MEDIA_RECORDER_DATASOURCE_CONFIGURED;
- return ret;
-}
-
-status_t MediaRecorder::setVideoEncoder(int ve)
-{
- LOGV("setVideoEncoder(%d)", ve);
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (mIsVideoEncoderSet) {
- LOGE("video encoder has already been set");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
- LOGE("setVideoEncoder called in an invalid state(%d)", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->setVideoEncoder(ve);
- if (OK != ret) {
- LOGV("setVideoEncoder failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- mIsVideoEncoderSet = true;
- return ret;
-}
-
-status_t MediaRecorder::setAudioEncoder(int ae)
-{
- LOGV("setAudioEncoder(%d)", ae);
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (mIsAudioEncoderSet) {
- LOGE("audio encoder has already been set");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
- LOGE("setAudioEncoder called in an invalid state(%d)", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->setAudioEncoder(ae);
- if (OK != ret) {
- LOGV("setAudioEncoder failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- mIsAudioEncoderSet = true;
- return ret;
-}
-
-status_t MediaRecorder::setOutputFile(const char* path)
-{
- LOGV("setOutputFile(%s)", path);
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (mIsOutputFileSet) {
- LOGE("output file has already been set");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
- LOGE("setOutputFile called in an invalid state(%d)", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->setOutputFile(path);
- if (OK != ret) {
- LOGV("setOutputFile failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- mIsOutputFileSet = true;
- return ret;
-}
-
-status_t MediaRecorder::setOutputFile(int fd, int64_t offset, int64_t length)
-{
- LOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length);
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (mIsOutputFileSet) {
- LOGE("output file has already been set");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
- LOGE("setOutputFile called in an invalid state(%d)", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->setOutputFile(fd, offset, length);
- if (OK != ret) {
- LOGV("setOutputFile failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- mIsOutputFileSet = true;
- return ret;
-}
-
-status_t MediaRecorder::setVideoSize(int width, int height)
-{
- LOGV("setVideoSize(%d, %d)", width, height);
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
- LOGE("setVideoSize called in an invalid state: %d", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->setVideoSize(width, height);
- if (OK != ret) {
- LOGE("setVideoSize failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- return ret;
-}
-
-status_t MediaRecorder::setVideoFrameRate(int frames_per_second)
-{
- LOGV("setVideoFrameRate(%d)", frames_per_second);
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
- LOGE("setVideoFrameRate called in an invalid state: %d", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->setVideoFrameRate(frames_per_second);
- if (OK != ret) {
- LOGE("setVideoFrameRate failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- return ret;
-}
-
-status_t MediaRecorder::prepare()
-{
- LOGV("prepare");
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
- LOGE("prepare called in an invalid state: %d", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->prepare();
- if (OK != ret) {
- LOGE("prepare failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- mCurrentState = MEDIA_RECORDER_PREPARED;
- return ret;
-}
-
-status_t MediaRecorder::getMaxAmplitude(int* max)
-{
- LOGV("getMaxAmplitude");
- if(mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (mCurrentState & MEDIA_RECORDER_ERROR) {
- LOGE("getMaxAmplitude called in an invalid state: %d", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->getMaxAmplitude(max);
- if (OK != ret) {
- LOGE("getMaxAmplitude failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- return ret;
-}
-
-status_t MediaRecorder::start()
-{
- LOGV("start");
- if (mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_PREPARED)) {
- LOGE("start called in an invalid state: %d", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->start();
- if (OK != ret) {
- LOGE("start failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- mCurrentState = MEDIA_RECORDER_RECORDING;
- return ret;
-}
-
-status_t MediaRecorder::stop()
-{
- LOGV("stop");
- if (mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
- if (!(mCurrentState & MEDIA_RECORDER_RECORDING)) {
- LOGE("stop called in an invalid state: %d", mCurrentState);
- return INVALID_OPERATION;
- }
-
- status_t ret = mMediaRecorder->stop();
- if (OK != ret) {
- LOGE("stop failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
- mCurrentState = MEDIA_RECORDER_IDLE;
- return ret;
-}
-
-// Reset should be OK in any state
-status_t MediaRecorder::reset()
-{
- LOGV("reset");
- if (mMediaRecorder == NULL) {
- LOGE("media recorder is not initialized yet");
- return INVALID_OPERATION;
- }
-
- doCleanUp();
- status_t ret = UNKNOWN_ERROR;
- switch(mCurrentState) {
- case MEDIA_RECORDER_IDLE:
- ret = OK;
- break;
-
- case MEDIA_RECORDER_RECORDING:
- case MEDIA_RECORDER_DATASOURCE_CONFIGURED:
- case MEDIA_RECORDER_PREPARED:
- case MEDIA_RECORDER_ERROR: {
- ret = doReset();
- if (OK != ret) {
- return ret; // No need to continue
- }
- } // Intentional fall through
- case MEDIA_RECORDER_INITIALIZED:
- ret = close();
- break;
-
- default: {
- LOGE("Unexpected non-existing state: %d", mCurrentState);
- break;
- }
- }
- return ret;
-}
-
-status_t MediaRecorder::close()
-{
- LOGV("close");
- if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) {
- LOGE("close called in an invalid state: %d", mCurrentState);
- return INVALID_OPERATION;
- }
- status_t ret = mMediaRecorder->close();
- if (OK != ret) {
- LOGE("close failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- } else {
- mCurrentState = MEDIA_RECORDER_IDLE;
- }
- return ret;
-}
-
-status_t MediaRecorder::doReset()
-{
- LOGV("doReset");
- status_t ret = mMediaRecorder->reset();
- if (OK != ret) {
- LOGE("doReset failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- } else {
- mCurrentState = MEDIA_RECORDER_INITIALIZED;
- }
- return ret;
-}
-
-void MediaRecorder::doCleanUp()
-{
- LOGV("doCleanUp");
- mIsAudioSourceSet = false;
- mIsVideoSourceSet = false;
- mIsAudioEncoderSet = false;
- mIsVideoEncoderSet = false;
- mIsOutputFileSet = false;
-}
-
-// Release should be OK in any state
-status_t MediaRecorder::release()
-{
- LOGV("release");
- if (mMediaRecorder != NULL) {
- return mMediaRecorder->release();
- }
- return INVALID_OPERATION;
-}
-
-MediaRecorder::MediaRecorder()
-{
- LOGV("constructor");
- sp<IServiceManager> sm = defaultServiceManager();
- sp<IBinder> binder;
-
- do {
- binder = sm->getService(String16("media.player"));
- if (binder != NULL) {
- break;
- }
- LOGW("MediaPlayerService not published, waiting...");
- usleep(500000); // 0.5 s
- } while(true);
-
- sp<IMediaPlayerService> service = interface_cast<IMediaPlayerService>(binder);
- if (service != NULL) {
- mMediaRecorder = service->createMediaRecorder(getpid());
- }
- if (mMediaRecorder != NULL) {
- mCurrentState = MEDIA_RECORDER_IDLE;
- }
- doCleanUp();
-}
-
-status_t MediaRecorder::initCheck()
-{
- return mMediaRecorder != 0 ? NO_ERROR : NO_INIT;
-}
-
-MediaRecorder::~MediaRecorder()
-{
- LOGV("destructor");
- if (mMediaRecorder != NULL) {
- mMediaRecorder.clear();
- }
-}
-
-}; // namespace android
-
diff --git a/media/libmediaplayerservice/Android.mk b/media/libmediaplayerservice/Android.mk
deleted file mode 100644
index f710921..0000000
--- a/media/libmediaplayerservice/Android.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-#
-# libmediaplayerservice
-#
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- MediaRecorderClient.cpp \
- MediaPlayerService.cpp \
- MetadataRetrieverClient.cpp \
- VorbisPlayer.cpp \
- MidiFile.cpp
-
-ifeq ($(TARGET_OS)-$(TARGET_SIMULATOR),linux-true)
-LOCAL_LDLIBS += -ldl -lpthread
-endif
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libutils \
- libvorbisidec \
- libsonivox \
- libopencoreplayer \
- libopencoreauthor \
- libmedia \
- libandroid_runtime
-
-LOCAL_C_INCLUDES := external/tremor/Tremor \
- $(call include-path-for, graphics corecg)
-
-LOCAL_MODULE:= libmediaplayerservice
-
-include $(BUILD_SHARED_LIBRARY)
-
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
deleted file mode 100644
index 97e3536..0000000
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ /dev/null
@@ -1,1063 +0,0 @@
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-// Proxy for media player implementations
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "MediaPlayerService"
-#include <utils/Log.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>
-#include <unistd.h>
-
-#include <string.h>
-#include <cutils/atomic.h>
-
-#include <android_runtime/ActivityManager.h>
-#include <utils/IPCThreadState.h>
-#include <utils/IServiceManager.h>
-#include <utils/MemoryHeapBase.h>
-#include <utils/MemoryBase.h>
-#include <cutils/properties.h>
-
-#include <media/MediaPlayerInterface.h>
-#include <media/mediarecorder.h>
-#include <media/MediaMetadataRetrieverInterface.h>
-#include <media/AudioTrack.h>
-
-#include "MediaRecorderClient.h"
-#include "MediaPlayerService.h"
-#include "MetadataRetrieverClient.h"
-
-#include "MidiFile.h"
-#include "VorbisPlayer.h"
-#include <media/PVPlayer.h>
-
-/* desktop Linux needs a little help with gettid() */
-#if defined(HAVE_GETTID) && !defined(HAVE_ANDROID_OS)
-#define __KERNEL__
-# include <linux/unistd.h>
-#ifdef _syscall0
-_syscall0(pid_t,gettid)
-#else
-pid_t gettid() { return syscall(__NR_gettid);}
-#endif
-#undef __KERNEL__
-#endif
-
-
-namespace android {
-
-// TODO: Temp hack until we can register players
-typedef struct {
- const char *extension;
- const player_type playertype;
-} extmap;
-extmap FILE_EXTS [] = {
- {".mid", SONIVOX_PLAYER},
- {".midi", SONIVOX_PLAYER},
- {".smf", SONIVOX_PLAYER},
- {".xmf", SONIVOX_PLAYER},
- {".imy", SONIVOX_PLAYER},
- {".rtttl", SONIVOX_PLAYER},
- {".rtx", SONIVOX_PLAYER},
- {".ota", SONIVOX_PLAYER},
- {".ogg", VORBIS_PLAYER},
- {".oga", VORBIS_PLAYER},
-};
-
-// TODO: Find real cause of Audio/Video delay in PV framework and remove this workaround
-/* static */ const uint32_t MediaPlayerService::AudioOutput::kAudioVideoDelayMs = 96;
-/* static */ int MediaPlayerService::AudioOutput::mMinBufferCount = 4;
-/* static */ bool MediaPlayerService::AudioOutput::mIsOnEmulator = false;
-
-void MediaPlayerService::instantiate() {
- defaultServiceManager()->addService(
- String16("media.player"), new MediaPlayerService());
-}
-
-MediaPlayerService::MediaPlayerService()
-{
- LOGV("MediaPlayerService created");
- mNextConnId = 1;
-}
-
-MediaPlayerService::~MediaPlayerService()
-{
- LOGV("MediaPlayerService destroyed");
-}
-
-sp<IMediaRecorder> MediaPlayerService::createMediaRecorder(pid_t pid)
-{
- sp<MediaRecorderClient> recorder = new MediaRecorderClient(pid);
- LOGV("Create new media recorder client from pid %d", pid);
- return recorder;
-}
-
-sp<IMediaMetadataRetriever> MediaPlayerService::createMetadataRetriever(pid_t pid)
-{
- sp<MetadataRetrieverClient> retriever = new MetadataRetrieverClient(pid);
- LOGV("Create new media retriever from pid %d", pid);
- return retriever;
-}
-
-sp<IMediaPlayer> MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClient>& client, const char* url)
-{
- int32_t connId = android_atomic_inc(&mNextConnId);
- sp<Client> c = new Client(this, pid, connId, client);
- LOGV("Create new client(%d) from pid %d, url=%s, connId=%d", connId, pid, url, connId);
- if (NO_ERROR != c->setDataSource(url))
- {
- c.clear();
- return c;
- }
- wp<Client> w = c;
- Mutex::Autolock lock(mLock);
- mClients.add(w);
- return c;
-}
-
-sp<IMediaPlayer> MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClient>& client,
- int fd, int64_t offset, int64_t length)
-{
- int32_t connId = android_atomic_inc(&mNextConnId);
- sp<Client> c = new Client(this, pid, connId, client);
- LOGV("Create new client(%d) from pid %d, fd=%d, offset=%lld, length=%lld",
- connId, pid, fd, offset, length);
- if (NO_ERROR != c->setDataSource(fd, offset, length)) {
- c.clear();
- } else {
- wp<Client> w = c;
- Mutex::Autolock lock(mLock);
- mClients.add(w);
- }
- ::close(fd);
- return c;
-}
-
-status_t MediaPlayerService::AudioCache::dump(int fd, const Vector<String16>& args) const
-{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- result.append(" AudioCache\n");
- if (mHeap != 0) {
- snprintf(buffer, 255, " heap base(%p), size(%d), flags(%d), device(%s)\n",
- mHeap->getBase(), mHeap->getSize(), mHeap->getFlags(), mHeap->getDevice());
- result.append(buffer);
- }
- snprintf(buffer, 255, " msec per frame(%f), channel count(%d), format(%d), frame count(%ld)\n",
- mMsecsPerFrame, mChannelCount, mFormat, mFrameCount);
- result.append(buffer);
- snprintf(buffer, 255, " sample rate(%d), size(%d), error(%d), command complete(%s)\n",
- mSampleRate, mSize, mError, mCommandComplete?"true":"false");
- result.append(buffer);
- ::write(fd, result.string(), result.size());
- return NO_ERROR;
-}
-
-status_t MediaPlayerService::AudioOutput::dump(int fd, const Vector<String16>& args) const
-{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- result.append(" AudioOutput\n");
- snprintf(buffer, 255, " stream type(%d), left - right volume(%f, %f)\n",
- mStreamType, mLeftVolume, mRightVolume);
- result.append(buffer);
- snprintf(buffer, 255, " msec per frame(%f), latency (%d)\n",
- mMsecsPerFrame, mLatency);
- result.append(buffer);
- ::write(fd, result.string(), result.size());
- if (mTrack != 0) {
- mTrack->dump(fd, args);
- }
- return NO_ERROR;
-}
-
-status_t MediaPlayerService::Client::dump(int fd, const Vector<String16>& args) const
-{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
- result.append(" Client\n");
- snprintf(buffer, 255, " pid(%d), connId(%d), status(%d), looping(%s)\n",
- mPid, mConnId, mStatus, mLoop?"true": "false");
- result.append(buffer);
- write(fd, result.string(), result.size());
- if (mAudioOutput != 0) {
- mAudioOutput->dump(fd, args);
- }
- write(fd, "\n", 1);
- return NO_ERROR;
-}
-
-static int myTid() {
-#ifdef HAVE_GETTID
- return gettid();
-#else
- return getpid();
-#endif
-}
-
-status_t MediaPlayerService::dump(int fd, const Vector<String16>& args)
-{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
- if (checkCallingPermission(String16("android.permission.DUMP")) == false) {
- snprintf(buffer, SIZE, "Permission Denial: "
- "can't dump MediaPlayerService from pid=%d, uid=%d\n",
- IPCThreadState::self()->getCallingPid(),
- IPCThreadState::self()->getCallingUid());
- result.append(buffer);
- } else {
- Mutex::Autolock lock(mLock);
- for (int i = 0, n = mClients.size(); i < n; ++i) {
- sp<Client> c = mClients[i].promote();
- if (c != 0) c->dump(fd, args);
- }
- result.append(" Files opened and/or mapped:\n");
- snprintf(buffer, SIZE, "/proc/%d/maps", myTid());
- FILE *f = fopen(buffer, "r");
- if (f) {
- while (!feof(f)) {
- fgets(buffer, SIZE, f);
- if (strstr(buffer, " /sdcard/") ||
- strstr(buffer, " /system/sounds/") ||
- strstr(buffer, " /system/media/")) {
- result.append(" ");
- result.append(buffer);
- }
- }
- fclose(f);
- } else {
- result.append("couldn't open ");
- result.append(buffer);
- result.append("\n");
- }
-
- snprintf(buffer, SIZE, "/proc/%d/fd", myTid());
- DIR *d = opendir(buffer);
- if (d) {
- struct dirent *ent;
- while((ent = readdir(d)) != NULL) {
- if (strcmp(ent->d_name,".") && strcmp(ent->d_name,"..")) {
- snprintf(buffer, SIZE, "/proc/%d/fd/%s", myTid(), ent->d_name);
- struct stat s;
- if (lstat(buffer, &s) == 0) {
- if ((s.st_mode & S_IFMT) == S_IFLNK) {
- char linkto[256];
- int len = readlink(buffer, linkto, sizeof(linkto));
- if(len > 0) {
- if(len > 255) {
- linkto[252] = '.';
- linkto[253] = '.';
- linkto[254] = '.';
- linkto[255] = 0;
- } else {
- linkto[len] = 0;
- }
- if (strstr(linkto, "/sdcard/") == linkto ||
- strstr(linkto, "/system/sounds/") == linkto ||
- strstr(linkto, "/system/media/") == linkto) {
- result.append(" ");
- result.append(buffer);
- result.append(" -> ");
- result.append(linkto);
- result.append("\n");
- }
- }
- } else {
- result.append(" unexpected type for ");
- result.append(buffer);
- result.append("\n");
- }
- }
- }
- }
- closedir(d);
- } else {
- result.append("couldn't open ");
- result.append(buffer);
- result.append("\n");
- }
- }
- write(fd, result.string(), result.size());
- return NO_ERROR;
-}
-
-void MediaPlayerService::removeClient(wp<Client> client)
-{
- Mutex::Autolock lock(mLock);
- mClients.remove(client);
-}
-
-MediaPlayerService::Client::Client(const sp<MediaPlayerService>& service, pid_t pid,
- int32_t connId, const sp<IMediaPlayerClient>& client)
-{
- LOGV("Client(%d) constructor", connId);
- mPid = pid;
- mConnId = connId;
- mService = service;
- mClient = client;
- mLoop = false;
- mStatus = NO_INIT;
-#if CALLBACK_ANTAGONIZER
- LOGD("create Antagonizer");
- mAntagonizer = new Antagonizer(notify, this);
-#endif
-}
-
-MediaPlayerService::Client::~Client()
-{
- LOGV("Client(%d) destructor pid = %d", mConnId, mPid);
- mAudioOutput.clear();
- wp<Client> client(this);
- disconnect();
- mService->removeClient(client);
-}
-
-void MediaPlayerService::Client::disconnect()
-{
- LOGV("disconnect(%d) from pid %d", mConnId, mPid);
- // grab local reference and clear main reference to prevent future
- // access to object
- sp<MediaPlayerBase> p;
- {
- Mutex::Autolock l(mLock);
- p = mPlayer;
- }
- mPlayer.clear();
-
- // clear the notification to prevent callbacks to dead client
- // and reset the player. We assume the player will serialize
- // access to itself if necessary.
- if (p != 0) {
- p->setNotifyCallback(0, 0);
-#if CALLBACK_ANTAGONIZER
- LOGD("kill Antagonizer");
- mAntagonizer->kill();
-#endif
- p->reset();
- }
-
- IPCThreadState::self()->flushCommands();
-}
-
-static player_type getPlayerType(int fd, int64_t offset, int64_t length)
-{
- char buf[20];
- lseek(fd, offset, SEEK_SET);
- read(fd, buf, sizeof(buf));
- lseek(fd, offset, SEEK_SET);
-
- long ident = *((long*)buf);
-
- // Ogg vorbis?
- if (ident == 0x5367674f) // 'OggS'
- return VORBIS_PLAYER;
-
- // Some kind of MIDI?
- EAS_DATA_HANDLE easdata;
- if (EAS_Init(&easdata) == EAS_SUCCESS) {
- EAS_FILE locator;
- locator.path = NULL;
- locator.fd = fd;
- locator.offset = offset;
- locator.length = length;
- EAS_HANDLE eashandle;
- if (EAS_OpenFile(easdata, &locator, &eashandle) == EAS_SUCCESS) {
- EAS_CloseFile(easdata, eashandle);
- EAS_Shutdown(easdata);
- return SONIVOX_PLAYER;
- }
- EAS_Shutdown(easdata);
- }
-
- // Fall through to PV
- return PV_PLAYER;
-}
-
-static player_type getPlayerType(const char* url)
-{
-
- // use MidiFile for MIDI extensions
- int lenURL = strlen(url);
- for (int i = 0; i < NELEM(FILE_EXTS); ++i) {
- int len = strlen(FILE_EXTS[i].extension);
- int start = lenURL - len;
- if (start > 0) {
- if (!strncmp(url + start, FILE_EXTS[i].extension, len)) {
- return FILE_EXTS[i].playertype;
- }
- }
- }
-
- // Fall through to PV
- return PV_PLAYER;
-}
-
-static sp<MediaPlayerBase> createPlayer(player_type playerType, void* cookie,
- notify_callback_f notifyFunc)
-{
- sp<MediaPlayerBase> p;
- switch (playerType) {
- case PV_PLAYER:
- LOGV(" create PVPlayer");
- p = new PVPlayer();
- break;
- case SONIVOX_PLAYER:
- LOGV(" create MidiFile");
- p = new MidiFile();
- break;
- case VORBIS_PLAYER:
- LOGV(" create VorbisPlayer");
- p = new VorbisPlayer();
- break;
- }
- if (p != NULL) {
- if (p->initCheck() == NO_ERROR) {
- p->setNotifyCallback(cookie, notifyFunc);
- } else {
- p.clear();
- }
- }
- if (p == NULL) {
- LOGE("Failed to create player object");
- }
- return p;
-}
-
-sp<MediaPlayerBase> MediaPlayerService::Client::createPlayer(player_type playerType)
-{
- // determine if we have the right player type
- sp<MediaPlayerBase> p = mPlayer;
- if ((p != NULL) && (p->playerType() != playerType)) {
- LOGV("delete player");
- p.clear();
- }
- if (p == NULL) {
- p = android::createPlayer(playerType, this, notify);
- }
- return p;
-}
-
-status_t MediaPlayerService::Client::setDataSource(const char *url)
-{
- LOGV("setDataSource(%s)", url);
- if (url == NULL)
- return UNKNOWN_ERROR;
-
- if (strncmp(url, "content://", 10) == 0) {
- // get a filedescriptor for the content Uri and
- // pass it to the setDataSource(fd) method
-
- String16 url16(url);
- int fd = android::openContentProviderFile(url16);
- if (fd < 0)
- {
- LOGE("Couldn't open fd for %s", url);
- return UNKNOWN_ERROR;
- }
- setDataSource(fd, 0, 0x7fffffffffLL); // this sets mStatus
- close(fd);
- return mStatus;
- } else {
- player_type playerType = getPlayerType(url);
- LOGV("player type = %d", playerType);
-
- // create the right type of player
- sp<MediaPlayerBase> p = createPlayer(playerType);
- if (p == NULL) return NO_INIT;
-
- if (!p->hardwareOutput()) {
- mAudioOutput = new AudioOutput();
- static_cast<MediaPlayerInterface*>(p.get())->setAudioSink(mAudioOutput);
- }
-
- // now set data source
- LOGV(" setDataSource");
- mStatus = p->setDataSource(url);
- if (mStatus == NO_ERROR) mPlayer = p;
- return mStatus;
- }
-}
-
-status_t MediaPlayerService::Client::setDataSource(int fd, int64_t offset, int64_t length)
-{
- LOGV("setDataSource fd=%d, offset=%lld, length=%lld", fd, offset, length);
- struct stat sb;
- int ret = fstat(fd, &sb);
- if (ret != 0) {
- LOGE("fstat(%d) failed: %d, %s", fd, ret, strerror(errno));
- return UNKNOWN_ERROR;
- }
-
- LOGV("st_dev = %llu", sb.st_dev);
- LOGV("st_mode = %u", sb.st_mode);
- LOGV("st_uid = %lu", sb.st_uid);
- LOGV("st_gid = %lu", sb.st_gid);
- LOGV("st_size = %llu", sb.st_size);
-
- if (offset >= sb.st_size) {
- LOGE("offset error");
- ::close(fd);
- return UNKNOWN_ERROR;
- }
- if (offset + length > sb.st_size) {
- length = sb.st_size - offset;
- LOGV("calculated length = %lld", length);
- }
-
- player_type playerType = getPlayerType(fd, offset, length);
- LOGV("player type = %d", playerType);
-
- // create the right type of player
- sp<MediaPlayerBase> p = createPlayer(playerType);
- if (p == NULL) return NO_INIT;
-
- if (!p->hardwareOutput()) {
- mAudioOutput = new AudioOutput();
- static_cast<MediaPlayerInterface*>(p.get())->setAudioSink(mAudioOutput);
- }
-
- // now set data source
- mStatus = p->setDataSource(fd, offset, length);
- if (mStatus == NO_ERROR) mPlayer = p;
- return mStatus;
-}
-
-status_t MediaPlayerService::Client::setVideoSurface(const sp<ISurface>& surface)
-{
- LOGV("[%d] setVideoSurface(%p)", mConnId, surface.get());
- sp<MediaPlayerBase> p = getPlayer();
- if (p == 0) return UNKNOWN_ERROR;
- return p->setVideoSurface(surface);
-}
-
-status_t MediaPlayerService::Client::prepareAsync()
-{
- LOGV("[%d] prepareAsync", mConnId);
- sp<MediaPlayerBase> p = getPlayer();
- if (p == 0) return UNKNOWN_ERROR;
- status_t ret = p->prepareAsync();
-#if CALLBACK_ANTAGONIZER
- LOGD("start Antagonizer");
- if (ret == NO_ERROR) mAntagonizer->start();
-#endif
- return ret;
-}
-
-status_t MediaPlayerService::Client::start()
-{
- LOGV("[%d] start", mConnId);
- sp<MediaPlayerBase> p = getPlayer();
- if (p == 0) return UNKNOWN_ERROR;
- p->setLooping(mLoop);
- return p->start();
-}
-
-status_t MediaPlayerService::Client::stop()
-{
- LOGV("[%d] stop", mConnId);
- sp<MediaPlayerBase> p = getPlayer();
- if (p == 0) return UNKNOWN_ERROR;
- return p->stop();
-}
-
-status_t MediaPlayerService::Client::pause()
-{
- LOGV("[%d] pause", mConnId);
- sp<MediaPlayerBase> p = getPlayer();
- if (p == 0) return UNKNOWN_ERROR;
- return p->pause();
-}
-
-status_t MediaPlayerService::Client::isPlaying(bool* state)
-{
- *state = false;
- sp<MediaPlayerBase> p = getPlayer();
- if (p == 0) return UNKNOWN_ERROR;
- *state = p->isPlaying();
- LOGV("[%d] isPlaying: %d", mConnId, *state);
- return NO_ERROR;
-}
-
-status_t MediaPlayerService::Client::getCurrentPosition(int *msec)
-{
- LOGV("getCurrentPosition");
- sp<MediaPlayerBase> p = getPlayer();
- if (p == 0) return UNKNOWN_ERROR;
- status_t ret = p->getCurrentPosition(msec);
- if (ret == NO_ERROR) {
- LOGV("[%d] getCurrentPosition = %d", mConnId, *msec);
- } else {
- LOGE("getCurrentPosition returned %d", ret);
- }
- return ret;
-}
-
-status_t MediaPlayerService::Client::getDuration(int *msec)
-{
- LOGV("getDuration");
- sp<MediaPlayerBase> p = getPlayer();
- if (p == 0) return UNKNOWN_ERROR;
- status_t ret = p->getDuration(msec);
- if (ret == NO_ERROR) {
- LOGV("[%d] getDuration = %d", mConnId, *msec);
- } else {
- LOGE("getDuration returned %d", ret);
- }
- return ret;
-}
-
-status_t MediaPlayerService::Client::seekTo(int msec)
-{
- LOGV("[%d] seekTo(%d)", mConnId, msec);
- sp<MediaPlayerBase> p = getPlayer();
- if (p == 0) return UNKNOWN_ERROR;
- return p->seekTo(msec);
-}
-
-status_t MediaPlayerService::Client::reset()
-{
- LOGV("[%d] reset", mConnId);
- sp<MediaPlayerBase> p = getPlayer();
- if (p == 0) return UNKNOWN_ERROR;
- return p->reset();
-}
-
-status_t MediaPlayerService::Client::setAudioStreamType(int type)
-{
- LOGV("[%d] setAudioStreamType(%d)", mConnId, type);
- // TODO: for hardware output, call player instead
- Mutex::Autolock l(mLock);
- if (mAudioOutput != 0) mAudioOutput->setAudioStreamType(type);
- return NO_ERROR;
-}
-
-status_t MediaPlayerService::Client::setLooping(int loop)
-{
- LOGV("[%d] setLooping(%d)", mConnId, loop);
- mLoop = loop;
- sp<MediaPlayerBase> p = getPlayer();
- if (p != 0) return p->setLooping(loop);
- return NO_ERROR;
-}
-
-status_t MediaPlayerService::Client::setVolume(float leftVolume, float rightVolume)
-{
- LOGV("[%d] setVolume(%f, %f)", mConnId, leftVolume, rightVolume);
- // TODO: for hardware output, call player instead
- Mutex::Autolock l(mLock);
- if (mAudioOutput != 0) mAudioOutput->setVolume(leftVolume, rightVolume);
- return NO_ERROR;
-}
-
-void MediaPlayerService::Client::notify(void* cookie, int msg, int ext1, int ext2)
-{
- Client* client = static_cast<Client*>(cookie);
- LOGV("[%d] notify (%p, %d, %d, %d)", client->mConnId, cookie, msg, ext1, ext2);
- client->mClient->notify(msg, ext1, ext2);
-}
-
-#if CALLBACK_ANTAGONIZER
-const int Antagonizer::interval = 10000; // 10 msecs
-
-Antagonizer::Antagonizer(notify_callback_f cb, void* client) :
- mExit(false), mActive(false), mClient(client), mCb(cb)
-{
- createThread(callbackThread, this);
-}
-
-void Antagonizer::kill()
-{
- Mutex::Autolock _l(mLock);
- mActive = false;
- mExit = true;
- mCondition.wait(mLock);
-}
-
-int Antagonizer::callbackThread(void* user)
-{
- LOGD("Antagonizer started");
- Antagonizer* p = reinterpret_cast<Antagonizer*>(user);
- while (!p->mExit) {
- if (p->mActive) {
- LOGV("send event");
- p->mCb(p->mClient, 0, 0, 0);
- }
- usleep(interval);
- }
- Mutex::Autolock _l(p->mLock);
- p->mCondition.signal();
- LOGD("Antagonizer stopped");
- return 0;
-}
-#endif
-
-static size_t kDefaultHeapSize = 1024 * 1024; // 1MB
-
-sp<IMemory> MediaPlayerService::decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat)
-{
- LOGV("decode(%s)", url);
- sp<MemoryBase> mem;
- sp<MediaPlayerBase> player;
-
- // Protect our precious, precious DRMd ringtones by only allowing
- // decoding of http, but not filesystem paths or content Uris.
- // If the application wants to decode those, it should open a
- // filedescriptor for them and use that.
- if (url != NULL && strncmp(url, "http://", 7) != 0) {
- LOGD("Can't decode %s by path, use filedescriptor instead", url);
- return mem;
- }
-
- player_type playerType = getPlayerType(url);
- LOGV("player type = %d", playerType);
-
- // create the right type of player
- sp<AudioCache> cache = new AudioCache(url);
- player = android::createPlayer(playerType, cache.get(), cache->notify);
- if (player == NULL) goto Exit;
- if (player->hardwareOutput()) goto Exit;
-
- static_cast<MediaPlayerInterface*>(player.get())->setAudioSink(cache);
-
- // set data source
- if (player->setDataSource(url) != NO_ERROR) goto Exit;
-
- LOGV("prepare");
- player->prepareAsync();
-
- LOGV("wait for prepare");
- if (cache->wait() != NO_ERROR) goto Exit;
-
- LOGV("start");
- player->start();
-
- LOGV("wait for playback complete");
- if (cache->wait() != NO_ERROR) goto Exit;
-
- mem = new MemoryBase(cache->getHeap(), 0, cache->size());
- *pSampleRate = cache->sampleRate();
- *pNumChannels = cache->channelCount();
- *pFormat = cache->format();
- LOGV("return memory @ %p, sampleRate=%u, channelCount = %d, format = %d", mem->pointer(), *pSampleRate, *pNumChannels, *pFormat);
-
-Exit:
- if (player != 0) player->reset();
- return mem;
-}
-
-sp<IMemory> MediaPlayerService::decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat)
-{
- LOGV("decode(%d, %lld, %lld)", fd, offset, length);
- sp<MemoryBase> mem;
- sp<MediaPlayerBase> player;
-
- player_type playerType = getPlayerType(fd, offset, length);
- LOGV("player type = %d", playerType);
-
- // create the right type of player
- sp<AudioCache> cache = new AudioCache("decode_fd");
- player = android::createPlayer(playerType, cache.get(), cache->notify);
- if (player == NULL) goto Exit;
- if (player->hardwareOutput()) goto Exit;
-
- static_cast<MediaPlayerInterface*>(player.get())->setAudioSink(cache);
-
- // set data source
- if (player->setDataSource(fd, offset, length) != NO_ERROR) goto Exit;
-
- LOGV("prepare");
- player->prepareAsync();
-
- LOGV("wait for prepare");
- if (cache->wait() != NO_ERROR) goto Exit;
-
- LOGV("start");
- player->start();
-
- LOGV("wait for playback complete");
- if (cache->wait() != NO_ERROR) goto Exit;
-
- mem = new MemoryBase(cache->getHeap(), 0, cache->size());
- *pSampleRate = cache->sampleRate();
- *pNumChannels = cache->channelCount();
- *pFormat = cache->format();
- LOGV("return memory @ %p, sampleRate=%u, channelCount = %d, format = %d", mem->pointer(), *pSampleRate, *pNumChannels, *pFormat);
-
-Exit:
- if (player != 0) player->reset();
- ::close(fd);
- return mem;
-}
-
-#undef LOG_TAG
-#define LOG_TAG "AudioSink"
-MediaPlayerService::AudioOutput::AudioOutput()
-{
- mTrack = 0;
- mStreamType = AudioSystem::MUSIC;
- mLeftVolume = 1.0;
- mRightVolume = 1.0;
- mLatency = 0;
- mMsecsPerFrame = 0;
- setMinBufferCount();
-}
-
-MediaPlayerService::AudioOutput::~AudioOutput()
-{
- close();
-}
-
-void MediaPlayerService::AudioOutput::setMinBufferCount()
-{
- char value[PROPERTY_VALUE_MAX];
- if (property_get("ro.kernel.qemu", value, 0)) {
- mIsOnEmulator = true;
- mMinBufferCount = 12; // to prevent systematic buffer underrun for emulator
- }
-}
-
-bool MediaPlayerService::AudioOutput::isOnEmulator()
-{
- setMinBufferCount();
- return mIsOnEmulator;
-}
-
-int MediaPlayerService::AudioOutput::getMinBufferCount()
-{
- setMinBufferCount();
- return mMinBufferCount;
-}
-
-ssize_t MediaPlayerService::AudioOutput::bufferSize() const
-{
- if (mTrack == 0) return NO_INIT;
- return mTrack->frameCount() * frameSize();
-}
-
-ssize_t MediaPlayerService::AudioOutput::frameCount() const
-{
- if (mTrack == 0) return NO_INIT;
- return mTrack->frameCount();
-}
-
-ssize_t MediaPlayerService::AudioOutput::channelCount() const
-{
- if (mTrack == 0) return NO_INIT;
- return mTrack->channelCount();
-}
-
-ssize_t MediaPlayerService::AudioOutput::frameSize() const
-{
- if (mTrack == 0) return NO_INIT;
- return mTrack->frameSize();
-}
-
-uint32_t MediaPlayerService::AudioOutput::latency () const
-{
- return mLatency;
-}
-
-float MediaPlayerService::AudioOutput::msecsPerFrame() const
-{
- return mMsecsPerFrame;
-}
-
-status_t MediaPlayerService::AudioOutput::open(uint32_t sampleRate, int channelCount, int format, int bufferCount)
-{
- // Check argument "bufferCount" against the mininum buffer count
- if (bufferCount < mMinBufferCount) {
- LOGD("bufferCount (%d) is too small and increased to %d", bufferCount, mMinBufferCount);
- bufferCount = mMinBufferCount;
-
- }
- LOGV("open(%u, %d, %d, %d)", sampleRate, channelCount, format, bufferCount);
- if (mTrack) close();
- int afSampleRate;
- int afFrameCount;
- int frameCount;
-
- if (AudioSystem::getOutputFrameCount(&afFrameCount, mStreamType) != NO_ERROR) {
- return NO_INIT;
- }
- if (AudioSystem::getOutputSamplingRate(&afSampleRate, mStreamType) != NO_ERROR) {
- return NO_INIT;
- }
-
- frameCount = (sampleRate*afFrameCount*bufferCount)/afSampleRate;
- AudioTrack *t = new AudioTrack(mStreamType, sampleRate, format, channelCount, frameCount);
- if ((t == 0) || (t->initCheck() != NO_ERROR)) {
- LOGE("Unable to create audio track");
- delete t;
- return NO_INIT;
- }
-
- LOGV("setVolume");
- t->setVolume(mLeftVolume, mRightVolume);
- mMsecsPerFrame = 1.e3 / (float) sampleRate;
- mLatency = t->latency() + kAudioVideoDelayMs;
- mTrack = t;
- return NO_ERROR;
-}
-
-void MediaPlayerService::AudioOutput::start()
-{
- LOGV("start");
- if (mTrack) {
- mTrack->setVolume(mLeftVolume, mRightVolume);
- mTrack->start();
- }
-}
-
-ssize_t MediaPlayerService::AudioOutput::write(const void* buffer, size_t size)
-{
- //LOGV("write(%p, %u)", buffer, size);
- if (mTrack) return mTrack->write(buffer, size);
- return NO_INIT;
-}
-
-void MediaPlayerService::AudioOutput::stop()
-{
- LOGV("stop");
- if (mTrack) mTrack->stop();
-}
-
-void MediaPlayerService::AudioOutput::flush()
-{
- LOGV("flush");
- if (mTrack) mTrack->flush();
-}
-
-void MediaPlayerService::AudioOutput::pause()
-{
- LOGV("pause");
- if (mTrack) mTrack->pause();
-}
-
-void MediaPlayerService::AudioOutput::close()
-{
- LOGV("close");
- delete mTrack;
- mTrack = 0;
-}
-
-void MediaPlayerService::AudioOutput::setVolume(float left, float right)
-{
- LOGV("setVolume(%f, %f)", left, right);
- mLeftVolume = left;
- mRightVolume = right;
- if (mTrack) {
- mTrack->setVolume(left, right);
- }
-}
-
-#undef LOG_TAG
-#define LOG_TAG "AudioCache"
-MediaPlayerService::AudioCache::AudioCache(const char* name) :
- mChannelCount(0), mFrameCount(1024), mSampleRate(0), mSize(0),
- mError(NO_ERROR), mCommandComplete(false)
-{
- // create ashmem heap
- mHeap = new MemoryHeapBase(kDefaultHeapSize, 0, name);
-}
-
-uint32_t MediaPlayerService::AudioCache::latency () const
-{
- return 0;
-}
-
-float MediaPlayerService::AudioCache::msecsPerFrame() const
-{
- return mMsecsPerFrame;
-}
-
-status_t MediaPlayerService::AudioCache::open(uint32_t sampleRate, int channelCount, int format, int bufferCount)
-{
- LOGV("open(%u, %d, %d, %d)", sampleRate, channelCount, format, bufferCount);
- if (mHeap->getHeapID() < 0) return NO_INIT;
- mSampleRate = sampleRate;
- mChannelCount = (uint16_t)channelCount;
- mFormat = (uint16_t)format;
- mMsecsPerFrame = 1.e3 / (float) sampleRate;
- return NO_ERROR;
-}
-
-ssize_t MediaPlayerService::AudioCache::write(const void* buffer, size_t size)
-{
- LOGV("write(%p, %u)", buffer, size);
- if ((buffer == 0) || (size == 0)) return size;
-
- uint8_t* p = static_cast<uint8_t*>(mHeap->getBase());
- if (p == NULL) return NO_INIT;
- p += mSize;
- LOGV("memcpy(%p, %p, %u)", p, buffer, size);
- if (mSize + size > mHeap->getSize()) {
- LOGE("Heap size overflow! req size: %d, max size: %d", (mSize + size), mHeap->getSize());
- size = mHeap->getSize() - mSize;
- }
- memcpy(p, buffer, size);
- mSize += size;
- return size;
-}
-
-// call with lock held
-status_t MediaPlayerService::AudioCache::wait()
-{
- Mutex::Autolock lock(mLock);
- if (!mCommandComplete) {
- mSignal.wait(mLock);
- }
- mCommandComplete = false;
-
- if (mError == NO_ERROR) {
- LOGV("wait - success");
- } else {
- LOGV("wait - error");
- }
- return mError;
-}
-
-void MediaPlayerService::AudioCache::notify(void* cookie, int msg, int ext1, int ext2)
-{
- LOGV("notify(%p, %d, %d, %d)", cookie, msg, ext1, ext2);
- AudioCache* p = static_cast<AudioCache*>(cookie);
-
- // ignore buffering messages
- if (msg == MEDIA_BUFFERING_UPDATE) return;
-
- // set error condition
- if (msg == MEDIA_ERROR) {
- LOGE("Error %d, %d occurred", ext1, ext2);
- p->mError = ext1;
- }
-
- // wake up thread
- LOGV("wakeup thread");
- p->mCommandComplete = true;
- p->mSignal.signal();
-}
-
-}; // namespace android
diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h
deleted file mode 100644
index f138886..0000000
--- a/media/libmediaplayerservice/MediaPlayerService.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#ifndef ANDROID_MEDIAPLAYERSERVICE_H
-#define ANDROID_MEDIAPLAYERSERVICE_H
-
-#include <utils.h>
-#include <utils/KeyedVector.h>
-#include <ui/SurfaceComposerClient.h>
-
-#include <media/IMediaPlayerService.h>
-#include <media/MediaPlayerInterface.h>
-
-namespace android {
-
-class IMediaRecorder;
-class IMediaMetadataRetriever;
-
-#define CALLBACK_ANTAGONIZER 0
-#if CALLBACK_ANTAGONIZER
-class Antagonizer {
-public:
- Antagonizer(notify_callback_f cb, void* client);
- void start() { mActive = true; }
- void stop() { mActive = false; }
- void kill();
-private:
- static const int interval;
- Antagonizer();
- static int callbackThread(void* cookie);
- Mutex mLock;
- Condition mCondition;
- bool mExit;
- bool mActive;
- void* mClient;
- notify_callback_f mCb;
-};
-#endif
-
-class MediaPlayerService : public BnMediaPlayerService
-{
- class Client;
-
- class AudioOutput : public MediaPlayerBase::AudioSink
- {
- public:
- AudioOutput();
- virtual ~AudioOutput();
-
- virtual bool ready() const { return mTrack != NULL; }
- virtual bool realtime() const { return true; }
- virtual ssize_t bufferSize() const;
- virtual ssize_t frameCount() const;
- virtual ssize_t channelCount() const;
- virtual ssize_t frameSize() const;
- virtual uint32_t latency() const;
- virtual float msecsPerFrame() const;
- virtual status_t open(uint32_t sampleRate, int channelCount, int format, int bufferCount=4);
- virtual void start();
- virtual ssize_t write(const void* buffer, size_t size);
- virtual void stop();
- virtual void flush();
- virtual void pause();
- virtual void close();
- void setAudioStreamType(int streamType) { mStreamType = streamType; }
- void setVolume(float left, float right);
- virtual status_t dump(int fd, const Vector<String16>& args) const;
-
- static bool isOnEmulator();
- static int getMinBufferCount();
- private:
- static void setMinBufferCount();
-
- AudioTrack* mTrack;
- int mStreamType;
- float mLeftVolume;
- float mRightVolume;
- float mMsecsPerFrame;
- uint32_t mLatency;
-
- // TODO: Find real cause of Audio/Video delay in PV framework and remove this workaround
- static const uint32_t kAudioVideoDelayMs;
- static bool mIsOnEmulator;
- static int mMinBufferCount; // 12 for emulator; otherwise 4
-
- };
-
- class AudioCache : public MediaPlayerBase::AudioSink
- {
- public:
- AudioCache(const char* name);
- virtual ~AudioCache() {}
-
- virtual bool ready() const { return (mChannelCount > 0) && (mHeap->getHeapID() > 0); }
- virtual bool realtime() const { return false; }
- virtual ssize_t bufferSize() const { return frameSize() * mFrameCount; }
- virtual ssize_t frameCount() const { return mFrameCount; }
- virtual ssize_t channelCount() const { return (ssize_t)mChannelCount; }
- virtual ssize_t frameSize() const { return ssize_t(mChannelCount * ((mFormat == AudioSystem::PCM_16_BIT)?sizeof(int16_t):sizeof(u_int8_t))); }
- virtual uint32_t latency() const;
- virtual float msecsPerFrame() const;
- virtual status_t open(uint32_t sampleRate, int channelCount, int format, int bufferCount=1);
- virtual void start() {}
- virtual ssize_t write(const void* buffer, size_t size);
- virtual void stop() {}
- virtual void flush() {}
- virtual void pause() {}
- virtual void close() {}
- void setAudioStreamType(int streamType) {}
- void setVolume(float left, float right) {}
- uint32_t sampleRate() const { return mSampleRate; }
- uint32_t format() const { return (uint32_t)mFormat; }
- size_t size() const { return mSize; }
- status_t wait();
-
- sp<IMemoryHeap> getHeap() const { return mHeap; }
-
- static void notify(void* cookie, int msg, int ext1, int ext2);
- virtual status_t dump(int fd, const Vector<String16>& args) const;
-
- private:
- AudioCache();
-
- Mutex mLock;
- Condition mSignal;
- sp<MemoryHeapBase> mHeap;
- float mMsecsPerFrame;
- uint16_t mChannelCount;
- uint16_t mFormat;
- ssize_t mFrameCount;
- uint32_t mSampleRate;
- uint32_t mSize;
- int mError;
- bool mCommandComplete;
- };
-
-public:
- static void instantiate();
-
- // IMediaPlayerService interface
- virtual sp<IMediaRecorder> createMediaRecorder(pid_t pid);
- virtual sp<IMediaMetadataRetriever> createMetadataRetriever(pid_t pid);
-
- // House keeping for media player clients
- virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, const char* url);
- virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, int fd, int64_t offset, int64_t length);
- virtual sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat);
- virtual sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat);
-
- virtual status_t dump(int fd, const Vector<String16>& args);
-
- void removeClient(wp<Client> client);
-
-private:
-
- class Client : public BnMediaPlayer {
-
- // IMediaPlayer interface
- virtual void disconnect();
- virtual status_t setVideoSurface(const sp<ISurface>& surface);
- virtual status_t prepareAsync();
- virtual status_t start();
- virtual status_t stop();
- virtual status_t pause();
- virtual status_t isPlaying(bool* state);
- virtual status_t seekTo(int msec);
- virtual status_t getCurrentPosition(int* msec);
- virtual status_t getDuration(int* msec);
- virtual status_t reset();
- virtual status_t setAudioStreamType(int type);
- virtual status_t setLooping(int loop);
- virtual status_t setVolume(float leftVolume, float rightVolume);
-
- sp<MediaPlayerBase> createPlayer(player_type playerType);
- status_t setDataSource(const char *url);
- status_t setDataSource(int fd, int64_t offset, int64_t length);
- static void notify(void* cookie, int msg, int ext1, int ext2);
-
- pid_t pid() const { return mPid; }
- virtual status_t dump(int fd, const Vector<String16>& args) const;
-
- private:
- friend class MediaPlayerService;
- Client( const sp<MediaPlayerService>& service,
- pid_t pid,
- int32_t connId,
- const sp<IMediaPlayerClient>& client);
- Client();
- virtual ~Client();
-
- void deletePlayer();
-
- sp<MediaPlayerBase> getPlayer() const { Mutex::Autolock lock(mLock); return mPlayer; }
-
- mutable Mutex mLock;
- sp<MediaPlayerBase> mPlayer;
- sp<MediaPlayerService> mService;
- sp<IMediaPlayerClient> mClient;
- sp<AudioOutput> mAudioOutput;
- pid_t mPid;
- status_t mStatus;
- bool mLoop;
- int32_t mConnId;
-#if CALLBACK_ANTAGONIZER
- Antagonizer* mAntagonizer;
-#endif
- };
-
-// ----------------------------------------------------------------------------
-
- MediaPlayerService();
- virtual ~MediaPlayerService();
-
- mutable Mutex mLock;
- SortedVector< wp<Client> > mClients;
- int32_t mNextConnId;
-};
-
-// ----------------------------------------------------------------------------
-
-}; // namespace android
-
-#endif // ANDROID_MEDIAPLAYERSERVICE_H
-
diff --git a/media/libmediaplayerservice/MediaRecorderClient.cpp b/media/libmediaplayerservice/MediaRecorderClient.cpp
deleted file mode 100644
index e8ba17f..0000000
--- a/media/libmediaplayerservice/MediaRecorderClient.cpp
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- ** Copyright 2008, HTC Inc.
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "MediaRecorderService"
-#include <utils/Log.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>
-#include <unistd.h>
-#include <string.h>
-#include <cutils/atomic.h>
-#include <android_runtime/ActivityManager.h>
-#include <utils/IPCThreadState.h>
-#include <utils/IServiceManager.h>
-#include <utils/MemoryHeapBase.h>
-#include <utils/MemoryBase.h>
-#include <media/PVMediaRecorder.h>
-
-#include "MediaRecorderClient.h"
-
-namespace android {
-
-status_t MediaRecorderClient::setCamera(const sp<ICamera>& camera)
-{
- LOGV("setCamera");
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->setCamera(camera);
-}
-
-status_t MediaRecorderClient::setPreviewSurface(const sp<ISurface>& surface)
-{
- LOGV("setPreviewSurface");
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->setPreviewSurface(surface);
-}
-
-status_t MediaRecorderClient::setVideoSource(int vs)
-{
- LOGV("setVideoSource(%d)", vs);
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- }
- return mRecorder->setVideoSource((video_source)vs);
-}
-
-status_t MediaRecorderClient::setAudioSource(int as)
-{
- LOGV("setAudioSource(%d)", as);
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- }
- return mRecorder->setAudioSource((audio_source)as);
-}
-
-status_t MediaRecorderClient::setOutputFormat(int of)
-{
- LOGV("setOutputFormat(%d)", of);
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->setOutputFormat((output_format)of);
-}
-
-status_t MediaRecorderClient::setVideoEncoder(int ve)
-{
- LOGV("setVideoEncoder(%d)", ve);
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->setVideoEncoder((video_encoder)ve);
-}
-
-status_t MediaRecorderClient::setAudioEncoder(int ae)
-{
- LOGV("setAudioEncoder(%d)", ae);
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->setAudioEncoder((audio_encoder)ae);
-}
-
-status_t MediaRecorderClient::setOutputFile(const char* path)
-{
- LOGV("setOutputFile(%s)", path);
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->setOutputFile(path);
-}
-
-status_t MediaRecorderClient::setOutputFile(int fd, int64_t offset, int64_t length)
-{
- LOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length);
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->setOutputFile(fd, offset, length);
-}
-
-status_t MediaRecorderClient::setVideoSize(int width, int height)
-{
- LOGV("setVideoSize(%dx%d)", width, height);
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->setVideoSize(width, height);
-}
-
-status_t MediaRecorderClient::setVideoFrameRate(int frames_per_second)
-{
- LOGV("setVideoFrameRate(%d)", frames_per_second);
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->setVideoFrameRate(frames_per_second);
-}
-
-status_t MediaRecorderClient::prepare()
-{
- LOGV("prepare");
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->prepare();
-}
-
-
-status_t MediaRecorderClient::getMaxAmplitude(int* max)
-{
- LOGV("getMaxAmplitude");
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->getMaxAmplitude(max);
-}
-
-status_t MediaRecorderClient::start()
-{
- LOGV("start");
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->start();
-
-}
-
-status_t MediaRecorderClient::stop()
-{
- LOGV("stop");
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->stop();
-}
-
-status_t MediaRecorderClient::init()
-{
- LOGV("init");
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->init();
-}
-
-status_t MediaRecorderClient::close()
-{
- LOGV("close");
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->close();
-}
-
-
-status_t MediaRecorderClient::reset()
-{
- LOGV("reset");
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->reset();
-}
-
-status_t MediaRecorderClient::release()
-{
- LOGV("release");
- Mutex::Autolock lock(mLock);
- if (mRecorder != NULL) {
- delete mRecorder;
- mRecorder = NULL;
- }
- return NO_ERROR;
-}
-
-MediaRecorderClient::MediaRecorderClient(pid_t pid)
-{
- LOGV("Client constructor");
- mPid = pid;
- mRecorder = new PVMediaRecorder();
-}
-
-MediaRecorderClient::~MediaRecorderClient()
-{
- LOGV("Client destructor");
- release();
-}
-
-}; // namespace android
-
diff --git a/media/libmediaplayerservice/MediaRecorderClient.h b/media/libmediaplayerservice/MediaRecorderClient.h
deleted file mode 100644
index 2b80c10..0000000
--- a/media/libmediaplayerservice/MediaRecorderClient.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- **
- ** Copyright 2008, HTC Inc.
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
-
-#ifndef ANDROID_MEDIARECORDERCLIENT_H
-#define ANDROID_MEDIARECORDERCLIENT_H
-
-#include <media/IMediaRecorder.h>
-
-namespace android {
-
-class PVMediaRecorder;
-class ISurface;
-
-class MediaRecorderClient : public BnMediaRecorder
-{
-public:
- virtual status_t setCamera(const sp<ICamera>& camera);
- virtual status_t setPreviewSurface(const sp<ISurface>& surface);
- virtual status_t setVideoSource(int vs);
- virtual status_t setAudioSource(int as);
- virtual status_t setOutputFormat(int of);
- virtual status_t setVideoEncoder(int ve);
- virtual status_t setAudioEncoder(int ae);
- virtual status_t setOutputFile(const char* path);
- virtual status_t setOutputFile(int fd, int64_t offset, int64_t length);
- virtual status_t setVideoSize(int width, int height);
- virtual status_t setVideoFrameRate(int frames_per_second);
- virtual status_t prepare();
- virtual status_t getMaxAmplitude(int* max);
- virtual status_t start();
- virtual status_t stop();
- virtual status_t reset();
- virtual status_t init();
- virtual status_t close();
- virtual status_t release();
-
-private:
- friend class MediaPlayerService; // for accessing private constructor
-
- MediaRecorderClient(pid_t pid);
- virtual ~MediaRecorderClient();
-
- pid_t mPid;
- Mutex mLock;
- PVMediaRecorder *mRecorder;
-};
-
-}; // namespace android
-
-#endif // ANDROID_MEDIARECORDERCLIENT_H
-
diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp
deleted file mode 100644
index a320bd5..0000000
--- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
-**
-** Copyright (C) 2008 The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "MetadataRetrieverClient"
-#include <utils/Log.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>
-#include <unistd.h>
-
-#include <string.h>
-#include <cutils/atomic.h>
-#include <utils/MemoryDealer.h>
-#include <android_runtime/ActivityManager.h>
-#include <utils/IPCThreadState.h>
-#include <utils/IServiceManager.h>
-#include <media/MediaMetadataRetrieverInterface.h>
-#include <media/MediaPlayerInterface.h>
-#include <media/PVMetadataRetriever.h>
-#include <private/media/VideoFrame.h>
-
-#include "MetadataRetrieverClient.h"
-
-
-namespace android {
-
-MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid)
-{
- LOGV("MetadataRetrieverClient constructor pid(%d)", pid);
- mPid = pid;
- mThumbnailDealer = NULL;
- mAlbumArtDealer = NULL;
- mThumbnail = NULL;
- mAlbumArt = NULL;
-
- mRetriever = new PVMetadataRetriever();
- if (mRetriever == NULL) {
- LOGE("failed to initialize the retriever");
- }
-}
-
-MetadataRetrieverClient::~MetadataRetrieverClient()
-{
- LOGV("MetadataRetrieverClient destructor");
- disconnect();
-}
-
-status_t MetadataRetrieverClient::dump(int fd, const Vector<String16>& args) const
-{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
- result.append(" MetadataRetrieverClient\n");
- snprintf(buffer, 255, " pid(%d)\n", mPid);
- result.append(buffer);
- write(fd, result.string(), result.size());
- write(fd, "\n", 1);
- return NO_ERROR;
-}
-
-void MetadataRetrieverClient::disconnect()
-{
- LOGV("disconnect from pid %d", mPid);
- Mutex::Autolock lock(mLock);
- mRetriever.clear();
- mThumbnailDealer.clear();
- mAlbumArtDealer.clear();
- mThumbnail.clear();
- mAlbumArt.clear();
- IPCThreadState::self()->flushCommands();
-}
-
-status_t MetadataRetrieverClient::setDataSource(const char *url)
-{
- LOGV("setDataSource(%s)", url);
- Mutex::Autolock lock(mLock);
- if (url == NULL) {
- return UNKNOWN_ERROR;
- }
- if (mRetriever == NULL) {
- LOGE("retriever is not initialized");
- return NO_INIT;
- }
- return mRetriever->setDataSource(url);
-}
-
-status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t length)
-{
- LOGV("setDataSource fd=%d, offset=%lld, length=%lld", fd, offset, length);
- Mutex::Autolock lock(mLock);
- if (mRetriever == NULL) {
- LOGE("retriever is not initialized");
- ::close(fd);
- return NO_INIT;
- }
-
- struct stat sb;
- int ret = fstat(fd, &sb);
- if (ret != 0) {
- LOGE("fstat(%d) failed: %d, %s", fd, ret, strerror(errno));
- return UNKNOWN_ERROR;
- }
- LOGV("st_dev = %llu", sb.st_dev);
- LOGV("st_mode = %u", sb.st_mode);
- LOGV("st_uid = %lu", sb.st_uid);
- LOGV("st_gid = %lu", sb.st_gid);
- LOGV("st_size = %llu", sb.st_size);
-
- if (offset >= sb.st_size) {
- LOGE("offset (%lld) bigger than file size (%llu)", offset, sb.st_size);
- ::close(fd);
- return UNKNOWN_ERROR;
- }
- if (offset + length > sb.st_size) {
- length = sb.st_size - offset;
- LOGE("calculated length = %lld", length);
- }
- status_t status = mRetriever->setDataSource(fd, offset, length);
- ::close(fd);
- return status;
-}
-
-status_t MetadataRetrieverClient::setMode(int mode)
-{
- LOGV("setMode");
- Mutex::Autolock lock(mLock);
- if (mRetriever == NULL) {
- LOGE("retriever is not initialized");
- return NO_INIT;
- }
- return mRetriever->setMode(mode);
-}
-
-status_t MetadataRetrieverClient::getMode(int* mode) const
-{
- LOGV("getMode");
- Mutex::Autolock lock(mLock);
- if (mRetriever == NULL) {
- LOGE("retriever is not initialized");
- return NO_INIT;
- }
- return mRetriever->getMode(mode);
-}
-
-sp<IMemory> MetadataRetrieverClient::captureFrame()
-{
- LOGV("captureFrame");
- Mutex::Autolock lock(mLock);
- mThumbnail.clear();
- mThumbnailDealer.clear();
- if (mRetriever == NULL) {
- LOGE("retriever is not initialized");
- return NULL;
- }
- VideoFrame *frame = mRetriever->captureFrame();
- if (frame == NULL) {
- LOGE("failed to capture a video frame");
- return NULL;
- }
- size_t size = sizeof(VideoFrame) + frame->mSize;
- mThumbnailDealer = new MemoryDealer(size);
- if (mThumbnailDealer == NULL) {
- LOGE("failed to create MemoryDealer");
- delete frame;
- return NULL;
- }
- mThumbnail = mThumbnailDealer->allocate(size);
- if (mThumbnail == NULL) {
- LOGE("not enough memory for VideoFrame size=%u", size);
- mThumbnailDealer.clear();
- delete frame;
- return NULL;
- }
- VideoFrame *frameCopy = static_cast<VideoFrame *>(mThumbnail->pointer());
- frameCopy->mWidth = frame->mWidth;
- frameCopy->mHeight = frame->mHeight;
- frameCopy->mDisplayWidth = frame->mDisplayWidth;
- frameCopy->mDisplayHeight = frame->mDisplayHeight;
- frameCopy->mSize = frame->mSize;
- frameCopy->mData = (uint8_t *)frameCopy + sizeof(VideoFrame);
- memcpy(frameCopy->mData, frame->mData, frame->mSize);
- delete frame; // Fix memory leakage
- return mThumbnail;
-}
-
-sp<IMemory> MetadataRetrieverClient::extractAlbumArt()
-{
- LOGV("extractAlbumArt");
- Mutex::Autolock lock(mLock);
- mAlbumArt.clear();
- mAlbumArtDealer.clear();
- if (mRetriever == NULL) {
- LOGE("retriever is not initialized");
- return NULL;
- }
- MediaAlbumArt *albumArt = mRetriever->extractAlbumArt();
- if (albumArt == NULL) {
- LOGE("failed to extract an album art");
- return NULL;
- }
- size_t size = sizeof(MediaAlbumArt) + albumArt->mSize;
- mAlbumArtDealer = new MemoryDealer(size);
- if (mAlbumArtDealer == NULL) {
- LOGE("failed to create MemoryDealer object");
- delete albumArt;
- return NULL;
- }
- mAlbumArt = mAlbumArtDealer->allocate(size);
- if (mAlbumArt == NULL) {
- LOGE("not enough memory for MediaAlbumArt size=%u", size);
- mAlbumArtDealer.clear();
- delete albumArt;
- return NULL;
- }
- MediaAlbumArt *albumArtCopy = static_cast<MediaAlbumArt *>(mAlbumArt->pointer());
- albumArtCopy->mSize = albumArt->mSize;
- albumArtCopy->mData = (uint8_t *)albumArtCopy + sizeof(MediaAlbumArt);
- memcpy(albumArtCopy->mData, albumArt->mData, albumArt->mSize);
- delete albumArt; // Fix memory leakage
- return mAlbumArt;
-}
-
-const char* MetadataRetrieverClient::extractMetadata(int keyCode)
-{
- LOGV("extractMetadata");
- Mutex::Autolock lock(mLock);
- if (mRetriever == NULL) {
- LOGE("retriever is not initialized");
- return NULL;
- }
- return mRetriever->extractMetadata(keyCode);
-}
-
-}; // namespace android
diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.h b/media/libmediaplayerservice/MetadataRetrieverClient.h
deleted file mode 100644
index ce29c98..0000000
--- a/media/libmediaplayerservice/MetadataRetrieverClient.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-**
-** Copyright (C) 2008 The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#ifndef ANDROID_MEDIAMETADATARETRIEVERSERVICE_H
-#define ANDROID_MEDIAMETADATARETRIEVERSERVICE_H
-
-#include <utils.h>
-#include <utils/KeyedVector.h>
-#include <utils/IMemory.h>
-
-#include <media/MediaMetadataRetrieverInterface.h>
-
-
-namespace android {
-
-class IMediaPlayerService;
-class MemoryDealer;
-
-class MetadataRetrieverClient : public BnMediaMetadataRetriever
-{
-public:
- MetadataRetrieverClient(const sp<IMediaPlayerService>& service, pid_t pid, int32_t connId);
-
- // Implements IMediaMetadataRetriever interface
- // These methods are called in IMediaMetadataRetriever.cpp?
- virtual void disconnect();
- virtual status_t setDataSource(const char *url);
- virtual status_t setDataSource(int fd, int64_t offset, int64_t length);
- virtual status_t setMode(int mode);
- virtual status_t getMode(int* mode) const;
- virtual sp<IMemory> captureFrame();
- virtual sp<IMemory> extractAlbumArt();
- virtual const char* extractMetadata(int keyCode);
-
- virtual status_t dump(int fd, const Vector<String16>& args) const;
-
-private:
- friend class MediaPlayerService;
-
- explicit MetadataRetrieverClient(pid_t pid);
- virtual ~MetadataRetrieverClient();
-
- mutable Mutex mLock;
- sp<MediaMetadataRetrieverBase> mRetriever;
- pid_t mPid;
-
- // Keep the shared memory copy of album art and capture frame (for thumbnail)
- sp<MemoryDealer> mAlbumArtDealer;
- sp<MemoryDealer> mThumbnailDealer;
- sp<IMemory> mAlbumArt;
- sp<IMemory> mThumbnail;
-};
-
-}; // namespace android
-
-#endif // ANDROID_MEDIAMETADATARETRIEVERSERVICE_H
-
diff --git a/media/libmediaplayerservice/MidiFile.cpp b/media/libmediaplayerservice/MidiFile.cpp
deleted file mode 100644
index d03caa5..0000000
--- a/media/libmediaplayerservice/MidiFile.cpp
+++ /dev/null
@@ -1,558 +0,0 @@
-/* MidiFile.cpp
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "MidiFile"
-#include "utils/Log.h"
-
-#include <stdio.h>
-#include <assert.h>
-#include <limits.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sched.h>
-#include <utils/threads.h>
-#include <libsonivox/eas_reverb.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "MidiFile.h"
-
-#ifdef HAVE_GETTID
-static pid_t myTid() { return gettid(); }
-#else
-static pid_t myTid() { return getpid(); }
-#endif
-
-// ----------------------------------------------------------------------------
-
-namespace android {
-
-// ----------------------------------------------------------------------------
-
-// The midi engine buffers are a bit small (128 frames), so we batch them up
-static const int NUM_BUFFERS = 4;
-
-// TODO: Determine appropriate return codes
-static status_t ERROR_NOT_OPEN = -1;
-static status_t ERROR_OPEN_FAILED = -2;
-static status_t ERROR_EAS_FAILURE = -3;
-static status_t ERROR_ALLOCATE_FAILED = -4;
-
-static const S_EAS_LIB_CONFIG* pLibConfig = NULL;
-
-MidiFile::MidiFile() :
- mEasData(NULL), mEasHandle(NULL), mAudioBuffer(NULL),
- mPlayTime(-1), mDuration(-1), mState(EAS_STATE_ERROR),
- mStreamType(AudioSystem::MUSIC), mLoop(false), mExit(false),
- mPaused(false), mRender(false), mTid(-1)
-{
- LOGV("constructor");
-
- mFileLocator.path = NULL;
- mFileLocator.fd = -1;
- mFileLocator.offset = 0;
- mFileLocator.length = 0;
-
- // get the library configuration and do sanity check
- if (pLibConfig == NULL)
- pLibConfig = EAS_Config();
- if ((pLibConfig == NULL) || (LIB_VERSION != pLibConfig->libVersion)) {
- LOGE("EAS library/header mismatch");
- goto Failed;
- }
-
- // initialize EAS library
- if (EAS_Init(&mEasData) != EAS_SUCCESS) {
- LOGE("EAS_Init failed");
- goto Failed;
- }
-
- // select reverb preset and enable
- EAS_SetParameter(mEasData, EAS_MODULE_REVERB, EAS_PARAM_REVERB_PRESET, EAS_PARAM_REVERB_CHAMBER);
- EAS_SetParameter(mEasData, EAS_MODULE_REVERB, EAS_PARAM_REVERB_BYPASS, EAS_FALSE);
-
- // create playback thread
- {
- Mutex::Autolock l(mMutex);
- createThreadEtc(renderThread, this, "midithread");
- mCondition.wait(mMutex);
- LOGV("thread started");
- }
-
- // indicate success
- if (mTid > 0) {
- LOGV(" render thread(%d) started", mTid);
- mState = EAS_STATE_READY;
- }
-
-Failed:
- return;
-}
-
-status_t MidiFile::initCheck()
-{
- if (mState == EAS_STATE_ERROR) return ERROR_EAS_FAILURE;
- return NO_ERROR;
-}
-
-MidiFile::~MidiFile() {
- LOGV("MidiFile destructor");
- release();
-}
-
-status_t MidiFile::setDataSource(const char* path)
-{
- LOGV("MidiFile::setDataSource url=%s", path);
- Mutex::Autolock lock(mMutex);
-
- // file still open?
- if (mEasHandle) {
- reset_nosync();
- }
-
- // open file and set paused state
- mFileLocator.path = strdup(path);
- mFileLocator.fd = -1;
- mFileLocator.offset = 0;
- mFileLocator.length = 0;
- EAS_RESULT result = EAS_OpenFile(mEasData, &mFileLocator, &mEasHandle);
- if (result == EAS_SUCCESS) {
- updateState();
- }
-
- if (result != EAS_SUCCESS) {
- LOGE("EAS_OpenFile failed: [%d]", (int)result);
- mState = EAS_STATE_ERROR;
- return ERROR_OPEN_FAILED;
- }
-
- mState = EAS_STATE_OPEN;
- mPlayTime = 0;
- return NO_ERROR;
-}
-
-status_t MidiFile::setDataSource(int fd, int64_t offset, int64_t length)
-{
- LOGV("MidiFile::setDataSource fd=%d", fd);
- Mutex::Autolock lock(mMutex);
-
- // file still open?
- if (mEasHandle) {
- reset_nosync();
- }
-
- // open file and set paused state
- mFileLocator.fd = dup(fd);
- mFileLocator.offset = offset;
- mFileLocator.length = length;
- EAS_RESULT result = EAS_OpenFile(mEasData, &mFileLocator, &mEasHandle);
- updateState();
-
- if (result != EAS_SUCCESS) {
- LOGE("EAS_OpenFile failed: [%d]", (int)result);
- mState = EAS_STATE_ERROR;
- return ERROR_OPEN_FAILED;
- }
-
- mState = EAS_STATE_OPEN;
- mPlayTime = 0;
- return NO_ERROR;
-}
-
-status_t MidiFile::prepare()
-{
- LOGV("MidiFile::prepare");
- Mutex::Autolock lock(mMutex);
- if (!mEasHandle) {
- return ERROR_NOT_OPEN;
- }
- EAS_RESULT result;
- if ((result = EAS_Prepare(mEasData, mEasHandle)) != EAS_SUCCESS) {
- LOGE("EAS_Prepare failed: [%ld]", result);
- return ERROR_EAS_FAILURE;
- }
- updateState();
- return NO_ERROR;
-}
-
-status_t MidiFile::prepareAsync()
-{
- LOGV("MidiFile::prepareAsync");
- status_t ret = prepare();
-
- // don't hold lock during callback
- if (ret == NO_ERROR) {
- sendEvent(MEDIA_PREPARED);
- } else {
- sendEvent(MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, ret);
- }
- return ret;
-}
-
-status_t MidiFile::start()
-{
- LOGV("MidiFile::start");
- Mutex::Autolock lock(mMutex);
- if (!mEasHandle) {
- return ERROR_NOT_OPEN;
- }
-
- // resuming after pause?
- if (mPaused) {
- if (EAS_Resume(mEasData, mEasHandle) != EAS_SUCCESS) {
- return ERROR_EAS_FAILURE;
- }
- mPaused = false;
- updateState();
- }
-
- mRender = true;
-
- // wake up render thread
- LOGV(" wakeup render thread");
- mCondition.signal();
- return NO_ERROR;
-}
-
-status_t MidiFile::stop()
-{
- LOGV("MidiFile::stop");
- Mutex::Autolock lock(mMutex);
- if (!mEasHandle) {
- return ERROR_NOT_OPEN;
- }
- if (!mPaused && (mState != EAS_STATE_STOPPED)) {
- EAS_RESULT result = EAS_Pause(mEasData, mEasHandle);
- if (result != EAS_SUCCESS) {
- LOGE("EAS_Pause returned error %ld", result);
- return ERROR_EAS_FAILURE;
- }
- }
- mPaused = false;
- return NO_ERROR;
-}
-
-status_t MidiFile::seekTo(int position)
-{
- LOGV("MidiFile::seekTo %d", position);
- // hold lock during EAS calls
- {
- Mutex::Autolock lock(mMutex);
- if (!mEasHandle) {
- return ERROR_NOT_OPEN;
- }
- EAS_RESULT result;
- if ((result = EAS_Locate(mEasData, mEasHandle, position, false))
- != EAS_SUCCESS)
- {
- LOGE("EAS_Locate returned %ld", result);
- return ERROR_EAS_FAILURE;
- }
- EAS_GetLocation(mEasData, mEasHandle, &mPlayTime);
- }
- sendEvent(MEDIA_SEEK_COMPLETE);
- return NO_ERROR;
-}
-
-status_t MidiFile::pause()
-{
- LOGV("MidiFile::pause");
- Mutex::Autolock lock(mMutex);
- if (!mEasHandle) {
- return ERROR_NOT_OPEN;
- }
- if ((mState == EAS_STATE_PAUSING) || (mState == EAS_STATE_PAUSED)) return NO_ERROR;
- if (EAS_Pause(mEasData, mEasHandle) != EAS_SUCCESS) {
- return ERROR_EAS_FAILURE;
- }
- mPaused = true;
- return NO_ERROR;
-}
-
-bool MidiFile::isPlaying()
-{
- LOGV("MidiFile::isPlaying, mState=%d", int(mState));
- if (!mEasHandle || mPaused) return false;
- return (mState == EAS_STATE_PLAY);
-}
-
-status_t MidiFile::getCurrentPosition(int* position)
-{
- LOGV("MidiFile::getCurrentPosition");
- if (!mEasHandle) {
- LOGE("getCurrentPosition(): file not open");
- return ERROR_NOT_OPEN;
- }
- if (mPlayTime < 0) {
- LOGE("getCurrentPosition(): mPlayTime = %ld", mPlayTime);
- return ERROR_EAS_FAILURE;
- }
- *position = mPlayTime;
- return NO_ERROR;
-}
-
-status_t MidiFile::getDuration(int* duration)
-{
-
- LOGV("MidiFile::getDuration");
- {
- Mutex::Autolock lock(mMutex);
- if (!mEasHandle) return ERROR_NOT_OPEN;
- *duration = mDuration;
- }
-
- // if no duration cached, get the duration
- // don't need a lock here because we spin up a new engine
- if (*duration < 0) {
- EAS_I32 temp;
- EAS_DATA_HANDLE easData = NULL;
- EAS_HANDLE easHandle = NULL;
- EAS_RESULT result = EAS_Init(&easData);
- if (result == EAS_SUCCESS) {
- result = EAS_OpenFile(easData, &mFileLocator, &easHandle);
- }
- if (result == EAS_SUCCESS) {
- result = EAS_Prepare(easData, easHandle);
- }
- if (result == EAS_SUCCESS) {
- result = EAS_ParseMetaData(easData, easHandle, &temp);
- }
- if (easHandle) {
- EAS_CloseFile(easData, easHandle);
- }
- if (easData) {
- EAS_Shutdown(easData);
- }
-
- if (result != EAS_SUCCESS) {
- return ERROR_EAS_FAILURE;
- }
-
- // cache successful result
- mDuration = *duration = int(temp);
- }
-
- return NO_ERROR;
-}
-
-status_t MidiFile::release()
-{
- LOGV("MidiFile::release");
- Mutex::Autolock l(mMutex);
- reset_nosync();
-
- // wait for render thread to exit
- mExit = true;
- mCondition.signal();
-
- // wait for thread to exit
- if (mAudioBuffer) {
- mCondition.wait(mMutex);
- }
-
- // release resources
- if (mEasData) {
- EAS_Shutdown(mEasData);
- mEasData = NULL;
- }
- return NO_ERROR;
-}
-
-status_t MidiFile::reset()
-{
- LOGV("MidiFile::reset");
- Mutex::Autolock lock(mMutex);
- return reset_nosync();
-}
-
-// call only with mutex held
-status_t MidiFile::reset_nosync()
-{
- LOGV("MidiFile::reset_nosync");
- // close file
- if (mEasHandle) {
- EAS_CloseFile(mEasData, mEasHandle);
- mEasHandle = NULL;
- }
- if (mFileLocator.path) {
- free((void*)mFileLocator.path);
- mFileLocator.path = NULL;
- }
- if (mFileLocator.fd >= 0) {
- close(mFileLocator.fd);
- }
- mFileLocator.fd = -1;
- mFileLocator.offset = 0;
- mFileLocator.length = 0;
-
- mPlayTime = -1;
- mDuration = -1;
- mLoop = false;
- mPaused = false;
- mRender = false;
- return NO_ERROR;
-}
-
-status_t MidiFile::setLooping(int loop)
-{
- LOGV("MidiFile::setLooping");
- Mutex::Autolock lock(mMutex);
- if (!mEasHandle) {
- return ERROR_NOT_OPEN;
- }
- loop = loop ? -1 : 0;
- if (EAS_SetRepeat(mEasData, mEasHandle, loop) != EAS_SUCCESS) {
- return ERROR_EAS_FAILURE;
- }
- return NO_ERROR;
-}
-
-status_t MidiFile::createOutputTrack() {
- if (mAudioSink->open(pLibConfig->sampleRate, pLibConfig->numChannels, AudioSystem::PCM_16_BIT, 2) != NO_ERROR) {
- LOGE("mAudioSink open failed");
- return ERROR_OPEN_FAILED;
- }
- return NO_ERROR;
-}
-
-int MidiFile::renderThread(void* p) {
-
- return ((MidiFile*)p)->render();
-}
-
-int MidiFile::render() {
- EAS_RESULT result = EAS_FAILURE;
- EAS_I32 count;
- int temp;
- bool audioStarted = false;
-
- LOGV("MidiFile::render");
-
- // allocate render buffer
- mAudioBuffer = new EAS_PCM[pLibConfig->mixBufferSize * pLibConfig->numChannels * NUM_BUFFERS];
- if (!mAudioBuffer) {
- LOGE("mAudioBuffer allocate failed");
- goto threadExit;
- }
-
- // signal main thread that we started
- {
- Mutex::Autolock l(mMutex);
- mTid = myTid();
- LOGV("render thread(%d) signal", mTid);
- mCondition.signal();
- }
-
- while (1) {
- mMutex.lock();
-
- // nothing to render, wait for client thread to wake us up
- while (!mRender && !mExit)
- {
- LOGV("MidiFile::render - signal wait");
- mCondition.wait(mMutex);
- LOGV("MidiFile::render - signal rx'd");
- }
- if (mExit) {
- mMutex.unlock();
- break;
- }
-
- // render midi data into the input buffer
- //LOGV("MidiFile::render - rendering audio");
- int num_output = 0;
- EAS_PCM* p = mAudioBuffer;
- for (int i = 0; i < NUM_BUFFERS; i++) {
- result = EAS_Render(mEasData, p, pLibConfig->mixBufferSize, &count);
- if (result != EAS_SUCCESS) {
- LOGE("EAS_Render returned %ld", result);
- }
- p += count * pLibConfig->numChannels;
- num_output += count * pLibConfig->numChannels * sizeof(EAS_PCM);
- }
-
- // update playback state and position
- // LOGV("MidiFile::render - updating state");
- EAS_GetLocation(mEasData, mEasHandle, &mPlayTime);
- EAS_State(mEasData, mEasHandle, &mState);
- mMutex.unlock();
-
- // create audio output track if necessary
- if (!mAudioSink->ready()) {
- LOGV("MidiFile::render - create output track");
- if (createOutputTrack() != NO_ERROR)
- goto threadExit;
- }
-
- // Write data to the audio hardware
- // LOGV("MidiFile::render - writing to audio output");
- if ((temp = mAudioSink->write(mAudioBuffer, num_output)) < 0) {
- LOGE("Error in writing:%d",temp);
- return temp;
- }
-
- // start audio output if necessary
- if (!audioStarted) {
- //LOGV("MidiFile::render - starting audio");
- mAudioSink->start();
- audioStarted = true;
- }
-
- // still playing?
- if ((mState == EAS_STATE_STOPPED) || (mState == EAS_STATE_ERROR) ||
- (mState == EAS_STATE_PAUSED))
- {
- switch(mState) {
- case EAS_STATE_STOPPED:
- {
- LOGV("MidiFile::render - stopped");
- sendEvent(MEDIA_PLAYBACK_COMPLETE);
- break;
- }
- case EAS_STATE_ERROR:
- {
- LOGE("MidiFile::render - error");
- sendEvent(MEDIA_ERROR, MEDIA_ERROR_UNKNOWN);
- break;
- }
- case EAS_STATE_PAUSED:
- LOGV("MidiFile::render - paused");
- break;
- default:
- break;
- }
- mAudioSink->stop();
- audioStarted = false;
- mRender = false;
- }
- }
-
-threadExit:
- mAudioSink.clear();
- if (mAudioBuffer) {
- delete [] mAudioBuffer;
- mAudioBuffer = NULL;
- }
- mMutex.lock();
- mTid = -1;
- mCondition.signal();
- mMutex.unlock();
- return result;
-}
-
-} // end namespace android
diff --git a/media/libmediaplayerservice/MidiFile.h b/media/libmediaplayerservice/MidiFile.h
deleted file mode 100644
index 302f1cf..0000000
--- a/media/libmediaplayerservice/MidiFile.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#ifndef ANDROID_MIDIFILE_H
-#define ANDROID_MIDIFILE_H
-
-#include <media/MediaPlayerInterface.h>
-#include <media/AudioTrack.h>
-#include <libsonivox/eas.h>
-
-namespace android {
-
-class MidiFile : public MediaPlayerInterface {
-public:
- MidiFile();
- ~MidiFile();
-
- virtual status_t initCheck();
- virtual status_t setDataSource(const char* path);
- virtual status_t setDataSource(int fd, int64_t offset, int64_t length);
- virtual status_t setVideoSurface(const sp<ISurface>& surface) { return UNKNOWN_ERROR; }
- virtual status_t prepare();
- virtual status_t prepareAsync();
- virtual status_t start();
- virtual status_t stop();
- virtual status_t seekTo(int msec);
- virtual status_t pause();
- virtual bool isPlaying();
- virtual status_t getCurrentPosition(int* msec);
- virtual status_t getDuration(int* msec);
- virtual status_t release();
- virtual status_t reset();
- virtual status_t setLooping(int loop);
- virtual player_type playerType() { return SONIVOX_PLAYER; }
-
-private:
- status_t createOutputTrack();
- status_t reset_nosync();
- static int renderThread(void*);
- int render();
- void updateState(){ EAS_State(mEasData, mEasHandle, &mState); }
-
- Mutex mMutex;
- Condition mCondition;
- EAS_DATA_HANDLE mEasData;
- EAS_HANDLE mEasHandle;
- EAS_PCM* mAudioBuffer;
- EAS_I32 mPlayTime;
- EAS_I32 mDuration;
- EAS_STATE mState;
- EAS_FILE mFileLocator;
- int mStreamType;
- bool mLoop;
- volatile bool mExit;
- bool mPaused;
- volatile bool mRender;
- pid_t mTid;
-};
-
-}; // namespace android
-
-#endif // ANDROID_MIDIFILE_H
-
diff --git a/media/libmediaplayerservice/VorbisPlayer.cpp b/media/libmediaplayerservice/VorbisPlayer.cpp
deleted file mode 100644
index 0ad335f..0000000
--- a/media/libmediaplayerservice/VorbisPlayer.cpp
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "VorbisPlayer"
-#include "utils/Log.h"
-
-#include <stdio.h>
-#include <assert.h>
-#include <limits.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sched.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-
-#include "VorbisPlayer.h"
-
-#ifdef HAVE_GETTID
-static pid_t myTid() { return gettid(); }
-#else
-static pid_t myTid() { return getpid(); }
-#endif
-
-// ----------------------------------------------------------------------------
-
-namespace android {
-
-// ----------------------------------------------------------------------------
-
-// TODO: Determine appropriate return codes
-static status_t ERROR_NOT_OPEN = -1;
-static status_t ERROR_OPEN_FAILED = -2;
-static status_t ERROR_ALLOCATE_FAILED = -4;
-static status_t ERROR_NOT_SUPPORTED = -8;
-static status_t ERROR_NOT_READY = -16;
-static status_t STATE_INIT = 0;
-static status_t STATE_ERROR = 1;
-static status_t STATE_OPEN = 2;
-
-
-VorbisPlayer::VorbisPlayer() :
- mAudioBuffer(NULL), mPlayTime(-1), mDuration(-1), mState(STATE_ERROR),
- mStreamType(AudioSystem::MUSIC), mLoop(false), mAndroidLoop(false),
- mExit(false), mPaused(false), mRender(false), mRenderTid(-1)
-{
- LOGV("constructor\n");
- memset(&mVorbisFile, 0, sizeof mVorbisFile);
-}
-
-void VorbisPlayer::onFirstRef()
-{
- LOGV("onFirstRef");
- // create playback thread
- Mutex::Autolock l(mMutex);
- createThreadEtc(renderThread, this, "vorbis decoder");
- mCondition.wait(mMutex);
- if (mRenderTid > 0) {
- LOGV("render thread(%d) started", mRenderTid);
- mState = STATE_INIT;
- }
-}
-
-status_t VorbisPlayer::initCheck()
-{
- if (mState != STATE_ERROR) return NO_ERROR;
- return ERROR_NOT_READY;
-}
-
-VorbisPlayer::~VorbisPlayer() {
- LOGV("VorbisPlayer destructor\n");
- release();
-}
-
-status_t VorbisPlayer::setDataSource(const char* path)
-{
- return setdatasource(path, -1, 0, 0x7ffffffffffffffLL); // intentionally less than LONG_MAX
-}
-
-status_t VorbisPlayer::setDataSource(int fd, int64_t offset, int64_t length)
-{
- return setdatasource(NULL, fd, offset, length);
-}
-
-size_t VorbisPlayer::vp_fread(void *buf, size_t size, size_t nmemb, void *me) {
- VorbisPlayer *self = (VorbisPlayer*) me;
-
- long curpos = vp_ftell(me);
- while (nmemb != 0 && (curpos + size * nmemb) > self->mLength) {
- nmemb--;
- }
- return fread(buf, size, nmemb, self->mFile);
-}
-
-int VorbisPlayer::vp_fseek(void *me, ogg_int64_t off, int whence) {
- VorbisPlayer *self = (VorbisPlayer*) me;
- if (whence == SEEK_SET)
- return fseek(self->mFile, off + self->mOffset, whence);
- else if (whence == SEEK_CUR)
- return fseek(self->mFile, off, whence);
- else if (whence == SEEK_END)
- return fseek(self->mFile, self->mOffset + self->mLength + off, SEEK_SET);
- return -1;
-}
-
-int VorbisPlayer::vp_fclose(void *me) {
- LOGV("vp_fclose");
- VorbisPlayer *self = (VorbisPlayer*) me;
- int ret = fclose (self->mFile);
- self->mFile = NULL;
- return ret;
-}
-
-long VorbisPlayer::vp_ftell(void *me) {
- VorbisPlayer *self = (VorbisPlayer*) me;
- return ftell(self->mFile) - self->mOffset;
-}
-
-status_t VorbisPlayer::setdatasource(const char *path, int fd, int64_t offset, int64_t length)
-{
- LOGV("setDataSource url=%s, fd=%d\n", path, fd);
-
- // file still open?
- Mutex::Autolock l(mMutex);
- if (mState == STATE_OPEN) {
- reset_nosync();
- }
-
- // open file and set paused state
- if (path) {
- mFile = fopen(path, "r");
- } else {
- mFile = fdopen(dup(fd), "r");
- }
- if (mFile == NULL) {
- return ERROR_OPEN_FAILED;
- }
-
- struct stat sb;
- int ret;
- if (path) {
- ret = stat(path, &sb);
- } else {
- ret = fstat(fd, &sb);
- }
- if (ret != 0) {
- mState = STATE_ERROR;
- fclose(mFile);
- return ERROR_OPEN_FAILED;
- }
- if (sb.st_size > (length + offset)) {
- mLength = length;
- } else {
- mLength = sb.st_size - offset;
- }
-
- ov_callbacks callbacks = {
- (size_t (*)(void *, size_t, size_t, void *)) vp_fread,
- (int (*)(void *, ogg_int64_t, int)) vp_fseek,
- (int (*)(void *)) vp_fclose,
- (long (*)(void *)) vp_ftell
- };
-
- mOffset = offset;
- fseek(mFile, offset, SEEK_SET);
-
- int result = ov_open_callbacks(this, &mVorbisFile, NULL, 0, callbacks);
- if (result < 0) {
- LOGE("ov_open() failed: [%d]\n", (int)result);
- mState = STATE_ERROR;
- fclose(mFile);
- return ERROR_OPEN_FAILED;
- }
-
- // look for the android loop tag (for ringtones)
- char **ptr = ov_comment(&mVorbisFile,-1)->user_comments;
- while(*ptr) {
- // does the comment start with ANDROID_LOOP_TAG
- if(strncmp(*ptr, ANDROID_LOOP_TAG, strlen(ANDROID_LOOP_TAG)) == 0) {
- // read the value of the tag
- char *val = *ptr + strlen(ANDROID_LOOP_TAG) + 1;
- mAndroidLoop = (strncmp(val, "true", 4) == 0);
- }
- // we keep parsing even after finding one occurence of ANDROID_LOOP_TAG,
- // as we could find another one (the tag might have been appended more than once).
- ++ptr;
- }
- LOGV_IF(mAndroidLoop, "looped sound");
-
- mState = STATE_OPEN;
- return NO_ERROR;
-}
-
-status_t VorbisPlayer::prepare()
-{
- LOGV("prepare\n");
- if (mState != STATE_OPEN ) {
- return ERROR_NOT_OPEN;
- }
- return NO_ERROR;
-}
-
-status_t VorbisPlayer::prepareAsync() {
- LOGV("prepareAsync\n");
- // can't hold the lock here because of the callback
- // it's safe because we don't change state
- if (mState != STATE_OPEN ) {
- sendEvent(MEDIA_ERROR);
- return NO_ERROR;
- }
- sendEvent(MEDIA_PREPARED);
- return NO_ERROR;
-}
-
-status_t VorbisPlayer::start()
-{
- LOGV("start\n");
- Mutex::Autolock l(mMutex);
- if (mState != STATE_OPEN) {
- return ERROR_NOT_OPEN;
- }
-
- mPaused = false;
- mRender = true;
-
- // wake up render thread
- LOGV(" wakeup render thread\n");
- mCondition.signal();
- return NO_ERROR;
-}
-
-status_t VorbisPlayer::stop()
-{
- LOGV("stop\n");
- Mutex::Autolock l(mMutex);
- if (mState != STATE_OPEN) {
- return ERROR_NOT_OPEN;
- }
- mPaused = true;
- mRender = false;
- return NO_ERROR;
-}
-
-status_t VorbisPlayer::seekTo(int position)
-{
- LOGV("seekTo %d\n", position);
- Mutex::Autolock l(mMutex);
- if (mState != STATE_OPEN) {
- return ERROR_NOT_OPEN;
- }
-
- int result = ov_time_seek(&mVorbisFile, position);
- if (result != 0) {
- LOGE("ov_time_seek() returned %d\n", result);
- return result;
- }
- sendEvent(MEDIA_SEEK_COMPLETE);
- return NO_ERROR;
-}
-
-status_t VorbisPlayer::pause()
-{
- LOGV("pause\n");
- Mutex::Autolock l(mMutex);
- if (mState != STATE_OPEN) {
- return ERROR_NOT_OPEN;
- }
- mPaused = true;
- return NO_ERROR;
-}
-
-bool VorbisPlayer::isPlaying()
-{
- LOGV("isPlaying\n");
- if (mState == STATE_OPEN) {
- return mRender;
- }
- return false;
-}
-
-status_t VorbisPlayer::getCurrentPosition(int* position)
-{
- LOGV("getCurrentPosition\n");
- Mutex::Autolock l(mMutex);
- if (mState != STATE_OPEN) {
- LOGE("getCurrentPosition(): file not open");
- return ERROR_NOT_OPEN;
- }
- *position = ov_time_tell(&mVorbisFile);
- if (*position < 0) {
- LOGE("getCurrentPosition(): ov_time_tell returned %d", *position);
- return *position;
- }
- return NO_ERROR;
-}
-
-status_t VorbisPlayer::getDuration(int* duration)
-{
- LOGV("getDuration\n");
- Mutex::Autolock l(mMutex);
- if (mState != STATE_OPEN) {
- return ERROR_NOT_OPEN;
- }
-
- int ret = ov_time_total(&mVorbisFile, -1);
- if (ret == OV_EINVAL) {
- return -1;
- }
-
- *duration = ret;
- return NO_ERROR;
-}
-
-status_t VorbisPlayer::release()
-{
- LOGV("release\n");
- Mutex::Autolock l(mMutex);
- reset_nosync();
-
- // TODO: timeout when thread won't exit
- // wait for render thread to exit
- if (mRenderTid > 0) {
- mExit = true;
- mCondition.signal();
- mCondition.wait(mMutex);
- }
- return NO_ERROR;
-}
-
-status_t VorbisPlayer::reset()
-{
- LOGV("reset\n");
- Mutex::Autolock l(mMutex);
- if (mState != STATE_OPEN) {
- return NO_ERROR;
- }
- return reset_nosync();
-}
-
-// always call with lock held
-status_t VorbisPlayer::reset_nosync()
-{
- // close file
- ov_clear(&mVorbisFile); // this also closes the FILE
- if (mFile != NULL) {
- LOGV("OOPS! Vorbis didn't close the file");
- fclose(mFile);
- }
- mState = STATE_ERROR;
-
- mPlayTime = -1;
- mDuration = -1;
- mLoop = false;
- mAndroidLoop = false;
- mPaused = false;
- mRender = false;
- return NO_ERROR;
-}
-
-status_t VorbisPlayer::setLooping(int loop)
-{
- LOGV("setLooping\n");
- Mutex::Autolock l(mMutex);
- mLoop = (loop != 0);
- return NO_ERROR;
-}
-
-status_t VorbisPlayer::createOutputTrack() {
- // open audio track
- vorbis_info *vi = ov_info(&mVorbisFile, -1);
-
- LOGV("Create AudioTrack object: rate=%ld, channels=%d\n",
- vi->rate, vi->channels);
- if (mAudioSink->open(vi->rate, vi->channels, AudioSystem::PCM_16_BIT, DEFAULT_AUDIOSINK_BUFFERCOUNT) != NO_ERROR) {
- LOGE("mAudioSink open failed");
- return ERROR_OPEN_FAILED;
- }
- return NO_ERROR;
-}
-
-int VorbisPlayer::renderThread(void* p) {
- return ((VorbisPlayer*)p)->render();
-}
-
-#define AUDIOBUFFER_SIZE 4096
-
-int VorbisPlayer::render() {
- int result = -1;
- int temp;
- int current_section = 0;
- bool audioStarted = false;
-
- LOGV("render\n");
-
- // allocate render buffer
- mAudioBuffer = new char[AUDIOBUFFER_SIZE];
- if (!mAudioBuffer) {
- LOGE("mAudioBuffer allocate failed\n");
- goto threadExit;
- }
-
- // let main thread know we're ready
- {
- Mutex::Autolock l(mMutex);
- mRenderTid = myTid();
- mCondition.signal();
- }
-
- while (1) {
- long numread = 0;
- {
- Mutex::Autolock l(mMutex);
-
- // pausing?
- if (mPaused) {
- if (mAudioSink->ready()) mAudioSink->pause();
- mRender = false;
- audioStarted = false;
- }
-
- // nothing to render, wait for client thread to wake us up
- if (!mExit && !mRender) {
- LOGV("render - signal wait\n");
- mCondition.wait(mMutex);
- LOGV("render - signal rx'd\n");
- }
- if (mExit) break;
-
- // We could end up here if start() is called, and before we get a
- // chance to run, the app calls stop() or reset(). Re-check render
- // flag so we don't try to render in stop or reset state.
- if (!mRender) continue;
-
- // render vorbis data into the input buffer
- numread = ov_read(&mVorbisFile, mAudioBuffer, AUDIOBUFFER_SIZE, &current_section);
- if (numread == 0) {
- // end of file, do we need to loop?
- // ...
- if (mLoop || mAndroidLoop) {
- ov_time_seek(&mVorbisFile, 0);
- current_section = 0;
- numread = ov_read(&mVorbisFile, mAudioBuffer, AUDIOBUFFER_SIZE, &current_section);
- } else {
- mAudioSink->stop();
- audioStarted = false;
- mRender = false;
- mPaused = true;
- int endpos = ov_time_tell(&mVorbisFile);
-
- LOGV("send MEDIA_PLAYBACK_COMPLETE");
- sendEvent(MEDIA_PLAYBACK_COMPLETE);
-
- // wait until we're started again
- LOGV("playback complete - wait for signal");
- mCondition.wait(mMutex);
- LOGV("playback complete - signal rx'd");
- if (mExit) break;
-
- // if we're still at the end, restart from the beginning
- if (mState == STATE_OPEN) {
- int curpos = ov_time_tell(&mVorbisFile);
- if (curpos == endpos) {
- ov_time_seek(&mVorbisFile, 0);
- }
- current_section = 0;
- numread = ov_read(&mVorbisFile, mAudioBuffer, AUDIOBUFFER_SIZE, &current_section);
- }
- }
- }
- }
-
- // codec returns negative number on error
- if (numread < 0) {
- LOGE("Error in Vorbis decoder");
- sendEvent(MEDIA_ERROR);
- break;
- }
-
- // create audio output track if necessary
- if (!mAudioSink->ready()) {
- LOGV("render - create output track\n");
- if (createOutputTrack() != NO_ERROR)
- break;
- }
-
- // Write data to the audio hardware
- if ((temp = mAudioSink->write(mAudioBuffer, numread)) < 0) {
- LOGE("Error in writing:%d",temp);
- result = temp;
- break;
- }
-
- // start audio output if necessary
- if (!audioStarted && !mPaused && !mExit) {
- LOGV("render - starting audio\n");
- mAudioSink->start();
- audioStarted = true;
- }
- }
-
-threadExit:
- mAudioSink.clear();
- if (mAudioBuffer) {
- delete [] mAudioBuffer;
- mAudioBuffer = NULL;
- }
-
- // tell main thread goodbye
- Mutex::Autolock l(mMutex);
- mRenderTid = -1;
- mCondition.signal();
- return result;
-}
-
-} // end namespace android
diff --git a/media/libmediaplayerservice/VorbisPlayer.h b/media/libmediaplayerservice/VorbisPlayer.h
deleted file mode 100644
index c30dc1b..0000000
--- a/media/libmediaplayerservice/VorbisPlayer.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#ifndef ANDROID_VORBISPLAYER_H
-#define ANDROID_VORBISPLAYER_H
-
-#include <utils/threads.h>
-
-#include <media/MediaPlayerInterface.h>
-#include <media/AudioTrack.h>
-
-#include "ivorbiscodec.h"
-#include "ivorbisfile.h"
-
-#define ANDROID_LOOP_TAG "ANDROID_LOOP"
-
-namespace android {
-
-class VorbisPlayer : public MediaPlayerInterface {
-public:
- VorbisPlayer();
- ~VorbisPlayer();
-
- virtual void onFirstRef();
- virtual status_t initCheck();
- virtual status_t setDataSource(const char* path);
- virtual status_t setDataSource(int fd, int64_t offset, int64_t length);
- virtual status_t setVideoSurface(const sp<ISurface>& surface) { return UNKNOWN_ERROR; }
- virtual status_t prepare();
- virtual status_t prepareAsync();
- virtual status_t start();
- virtual status_t stop();
- virtual status_t seekTo(int msec);
- virtual status_t pause();
- virtual bool isPlaying();
- virtual status_t getCurrentPosition(int* msec);
- virtual status_t getDuration(int* msec);
- virtual status_t release();
- virtual status_t reset();
- virtual status_t setLooping(int loop);
- virtual player_type playerType() { return VORBIS_PLAYER; }
-
-private:
- status_t setdatasource(const char *path, int fd, int64_t offset, int64_t length);
- status_t reset_nosync();
- status_t createOutputTrack();
- static int renderThread(void*);
- int render();
-
- static size_t vp_fread(void *, size_t, size_t, void *);
- static int vp_fseek(void *, ogg_int64_t, int);
- static int vp_fclose(void *);
- static long vp_ftell(void *);
-
- Mutex mMutex;
- Condition mCondition;
- FILE* mFile;
- int64_t mOffset;
- int64_t mLength;
- OggVorbis_File mVorbisFile;
- char* mAudioBuffer;
- int mPlayTime;
- int mDuration;
- status_t mState;
- int mStreamType;
- bool mLoop;
- bool mAndroidLoop;
- volatile bool mExit;
- bool mPaused;
- volatile bool mRender;
- pid_t mRenderTid;
-};
-
-}; // namespace android
-
-#endif // ANDROID_VORBISPLAYER_H
-
diff --git a/media/mediaserver/Android.mk b/media/mediaserver/Android.mk
deleted file mode 100644
index c681698..0000000
--- a/media/mediaserver/Android.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- main_mediaserver.cpp
-
-LOCAL_SHARED_LIBRARIES := \
- libaudioflinger \
- libcameraservice \
- libmediaplayerservice \
- libutils
-
-base := $(LOCAL_PATH)/../..
-
-LOCAL_C_INCLUDES := \
- $(base)/libs/audioflinger \
- $(base)/camera/libcameraservice \
- $(base)/media/libmediaplayerservice
-
-LOCAL_MODULE:= mediaserver
-
-include $(BUILD_EXECUTABLE)
diff --git a/media/mediaserver/main_mediaserver.cpp b/media/mediaserver/main_mediaserver.cpp
deleted file mode 100644
index 6954b63..0000000
--- a/media/mediaserver/main_mediaserver.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-// System headers required for setgroups, etc.
-#include <sys/types.h>
-#include <unistd.h>
-#include <grp.h>
-
-#include <utils/IPCThreadState.h>
-#include <utils/ProcessState.h>
-#include <utils/IServiceManager.h>
-#include <utils/Log.h>
-
-#include <AudioFlinger.h>
-#include <CameraService.h>
-#include <MediaPlayerService.h>
-#include <private/android_filesystem_config.h>
-
-using namespace android;
-
-int main(int argc, char** argv)
-{
- sp<ProcessState> proc(ProcessState::self());
- sp<IServiceManager> sm = defaultServiceManager();
- LOGI("ServiceManager: %p", sm.get());
- AudioFlinger::instantiate();
- MediaPlayerService::instantiate();
- CameraService::instantiate();
- ProcessState::self()->startThreadPool();
- IPCThreadState::self()->joinThreadPool();
-}
diff --git a/media/sdutils/Android.mk b/media/sdutils/Android.mk
deleted file mode 100644
index 2009b3c..0000000
--- a/media/sdutils/Android.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-ifeq ($(TARGET_ARCH),arm)
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- sdutil.cpp \
-
-LOCAL_SHARED_LIBRARIES := libhardware_legacy libcutils libutils libc
-
-LOCAL_MODULE:= sdutil
-
-include $(BUILD_EXECUTABLE)
-
-endif
diff --git a/media/sdutils/sdutil.cpp b/media/sdutils/sdutil.cpp
deleted file mode 100644
index a9aabf0..0000000
--- a/media/sdutils/sdutil.cpp
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <hardware_legacy/IMountService.h>
-#include <utils/BpBinder.h>
-#include <utils/IServiceManager.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-
-namespace android {
-
-static sp<IMountService> gMountService;
-
-static void init() {
- sp<IServiceManager> sm = defaultServiceManager();
- sp<IBinder> binder = sm->getService(String16("mount"));
- gMountService = interface_cast<IMountService>(binder);
- if (gMountService == 0) {
- fprintf(stderr, "could not get MountService\n");
- exit(1);
- }
-}
-
-static bool isMounted(const char* mountPoint) {
- char s[2000];
- FILE *f = fopen("/proc/mounts", "r");
- bool mounted = false;
-
- while (fgets(s, sizeof(s), f))
- {
- char *c, *path = NULL;
-
- for (c = s; *c; c++)
- {
- if (*c == ' ')
- {
- *c = 0;
- path = c + 1;
- break;
- }
- }
-
- for (c = path; *c; c++)
- {
- if (*c == ' ')
- {
- *c = '\0';
- break;
- }
- }
-
- if (strcmp(mountPoint, path) == 0) {
- mounted = true;
- break;
- }
- }
-
- fclose(f);
- return mounted;
-}
-
-static void millisecondSleep(int milliseconds) {
- struct timespec reqt, remt;
- reqt.tv_sec = milliseconds / 1000;
- reqt.tv_nsec = 1000000 * (milliseconds % 1000);
- nanosleep(&reqt, &remt) ;
-
-}
-
-static int mount(const char* path) {
- String16 string(path);
- gMountService->mountMedia(string);
-
- for (int i = 0; i < 10; i++) {
- if (isMounted(path)) {
- return 0;
- }
- millisecondSleep(500);
- }
-
- fprintf(stderr, "failed to mount %s\n", path);
- return -1;
-}
-
-static int unmount(const char* path) {
- String16 string(path);
- gMountService->unmountMedia(string);
-
- for (int i = 0; i < 10; i++) {
- if (!isMounted(path)) {
- return 0;
- }
- millisecondSleep(500);
- }
-
- fprintf(stderr, "failed to unmount %s\n", path);
- return -1;
-}
-
-static int format(const char* path) {
- String16 string(path);
-
- if (isMounted(path))
- return -EBUSY;
- gMountService->formatMedia(string);
-
- return 0;
-}
-
-static int umsEnable(bool enable) {
- gMountService->setMassStorageEnabled(enable);
- return 0;
-}
-
-};
-
-int main(int argc, char **argv)
-{
- const char* command = (argc > 1 ? argv[1] : "");
- const char* argument = (argc > 2 ? argv[2] : "");
-
- if (strcmp(command, "mount") == 0) {
- android::init();
- return android::mount(argument);
- } else if (strcmp(command, "format") == 0) {
- android::init();
- return android::format(argument);
- } else if (strcmp(command, "unmount") == 0) {
- android::init();
- return android::unmount(argument);
- } else if (strcmp(command, "ums") == 0) {
- if (strcmp(argument, "enable") == 0) {
- android::init();
- return android::umsEnable(true);
- } else if (strcmp(argument, "disable") == 0) {
- android::init();
- return android::umsEnable(false);
- }
- }
-
- fprintf(stderr, "usage:\n"
- " sdutil mount <mount path> - mounts the SD card at the given mount point\n"
- " sdutil unmount <mount path> - unmounts the SD card at the given mount point\n"
- " sdutil format <mount path> - formats the SD card at the given mount point\n"
- " sdutil ums enable - enables USB mass storage\n"
- " sdutil ums disable - disnables USB mass storage\n"
- );
- return -1;
-}
diff --git a/media/tests/MediaFrameworkTest/Android.mk b/media/tests/MediaFrameworkTest/Android.mk
deleted file mode 100644
index 9c45e6e..0000000
--- a/media/tests/MediaFrameworkTest/Android.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-
-LOCAL_SRC_FILES := $(call all-subdir-java-files)
-
-LOCAL_JAVA_LIBRARIES := android.test.runner
-
-LOCAL_PACKAGE_NAME := mediaframeworktest
-
-include $(BUILD_PACKAGE)
diff --git a/media/tests/MediaFrameworkTest/AndroidManifest.xml b/media/tests/MediaFrameworkTest/AndroidManifest.xml
deleted file mode 100644
index a32f590..0000000
--- a/media/tests/MediaFrameworkTest/AndroidManifest.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.mediaframeworktest">
-
- <uses-permission android:name="android.permission.RECORD_AUDIO" />
- <application>
- <uses-library android:name="android.test.runner" />
- <activity android:label="@string/app_name"
- android:name="MediaFrameworkTest">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- </application>
- <instrumentation android:name=".MediaFrameworkTestRunner"
- android:targetPackage="com.android.mediaframeworktest"
- android:label="MediaFramework tests InstrumentationRunner">
- </instrumentation>
-
- <instrumentation android:name=".MediaFrameworkPerfTestRunner"
- android:targetPackage="com.android.mediaframeworktest"
- android:label="MediaFramework Performance tests InstrumentationRunner">
- </instrumentation>
-
- <instrumentation android:name=".MediaFrameworkUnitTestRunner"
- android:targetPackage="com.android.mediaframeworktest"
- android:label="MediaFramework unit tests InstrumentationRunner">
- </instrumentation>
-
- <instrumentation android:name=".MediaRecorderStressTestRunner"
- android:targetPackage="com.android.mediaframeworktest"
- android:label="MediaRecorder stress tests InstrumentationRunner">
- </instrumentation>
-
-</manifest>
diff --git a/media/tests/MediaFrameworkTest/res/drawable/icon.png b/media/tests/MediaFrameworkTest/res/drawable/icon.png
deleted file mode 100644
index 64e3601..0000000
--- a/media/tests/MediaFrameworkTest/res/drawable/icon.png
+++ /dev/null
Binary files differ
diff --git a/media/tests/MediaFrameworkTest/res/layout/movie_view.xml b/media/tests/MediaFrameworkTest/res/layout/movie_view.xml
deleted file mode 100644
index 35fedfa..0000000
--- a/media/tests/MediaFrameworkTest/res/layout/movie_view.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical">
-
- <FrameLayout
- android:layout_width="fill_parent"
- android:layout_height="0px"
- android:layout_weight="1">
-
- <VideoView
- android:id="@+id/surface_view"
- android:layout_width="320px"
- android:layout_height="240px"
- />
- </FrameLayout>
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <EditText android:id="@+id/url"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="0"
- android:singleLine="true"
- android:paddingBottom="8dip">
- <requestFocus />
- </EditText>
-
- <Button android:id="@+id/open"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="0"
- android:text="@string/open_url">
- </Button>
-
- </LinearLayout>
-
-</LinearLayout>
diff --git a/media/tests/MediaFrameworkTest/res/layout/surface_view.xml b/media/tests/MediaFrameworkTest/res/layout/surface_view.xml
deleted file mode 100644
index c25e476..0000000
--- a/media/tests/MediaFrameworkTest/res/layout/surface_view.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical">
-
- <FrameLayout
- android:layout_width="fill_parent"
- android:layout_height="0px"
- android:layout_weight="1">
-
- <SurfaceView
- android:id="@+id/surface_view"
- android:layout_width="320dip"
- android:layout_height="240dip"
- android:layout_centerInParent="true"
- />
-
- <VideoView
- android:id="@+id/video_view"
- android:layout_width="320px"
- android:layout_height="240px"
- />
-
- </FrameLayout>
-
-</LinearLayout>
-
diff --git a/media/tests/MediaFrameworkTest/res/raw/shortmp3.mp3 b/media/tests/MediaFrameworkTest/res/raw/shortmp3.mp3
deleted file mode 100644
index 3af32a15..0000000
--- a/media/tests/MediaFrameworkTest/res/raw/shortmp3.mp3
+++ /dev/null
Binary files differ
diff --git a/media/tests/MediaFrameworkTest/res/raw/testmidi.mid b/media/tests/MediaFrameworkTest/res/raw/testmidi.mid
deleted file mode 100644
index df84e20..0000000
--- a/media/tests/MediaFrameworkTest/res/raw/testmidi.mid
+++ /dev/null
Binary files differ
diff --git a/media/tests/MediaFrameworkTest/res/raw/testmp3.mp3 b/media/tests/MediaFrameworkTest/res/raw/testmp3.mp3
deleted file mode 100644
index 89c44b0..0000000
--- a/media/tests/MediaFrameworkTest/res/raw/testmp3.mp3
+++ /dev/null
Binary files differ
diff --git a/media/tests/MediaFrameworkTest/res/values/strings.xml b/media/tests/MediaFrameworkTest/res/values/strings.xml
deleted file mode 100644
index a24309f..0000000
--- a/media/tests/MediaFrameworkTest/res/values/strings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="app_name">mediaPlayerApiTest</string>
- <string name="open_url">Open</string>
-</resources>
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkPerfTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkPerfTestRunner.java
deleted file mode 100755
index eaaa798..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkPerfTestRunner.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest;
-
-import com.android.mediaframeworktest.performance.MediaPlayerPerformance;
-
-import junit.framework.TestSuite;
-
-import android.test.InstrumentationTestRunner;
-import android.test.InstrumentationTestSuite;
-
-
-/**
- * Instrumentation Test Runner for all MediaPlayer tests.
- *
- * Running all tests:
- *
- * adb shell am instrument \
- * -w com.android.smstests.MediaPlayerInstrumentationTestRunner
- */
-
-public class MediaFrameworkPerfTestRunner extends InstrumentationTestRunner {
-
-
- @Override
- public TestSuite getAllTests() {
- TestSuite suite = new InstrumentationTestSuite(this);
- suite.addTestSuite(MediaPlayerPerformance.class);
- return suite;
- }
-
- @Override
- public ClassLoader getLoader() {
- return MediaFrameworkTestRunner.class.getClassLoader();
- }
-}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTest.java
deleted file mode 100644
index e65cf41..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTest.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.AssetFileDescriptor;
-import android.graphics.Color;
-import android.media.MediaPlayer;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.Downloads;
-import android.util.Log;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-import android.view.View.OnClickListener;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.MediaController;
-import android.widget.VideoView;
-import com.android.mediaframeworktest.MediaNames;
-
-import java.io.File;
-import java.io.FileDescriptor;
-
-
-public class MediaFrameworkTest extends Activity {
-
- //public static Surface video_sf;
- public static SurfaceView mSurfaceView;
- private MediaController mMediaController;
- private String urlpath;
- private MediaPlayer mpmidi;
- private MediaPlayer mpmp3;
- private String testfilepath = "/sdcard/awb.awb";
-
- public static AssetFileDescriptor midiafd;
- public static AssetFileDescriptor mp3afd;
-
-
- public MediaFrameworkTest() {
- }
-
-
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setContentView(R.layout.surface_view);
- mSurfaceView = (SurfaceView)findViewById(R.id.surface_view);
- ViewGroup.LayoutParams lp = mSurfaceView.getLayoutParams();
- lp.width = 320;
- lp.height = 240;
- mSurfaceView.setLayoutParams(lp);
- mSurfaceView.getHolder().setFixedSize(320, 240);
- mSurfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
-
- //Get the midi fd
- midiafd = this.getResources().openRawResourceFd(R.raw.testmidi);
-
- //Get the mp3 fd
- mp3afd = this.getResources().openRawResourceFd(R.raw.testmp3);
- }
-
- public void startPlayback(String filename){
- String mimetype = "audio/mpeg";
- Uri path = Uri.parse(filename);
- Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setDataAndType(path, mimetype);
- startActivity(intent);
- }
-
- @Override public boolean onKeyDown(int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_0:
- MediaPlayer mp = new MediaPlayer();
- try{
- mp.setDataSource(MediaNames.VIDEO_RTSP3GP);
- Log.v("emily","awb " + testfilepath);
- mp.setDisplay(mSurfaceView.getHolder());
- mp.prepare();
- mp.start();
- }catch (Exception e){}
- break;
-
- //start the music player intent with the test URL from PV
- case KeyEvent.KEYCODE_1:
- startPlayback(MediaNames.STREAM_MP3_1);
- break;
-
- case KeyEvent.KEYCODE_2:
- startPlayback(MediaNames.STREAM_MP3_2);
- break;
-
- case KeyEvent.KEYCODE_3:
- startPlayback(MediaNames.STREAM_MP3_3);
- break;
-
- case KeyEvent.KEYCODE_4:
- startPlayback(MediaNames.STREAM_MP3_4);
- break;
-
- case KeyEvent.KEYCODE_5:
- startPlayback(MediaNames.STREAM_MP3_5);
- break;
-
- case KeyEvent.KEYCODE_6:
- startPlayback(MediaNames.STREAM_MP3_6);
- break;
-
- case KeyEvent.KEYCODE_7:
- startPlayback(MediaNames.STREAM_MP3_7);
- break;
-
- case KeyEvent.KEYCODE_8:
- startPlayback(MediaNames.STREAM_MP3_8);
- break;
-
- case KeyEvent.KEYCODE_9:
- startPlayback(MediaNames.STREAM_MP3_9);
- break;
-
-
-
- }
- return super.onKeyDown(keyCode, event);
-
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
deleted file mode 100755
index 453a165..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest;
-
-import com.android.mediaframeworktest.functional.MediaPlayerApiTest;
-import com.android.mediaframeworktest.functional.SimTonesTest;
-import com.android.mediaframeworktest.functional.MediaMetadataTest;
-import com.android.mediaframeworktest.functional.CameraTest;
-import com.android.mediaframeworktest.functional.MediaRecorderTest;
-import com.android.mediaframeworktest.functional.MediaAudioTrackTest;
-
-import junit.framework.TestSuite;
-
-import android.test.InstrumentationTestRunner;
-import android.test.InstrumentationTestSuite;
-
-
-/**
- * Instrumentation Test Runner for all MediaPlayer tests.
- *
- * Running all tests:
- *
- * adb shell am instrument \
- * -w com.android.smstests.MediaPlayerInstrumentationTestRunner
- */
-
-public class MediaFrameworkTestRunner extends InstrumentationTestRunner {
-
-
- @Override
- public TestSuite getAllTests() {
- TestSuite suite = new InstrumentationTestSuite(this);
- suite.addTestSuite(MediaPlayerApiTest.class);
- suite.addTestSuite(SimTonesTest.class);
- suite.addTestSuite(MediaMetadataTest.class);
- // suite.addTestSuite(CameraTest.class);
- suite.addTestSuite(MediaRecorderTest.class);
- suite.addTestSuite(MediaAudioTrackTest.class);
- return suite;
- }
-
- @Override
- public ClassLoader getLoader() {
- return MediaFrameworkTestRunner.class.getClassLoader();
- }
-}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkUnitTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkUnitTestRunner.java
deleted file mode 100755
index 81d59da..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkUnitTestRunner.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest;
-
-import android.test.InstrumentationTestRunner;
-import android.test.InstrumentationTestSuite;
-import com.android.mediaframeworktest.unit.*;
-
-import junit.framework.TestSuite;
-
-/**
- * Instrumentation Test Runner for all media framework unit tests.
- *
- * Make sure that MediaFrameworkUnitTestRunner has been added to
- * AndroidManifest.xml file, and then "make -j4 mediaframeworktest; adb sync"
- * to build and upload mediaframeworktest to the phone or emulator.
- *
- * Example on running all unit tests for a single class:
- * adb shell am instrument -e class \
- * com.android.mediaframeworktest.unit.MediaMetadataRetrieverUnitTest \
- * -w com.android.mediaframeworktest/.MediaFrameworkUnitTestRunner
- *
- * Example on running all unit tests for the media framework:
- * adb shell am instrument \
- * -w com.android.mediaframeworktest/.MediaFrameworkUnitTestRunner
- */
-
-public class MediaFrameworkUnitTestRunner extends InstrumentationTestRunner {
-
- @Override
- public TestSuite getAllTests() {
- TestSuite suite = new InstrumentationTestSuite(this);
- addMediaMetadataRetrieverStateUnitTests(suite);
- addMediaRecorderStateUnitTests(suite);
- addMediaPlayerStateUnitTests(suite);
- return suite;
- }
-
- @Override
- public ClassLoader getLoader() {
- return MediaFrameworkUnitTestRunner.class.getClassLoader();
- }
-
- // Running all unit tests checking the state machine may be time-consuming.
- private void addMediaMetadataRetrieverStateUnitTests(TestSuite suite) {
- suite.addTestSuite(MediaMetadataRetrieverTest.class);
- }
-
- // Running all unit tests checking the state machine may be time-consuming.
- private void addMediaRecorderStateUnitTests(TestSuite suite) {
- suite.addTestSuite(MediaRecorderPrepareStateUnitTest.class);
- suite.addTestSuite(MediaRecorderResetStateUnitTest.class);
- suite.addTestSuite(MediaRecorderSetAudioEncoderStateUnitTest.class);
- suite.addTestSuite(MediaRecorderSetAudioSourceStateUnitTest.class);
- suite.addTestSuite(MediaRecorderSetOutputFileStateUnitTest.class);
- suite.addTestSuite(MediaRecorderSetOutputFormatStateUnitTest.class);
- suite.addTestSuite(MediaRecorderStartStateUnitTest.class);
- suite.addTestSuite(MediaRecorderStopStateUnitTest.class);
- }
-
- // Running all unit tests checking the state machine may be time-consuming.
- private void addMediaPlayerStateUnitTests(TestSuite suite) {
- suite.addTestSuite(MediaPlayerGetDurationStateUnitTest.class);
- suite.addTestSuite(MediaPlayerSeekToStateUnitTest.class);
- suite.addTestSuite(MediaPlayerGetCurrentPositionStateUnitTest.class);
- suite.addTestSuite(MediaPlayerGetVideoWidthStateUnitTest.class);
- suite.addTestSuite(MediaPlayerGetVideoHeightStateUnitTest.class);
- suite.addTestSuite(MediaPlayerIsPlayingStateUnitTest.class);
- suite.addTestSuite(MediaPlayerResetStateUnitTest.class);
- suite.addTestSuite(MediaPlayerPauseStateUnitTest.class);
- suite.addTestSuite(MediaPlayerStartStateUnitTest.class);
- suite.addTestSuite(MediaPlayerStopStateUnitTest.class);
- suite.addTestSuite(MediaPlayerSetLoopingStateUnitTest.class);
- suite.addTestSuite(MediaPlayerSetAudioStreamTypeStateUnitTest.class);
- suite.addTestSuite(MediaPlayerSetVolumeStateUnitTest.class);
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java
deleted file mode 100755
index 5e9c488..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest;
-
-/**
- *
- * This class has the names of the all the activity name and variables
- * in the instrumentation test.
- *
- */
-public class MediaNames {
-
- //Audio files
- public static final String MP3CBR = "/sdcard/media_api/music/MP3CBR.mp3";
- public static final String MP3VBR = "/sdcard/media_api/music/MP3VBR.mp3";
- public static final String SHORTMP3 = "/sdcard/media_api/music/SHORTMP3.mp3";
- public static final String MIDI = "/sdcard/media_api/music/MIDI.mid";
- public static final String WMA9 = "/sdcard/media_api/music/WMA9.wma";
- public static final String WMA10 = "/sdcard/media_api/music/WMA10.wma";
- public static final String WAV = "/sdcard/media_api/music/complicated_wav.wav";
- public static final String AMR = "/sdcard/media_api/music/AMRNB.amr";
- public static final String OGG = "/sdcard/media_api/music/Mists_of_Time-4T.ogg";
- public static final String OGGSHORT = "/sdcard/media_api/music/Skippy.ogg";
-
- public static final int MP3CBR_LENGTH = 231116;
- public static final int MP3VBR_LENGTH = 126407;
- public static final int SHORTMP3_LENGTH = 286;
- public static final int MIDI_LENGTH = 210528;
- public static final int WMA9_LENGTH = 126559;
- public static final int WMA10_LENGTH = 126559;
- public static final int AMR_LENGTH = 126540;
- public static final int OGG_LENGTH = 40000;
- public static final int SEEK_TIME = 10000;
-
- public static final long PAUSE_WAIT_TIME = 3000;
- public static final long WAIT_TIME = 2000;
- public static final long WAIT_LONG = 4000;
-
- //Streaming Video
- public static final String VIDEO_HTTP3GP = "http://pvs.pv.com/jj/lipsync0.3gp";
- public static final String VIDEO_RTSP3GP = "rtsp://63.241.31.203/public/jj/md.3gp";
- public static final String VIDEO_RTSP3GP2 = "rtsp://pvs.pv.com/public/live_dvd1.3gp";
- public static final String VIDEO_RTSP3GP3 =
- "rtsp://ehug.rtsp-youtube.l.google.com/" +
- "Ci4LENy73wIaJQmeRVCJq4HuQBMYDSANFEIJbXYtZ29vZ2xlSARSB2RldGFpbHMM/0/0/0/video.3gp";
- //public static final String VIDEO_RTSP3GP = "rtsp://193.159.241.21/sp/alizee05.3gp";
-
- //local video
- public static final String VIDEO_MP4 = "/sdcard/media_api/video/gingerkids.MP4";
- public static final String VIDEO_LONG_3GP = "/sdcard/media_api/video/radiohead.3gp";
- public static final String VIDEO_SHORT_3GP = "/sdcard/media_api/video/short.3gp";
- public static final String VIDEO_LARGE_SIZE_3GP = "/sdcard/media_api/video/border_large.3gp";
- public static final String VIDEO_H263_AAC = "/sdcard/media_api/video/H263_AAC.3gp";
- public static final String VIDEO_H263_AMR = "/sdcard/media_api/video/H263_AMR.3gp";
- public static final String VIDEO_H264_AAC = "/sdcard/media_api/video/H264_AAC.3gp";
- public static final String VIDEO_H264_AMR = "/sdcard/media_api/video/H264_AMR.3gp";
- public static final String VIDEO_WMV = "/sdcard/media_api/video/bugs.wmv";
- public static final String VIDEO_HIGHRES_H263 = "/sdcard/media_api/video/h263_qcif_30fps.3gp";
- public static final String VIDEO_HIGHRES_MP4 = "/sdcard/media_api/video/mpeg4_qvga_24fps.3gp";
-
- //ringtone
- public static final String ringtone = "/sdcard/media_api/ringtones/F1_NewVoicemail.mp3";
-
- //streaming mp3
- public static final String STREAM_LARGE_MP3 =
- "http://wms.pv.com:7070/MediaDownloadContent/mp3/BuenaVista_04_Pueblo_Nuevo.mp3";
- public static final String STREAM_SMALL_MP3 =
- "http://wms.pv.com:7070/MediaDownloadContent/mp3/ID3V2_TestFile.mp3";
- public static final String STREAM_REGULAR_MP3 =
- "http://wms.pv.com:7070/MediaDownloadContent/mp3/ElectricCosmo.mp3";
-
- //streaming mp3
- public static final String STREAM_MP3_1 =
- "http://wms.pv.com:7070/MediaDownloadContent/mp3/chadthi_jawani_128kbps.mp3";
- public static final String STREAM_MP3_2 =
- "http://wms.pv.com:7070/MediaDownloadContent/mp3/dualStereo.mp3";
- public static final String STREAM_MP3_3 =
- "http://wms.pv.com:7070/mediadownloadcontent/UserUploads/15%20Keep%20Holding%20On.mp3";
- public static final String STREAM_MP3_4 =
- "http://wms.pv.com:7070/mediadownloadcontent/UserUploads/1%20-%20Apologize.mp3";
- public static final String STREAM_MP3_5 =
- "http://wms.pv.com:7070/mediadownloadcontent/UserUploads/" +
- "03%20You're%20Gonna%20Miss%20This.mp3";
- public static final String STREAM_MP3_6 =
- "http://wms.pv.com:7070/mediadownloadcontent/UserUploads" +
- "/02%20Looney%20Tunes%20%C3%82%C2%B7%20Light%20Cavalry%20Overture%20(LP%20Version).mp3";
- public static final String STREAM_MP3_7 =
- "http://wms.pv.com:7070/mediadownloadcontent/UserUploads" +
- "/01%20Love%20Song%20(Album%20Version).mp3";
- public static final String STREAM_MP3_8 =
- "http://wms.pv.com:7070/MediaDownloadContent/UserUploads/1%20-%20Apologize.mp3";
- public static final String STREAM_MP3_9 =
- "http://wms.pv.com:7070/MediaDownloadContent/UserUploads" +
- "/1%20-%20Smile%20(Explicit%20Version).mp3";
- public static final String STREAM_MP3_10 =
- "http://wms.pv.com:7070/MediaDownloadContent/UserUploads/beefcake.mp3";
-
- //Sonivox
- public static String MIDIFILES[] = {
- "/sdcard/media_api/music/Leadsol.mxmf",
- "/sdcard/media_api/music/abba.imy", "/sdcard/media_api/music/ants.mid",
- "/sdcard/media_api/music/greensleeves.rtttl", "/sdcard/media_api/music/test.ota"};
-
- //Performance measurement
- public static String[] WAVFILES = {
- "/sdcard/media_api/music_perf/WAV/M1F1-AlawWE-AFsp.wav",
- "/sdcard/media_api/music_perf/WAV/M1F1-float64-AFsp.wav",
- "/sdcard/media_api/music_perf/WAV/song.wav",
- "/sdcard/media_api/music_perf/WAV/WAVEtest.wav",
- "/sdcard/media_api/music_perf/WAV/WAVEtest_out.wav",
- "/sdcard/media_api/music_perf/WAV/test_out.wav"};
-
- public static String[] AMRNBFILES = {
- "/sdcard/media_api/music_perf/AMR/AI_AMR-NB_5.9kbps_6.24kbps_8khz_mono_NMC.amr",
- "/sdcard/media_api/music_perf/AMR/AI_AMR-NB_5.15kbps_5.46kbps_8khz_mono_NMC.amr",
- "/sdcard/media_api/music_perf/AMR/AI_AMR-NB_7.4kbps_7.80kbps_8khz_mono_NMC.amr",
- "/sdcard/media_api/music_perf/AMR/AI_AMR-NB_7.95kbps_9.6kbps_8khz_mono_NMC.amr",
- "/sdcard/media_api/music_perf/AMR/AI_AMR-NB_10.2kbps_10.48kbps_8khz_mono_NMC.amr"};
-
- public static String[] AMRWBFILES = {
- "/sdcard/media_api/music_perf/AMRWB/NIN_AMR-WB_15.85kbps_16kbps.amr",
- "/sdcard/media_api/music_perf/AMRWB/NIN_AMR-WB_18.25kbps_18kbps.amr",
- "/sdcard/media_api/music_perf/AMRWB/NIN_AMR-WB_19.85kbps_20kbps.amr",
- "/sdcard/media_api/music_perf/AMRWB/NIN_AMR-WB_23.05kbps_23kbps.amr",
- "/sdcard/media_api/music_perf/AMRWB/NIN_AMR-WB_23.85kbps_24kbps.amr",
- "/sdcard/media_api/music_perf/AMRWB/PD_AMR-WB_19.85kbps_20kbps.amr",
- "/sdcard/media_api/music_perf/AMRWB/PD_AMR-WB_23.05kbps_23kbps.amr",
- "/sdcard/media_api/music_perf/AMRWB/PD_AMR-WB_23.85kbps_24kbps.amr",
- "/sdcard/media_api/music_perf/AMRWB/WC_AMR-WB_23.05kbps_23kbps.amr",
- "/sdcard/media_api/music_perf/AMRWB/WC_AMR-WB_23.85kbps_24kbps.amr", };
-
- public static String[] MP3FILES = {
- "/sdcard/media_api/music_perf/MP3/NIN_56kbps_32khz_stereo_VBR_MCA.MP3",
- "/sdcard/media_api/music_perf/MP3/NIN_80kbps_32khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/NIN_80kbps_44.1khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/NIN_80kbps_48khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/NIN_112kbps_32khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/NIN_112kbps_44.1khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/NIN_112kbps_48khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/NIN_192kbps_32khz_mono_CBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/NIN_192kbps_44.1khz_mono_CBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/NIN_192kbps_48khz_mono_CBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/NIN_256kbps_44.1khz_mono_CBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/NIN_256kbps_48khz_mono_CBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/PD_112kbps_32khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/PD_112kbps_44.1khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/PD_112kbps_48khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/PD_192kbps_32khz_mono_CBR_DPA.mp3",
- "/sdcard/media_api/music_perf/MP3/PD_256kbps_44.1khz_mono_CBR_DPA.mp3",
- "/sdcard/media_api/music_perf/MP3/PD_256kbps_48khz_mono_CBR_MCA.mp3",
- "/sdcard/media_api/music_perf/MP3/WC_256kbps_44.1khz_mono_CBR_DPA.mp3",
- "/sdcard/media_api/music_perf/MP3/WC_256kbps_48khz_mono_CBR_DPA.mp3",
- "/sdcard/media_api/music_perf/regular_album_photo/Apologize.mp3",
- "/sdcard/media_api/music_perf/regular_album_photo/Because_Of_You.mp3",
- "/sdcard/media_api/music_perf/regular_album_photo/Complicated.mp3",
- "/sdcard/media_api/music_perf/regular_album_photo/Glamorous.mp3",
- "/sdcard/media_api/music_perf/regular_album_photo/Im_With_You.mp3",
- "/sdcard/media_api/music_perf/regular_album_photo/Smile.mp3",
- "/sdcard/media_api/music_perf/regular_album_photo/Suddenly_I_See.mp3",
- "/sdcard/media_api/music_perf/regular_album_photo/When You Say Nothing At All.mp3",
- "/sdcard/media_api/music_perf/regular_album_photo/my_happy_ending.mp3"};
-
- public static String[] AACFILES = {
- "/sdcard/media_api/music_perf/AAC/AI_AAC_24kbps_12khz_Mono_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/AI_AAC_56kbps_22.05khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/AI_AAC_56kbps_32khz_Stereo_CBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/AI_AAC_56kbps_44.1khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/AI_AAC_80kbps_32khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/AI_AAC_80kbps_32khz_Stereo_CBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/NIN_AAC_56kbps_22.05khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/NIN_AAC_56kbps_32khz_Stereo_CBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/NIN_AAC_56kbps_44.1khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/NIN_AAC_80kbps_32khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/NIN_AAC_80kbps_32khz_Stereo_CBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/PD_AAC_56kbps_22.05khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/PD_AAC_56kbps_32khz_Stereo_CBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/PD_AAC_56kbps_44.1khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/PD_AAC_80kbps_32khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/PD_AAC_80kbps_32khz_Stereo_CBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/PV_AAC_56kbps_22.05khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/PV_AAC_56kbps_32khz_Stereo_CBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/PV_AAC_56kbps_44.1khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/PV_AAC_80kbps_32khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/PV_AAC_80kbps_32khz_Stereo_CBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/WC_AAC_56kbps_22.05khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/WC_AAC_56kbps_32khz_Stereo_CBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/WC_AAC_56kbps_44.1khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/WC_AAC_80kbps_32khz_Stereo_1pCBR_SSE.mp4",
- "/sdcard/media_api/music_perf/AAC/WC_AAC_80kbps_32khz_Stereo_CBR_SSE.mp4",
- };
-
- public static String[] VIDEOFILES = { "/sdcard/media_api/video_perf/AI_CTO_Mpeg4_32kbps_10fps_SQCIF_128x96+AAC_8kbps_8khz_mono_QTE.mp4",
- "/sdcard/media_api/video_perf/AI_CTO_Mpeg4_32kbps_12fps_SQCIF_128x96+AAC_8kbps_8khz_mono_QTE.mp4",
- "/sdcard/media_api/video_perf/AI_CTO_Mpeg4_32kbps_15fps_SQCIF_128x96+AAC_8kbps_8khz_mono_QTE.mp4",
- "/sdcard/media_api/video_perf/AI_CTO_Mpeg4_32kbps_5fps_SQCIF_128x96+AAC_8kbps_8khz_mono_QTE.mp4",
- "/sdcard/media_api/video_perf/AI_CTO_Mpeg4_32kbps_5fps_SQCIF_128x96+AAC_8kbps_8khz_mono_SSE.mp4",
- "/sdcard/media_api/video_perf/AI_CTO_Mpeg4_32kbps_7.5fps_SQCIF_128x96+AAC_8kbps_8khz_mono_QTE.mp4",
- "/sdcard/media_api/video_perf/AI_WMV_1024kbps_20fps_QCIF_176x144_noaudio_SSE.wmv",
- "/sdcard/media_api/video_perf/AI_WMV_1024kbps_25fps_QCIF_176x144_noaudio_SSE.wmv",
- "/sdcard/media_api/video_perf/Chicken.wmv",
- "/sdcard/media_api/video_perf/MP_qcif_15fps_100kbps_48kHz_192kbps_30secs.wmv",
- "/sdcard/media_api/video_perf/NIN_CTO_H264_123kbps_5fps_QCIF_176x144+AMR_12.2kbps_8khz_mono_QTE.3gp",
- "/sdcard/media_api/video_perf/NIN_CTO_H264_96kbps_10.2fps_QCIF_176x144+AMR_12.2kbps_8khz_mono_QTE.3gp",
- "/sdcard/media_api/video_perf/NIN_CTO_H264_96kbps_12fps_QCIF_176x144+AMR_12.2kbps_8khz_mono_QTE.3gp",
- "/sdcard/media_api/video_perf/NIN_CTO_H264_96kbps_15fps_QCIF_176x144+AMR_12.2kbps_8khz_mono_QTE.3gp",
- "/sdcard/media_api/video_perf/NIN_CTO_Mpeg4_123kbps_15fps_QCIF_176x144+AAC_32kbps_22khz_mono_SSE.3gp",
- "/sdcard/media_api/video_perf/NIN_CTO_Mpeg4_123kbps_7.5fps_QCIF_176x144+AAC_32kbps_22khz_stereo_SSE.3gp",
- "/sdcard/media_api/video_perf/NIN_CTO_Mpeg4_128kbps_10fps_QCIF_176x144+AAC+_32kbps_48khz_stereo_SSE.3gp",
- "/sdcard/media_api/video_perf/NIN_CTO_Mpeg4_128kbps_12fps_QCIF_176x144+AAC+_32kbps_48khz_stereo_SSE.3gp",
- "/sdcard/media_api/video_perf/NIN_CTO_Mpeg4_128kbps_15fps_QCIF_176x144+AAC+_32kbps_48khz_stereo_SSE.3gp",
- "/sdcard/media_api/video_perf/NIN_CTO_Mpeg4_128kbps_5fps_QCIF_176x144+AAC+_32kbps_48khz_stereo_SSE.3gp",
- "/sdcard/media_api/video_perf/NIN_CTO_Mpeg4_128kbps_7.5fps_QCIF_176x144+AAC+_32kbps_48khz_stereo_SSE.3gp",
- "/sdcard/media_api/video_perf/NIN_H263_128kbps_10fps_QCIF_174x144_noaudio_SSE.mp4",
- "/sdcard/media_api/video_perf/NIN_H263_128kbps_15fps_QCIF_174x144_noaudio_SSE.mp4",
- "/sdcard/media_api/video_perf/NIN_H263_48kbps_10fps_QCIF_174x144_noaudio_SSE.3gp",
- "/sdcard/media_api/video_perf/NIN_H263_48kbps_12fps_QCIF_174x144_noaudio_SSE.3gp",
- "/sdcard/media_api/video_perf/NIN_H264_123kbps_15fps_QCIF_176x144+AAC_32kbps_22khz_stereo_SSE.3gp",
- "/sdcard/media_api/video_perf/NIN_H264_123kbps_7.5fps_QCIF_176x144+AAC_32kbps_22khz_stereo_SSE.3gp",
- "/sdcard/media_api/video_perf/PV_H264_2000kbps_20fps_CIF_352x288+AAC_96kbps_48khz_stereo_SSE.mp4",
- "/sdcard/media_api/video_perf/PV_H264_2000kbps_25fps_CIF_352x288+AAC_96kbps_48khz_stereo_SSE.mp4",
- "/sdcard/media_api/video_perf/PV_H264_2000kbps_30fps_CIF_352x288+AAC_128kbps_48khz_stereo_SSE.mp4",
- "/sdcard/media_api/video_perf/Stevie-1.wmv",
- "/sdcard/media_api/video_perf/WC_H264_1600kbps_20fps_QCIF_176x144+AAC_96kbps_48khz_mono_SSE.mp4",
- "/sdcard/media_api/video_perf/WC_H264_1600kbps_25fps_QCIF_176x144+AAC_96kbps_48khz_mono_SSE.mp4",
- "/sdcard/media_api/video_perf/WC_H264_1600kbps_30fps_QCIF_176x144+AAC_96kbps_48khz_mono_SSE.mp4",
- "/sdcard/media_api/video_perf/bugs.wmv",
- "/sdcard/media_api/video_perf/niceday.wmv",
- "/sdcard/media_api/video_perf/eaglesatopnflpe.wmv",
-
- };
-
- //wma - only support up to wma 9
- public static String[] WMASUPPORTED = {
- "/sdcard/media_api/music_perf/WMASUPPORTED/AI_WMA9.2_32kbps_44.1khz_mono_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMASUPPORTED/AI_WMA9.2_48kbps_44.1khz_mono_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMASUPPORTED/NIN_WMA9.2_32kbps_44.1khz_mono_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMASUPPORTED/NIN_WMA9.2_48kbps_44.1khz_mono_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMASUPPORTED/PD_WMA9.2_32kbps_44.1khz_mono_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMASUPPORTED/PD_WMA9.2_48kbps_44.1khz_mono_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMASUPPORTED/PV_WMA9.2_32kbps_44.1khz_mono_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMASUPPORTED/PV_WMA9.2_48kbps_44.1khz_mono_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMASUPPORTED/WC_WMA9.2_32kbps_44.1khz_mono_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMASUPPORTED/WC_WMA9.2_48kbps_44.1khz_mono_CBR_DPA.wma"
-
- };
-
- public static String[] WMAUNSUPPORTED = {
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_127kbps_48khz_stereo_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_128kbps_44.1khz_stereo_2pVBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_128kbps_48khz_stereo_2pVBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_128kbps_88khz_stereo_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_128kbps_96khz_stereo_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_192kbps_44.1khz_stereo_2pVBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_192kbps_88khz_stereo_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_192kbps_96khz_stereo_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_256kbps_44khz_stereo_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_256kbps_48khz_stereo_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_256kbps_88khz_stereo_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_256kbps_96khz_stereo_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_384kbps_44khz_stereo_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_384kbps_48khz_stereo_CBR_DPA.wma",
- "/sdcard/media_api/music_perf/WMAUNSUPPORTED/AI_WMA10_384kbps_88khz_stereo_CBR_DPA.wma"
- };
-
- //Media Recorder
- public static final String RECORDER_OUTPUT = "/sdcard/media_api/recorderOutput.amr";
-
- //video thumbnail
- public static final String THUMBNAIL_OUTPUT = "/sdcard/media_api/videoThumbnail.png";
- public static final String GOLDEN_THUMBNAIL_OUTPUT = "/sdcard/media_api/goldenThumbnail.png";
-
- //Metadata Utility
- public static final String[] THUMBNAIL_CAPTURE_TEST_FILES = {
- "/sdcard/media_api/metadata/test.mp4",
- "/sdcard/media_api/metadata/test1.3gp",
- "/sdcard/media_api/metadata/test2.3gp",
- "/sdcard/media_api/metadata/test3.3gp",
- "/sdcard/media_api/metadata/test4.3gp",
- "/sdcard/media_api/metadata/test5.3gp",
- "/sdcard/media_api/metadata/test6.3gp",
- "/sdcard/media_api/metadata/test7.3gp",
- "/sdcard/media_api/metadata/test8.3gp",
- "/sdcard/media_api/metadata/test9.3gp",
- "/sdcard/media_api/metadata/test10.3gp",
- "/sdcard/media_api/metadata/test11.3gp",
- "/sdcard/media_api/metadata/test12.3gp",
- "/sdcard/media_api/metadata/test13.3gp",
- "/sdcard/media_api/metadata/test14.3gp",
- "/sdcard/media_api/metadata/test15.3gp",
- "/sdcard/media_api/metadata/test16.3gp",
- "/sdcard/media_api/metadata/test17.3gp",
- "/sdcard/media_api/metadata/test18.3gp",
- "/sdcard/media_api/metadata/test19.3gp",
- "/sdcard/media_api/metadata/test20.3gp",
- "/sdcard/media_api/metadata/test21.3gp",
- "/sdcard/media_api/metadata/test22.3gp",
- "/sdcard/media_api/metadata/test23.3gp",
- "/sdcard/media_api/metadata/test24.3gp",
- "/sdcard/media_api/metadata/test25.3gp",
- "/sdcard/media_api/metadata/test26.3gp",
- "/sdcard/media_api/metadata/test27.3gp",
- "/sdcard/media_api/metadata/test28.3gp",
- "/sdcard/media_api/metadata/test29.3gp",
- "/sdcard/media_api/metadata/test30.3gp",
- "/sdcard/media_api/metadata/test31.3gp",
- "/sdcard/media_api/metadata/test32.3gp",
- "/sdcard/media_api/metadata/test33.3gp",
- "/sdcard/media_api/metadata/test35.mp4",
- "/sdcard/media_api/metadata/test36.m4v",
- "/sdcard/media_api/metadata/test34.wmv",
- "/sdcard/media_api/metadata/test_metadata.mp4",
- };
-
- public static final String[] METADATA_RETRIEVAL_TEST_FILES = {
- // Raw AAC is not supported
- // "/sdcard/media_api/test_raw.aac",
- // "/sdcard/media_api/test_adts.aac",
- // "/sdcard/media_api/test_adif.aac",
- "/sdcard/media_api/metadata/test_metadata.mp4",
- "/sdcard/media_api/metadata/WMA10.wma",
- "/sdcard/media_api/metadata/Leadsol_out.wav",
- "/sdcard/media_api/metadata/test_aac.mp4",
- "/sdcard/media_api/metadata/test_amr.mp4",
- "/sdcard/media_api/metadata/test_avc_amr.mp4",
- "/sdcard/media_api/metadata/test_metadata.mp4",
- "/sdcard/media_api/metadata/test_vbr.mp3",
- "/sdcard/media_api/metadata/test_cbr.mp3",
- "/sdcard/media_api/metadata/metadata_test1.mp3",
- "/sdcard/media_api/metadata/test33.3gp",
- "/sdcard/media_api/metadata/test35.mp4",
- "/sdcard/media_api/metadata/test36.m4v",
- "/sdcard/media_api/metadata/test_m4v_amr.mp4",
- "/sdcard/media_api/metadata/test_h263_amr.mp4",
- "/sdcard/media_api/metadata/test34.wmv",
- };
-
- public static final String[] ALBUMART_TEST_FILES = {
- "/sdcard/media_api/album_photo/test_22_16_mp3.mp3",
- "/sdcard/media_api/album_photo/PD_256kbps_48khz_mono_CBR_MCA.mp3",
- "/sdcard/media_api/album_photo/PD_256kbps_44.1khz_mono_CBR_DPA.mp3",
- "/sdcard/media_api/album_photo/PD_192kbps_32khz_mono_CBR_DPA.mp3",
- "/sdcard/media_api/album_photo/NIN_256kbps_48khz_mono_CBR_MCA.mp3",
- "/sdcard/media_api/album_photo/NIN_256kbps_44.1khz_mono_CBR_MCA.mp3",
- "/sdcard/media_api/album_photo/NIN_112kbps(96kbps)_48khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/album_photo/NIN_112kbps(96kbps)_44.1khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/album_photo/lightGreen1.mp3",
- "/sdcard/media_api/album_photo/babyBlue2 1.mp3",
- "/sdcard/media_api/album_photo/2-01 01 NIN_56kbps(64kbps)_32khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/album_photo/02_NIN_112kbps(80kbps)_32khz_stereo_VBR_MCA.mp3",
- "/sdcard/media_api/album_photo/No_Woman_No_Cry_128K.wma",
- "/sdcard/media_api/album_photo/Beethoven_2.wma",
- };
-
- //TEST_PATH_1: is a video and contains metadata for key "num-tracks"
- // TEST_PATH_2: any valid media file.
- // TEST_PATH_3: invalid media file
- public static final String TEST_PATH_1 = "/sdcard/media_api/metadata/test.mp4";
- public static final String TEST_PATH_3 = "/sdcard/media_api/data.txt";
- public static final String TEST_PATH_4 = "somenonexistingpathname";
- public static final String TEST_PATH_5 = "mem://012345";
-
- //Meta data expected result
- //The expected tag result in the following order
- //cd_track_number, album, artist, author, composer, date, genre
- //title, years, duration
- public static final String META_DATA_MP3 [][] = {
- {"/sdcard/media_api/metaDataTestMedias/MP3/ID3V1_ID3V2.mp3", "1/10", "ID3V2.3 Album", "ID3V2.3 Artist",
- "ID3V2.3 Lyricist", "ID3V2.3 Composer", null, "Blues",
- "ID3V2.3 Title", "1234", "321", "1"},
- {"/sdcard/media_api/metaDataTestMedias/MP3/ID3V2.mp3", "1/10", "ID3V2.3 Album", "ID3V2.3 Artist",
- "ID3V2.3 Lyricist", "ID3V2.3 Composer", null, "Blues",
- "ID3V2.3 Title", "1234", "313", "1"},
- {"/sdcard/media_api/metaDataTestMedias/MP3/ID3V1.mp3", null, "test ID3V1 Album", "test ID3V1 Artist",
- null, null, null, null, "test ID3V1 Title", "1234", "231332", "1"},
- {"/sdcard/media_api/metaDataTestMedias/MP3/Corrupted_ID3V1.mp3" , null, null, null,
- null, null, null, null, null, null, "231330", "1"},
- //The corrupted TALB field in id3v2 would not switch to id3v1 tag automatically
- {"/sdcard/media_api/metaDataTestMedias/MP3/Corrupted_ID3V2_TALB.mp3", "01", null, "ID3V2.3 Artist",
- "ID3V2.3 Lyricist", "ID3V2.3 Composer", null,
- "Blues", "ID3V2.3 Title", "1234", "321", "1"},
- {"/sdcard/media_api/metaDataTestMedias/MP3/Corrupted_ID3V2_TCOM.mp3", "01", "ID3V2.3 Album",
- "ID3V2.3 Artist", "ID3V2.3 Lyricist", null, null,
- "Blues", "ID3V2.3 Title", "1234", "321", "1"},
- {"/sdcard/media_api/metaDataTestMedias/MP3/Corrupted_ID3V2_TCOM_2.mp3", "01", "ID3V2.3 Album",
- "ID3V2.3 Artist", null, null, null, "Blues", "ID3V2.3 Title", "1234", "321", "1"},
- {"/sdcard/media_api/metaDataTestMedias/MP3/Corrupted_ID3V2_TRCK.mp3", "dd", "ID3V2.3 Album",
- "ID3V2.3 Artist", "ID3V2.3 Lyricist", "ID3V2.3 Composer", null,
- "Blues", "ID3V2.3 Title", "1234", "321", "1"},
- {"/sdcard/media_api/metaDataTestMedias/MP3/Corrupted_ID3V2_TRCK_2.mp3", "01", "ID3V2.3 Album",
- "ID3V2.3 Artist", null, null, null, null, "ID3V2.3 Title", null, "321", "1"},
- {"/sdcard/media_api/metaDataTestMedias/MP3/Corrupted_ID3V2_TYER.mp3", "01", "ID3V2.3 Album",
- "ID3V2.3 Artist", null, null, null, null, "ID3V2.3 Title", "9999", "321", "1"},
- {"/sdcard/media_api/metaDataTestMedias/MP3/Corrupted_ID3V2_TYER_2.mp3", "01", "ID3V2.3 Album",
- "ID3V2.3 Artist", "ID3V2.3 Lyricist", "ID3V2.3 Composer", null,
- "Blues", "ID3V2.3 Title", null, "321", "1"},
- {"/sdcard/media_api/metaDataTestMedias/MP3/Corrupted_ID3V2_TIT.mp3", null, null, null,
- null, null, null, null, null, null, "577", "1"}
- };
-
- public static final String META_DATA_OTHERS [][] = {
- {"/sdcard/media_api/metaDataTestMedias/3GP/cat.3gp", null, null, null,
- null, null, "20080309T002415.000Z", null,
- null, null, "1404928", "2"},
- {"/sdcard/media_api/metaDataTestMedias/AMR/AMR_NB.amr", null, null, null,
- null, null, null, null,
- null, null, "126540", "1"},
- {"/sdcard/media_api/metaDataTestMedias/AMRWB/AMR_WB.amr", null, null, null,
- null, null, null, null,
- null, null, "231180", "1"},
- {"/sdcard/media_api/metaDataTestMedias/M4A/Jaws Of Life_ver1.m4a", null, "Suspended Animation",
- "John Petrucci", null, null, "20070510T125223.000Z",
- null, null, "2005", "231180", "1"},
- {"/sdcard/media_api/metaDataTestMedias/M4V/sample_iPod.m4v", null, null,
- null, null, null, "20051220T202015.000Z",
- null, null, null, "3771392", "2"},
- {"/sdcard/media_api/metaDataTestMedias/MIDI/MIDI.mid", null, "Suspended Animation",
- "John Petrucci", null, null, "20070510T125223.000Z",
- null, null, "2005", "231180", "1"},
- {"/sdcard/media_api/metaDataTestMedias/MP4/kung_fu_panda_h264.mp4", null, "mp4 album Kung Fu Panda",
- "mp4 artist Kung Fu Panda", null, null, "20080517T091451.000Z",
- "Kung Fu Panda", "Kung Fu Panda", "2008", "5667840", "2"},
- {"/sdcard/media_api/metaDataTestMedias/OGG/Ring_Classic_02.ogg", null, "Suspended Animation",
- "John Petrucci", null, null, "20070510T125223.000Z",
- null, null, "2005", "231180", "1"},
- {"/sdcard/media_api/metaDataTestMedias/OGG/When You Say Nothing At All.ogg",
- null, "Suspended Animation", "John Petrucci",
- null, null, "20070510T125223.000Z", null, null, "2005", "231180", "1"},
- {"/sdcard/media_api/metaDataTestMedias/WAV/Im With You.wav", null, null,
- null, null, null, null,
- null, null, null, "224000", "1"},
- {"/sdcard/media_api/metaDataTestMedias/WMA/WMA9.wma", "6", "Ten Songs in the Key of Betrayal",
- "Alien Crime Syndicate", "Alien Crime Syndicate",
- "wma 9 Composer", "20040521T175729.483Z",
- "Rock", "Run for the Money", "2004", "134479", "1"},
- {"/sdcard/media_api/metaDataTestMedias/WMA/WMA10.wma", "09", "wma 10 Album",
- "wma 10 Album Artist", "wma 10 Artist", "wma 10 Composer", "20070705T063625.097Z",
- "Acid Jazz", "wma 10 Title", "2010", "126574", "1"},
- {"/sdcard/media_api/metaDataTestMedias/WMV/bugs.wmv", "8", "wmv 9 Album",
- null, "wmv 9 Artist ", null, "20051122T155247.540Z",
- null, "Looney Tunes - Hare-Breadth Hurry", "2005", "193482", "2"},
- {"/sdcard/media_api/metaDataTestMedias/WMV/clips_ver7.wmv", "50", "wmv 7 Album",
- null, "Hallau Shoots & Company", null, "20020226T170045.891Z",
- null, "CODEC Shootout", "1986", "43709", "2"}
- };
-
- //output recorded video
-
- public static final String RECORDED_HVGA_H263 = "/sdcard/HVGA_H263.3gp";
- public static final String RECORDED_QVGA_H263 = "/sdcard/QVGA_H263.3gp";
- public static final String RECORDED_SQVGA_H263 = "/sdcard/SQVGA_H263.3gp";
- public static final String RECORDED_CIF_H263 = "/sdcard/CIF_H263.3gp";
- public static final String RECORDED_QCIF_H263 = "/sdcard/QCIF_H263.3gp";
-
- public static final String RECORDED_HVGA_MP4 = "/sdcard/HVGA_mp4.mp4";
- public static final String RECORDED_QVGA_MP4 = "/sdcard/QVGA_mp4.mp4";
- public static final String RECORDED_SQVGA_MP4 = "/sdcard/SQVGA_mp4.mp4";
- public static final String RECORDED_CIF_MP4 = "/sdcard/CIF_mp4.mp4";
- public static final String RECORDED_QCIF_MP4 = "/sdcard/QCIF_mp4.mp4";
-
- public static final String RECORDED_VIDEO_3GP = "/sdcard/temp.3gp";
-
- public static final String INVALD_VIDEO_PATH = "/sdcard/media_api/filepathdoesnotexist" +
- "/filepathdoesnotexist/temp.3gp";
-
-
- public static final long RECORDED_TIME = 5000;
- public static final long VALID_VIDEO_DURATION = 2000;
-
- //Videos for the mediaplayer stress test
- public static String[] H263_STRESS = {
- "/sdcard/media_api/video_stress/h263/H263_CIF.3gp",
- "/sdcard/media_api/video_stress/h263/H263_QCIF.3gp",
- "/sdcard/media_api/video_stress/h263/H263_QVGA.3gp",
- "/sdcard/media_api/video_stress/h263/H263_SQVGA.3gp"
- };
-
- public static String[] MPEG4_STRESS = {
- "/sdcard/media_api/video_stress/h263/mpeg4_CIF.mp4",
- "/sdcard/media_api/video_stress/h263/mpeg4_QCIF.3gp",
- "/sdcard/media_api/video_stress/h263/mpeg4_QVGA.3gp",
- "/sdcard/media_api/video_stress/h263/mpeg4_SQVGA.mp4"
- };
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
deleted file mode 100755
index 12eacd3..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest;
-
-import android.test.InstrumentationTestRunner;
-import android.test.InstrumentationTestSuite;
-import com.android.mediaframeworktest.stress.MediaRecorderStressTest;
-
-import junit.framework.TestSuite;
-
-public class MediaRecorderStressTestRunner extends InstrumentationTestRunner {
-
- @Override
- public TestSuite getAllTests() {
- TestSuite suite = new InstrumentationTestSuite(this);
- suite.addTestSuite(MediaRecorderStressTest.class);
- return suite;
- }
-
- @Override
- public ClassLoader getLoader() {
- return MediaRecorderStressTestRunner.class.getClassLoader();
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java
deleted file mode 100644
index 5981a13..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.functional;
-
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import com.android.mediaframeworktest.MediaNames;
-
-import java.io.*;
-
-import android.content.Context;
-import android.hardware.Camera;
-import android.hardware.Camera.PictureCallback;
-import android.hardware.Camera.PreviewCallback;
-import android.hardware.Camera.ShutterCallback;
-import android.test.ActivityInstrumentationTestCase;
-import android.util.Log;
-import android.view.SurfaceHolder;
-
-import android.os.Looper;
-
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Junit / Instrumentation test case for the camera api
-
- */
-public class CameraTest extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
- private String TAG = "CameraTest";
-
- private boolean rawPreviewCallbackResult = false;
- private boolean shutterCallbackResult = false;
- private boolean rawPictureCallbackResult = false;
- private boolean jpegPictureCallbackResult = false;
-
- private static int WAIT_FOR_COMMAND_TO_COMPLETE = 10000; // Milliseconds.
-
- private RawPreviewCallback mRawPreviewCallback = new RawPreviewCallback();
- private TestShutterCallback mShutterCallback = new TestShutterCallback();
- private RawPictureCallback mRawPictureCallback = new RawPictureCallback();
- private JpegPictureCallback mJpegPictureCallback = new JpegPictureCallback();
-
- private boolean mInitialized = false;
- private Looper mLooper = null;
- private final Object lock = new Object();
- private final Object previewDone = new Object();
-
- Camera mCamera;
- Context mContext;
-
- public CameraTest() {
- super("com.android.mediaframeworktest", MediaFrameworkTest.class);
- }
-
- protected void setUp() throws Exception {
- super.setUp();
- }
-
- /*
- * Initializes the message looper so that the Camera object can
- * receive the callback messages.
- */
- private void initializeMessageLooper() {
- Log.v(TAG, "start looper");
- new Thread() {
- @Override
- public void run() {
- // Set up a looper to be used by camera.
- Looper.prepare();
- Log.v(TAG, "start loopRun");
- // Save the looper so that we can terminate this thread
- // after we are done with it.
- mLooper = Looper.myLooper();
- mCamera = Camera.open();
- synchronized (lock) {
- mInitialized = true;
- lock.notify();
- }
- Looper.loop(); // Blocks forever until Looper.quit() is called.
- Log.v(TAG, "initializeMessageLooper: quit.");
- }
- }.start();
- }
-
- /*
- * Terminates the message looper thread.
- */
- private void terminateMessageLooper() {
- mLooper.quit();
- mCamera.release();
- }
-
- //Implement the previewCallback
- private final class RawPreviewCallback implements PreviewCallback {
- public void onPreviewFrame(byte [] rawData, Camera camera) {
- Log.v(TAG, "Preview callback start");
- int rawDataLength = 0;
- if (rawData != null) {
- rawDataLength = rawData.length;
- }
- if (rawDataLength > 0) {
- rawPreviewCallbackResult = true;
- } else {
- rawPreviewCallbackResult = false;
- }
- synchronized (previewDone) {
- Log.v(TAG, "notify the preview callback");
- previewDone.notify();
- }
-
- Log.v(TAG, "Preview callback stop");
- }
- };
-
- //Implement the shutterCallback
- private final class TestShutterCallback implements ShutterCallback {
- public void onShutter() {
- shutterCallbackResult = true;
- Log.v(TAG, "onShutter called");
- }
- };
-
- //Implement the RawPictureCallback
- private final class RawPictureCallback implements PictureCallback {
- public void onPictureTaken(byte [] rawData, Camera camera) {
- if (rawData != null) {
- rawPictureCallbackResult = true;
- } else {
- rawPictureCallbackResult = false;
- }
- Log.v(TAG, "RawPictureCallback callback");
- }
- };
-
- //Implement the JpegPictureCallback
- private final class JpegPictureCallback implements PictureCallback {
- public void onPictureTaken(byte [] rawData, Camera camera) {
- try {
- if (rawData != null) {
- int rawDataLength = rawData.length;
- File rawoutput = new File("/sdcard/test.bmp");
- FileOutputStream outstream = new FileOutputStream(rawoutput);
- outstream.write(rawData);
- Log.v(TAG, "JpegPictureCallback rawDataLength = " + rawDataLength);
- jpegPictureCallbackResult = true;
- } else {
- jpegPictureCallbackResult = false;
- }
- Log.v(TAG, "Jpeg Picture callback");
- } catch (Exception e) {
- Log.v(TAG, e.toString());
- }
- }
- };
-
-
- private void checkTakePicture() {
- SurfaceHolder mSurfaceHolder;
- try {
- mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- mCamera.setPreviewDisplay(mSurfaceHolder);
- Log.v(TAG, "Start preview");
- mCamera.startPreview();
- synchronized (previewDone) {
- try {
- previewDone.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
- Log.v(TAG, "Preview Done");
- } catch (Exception e) {
- Log.v(TAG, "wait was interrupted.");
- }
- }
- mCamera.setPreviewCallback(null);
- mCamera.takePicture(mShutterCallback, mRawPictureCallback, mJpegPictureCallback);
- Thread.sleep(MediaNames.WAIT_LONG);
- } catch (Exception e) {
- Log.v(TAG, e.toString());
- }
- }
-
- private void checkPreviewCallback() {
- SurfaceHolder mSurfaceHolder;
- try {
- mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- mCamera.setPreviewDisplay(mSurfaceHolder);
- Log.v(TAG, "start preview");
- mCamera.startPreview();
- synchronized (previewDone) {
- try {
- previewDone.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
- Log.v(TAG, "setPreview done");
- } catch (Exception e) {
- Log.v(TAG, "wait was interrupted.");
- }
- }
- mCamera.setPreviewCallback(null);
- } catch (Exception e) {
- Log.v(TAG, e.toString());
- }
- }
-
- /*
- * TODO(yslau): Need to setup the golden rawData and compare the
- * the new captured rawData with the golden one.
- *
- * Test case 1: Take a picture and verify all the callback
- * functions are called properly.
- */
- @LargeTest
- public void testTakePicture() throws Exception {
- initializeMessageLooper();
- synchronized (lock) {
- try {
- lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
- } catch(Exception e) {
- Log.v(TAG, "runTestOnMethod: wait was interrupted.");
- }
- }
- mCamera.setPreviewCallback(mRawPreviewCallback);
- checkTakePicture();
- terminateMessageLooper();
- assertTrue("shutterCallbackResult", shutterCallbackResult);
- assertTrue("rawPictureCallbackResult", rawPictureCallbackResult);
- assertTrue("jpegPictureCallbackResult", jpegPictureCallbackResult);
- }
-
- /*
- * Test case 2: Set the preview and
- * verify the RawPreviewCallback is called
- */
- @LargeTest
- public void testCheckPreview() throws Exception {
- initializeMessageLooper();
- synchronized (lock) {
- try {
- lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
- } catch(Exception e) {
- Log.v(TAG, "wait was interrupted.");
- }
- }
- mCamera.setPreviewCallback(mRawPreviewCallback);
- checkPreviewCallback();
- terminateMessageLooper();
- assertTrue("RawPreviewCallbackResult", rawPreviewCallbackResult);
- }
-
-}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java
deleted file mode 100644
index 0e88719..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java
+++ /dev/null
@@ -1,577 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.functional;
-
-
-
-//import android.content.Resources;
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import com.android.mediaframeworktest.MediaNames;
-
-import android.content.res.AssetFileDescriptor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.media.MediaMetadataRetriever;
-import android.media.MediaPlayer;
-import android.media.MediaRecorder;
-import android.os.SystemClock;
-import android.util.Log;
-
-import java.io.IOException;
-import java.io.InputStream;
-/**
- * Junit / Instrumentation test case for the media player api
-
- */
-public class CodecTest {
- private static String TAG = "MediaPlayerApiTest";
-
- public static String printCpuInfo(){
- String cm = "dumpsys cpuinfo";
- String cpuinfo =null;
- int ch;
- try{
- Process p = Runtime.getRuntime().exec(cm);
- InputStream in = p.getInputStream();
- StringBuffer sb = new StringBuffer(512);
- while ( ( ch = in.read() ) != -1 ){
- sb.append((char) ch);
- }
- cpuinfo = sb.toString();
- }catch (IOException e){
- Log.v(TAG, e.toString());
- }
- return cpuinfo;
- }
-
-
- public static int getDuration(String filePath) {
- Log.v(TAG, "getDuration - " + filePath);
- MediaPlayer mp = new MediaPlayer();
- try{
- mp.setDataSource(filePath);
- mp.prepare();
- }catch (Exception e){}
- int duration = mp.getDuration();
- Log.v(TAG, "Duration " + duration);
- mp.release();
- Log.v(TAG, "release");
- return duration;
- }
-
- public static boolean getCurrentPosition(String filePath){
- Log.v(TAG, "GetCurrentPosition - " + filePath);
- int currentPosition = 0;
- long t1=0;
- long t2 =0;
- MediaPlayer mp = new MediaPlayer();
- try{
- mp.setDataSource(filePath);
- Log.v(TAG, "start playback");
- mp.prepare();
- mp.start();
- t1=SystemClock.uptimeMillis();
- Thread.sleep(10000);
- mp.pause();
- Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
- t2=SystemClock.uptimeMillis();
- }catch (Exception e){
- Log.v(TAG, e.toString());
- }
- currentPosition = mp.getCurrentPosition();
- mp.stop();
- mp.release();
- Log.v(TAG, "mp currentPositon = " + currentPosition + " play duration = " + (t2-t1));
- //The currentposition should be within 10% of the sleep time
- //For the very short mp3, it should return the length instead of 10 seconds
- if (filePath.equals(MediaNames.SHORTMP3)){
- if (currentPosition < 1000 )
- return true;
- }
- if ((currentPosition < ((t2-t1) *1.2)) && (currentPosition > 0))
- return true;
- else
- return false;
- }
-
- public static boolean seekTo(String filePath){
- Log.v(TAG, "seekTo " + filePath);
- int currentPosition = 0;
- MediaPlayer mp = new MediaPlayer();
- try{
- mp.setDataSource(filePath);
- mp.prepare();
- mp.start();
- mp.seekTo(MediaNames.SEEK_TIME);
- Thread.sleep(MediaNames.WAIT_TIME);
- currentPosition = mp.getCurrentPosition();
- }catch (Exception e){
- Log.v(TAG, e.getMessage());
- }
- mp.stop();
- mp.release();
- Log.v(TAG, "CurrentPosition = " + currentPosition);
- //The currentposition should be at least greater than the 80% of seek time
- if ((currentPosition > MediaNames.SEEK_TIME *0.8))
- return true;
- else
- return false;
- }
-
- public static boolean setLooping(String filePath){
- int currentPosition = 0;
- int duration = 0;
- long t1 =0;
- long t2 =0;
- Log.v (TAG, "SetLooping - " + filePath);
- MediaPlayer mp = new MediaPlayer();
- try{
- mp.setDataSource(filePath);
- mp.prepare();
- duration = mp.getDuration();
- Log.v(TAG, "setLooping duration " + duration);
- mp.setLooping(true);
- mp.start();
- Thread.sleep(5000);
- mp.seekTo(duration - 5000);
- t1=SystemClock.uptimeMillis();
- Thread.sleep(20000);
- t2=SystemClock.uptimeMillis();
- Log.v(TAG, "pause");
- //Bug# 1106852 - IllegalStateException will be thrown if pause is called
- //in here
- //mp.pause();
- currentPosition = mp.getCurrentPosition();
- Log.v(TAG, "looping position " + currentPosition + "duration = " + (t2-t1));
- }catch (Exception e){
- Log.v(TAG, "Exception : " + e.toString());
- }
- mp.stop();
- mp.release();
- //The current position should be within 20% of the sleep time
- //and should be greater than zero.
- if ((currentPosition < ((t2-t1-5000)*1.2)) && currentPosition > 0)
- return true;
- else
- return false;
- }
-
- public static boolean pause(String filePath) throws Exception {
- Log.v(TAG, "pause - " + filePath);
- boolean misPlaying = true;
- boolean pauseResult = false;
- long t1=0;
- long t2=0;
- MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(filePath);
- mp.prepare();
- int duration = mp.getDuration();
- mp.start();
- t1=SystemClock.uptimeMillis();
- Thread.sleep(5000);
- mp.pause();
- Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
- t2=SystemClock.uptimeMillis();
- misPlaying = mp.isPlaying();
- int curPosition = mp.getCurrentPosition();
- Log.v(TAG, filePath + " pause currentPositon " + curPosition);
- Log.v(TAG, "isPlaying "+ misPlaying + " wait time " + (t2 - t1) );
- String cpuinfo = printCpuInfo();
- Log.v(TAG, cpuinfo);
- if ((curPosition>0) && (curPosition < ((t2-t1) * 1.3)) && (misPlaying == false))
- pauseResult = true;
- mp.stop();
- mp.release();
- return pauseResult;
- }
-
- public static void prepareStopRelease(String filePath) throws Exception {
- Log.v(TAG, "prepareStopRelease" + filePath);
- MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(filePath);
- mp.prepare();
- mp.stop();
- mp.release();
- }
-
- public static void preparePauseRelease(String filePath) throws Exception {
- Log.v(TAG, "preparePauseRelease" + filePath);
- MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(filePath);
- mp.prepare();
- mp.pause();
- mp.release();
- }
-
- public static int videoHeight(String filePath) throws Exception {
- Log.v(TAG, "videoHeight - " + filePath);
- int videoHeight = 0;
- MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(filePath);
- mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
- mp.prepare();
- videoHeight = mp.getVideoHeight();
- mp.release();
- return videoHeight;
- }
-
- public static int videoWidth(String filePath) throws Exception {
- Log.v(TAG, "videoWidth - " + filePath);
- int videoWidth = 0;
- MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(filePath);
- mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
- mp.prepare();
- videoWidth = mp.getVideoWidth();
- mp.release();
- return videoWidth;
- }
-
- //This also test the streaming video which may take a long
- //time to start the playback.
- public static boolean videoSeekTo(String filePath) throws Exception {
- Log.v(TAG, "videoSeekTo - " + filePath);
- int currentPosition = 0;
- int duration = 0;
- boolean videoResult = false;
- MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(filePath);
- mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
- mp.prepare();
- mp.start();
- if (filePath.equals(MediaNames.VIDEO_SHORT_3GP)){
- mp.pause();
- Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
- mp.seekTo(0);
- mp.start();
- Thread.sleep(1000);
- currentPosition = mp.getCurrentPosition();
- Log.v(TAG,"short position " + currentPosition);
- if (currentPosition > 100 )
- return true;
- else
- return false;
- }
- Thread.sleep(5000);
- duration = mp.getDuration();
- Log.v(TAG, "video duration " + duration);
- mp.pause();
- Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
- mp.seekTo(duration - 20000 );
- mp.start();
- Thread.sleep(1000);
- mp.pause();
- Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
- mp.seekTo(duration/2);
- mp.start();
- Thread.sleep(10000);
- currentPosition = mp.getCurrentPosition();
- Log.v(TAG, "video currentPosition " + currentPosition);
- mp.release();
- if (currentPosition > (duration /2 )*0.9)
- return true;
- else
- return false;
-
- }
-
- public static boolean seekToEnd(String filePath){
- Log.v(TAG, "seekToEnd - " + filePath);
- int duration = 0;
- int currentPosition = 0;
- boolean isPlaying = false;
- MediaPlayer mp = new MediaPlayer();
- try{
- mp.setDataSource(filePath);
- Log.v(TAG, "start playback");
- mp.prepare();
- duration = mp.getDuration();
- mp.seekTo(duration - 3000);
- mp.start();
- Thread.sleep(6000);
- }catch (Exception e){}
- isPlaying = mp.isPlaying();
- currentPosition = mp.getCurrentPosition();
- Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying);
- mp.stop();
- mp.release();
- Log.v(TAG, "duration = " + duration);
- if (currentPosition < 0.9 * duration || isPlaying)
- return false;
- else
- return true;
- }
-
- public static boolean shortMediaStop(String filePath){
- Log.v(TAG, "shortMediaStop - " + filePath);
- //This test is only for the short media file
- int duration = 0;
- int currentPosition = 0;
- boolean isPlaying = false;
- MediaPlayer mp = new MediaPlayer();
- try{
- mp.setDataSource(filePath);
- Log.v(TAG, "start playback");
- mp.prepare();
- duration = mp.getDuration();
- mp.start();
- Thread.sleep(10000);
- }catch (Exception e){}
- isPlaying = mp.isPlaying();
- currentPosition = mp.getCurrentPosition();
- Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying);
- mp.stop();
- mp.release();
- Log.v(TAG, "duration = " + duration);
- if (currentPosition > duration || isPlaying)
- return false;
- else
- return true;
- }
-
- public static boolean playToEnd(String filePath){
- Log.v(TAG, "shortMediaStop - " + filePath);
- //This test is only for the short media file
- int duration = 200000;
- int updateDuration = 0;
- int currentPosition = 0;
- boolean isPlaying = false;
- MediaPlayer mp = new MediaPlayer();
- try{
- Thread.sleep(5000);
- mp.setDataSource(filePath);
- Log.v(TAG, "start playback");
- mp.prepare();
- //duration = mp.getDuration();
- mp.start();
- Thread.sleep(50000);
- }catch (Exception e){}
- isPlaying = mp.isPlaying();
- currentPosition = mp.getCurrentPosition();
- //updateDuration = mp.getDuration();
- Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying);
- mp.stop();
- mp.release();
- //Log.v(TAG, "duration = " + duration);
- //Log.v(TAG, "Update duration = " + updateDuration);
- if (currentPosition > duration || isPlaying)
- return false;
- else
- return true;
- }
-
- public static boolean seektoBeforeStart(String filePath){
- Log.v(TAG, "seektoBeforeStart - " + filePath);
- //This test is only for the short media file
- int duration = 0;
- int currentPosition = 0;
-
- MediaPlayer mp = new MediaPlayer();
- try{
- mp.setDataSource(filePath);
- mp.prepare();
- duration = mp.getDuration();
- mp.seekTo(duration - 10000);
- mp.start();
- currentPosition=mp.getCurrentPosition();
- mp.stop();
- mp.release();
- }catch (Exception e){}
- if (currentPosition < duration/2)
- return false;
- else
- return true;
- }
-
- public static boolean mediaRecorderRecord(String filePath){
- Log.v(TAG, "SoundRecording - " + filePath);
- //This test is only for the short media file
- int duration = 0;
- try{
- MediaRecorder mRecorder = new MediaRecorder();
- mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
- mRecorder.setOutputFile(filePath);
- mRecorder.prepare();
- mRecorder.start();
- Thread.sleep(500);
- mRecorder.stop();
- Log.v(TAG, "sound recorded");
- mRecorder.release();
- }catch (Exception e){
- Log.v(TAG, e.toString());
- }
-
- //Verify the recorded file
- MediaPlayer mp = new MediaPlayer();
- try{
- mp.setDataSource(filePath);
- mp.prepare();
- duration = mp.getDuration();
- Log.v(TAG,"Duration " + duration);
- mp.release();
- }catch (Exception e){}
- //Check the record media file length is greate than zero
- if (duration > 0)
- return true;
- else
- return false;
-
- }
-
- //Test for mediaMeta Data Thumbnail
- public static boolean getThumbnail(String filePath, String goldenPath){
- Log.v(TAG, "getThumbnail - " + filePath);
-
- int goldenHeight = 0;
- int goldenWidth = 0;
- int outputWidth = 0;
- int outputHeight = 0;
-
- //This test is only for the short media file
- try{
- BitmapFactory mBitmapFactory = new BitmapFactory();
-
- MediaMetadataRetriever mMediaMetadataRetriever = new MediaMetadataRetriever();
- try {
- mMediaMetadataRetriever.setDataSource(filePath);
- } catch(Exception e) {
- e.printStackTrace();
- return false;
- }
- Bitmap outThumbnail = mMediaMetadataRetriever.captureFrame();
-
- //Verify the thumbnail
- Bitmap goldenBitmap = mBitmapFactory.decodeFile(goldenPath);
-
- outputWidth = outThumbnail.getWidth();
- outputHeight = outThumbnail.getHeight();
- goldenHeight = goldenBitmap.getHeight();
- goldenWidth = goldenBitmap.getWidth();
-
- //check the image dimension
- if ((outputWidth != goldenWidth) || (outputHeight != goldenHeight))
- return false;
-
- //Check one line of pixel
- int x = goldenHeight/2;
- for (int j=0; j<goldenWidth; j++){
- if (goldenBitmap.getPixel(x, j) != outThumbnail.getPixel(x, j)){
- Log.v(TAG, "pixel = " + goldenBitmap.getPixel(x, j));
- return false;
- }
- }
- }catch (Exception e){}
- return true;
- }
-
- //Load midi file from resources
- public static boolean resourcesPlayback(AssetFileDescriptor afd, int expectedDuration){
- int duration = 0;
- try{
- MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
- mp.prepare();
- mp.start();
- duration = mp.getDuration();
- Thread.sleep(5000);
- mp.release();
- }catch (Exception e){
- Log.v(TAG,e.getMessage());
- }
- if (duration > expectedDuration)
- return true;
- else
- return false;
- }
-
- public static boolean prepareAsyncReset(String filePath){
- //preparesAsync
- try{
- MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(filePath);
- mp.prepareAsync();
- mp.reset();
- mp.release();
- }catch (Exception e){
- Log.v(TAG,e.getMessage());
- return false;
- }
- return true;
- }
-
-
- public static boolean isLooping(String filePath) {
- MediaPlayer mp = null;
-
- try {
- mp = new MediaPlayer();
- if (mp.isLooping()) {
- Log.v(TAG, "MediaPlayer.isLooping() returned true after ctor");
- return false;
- }
- mp.setDataSource(filePath);
- mp.prepare();
-
- mp.setLooping(true);
- if (!mp.isLooping()) {
- Log.v(TAG, "MediaPlayer.isLooping() returned false after setLooping(true)");
- return false;
- }
-
- mp.setLooping(false);
- if (mp.isLooping()) {
- Log.v(TAG, "MediaPlayer.isLooping() returned true after setLooping(false)");
- return false;
- }
- }catch (Exception e){
- Log.v(TAG, "Exception : " + e.toString());
- return false;
- } finally {
- if (mp != null)
- mp.release();
- }
-
- return true;
- }
-
- public static boolean isLoopingAfterReset(String filePath) {
- MediaPlayer mp = null;
- try {
- mp = new MediaPlayer();
- mp.setDataSource(filePath);
- mp.prepare();
-
- mp.setLooping(true);
- mp.reset();
- if (mp.isLooping()) {
- Log.v(TAG, "MediaPlayer.isLooping() returned true after reset()");
- return false;
- }
- }catch (Exception e){
- Log.v(TAG, "Exception : " + e.toString());
- return false;
- } finally {
- if (mp != null)
- mp.release();
- }
-
- return true;
- }
-}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java
deleted file mode 100644
index b6a0848..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.functional;
-
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import com.android.mediaframeworktest.MediaNames;
-
-import android.media.AudioFormat;
-import android.media.AudioManager;
-import android.media.AudioTrack;
-import android.content.Context;
-import android.test.ActivityInstrumentationTestCase2;
-import android.util.Log;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-/**
- * Junit / Instrumentation test case for the media AudioTrack api
-
- */
-public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
- private String TAG = "MediaAudioTrack";
-
- public MediaAudioTrackTest() {
- super("com.android.mediaframeworktest", MediaFrameworkTest.class);
- }
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- }
-
- //-----------------------------------------------------------------
- // private class to hold test reslts
- public class TestResults {
- public boolean mResult = false;
- public String mResultLog = "";
- public TestResults(boolean b, String s) { mResult = b; mResultLog = s; }
- }
-
- //-----------------------------------------------------------------
- // generic test methods
- public TestResults constructorTestMultiSampleRate(
- // parameters tested by this method
- int _inTest_streamType, int _inTest_mode, int _inTest_config,
- // parameter-dependent expected results
- int _expected_stateForMode) {
-
- int[] testSampleRates = {8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000};
- String failedRates = "Failure for rate(s): ";
- boolean localRes, finalRes = true;
-
- for(int i = 0 ; i < testSampleRates.length ; i++) {
- //Log.v("MediaAudioTrackTest", "[ constructorTestMultiSampleRate ] testing "+ testSampleRates[i]);
- AudioTrack track = null;
- try {
- track = new AudioTrack(
- _inTest_streamType,
- testSampleRates[i],
- _inTest_config,
- AudioFormat.ENCODING_PCM_16BIT,
- AudioTrack.getMinBufferSize(testSampleRates[i],
- _inTest_config, AudioFormat.ENCODING_PCM_16BIT),//testSampleRates[i]*4
- _inTest_mode);
- } catch(IllegalArgumentException iae) {
- Log.e("MediaAudioTrackTest", "[ constructorTestMultiSampleRate ] exception at SR "
- + testSampleRates[i]+": \n" + iae);
- }
- if(track != null) {
- localRes = (track.getState() == _expected_stateForMode);
- track.release();
- }
- else {
- localRes = false;
- }
-
- if (!localRes) {
- //log the error for the test runner
- failedRates += Integer.toString(testSampleRates[i]) + "Hz ";
- //log the error for logcat
- Log.e("MediaAudioTrackTest", "[ constructorTestMultiSampleRate ] failed to construct "
- +"AudioTrack(streamType="+_inTest_streamType
- +", sampleRateInHz=" + testSampleRates[i]
- +", channelConfig=" + _inTest_config
- +", audioFormat=AudioFormat.ENCODING_PCM_16BIT"
- +", bufferSizeInBytes=" + AudioTrack.getMinBufferSize(testSampleRates[i],
- _inTest_config, AudioFormat.ENCODING_PCM_16BIT)
- +", mode="+ _inTest_mode );
- //mark test as failed
- finalRes = false;
- }
- }
- return new TestResults(finalRes, failedRates);
- }
-
- //-----------------------------------------------------------------
- // AUDIOTRACK TESTS:
- //----------------------------------
-
- //-----------------------------------------------------------------
- // AudioTrack constructor and AudioTrack.getMinBufferSize(...)
- //----------------------------------
-
- //Test case 1: constructor for streaming AudioTrack, mono, 16bit at misc valid sample rates
- @MediumTest
- public void testConstructorMono16MusicStream() throws Exception {
-
- TestResults res = constructorTestMultiSampleRate(
- AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM,
- AudioFormat.CHANNEL_CONFIGURATION_MONO,
- AudioTrack.STATE_INITIALIZED);
-
- assertTrue("testConstructorMono16MusicStream: " + res.mResultLog, res.mResult);
- }
-
-
- //Test case 2: constructor for streaming AudioTrack, stereo, 16bit at misc valid sample rates
- @MediumTest
- public void testConstructorStereo16MusicStream() throws Exception {
-
- TestResults res = constructorTestMultiSampleRate(
- AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM,
- AudioFormat.CHANNEL_CONFIGURATION_STEREO,
- AudioTrack.STATE_INITIALIZED);
-
- assertTrue("testConstructorStereo16MusicStream: " + res.mResultLog, res.mResult);
- }
-
-
- //Test case 3: constructor for static AudioTrack, mono, 16bit at misc valid sample rates
- @MediumTest
- public void testConstructorMono16MusicStatic() throws Exception {
-
- TestResults res = constructorTestMultiSampleRate(
- AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC,
- AudioFormat.CHANNEL_CONFIGURATION_MONO,
- AudioTrack.STATE_NO_STATIC_DATA);
-
- assertTrue("testConstructorMono16MusicStatic: " + res.mResultLog, res.mResult);
- }
-
-
- //Test case 4: constructor for static AudioTrack, stereo, 16bit at misc valid sample rates
- @MediumTest
- public void testConstructorStereo16MusicStatic() throws Exception {
-
- TestResults res = constructorTestMultiSampleRate(
- AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC,
- AudioFormat.CHANNEL_CONFIGURATION_STEREO,
- AudioTrack.STATE_NO_STATIC_DATA);
-
- assertTrue("testConstructorStereo16MusicStatic: " + res.mResultLog, res.mResult);
- }
-
-}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaMetadataTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaMetadataTest.java
deleted file mode 100644
index 364e1af..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaMetadataTest.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.functional;
-
-import android.media.MediaMetadataRetriever;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-import android.util.Log;
-
-import com.android.mediaframeworktest.MediaNames;
-/**
- * This metadata test suite test the basic functionality of the
- * MediaMetadataRetriever
- *
- */
-public class MediaMetadataTest extends AndroidTestCase {
-
- private static final String TAG = "MediaMetadataTest";
-
- public static enum METADATA_EXPECTEDRESULT{
- FILE_PATH,CD_TRACK, ALBUM,
- ARTIST, AUTHOR, COMPOSER,
- DATE, GENRE, TITLE,
- YEAR, DURATION, NUM_TRACKS
- }
-
- public static enum MP3_TEST_FILE{
- ID3V1V2, ID3V2, ID3V1,
- CORRUPTED_ID3V1, CORRUPTED_ID3V2_TALB, CORRUPTED_ID3V2_TCOM,
- CORRUPTED_ID3V2_TCOM_2, CORRUPTED_ID3V2_TRCK, CORRUPTED_D3V2_TRCK_2,
- CORRUPTED_ID3V2_TYER, CORRUPTED_ID3V2_TYER_2, CORRUPTED_ID3V2_TIT
- }
-
- public static enum NON_MP3_TEST_FILE{
- THREE3GP, AMRNB, AMRWB, M4A1, M4V, MIDI,
- H264, OGG1, OGG2, WAV, WMA9, WMA10, WMV9, WMV7
- }
-
- public static METADATA_EXPECTEDRESULT meta;
- public static MP3_TEST_FILE mp3_test_file;
- public static NON_MP3_TEST_FILE non_mp3_test_file;
-
- @MediumTest
- public static void testID3V1V2Metadata() throws Exception {
- validateMetatData(mp3_test_file.ID3V1V2.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void testID3V2Metadata() throws Exception {
- validateMetatData(mp3_test_file.ID3V2.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void testID3V1Metadata() throws Exception {
- validateMetatData(mp3_test_file.ID3V1.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void testCorruptedID3V1Metadata() throws Exception {
- validateMetatData(mp3_test_file.CORRUPTED_ID3V1.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void testCorrupted_ID3V2_TALBMetadata() throws Exception {
- validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TALB.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void testCorrupted_ID3V2_TCOMMetadata() throws Exception {
- validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TCOM.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void testCorrupted_ID3V2_TCOMM2etadata() throws Exception {
- validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TCOM_2.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void testCorrupted_ID3V2_TRCKMetadata() throws Exception {
- validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TRCK.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void testCorrupted_ID3V2_TRCK2Metadata() throws Exception {
- validateMetatData(mp3_test_file.CORRUPTED_D3V2_TRCK_2.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void testCorrupted_ID3V2_TYERMetadata() throws Exception {
- validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TYER.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void testCorrupted_ID3V2_TYER2Metadata() throws Exception {
- validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TYER_2.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void testCorrupted_ID3V2_TITMetadata() throws Exception {
- validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TIT.ordinal(), MediaNames.META_DATA_MP3);
- }
-
- @MediumTest
- public static void test3gp_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.THREE3GP.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- @MediumTest
- public static void testAmr_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.AMRNB.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- @MediumTest
- public static void testAmrWb_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.AMRWB.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- //Bug# 1440173 - skip this test case now
- @Suppress
- @MediumTest
- public static void testM4A1_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.M4A1.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- @MediumTest
- public static void testM4v_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.M4V.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- @MediumTest
- public static void testH264_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.H264.ordinal(), MediaNames.META_DATA_OTHERS);
- }
- //bug# 1440489
- @Suppress
- @MediumTest
- public static void testOgg1_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.OGG1.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- @Suppress
- @MediumTest
- public static void testOgg2_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.OGG2.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- @Suppress
- @MediumTest
- public static void testMidi_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.MIDI.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- @MediumTest
- public static void testWav_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.WAV.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- @MediumTest
- public static void testWma9_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.WMA9.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- @MediumTest
- public static void testWma10_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.WMA10.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- @MediumTest
- public static void testWmv9_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.WMV9.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- @MediumTest
- public static void testWmv10_Metadata() throws Exception {
- validateMetatData(non_mp3_test_file.WMV7.ordinal(), MediaNames.META_DATA_OTHERS);
- }
-
- private static void validateMetatData(int fileIndex, String meta_data_file[][]) {
- String value = null;
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
- try {
- retriever.setDataSource(meta_data_file[fileIndex][0]);
- Log.v(TAG, "filePath = "+ meta_data_file[fileIndex][0]);
- } catch(Exception e) {
- Log.v(TAG, "Failed: "+meta_data_file[fileIndex][0] + " " + e.toString());
- //Set the test case failure whenever it failed to setDataSource
- assertTrue("Failed to setDataSource ", false);
- }
-
- //METADATA_KEY_CD_TRACK_NUMBER should return the TCRK value
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
- Log.v(TAG, "CD_TRACK_NUMBER : " + value);
- assertEquals(TAG, meta_data_file[fileIndex][meta.CD_TRACK.ordinal()], value);
-
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
- Log.v(TAG, "Album : "+ value);
- assertEquals(TAG, meta_data_file[fileIndex][meta.ALBUM.ordinal()], value);
-
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
- Log.v(TAG, "Artist : "+ value);
- assertEquals(TAG, meta_data_file[fileIndex][meta.ARTIST.ordinal()], value);
-
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR);
- Log.v(TAG, "Author : "+ value);
- assertEquals(TAG, meta_data_file[fileIndex][meta.AUTHOR.ordinal()], value);
-
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER);
- Log.v(TAG, "Composer : "+ value);
- assertEquals(TAG, meta_data_file[fileIndex][meta.COMPOSER.ordinal()], value);
-
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE);
- Log.v(TAG, "Date : "+ value);
- assertEquals(TAG, meta_data_file[fileIndex][meta.DATE.ordinal()], value);
-
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
- Log.v(TAG, "Genre : "+ value);
- assertEquals(TAG, meta_data_file[fileIndex][meta.GENRE.ordinal()], value);
-
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
- Log.v(TAG, "Title : "+ value);
- assertEquals(TAG, meta_data_file[fileIndex][meta.TITLE.ordinal()], value);
-
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
- Log.v(TAG, "Year : "+ value);
- assertEquals(TAG, meta_data_file[fileIndex][meta.YEAR.ordinal()], value);
-
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
- Log.v(TAG, "Expected = " + meta_data_file[fileIndex][meta.DURATION.ordinal()] + "reult = " + value);
- assertEquals(TAG, meta_data_file[fileIndex][meta.DURATION.ordinal()], value);
-
- //METADATA_KEY_NUM_TRACKS should return the total number of tracks in the media
- //include the video and audio
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS);
- Log.v(TAG, "Track : "+ value);
- assertEquals(TAG,meta_data_file[fileIndex][meta.NUM_TRACKS.ordinal()], value);
-
- retriever.release();
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java
deleted file mode 100644
index dd94164..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.functional;
-
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import com.android.mediaframeworktest.MediaNames;
-
-import android.content.Context;
-import android.test.ActivityInstrumentationTestCase;
-import android.util.Log;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-/**
- * Junit / Instrumentation test case for the media player api
-
- */
-public class MediaPlayerApiTest extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
- private boolean duratoinWithinTolerence = false;
- private String TAG = "MediaPlayerApiTest";
-
- Context mContext;
-
- public MediaPlayerApiTest() {
- super("com.android.mediaframeworktest", MediaFrameworkTest.class);
- }
-
- protected void setUp() throws Exception {
- super.setUp();
-
- }
-
- public boolean verifyDuration(int duration, int expectedDuration){
- if ((duration > expectedDuration * 1.1) || (duration < expectedDuration * 0.9))
- return false;
- else
- return true;
- }
-
-
- //Audio
- //Wait for PV bugs for MP3 duration
- @MediumTest
- public void testMP3CBRGetDuration() throws Exception {
- int duration = CodecTest.getDuration(MediaNames.MP3CBR);
- duratoinWithinTolerence = verifyDuration(duration, MediaNames.MP3CBR_LENGTH);
- assertTrue("MP3CBR getDuration", duratoinWithinTolerence);
- }
-
- @MediumTest
- public void testMP3VBRGetDuration() throws Exception {
- int duration = CodecTest.getDuration(MediaNames.MP3VBR);
- Log.v(TAG, "getDuration");
- duratoinWithinTolerence = verifyDuration(duration, MediaNames.MP3VBR_LENGTH);
- assertTrue("MP3VBR getDuration", duratoinWithinTolerence);
- }
-
- @MediumTest
- public void testMIDIGetDuration() throws Exception {
- int duration = CodecTest.getDuration(MediaNames.MIDI);
- duratoinWithinTolerence = verifyDuration(duration, MediaNames.MIDI_LENGTH);
- assertTrue("MIDI getDuration", duratoinWithinTolerence);
- }
-
- @MediumTest
- public void testWMA9GetDuration() throws Exception {
- int duration = CodecTest.getDuration(MediaNames.WMA9);
- duratoinWithinTolerence = verifyDuration(duration, MediaNames.WMA9_LENGTH);
- assertTrue("WMA9 getDuration", duratoinWithinTolerence);
- }
-
- @MediumTest
- public void testAMRGetDuration() throws Exception {
- int duration = CodecTest.getDuration(MediaNames.AMR);
- duratoinWithinTolerence = verifyDuration(duration, MediaNames.AMR_LENGTH);
- assertTrue("AMR getDuration", duratoinWithinTolerence);
- }
-
- /*
- public void testOGGGetDuration() throws Exception {
- int duration = CodecTest.getDuration(MediaNames.OGG);
- duratoinWithinTolerence = verifyDuration(duration, MediaNames.OGG_LENGTH);
- assertTrue("OGG getDuration", duratoinWithinTolerence);
- }*/
-
-
- //Test cases for GetCurrentPosition
- @LargeTest
- public void testMP3CBRGetCurrentPosition() throws Exception {
- boolean currentPosition = CodecTest.getCurrentPosition(MediaNames.MP3CBR);
- assertTrue("MP3CBR GetCurrentPosition", currentPosition);
- }
-
- @LargeTest
- public void testMP3VBRGetCurrentPosition() throws Exception {
- boolean currentPosition = CodecTest.getCurrentPosition(MediaNames.MP3VBR);
- assertTrue("MP3VBR GetCurrentPosition", currentPosition);
- }
-
- @LargeTest
- public void testMIDIGetCurrentPosition() throws Exception {
- boolean currentPosition = CodecTest.getCurrentPosition(MediaNames.MIDI);
- assertTrue("MIDI GetCurrentPosition", currentPosition);
- }
-
- @LargeTest
- public void testWMA9GetCurrentPosition() throws Exception {
- boolean currentPosition = CodecTest.getCurrentPosition(MediaNames.WMA9);
- assertTrue("WMA9 GetCurrentPosition", currentPosition);
- }
-
- @LargeTest
- public void testAMRGetCurrentPosition() throws Exception {
- boolean currentPosition = CodecTest.getCurrentPosition(MediaNames.AMR);
- assertTrue("AMR GetCurrentPosition", currentPosition);
- }
-
- /*
- public void testOGGGetCurrentPosition() throws Exception {
- boolean currentPosition = CodecTest.getCurrentPosition(MediaNames.OGG);
- assertTrue("OGG GetCurrentPosition", currentPosition);
- */
-
- //Test cases for pause
- @LargeTest
- public void testMP3CBRPause() throws Exception {
- boolean isPaused = CodecTest.pause(MediaNames.MP3CBR);
- assertTrue("MP3CBR Pause", isPaused);
- }
-
- @LargeTest
- public void testMP3VBRPause() throws Exception {
- boolean isPaused = CodecTest.pause(MediaNames.MP3VBR);
- assertTrue("MP3VBR Pause", isPaused);
- }
-
- @LargeTest
- public void testMIDIPause() throws Exception {
- boolean isPaused = CodecTest.pause(MediaNames.MIDI);
- assertTrue("MIDI Pause", isPaused);
- }
-
- @LargeTest
- public void testWMA9Pause() throws Exception {
- boolean isPaused = CodecTest.pause(MediaNames.WMA9);
- assertTrue("WMA9 Pause", isPaused);
- }
-
- @LargeTest
- public void testAMRPause() throws Exception {
- boolean isPaused = CodecTest.pause(MediaNames.AMR);
- assertTrue("AMR Pause", isPaused);
- }
-
- /*
- public void testOGGPause() throws Exception {
- boolean isPaused = CodecTest.pause(MediaNames.OGG);
- assertTrue("OGG Pause", isPaused);
- }*/
-
- @MediumTest
- public void testMP3CBRPrepareStopRelease() throws Exception {
- CodecTest.prepareStopRelease(MediaNames.MP3CBR);
- assertTrue("MP3CBR prepareStopRelease", true);
- }
-
- @MediumTest
- public void testMIDIPrepareStopRelease() throws Exception {
- CodecTest.prepareStopRelease(MediaNames.MIDI);
- assertTrue("MIDI prepareStopRelease", true);
- }
-
- //One test case for seek before start
- @MediumTest
- public void testMP3CBRSeekBeforeStart() throws Exception {
- boolean seekBeforePlay = CodecTest.seektoBeforeStart(MediaNames.MP3CBR);
- assertTrue("MP3CBR SeekBeforePlay", seekBeforePlay);
- }
-
- //Skip test - Bug# 1120249
- /*
- public void testMP3CBRpreparePauseRelease() throws Exception {
- CodecTest.preparePauseRelease(MediaNames.MP3CBR);
- assertTrue("MP3CBR preparePauseRelease", true);
- }
-
- public void testMIDIpreparePauseRelease() throws Exception {
- CodecTest.preparePauseRelease(MediaNames.MIDI);
- assertTrue("MIDI preparePauseRelease", true);
- }
- */
-
-
- //Test cases for setLooping
- @LargeTest
- public void testMP3CBRSetLooping() throws Exception {
- boolean isLoop = CodecTest.setLooping(MediaNames.MP3CBR);
- assertTrue("MP3CBR setLooping", isLoop);
- }
-
- @LargeTest
- public void testMP3VBRSetLooping() throws Exception {
- boolean isLoop = CodecTest.setLooping(MediaNames.MP3VBR);
- Log.v(TAG, "setLooping");
- assertTrue("MP3VBR setLooping", isLoop);
- }
-
- @LargeTest
- public void testMIDISetLooping() throws Exception {
- boolean isLoop = CodecTest.setLooping(MediaNames.MIDI);
- assertTrue("MIDI setLooping", isLoop);
- }
-
- @LargeTest
- public void testWMA9SetLooping() throws Exception {
- boolean isLoop = CodecTest.setLooping(MediaNames.WMA9);
- assertTrue("WMA9 setLooping", isLoop);
- }
-
- @LargeTest
- public void testAMRSetLooping() throws Exception {
- boolean isLoop = CodecTest.setLooping(MediaNames.AMR);
- assertTrue("AMR setLooping", isLoop);
- }
-
- /*
- public void testOGGSetLooping() throws Exception {
- boolean isLoop = CodecTest.setLooping(MediaNames.OGG);
- assertTrue("OGG setLooping", isLoop);
- } */
-
- //Test cases for seekTo
- @LargeTest
- public void testMP3CBRSeekTo() throws Exception {
- boolean isLoop = CodecTest.seekTo(MediaNames.MP3CBR);
- assertTrue("MP3CBR seekTo", isLoop);
- }
-
- @LargeTest
- public void testMP3VBRSeekTo() throws Exception {
- boolean isLoop = CodecTest.seekTo(MediaNames.MP3VBR);
- Log.v(TAG, "seekTo");
- assertTrue("MP3VBR seekTo", isLoop);
- }
-
- @LargeTest
- public void testMIDISeekTo() throws Exception {
- boolean isLoop = CodecTest.seekTo(MediaNames.MIDI);
- assertTrue("MIDI seekTo", isLoop);
- }
-
- @LargeTest
- public void testWMA9SeekTo() throws Exception {
- boolean isLoop = CodecTest.seekTo(MediaNames.WMA9);
- assertTrue("WMA9 seekTo", isLoop);
- }
-
- @LargeTest
- public void testAMRSeekTo() throws Exception {
- boolean isLoop = CodecTest.seekTo(MediaNames.AMR);
- assertTrue("AMR seekTo", isLoop);
- }
-
- /*
- public void testOGGSeekTo() throws Exception {
- boolean isLoop = CodecTest.seekTo(MediaNames.OGG);
- assertTrue("OGG seekTo", isLoop);
- }*/
-
-
- //Jump to the end of the files
- @LargeTest
- public void testMP3CBRSeekToEnd() throws Exception {
- boolean isEnd = CodecTest.seekToEnd(MediaNames.MP3CBR);
- assertTrue("MP3CBR seekToEnd", isEnd);
- }
-
- @LargeTest
- public void testMP3VBRSeekToEnd() throws Exception {
- boolean isEnd = CodecTest.seekToEnd(MediaNames.MP3VBR);
- Log.v(TAG, "seekTo");
- assertTrue("MP3VBR seekToEnd", isEnd);
- }
-
- @LargeTest
- public void testMIDISeekToEnd() throws Exception {
- boolean isEnd = CodecTest.seekToEnd(MediaNames.MIDI);
- assertTrue("MIDI seekToEnd", isEnd);
- }
-
- @LargeTest
- public void testWMA9SeekToEnd() throws Exception {
- boolean isEnd = CodecTest.seekToEnd(MediaNames.WMA9);
- assertTrue("WMA9 seekToEnd", isEnd);
- }
-
- @LargeTest
- public void testAMRSeekToEnd() throws Exception {
- boolean isEnd = CodecTest.seekToEnd(MediaNames.AMR);
- assertTrue("AMR seekToEnd", isEnd);
- }
-
- /*
- public void testOGGSeekToEnd() throws Exception {
- boolean isEnd = CodecTest.seekToEnd(MediaNames.OGG);
- assertTrue("OGG seekToEnd", isEnd);
- }*/
-
- @LargeTest
- public void testWAVSeekToEnd() throws Exception {
- boolean isEnd = CodecTest.seekToEnd(MediaNames.WAV);
- assertTrue("WAV seekToEnd", isEnd);
- }
-
- @MediumTest
- public void testLargeVideoHeigth() throws Exception {
- int height = 0;
- height = CodecTest.videoHeight(MediaNames.VIDEO_LARGE_SIZE_3GP);
- Log.v(TAG, "Video height = " + height);
- assertEquals("streaming video height", 240, height);
- }
-
- @MediumTest
- public void testLargeVideoWidth() throws Exception {
- int width = 0;
- width = CodecTest.videoWidth(MediaNames.VIDEO_LARGE_SIZE_3GP);
- Log.v(TAG, "Video width = " + width);
- assertEquals("streaming video width", 320, width);
- }
-
- @LargeTest
- public void testVideoMP4SeekTo() throws Exception {
- boolean isSeek = CodecTest.videoSeekTo(MediaNames.VIDEO_MP4);
- assertTrue("Local MP4 SeekTo", isSeek);
- }
-
- @LargeTest
- public void testVideoLong3gpSeekTo() throws Exception {
- boolean isSeek = CodecTest.videoSeekTo(MediaNames.VIDEO_LONG_3GP);
- assertTrue("Local 3gp SeekTo", isSeek);
- }
-
- @LargeTest
- public void testVideoH263AACSeekTo() throws Exception {
- boolean isSeek = CodecTest.videoSeekTo(MediaNames.VIDEO_H263_AAC);
- assertTrue("H263AAC SeekTo", isSeek);
- }
-
- @LargeTest
- public void testVideoH263AMRSeekTo() throws Exception {
- boolean isSeek = CodecTest.videoSeekTo(MediaNames.VIDEO_H263_AMR);
- assertTrue("H263AMR SeekTo", isSeek);
- }
-
- @LargeTest
- public void testVideoH264AACSeekTo() throws Exception {
- boolean isSeek = CodecTest.videoSeekTo(MediaNames.VIDEO_H264_AAC);
- assertTrue("H264AAC SeekTo", isSeek);
- }
-
- @LargeTest
- public void testVideoH264AMRSeekTo() throws Exception {
- boolean isSeek = CodecTest.videoSeekTo(MediaNames.VIDEO_H264_AMR);
- assertTrue("H264AMR SeekTo", isSeek);
- }
-
- @LargeTest
- public void testVideoWMVSeekTo() throws Exception {
- boolean isSeek = CodecTest.videoSeekTo(MediaNames.VIDEO_WMV);
- assertTrue("WMV SeekTo", isSeek);
- }
-
- @LargeTest
- public void testSoundRecord() throws Exception {
- boolean isRecordered = CodecTest.mediaRecorderRecord(MediaNames.RECORDER_OUTPUT);
- assertTrue("Recorder", isRecordered);
- }
-
- @LargeTest
- public void testGetThumbnail() throws Exception {
- boolean getThumbnail = CodecTest.getThumbnail(MediaNames.VIDEO_H264_AAC, MediaNames.GOLDEN_THUMBNAIL_OUTPUT);
- assertTrue("Get Thumbnail", getThumbnail);
- }
-
- //Play a mid file which the duration is around 210 seconds
- @LargeTest
- public void testMidiResources() throws Exception {
- boolean midiResources = CodecTest.resourcesPlayback(MediaFrameworkTest.midiafd,180000);
- assertTrue("Play midi from resources", midiResources);
- }
-
- @LargeTest
- public void testMp3Resources() throws Exception {
- boolean mp3Resources = CodecTest.resourcesPlayback(MediaFrameworkTest.mp3afd,25000);
- assertTrue("Play mp3 from resources", mp3Resources);
- }
-
- //Bug# 1422662
- @Suppress
- @MediumTest
- public void testPrepareAsyncReset() throws Exception {
- boolean isReset = CodecTest.prepareAsyncReset(MediaNames.STREAM_LARGE_MP3);
- assertTrue("PrepareAsync Reset", isReset);
- }
-
- @MediumTest
- public void testIsLooping() throws Exception {
- boolean isLooping = CodecTest.isLooping(MediaNames.AMR);
- assertTrue("isLooping", isLooping);
- }
-
- @MediumTest
- public void testIsLoopingAfterReset() throws Exception {
- boolean isLooping = CodecTest.isLoopingAfterReset(MediaNames.AMR);
- assertTrue("isLooping after reset", isLooping);
- }
-}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java
deleted file mode 100644
index 65451c5..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.functional;
-
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import com.android.mediaframeworktest.MediaNames;
-
-import java.io.*;
-
-import android.content.Context;
-import android.media.MediaPlayer;
-import android.media.MediaRecorder;
-import android.test.ActivityInstrumentationTestCase;
-import android.util.Log;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-
-/**
- * Junit / Instrumentation test case for the media recorder api
- */
-public class MediaRecorderTest extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
- private String TAG = "MediaRecorderTest";
- private int mOutputDuration =0;
- private int mOutputVideoWidth = 0;
- private int mOutputVideoHeight= 0 ;
-
- private SurfaceHolder mSurfaceHolder = null;
- private MediaRecorder mRecorder;
- Context mContext;
-
- public MediaRecorderTest() {
- super("com.android.mediaframeworktest", MediaFrameworkTest.class);
-
- }
-
- protected void setUp() throws Exception {
- super.setUp();
- Log.v(TAG,"create the media recorder");
- mRecorder = new MediaRecorder();
- }
-
- private void recordVideo(int frameRate, int width, int height,
- int videoFormat, int outFormat, String outFile, boolean videoOnly) {
- Log.v(TAG,"startPreviewAndPrepareRecording");
- try {
- if (!videoOnly) {
- Log.v(TAG, "setAudioSource");
- mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- }
- mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
- mRecorder.setOutputFormat(outFormat);
- Log.v(TAG, "output format " + outFormat);
- mRecorder.setOutputFile(outFile);
- mRecorder.setVideoFrameRate(frameRate);
- mRecorder.setVideoSize(width, height);
- Log.v(TAG, "setEncoder");
- mRecorder.setVideoEncoder(videoFormat);
- if (!videoOnly) {
- mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
- }
- mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- Log.v(TAG, "setPreview");
- mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
- Log.v(TAG, "prepare");
- mRecorder.prepare();
- Log.v(TAG, "start");
- mRecorder.start();
- Thread.sleep(MediaNames.RECORDED_TIME);
- Log.v(TAG, "stop");
- mRecorder.stop();
- mRecorder.release();
- } catch (Exception e) {
- Log.v("record video failed ", e.toString());
- mRecorder.release();
- }
- }
-
-
- private boolean invalidRecordSetting(int frameRate, int width, int height,
- int videoFormat, int outFormat, String outFile, boolean videoOnly) {
- try {
- if (!videoOnly) {
- Log.v(TAG, "setAudioSource");
- mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- }
- mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
- mRecorder.setOutputFormat(outFormat);
- Log.v(TAG, "output format " + outFormat);
- mRecorder.setOutputFile(outFile);
- mRecorder.setVideoFrameRate(frameRate);
- mRecorder.setVideoSize(width, height);
- Log.v(TAG, "setEncoder");
- mRecorder.setVideoEncoder(videoFormat);
- if (!videoOnly) {
- mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
- }
- mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- Log.v(TAG, "setPreview");
- mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
- Log.v(TAG, "prepare");
- mRecorder.prepare();
- Log.v(TAG, "start");
- mRecorder.start();
- Thread.sleep(MediaNames.RECORDED_TIME);
- Log.v(TAG, "stop");
- mRecorder.stop();
- mRecorder.release();
- } catch (Exception e) {
- Log.v("record video failed ", e.toString());
- mRecorder.release();
- Log.v(TAG, "reset and release");
- return true;
- }
- return false;
- }
-
-
-
- private void getOutputVideoProperty(String outputFilePath) {
- MediaPlayer mediaPlayer = new MediaPlayer();
- try {
- mediaPlayer.setDataSource(outputFilePath);
- Log.v(TAG, "file Path = " + outputFilePath);
- mediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
- Log.v(TAG, "before player prepare");
- mediaPlayer.prepare();
- Log.v(TAG, "before getduration");
- mOutputDuration = mediaPlayer.getDuration();
- Log.v(TAG, "get video dimension");
- mOutputVideoHeight = mediaPlayer.getVideoHeight();
- mOutputVideoWidth = mediaPlayer.getVideoWidth();
- mediaPlayer.release();
- } catch (Exception e) {
- Log.v(TAG, e.toString());
- mediaPlayer.release();
- }
- }
-
- private void removeFile(String filePath) {
- File fileRemove = new File(filePath);
- fileRemove.delete();
- }
-
- private boolean validateVideo(String filePath, int width, int height) {
- boolean validVideo = false;
- getOutputVideoProperty(filePath);
- if (mOutputVideoWidth == width && mOutputVideoHeight == height &&
- mOutputDuration > MediaNames.VALID_VIDEO_DURATION ) {
- validVideo = true;
- }
- Log.v(TAG, "width = " + mOutputVideoWidth + " height = " + mOutputVideoHeight + " Duration = " + mOutputDuration);
- removeFile(filePath);
- return validVideo;
- }
-
-
- //Format: HVGA h263
- @Suppress
- public void testHVGAH263() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 480, 320, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_HVGA_H263, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_HVGA_H263, 480, 320);
- assertTrue("HVGAH263", videoRecordedResult);
- }
-
- //Format: QVGA h263
- @LargeTest
- public void testQVGAH263() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 320, 240, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_QVGA_H263, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_QVGA_H263, 320, 240);
- assertTrue("QVGAH263", videoRecordedResult);
- }
-
- //Format: SQVGA h263
- @LargeTest
- public void testSQVGAH263() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 240, 160, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_SQVGA_H263, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_SQVGA_H263, 240, 160);
- assertTrue("SQVGAH263", videoRecordedResult);
- }
-
- //Format: QCIF h263
- @LargeTest
- public void testQCIFH263() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_QCIF_H263, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_QCIF_H263, 176, 144);
- assertTrue("QCIFH263", videoRecordedResult);
- }
-
- //Format: CIF h263
- @LargeTest
- public void testCIFH263() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_CIF_H263, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_CIF_H263, 352, 288);
- assertTrue("CIFH263", videoRecordedResult);
- }
-
-
-
- @LargeTest
- public void testVideoOnly() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 176, 144);
- assertTrue("QCIFH263 Video Only", videoRecordedResult);
- }
-
- @Suppress
- public void testPortraitH263() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 144, 176, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 144, 176);
- assertTrue("PortraitH263", videoRecordedResult);
- }
-
- @Suppress
- public void testHVGAMP4() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 480, 320, MediaRecorder.VideoEncoder.MPEG_4_SP,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_HVGA_MP4, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_HVGA_MP4, 480, 320);
- assertTrue("HVGAMP4", videoRecordedResult);
- }
-
- @LargeTest
- public void testQVGAMP4() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 320, 240, MediaRecorder.VideoEncoder.MPEG_4_SP,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_QVGA_MP4, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_QVGA_MP4, 320, 240);
- assertTrue("QVGAMP4", videoRecordedResult);
- }
-
- @LargeTest
- public void testSQVGAMP4() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 240, 160, MediaRecorder.VideoEncoder.MPEG_4_SP,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_SQVGA_MP4, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_SQVGA_MP4, 240, 160);
- assertTrue("SQVGAMP4", videoRecordedResult);
- }
-
- //Format: QCIF MP4
- @LargeTest
- public void testQCIFMP4() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.MPEG_4_SP,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_QCIF_MP4, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_QCIF_MP4, 176, 144);
- assertTrue("QCIFMP4", videoRecordedResult);
- }
-
-
- //Format: CIF MP4
- @LargeTest
- public void testCIFMP4() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_CIF_MP4, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_CIF_MP4, 352, 288);
- assertTrue("CIFMP4", videoRecordedResult);
- }
-
-
- //Format: CIF MP4 output format 3gpp
- @LargeTest
- public void testCIFMP43GPP() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
- MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 352, 288);
- assertTrue("CIFMP4 3GPP", videoRecordedResult);
- }
-
- @LargeTest
- public void testQCIFH2633GPP() throws Exception {
- boolean videoRecordedResult = false;
- recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
- videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 176, 144);
- assertTrue("QCIFH263 3GPP", videoRecordedResult);
- }
-
- @LargeTest
- public void testInvalidVideoPath() throws Exception {
- boolean isTestInvalidVideoPathSuccessful = false;
- isTestInvalidVideoPathSuccessful = invalidRecordSetting(15, 176, 144, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.THREE_GPP, MediaNames.INVALD_VIDEO_PATH, false);
- assertTrue("Invalid outputFile Path", isTestInvalidVideoPathSuccessful);
- }
-
- @Suppress
- public void testInvalidVideoSize() throws Exception {
- boolean isTestInvalidVideoSizeSuccessful = false;
- isTestInvalidVideoSizeSuccessful = invalidRecordSetting(15, 800, 600, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
- assertTrue("Invalid video Size", isTestInvalidVideoSizeSuccessful);
- }
-
- @LargeTest
- public void testInvalidFrameRate() throws Exception {
- boolean isTestInvalidFrameRateSuccessful = false;
- isTestInvalidFrameRateSuccessful = invalidRecordSetting(50, 176, 144, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
- assertTrue("Invalid FrameRate", isTestInvalidFrameRateSuccessful);
- }
-
-}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/SimTonesTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/SimTonesTest.java
deleted file mode 100644
index 241f8d6..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/SimTonesTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.functional;
-
-// import android.content.Resources;
-import com.android.mediaframeworktest.MediaFrameworkTest;
-
-import android.content.Context;
-import android.test.ActivityInstrumentationTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Junit / Instrumentation test case for the SIM tone generator
- *
- */
-public class SimTonesTest extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
- private String TAG = "SimTonesTest";
-
- Context mContext;
-
- public SimTonesTest() {
- super("com.android.mediaframeworktest", MediaFrameworkTest.class);
- }
-
- protected void setUp() throws Exception {
- super.setUp();
- }
-
- @LargeTest
- public void testDtmfTones() throws Exception {
- boolean result = TonesAutoTest.tonesDtmfTest();
- assertTrue("DTMF Tones", result);
- }
-
- @LargeTest
- public void testSupervisoryTones() throws Exception {
- boolean result = TonesAutoTest.tonesSupervisoryTest();
- assertTrue("Supervisory Tones", result);
- }
-
- @LargeTest
- public void testProprietaryTones() throws Exception {
- boolean result = TonesAutoTest.tonesProprietaryTest();
- assertTrue("Proprietary Tones", result);
- }
-
- @LargeTest
- public void testSimultaneousTones() throws Exception {
- boolean result = TonesAutoTest.tonesSimultaneousTest();
- assertTrue("Simultaneous Tones", result);
- }
-
- @LargeTest
- public void testStressTones() throws Exception {
- boolean result = TonesAutoTest.tonesStressTest();
- assertTrue("Stress Tones", result);
- }
-}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/TonesAutoTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/TonesAutoTest.java
deleted file mode 100644
index da18e74..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/TonesAutoTest.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.functional;
-
-
-//import android.content.Resources;
-import android.util.Log;
-
-import android.media.ToneGenerator;
-import android.media.AudioManager;
-
-/**
- * Junit / Instrumentation test case for the Sim tones tests
-
- */
- public class TonesAutoTest {
- private static String TAG = "TonesAutoTest";
-
- // Test all DTMF tones one by one
- public static boolean tonesDtmfTest() throws Exception {
- Log.v(TAG, "DTMF tones test");
- ToneGenerator toneGen;
- int type;
- boolean result = true;
-
- toneGen = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
-
- for (type = ToneGenerator.TONE_DTMF_0; type <= ToneGenerator.TONE_DTMF_D; type++) {
- if (toneGen.startTone(type)) {
- Thread.sleep(200);
- toneGen.stopTone();
- Thread.sleep(100);
- } else {
- result = false;
- break;
- }
- }
-
- toneGen.release();
- return result;
- }
-
- // Test all supervisory tones one by one
- public static boolean tonesSupervisoryTest() throws Exception {
- Log.v(TAG, "Supervisory tones test");
- ToneGenerator toneGen;
- int type;
- boolean result = true;
-
- toneGen = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
-
- for (type = ToneGenerator.TONE_SUP_DIAL;
- type <= ToneGenerator.TONE_SUP_RINGTONE; type++) {
- if (toneGen.startTone(type)) {
- Thread.sleep(2000);
- toneGen.stopTone();
- Thread.sleep(200);
- } else {
- result = false;
- break;
- }
- }
-
- toneGen.release();
- return result;
- }
-
- // Test all proprietary tones one by one
- public static boolean tonesProprietaryTest() throws Exception {
- Log.v(TAG, "Proprietary tones test");
- ToneGenerator toneGen;
- int type;
- boolean result = true;
-
- toneGen = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
-
- for (type = ToneGenerator.TONE_PROP_BEEP; type <= ToneGenerator.TONE_PROP_BEEP2; type++) {
- if (toneGen.startTone(type)) {
- Thread.sleep(1000);
- toneGen.stopTone();
- Thread.sleep(100);
- } else {
- result = false;
- break;
- }
- }
-
- toneGen.release();
- return result;
- }
-
- // Test playback of 2 tones simultaneously
- public static boolean tonesSimultaneousTest() throws Exception {
- Log.v(TAG, "Simultaneous tones test");
- ToneGenerator toneGen1;
- ToneGenerator toneGen2;
- int type;
- boolean result = true;
-
- toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
- toneGen2 = new ToneGenerator(AudioManager.STREAM_MUSIC, 50);
-
- if (toneGen1.startTone(ToneGenerator.TONE_DTMF_1)) {
- Thread.sleep(100);
- if (toneGen2.startTone(ToneGenerator.TONE_DTMF_2)) {
- Thread.sleep(500);
- toneGen1.stopTone();
- Thread.sleep(100);
- toneGen2.stopTone();
- } else {
- toneGen1.stopTone();
- result = false;
- }
- } else {
- result = false;
- }
-
- toneGen1.release();
- toneGen2.release();
- return result;
- }
-
- // Test start of new tone without stopping previous one
- public static boolean tonesStressTest() throws Exception {
- Log.v(TAG, "Stress tones test");
- ToneGenerator toneGen;
- int type;
- boolean result = true;
-
- toneGen = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
-
- for (type = ToneGenerator.TONE_DTMF_1; type <= ToneGenerator.TONE_DTMF_9; type++) {
- if (toneGen.startTone(type)) {
- Thread.sleep(200);
- } else {
- result = false;
- break;
- }
- }
-
- toneGen.release();
- return result;
- }
-
- // Perform all tones tests
- public static boolean tonesAllTest() throws Exception {
- Log.v(TAG, "All tones tests");
-
- if (!tonesDtmfTest()) {
- return false;
- }
- if (!tonesSupervisoryTest()) {
- return false;
- }
- if (!tonesProprietaryTest()) {
- return false;
- }
- if (!tonesSimultaneousTest()) {
- return false;
- }
- if (!tonesStressTest()) {
- return false;
- }
- return true;
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
deleted file mode 100644
index b606f25..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.performance;
-
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import com.android.mediaframeworktest.MediaNames;
-
-import android.content.Context;
-import android.database.sqlite.SQLiteDatabase;
-import android.media.MediaPlayer;
-import android.os.SystemClock;
-import android.test.ActivityInstrumentationTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.Suppress;
-import android.util.Log;
-
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import android.media.MediaMetadataRetriever;
-
-/**
- * Junit / Instrumentation test case for the media player api
-
- */
-public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
-
-
- private boolean mIsPlaying = true;
- private String TAG = "MediaPlayerApiTest";
- Context mContext;
- private SQLiteDatabase mDB;
-
-
- public MediaPlayerPerformance() {
- super("com.android.mediaframeworktest", MediaFrameworkTest.class);
- }
-
- protected void setUp() throws Exception {
-
- super.setUp();
- }
-
- public void createDB(){
- mDB = SQLiteDatabase.openOrCreateDatabase("/sdcard/perf.db",null);
- mDB.execSQL("CREATE TABLE perfdata (_id INTEGER PRIMARY KEY,"
- + "file TEXT," + "setdatatime LONG," +"preparetime LONG," +"playtime LONG" + ");");
- }
-
- public void audioPlaybackStartupTime(String[] testFile){
- long t1 = 0;
- long t2 = 0;
- long t3 = 0;
- long t4 =0;
-
- long setDataSourceDuration = 0;
- long prepareDuration = 0;
- long startDuration=0;
-
- long totalSetDataTime=0;
- long totalPrepareTime=0;
- long totalStartDuration=0;
-
- int numberOfFiles = testFile.length;
- Log.v(TAG, "File lenght " + numberOfFiles);
- for (int k=0; k<numberOfFiles; k++){
- MediaPlayer mp = new MediaPlayer();
- try{
- t1 = SystemClock.uptimeMillis();
- FileInputStream fis = new FileInputStream(testFile[k]);
- FileDescriptor fd = fis.getFD();
- mp.setDataSource(fd);
- fis.close();
- t2 = SystemClock.uptimeMillis();
- mp.prepare();
- t3 = SystemClock.uptimeMillis();
- mp.start();
- t4 = SystemClock.uptimeMillis();
- Thread.sleep(10000);
- mp.pause();
- }catch (Exception e){}
- setDataSourceDuration = t2 -t1;
- prepareDuration = t3 - t2;
- startDuration = t4 - t3;
- totalSetDataTime = totalSetDataTime + setDataSourceDuration;
- totalPrepareTime = totalPrepareTime + prepareDuration;
- totalStartDuration = totalStartDuration + startDuration;
- mDB.execSQL("INSERT INTO perfdata (file, setdatatime, preparetime, playtime) VALUES (" + '"' + testFile[k] + '"' +','
- +setDataSourceDuration+ ',' + prepareDuration + ',' + startDuration +");");
- Log.v(TAG,"File name " + testFile[k]);
- mp.stop();
- mp.release();
- }
- Log.v (TAG, "setDataSource average " + totalSetDataTime/numberOfFiles);
- Log.v (TAG, "prepare average " + totalPrepareTime/numberOfFiles);
- Log.v (TAG, "start average " + totalStartDuration/numberOfFiles);
-
- }
-
- //Test cases for GetCurrentPosition
- @LargeTest
- public void testStartUpTime() throws Exception {
- createDB();
- audioPlaybackStartupTime(MediaNames.MP3FILES);
- audioPlaybackStartupTime(MediaNames.AACFILES);
-
- }
-
- public void wmametadatautility(String[] testFile){
- long t1 = 0;
- long t2 = 0;
- long sum = 0;
- long duration = 0;
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- String value;
- for(int i = 0, n = testFile.length; i < n; ++i) {
- try {
- t1 = SystemClock.uptimeMillis();
- retriever.setDataSource(testFile[i]);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
- t2 = SystemClock.uptimeMillis();
- duration = t2 - t1;
- Log.v(TAG, "Time taken = " + duration);
- sum=sum+duration;
- }
- catch (Exception e){Log.v(TAG, e.getMessage());}
-
- }
- Log.v(TAG, "Average duration = " + sum/testFile.length);
- }
-
- @Suppress
- public void testWmaParseTime() throws Exception {
- // createDB();
- wmametadatautility(MediaNames.WMASUPPORTED);
- }
-
-
-}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java
deleted file mode 100644
index dbf937c..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.stress;
-
-import com.android.mediaframeworktest.MediaFrameworkTest;
-
-import android.hardware.Camera;
-import android.media.MediaPlayer;
-import android.media.MediaRecorder;
-import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.util.Log;
-import android.view.SurfaceHolder;
-
-/**
- * Junit / Instrumentation test case for the media player api
-
- */
-public class MediaRecorderStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
-
-
- private String TAG = "MediaRecorderStressTest";
- private MediaRecorder mRecorder;
- private Camera mCamera;
-
- private static final int NUMBER_OF_CAMERA_STRESS_LOOPS = 100;
- private static final int NUMBER_OF_RECORDER_STRESS_LOOPS = 100;
- private static final int NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS = 50;
- private static final int NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER = 200;
- private static final long WAIT_TIME_CAMERA_TEST = 3000; // 3 second
- private static final long WAIT_TIME_RECORDER_TEST = 60000; // 6 second
- private static final long WAIT_TIME_RECORD = 100000; // 10 seconds
- private static final long WAIT_TIME_PLAYBACK = 60000; // 6 second
- private static final String OUTPUT_FILE = "/sdcard/temp";
- private static final String OUTPUT_FILE_EXT = ".3gp";
-
- public MediaRecorderStressTest() {
- super("com.android.mediaframeworktest", MediaFrameworkTest.class);
- }
-
- protected void setUp() throws Exception {
- getActivity();
- super.setUp();
- }
-
- //Test case for stressing the camera preview.
- @LargeTest
- public void testStressCamera() throws Exception {
- SurfaceHolder mSurfaceHolder;
- mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- try {
- Log.v(TAG, "Start preview");
- for (int i = 0; i< NUMBER_OF_CAMERA_STRESS_LOOPS; i++){
- mCamera = Camera.open();
- mCamera.setPreviewDisplay(mSurfaceHolder);
- mCamera.startPreview();
- Thread.sleep(WAIT_TIME_CAMERA_TEST);
- mCamera.stopPreview();
- mCamera.release();
- }
- } catch (Exception e) {
- Log.v(TAG, e.toString());
- }
- }
-
- //Test case for stressing the camera preview.
- @LargeTest
- public void testStressRecorder() throws Exception {
- String filename;
- SurfaceHolder mSurfaceHolder;
- mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- try {
- Log.v(TAG, "Start preview");
- for (int i = 0; i < NUMBER_OF_RECORDER_STRESS_LOOPS; i++){
- Log.v(TAG, "counter = " + i);
- filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
- Log.v(TAG, filename);
- mRecorder = new MediaRecorder();
- mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
- mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mRecorder.setOutputFile(filename);
- mRecorder.setVideoFrameRate(20);
- mRecorder.setVideoSize(176,144);
- Log.v(TAG, "setEncoder");
- mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
- mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- Log.v(TAG, "setPreview");
- mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
- Log.v(TAG, "prepare");
- mRecorder.prepare();
- Log.v(TAG, "before release");
- Thread.sleep(WAIT_TIME_RECORDER_TEST);
- mRecorder.reset();
- mRecorder.release();
- }
- } catch (Exception e) {
- Log.v(TAG, e.toString());
- }
- }
-
-
- //Stress test case for switching camera and video recorder preview.
- @LargeTest
- public void testStressCameraSwitchRecorder() throws Exception {
- String filename;
- SurfaceHolder mSurfaceHolder;
- mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- try {
- Log.v(TAG, "Start preview");
- for (int i = 0; i < NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER; i++){
- mCamera = Camera.open();
- mCamera.setPreviewDisplay(mSurfaceHolder);
- mCamera.startPreview();
- Thread.sleep(WAIT_TIME_CAMERA_TEST);
- mCamera.stopPreview();
- mCamera.release();
- mCamera = null;
- Log.v(TAG, "release camera");
- filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
- Log.v(TAG, filename);
- mRecorder = new MediaRecorder();
- mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
- mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mRecorder.setOutputFile(filename);
- mRecorder.setVideoFrameRate(20);
- mRecorder.setVideoSize(176,144);
- Log.v(TAG, "Media recorder setEncoder");
- mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
- Log.v(TAG, "mediaRecorder setPreview");
- mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
- Log.v(TAG, "prepare");
- mRecorder.prepare();
- Log.v(TAG, "before release");
- Thread.sleep(WAIT_TIME_CAMERA_TEST);
- mRecorder.release();
- Log.v(TAG, "release video recorder");
- }
- } catch (Exception e) {
- Log.v(TAG, e.toString());
- }
- }
-
- //Stress test case for record a video and play right away.
- @LargeTest
- public void testStressRecordVideoAndPlayback() throws Exception {
- String filename;
- SurfaceHolder mSurfaceHolder;
- mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- try {
- for (int i = 0; i < NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS; i++){
- filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
- Log.v(TAG, filename);
- mRecorder = new MediaRecorder();
- mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
- mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mRecorder.setOutputFile(filename);
- mRecorder.setVideoFrameRate(20);
- mRecorder.setVideoSize(352,288);
- mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
- mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
- Log.v(TAG, "mediaRecorder setPreview");
- mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
- mRecorder.prepare();
- mRecorder.start();
- Thread.sleep(WAIT_TIME_RECORD);
- Log.v(TAG, "Before stop");
- mRecorder.stop();
- mRecorder.release();
- //start the playback
- MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(filename);
- mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
- mp.prepare();
- mp.start();
- Thread.sleep(WAIT_TIME_PLAYBACK);
- mp.release();
- }
- } catch (Exception e) {
- Log.v(TAG, e.toString());
- }
- }
-}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaMetadataRetrieverTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaMetadataRetrieverTest.java
deleted file mode 100644
index 61a8a29..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaMetadataRetrieverTest.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.util.Log;
-import android.media.MediaMetadataRetriever;
-import android.graphics.Bitmap;
-import java.io.FileOutputStream;
-import android.test.AndroidTestCase;
-import com.android.mediaframeworktest.MediaNames;
-import android.test.suitebuilder.annotation.*;
-
-/**
- * WARNING:
- * Currently, captureFrame() does not work, due to hardware access permission problem.
- * We are currently only testing the metadata/album art retrieval features.
- */
-public class MediaMetadataRetrieverTest extends AndroidTestCase {
-
- private static final String TAG = "MediaMetadataRetrieverTest";
-
- // Test album art extraction.
- @MediumTest
- public static void testAlbumArt() throws Exception {
- Log.v(TAG, "testAlbumArt starts.");
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
- for (int i = 0, n = MediaNames.ALBUMART_TEST_FILES.length; i < n; ++i) {
- try {
- Log.v(TAG, "File " + i + ": " + MediaNames.ALBUMART_TEST_FILES[i]);
- retriever.setDataSource(MediaNames.ALBUMART_TEST_FILES[i]);
- byte[] albumArt = retriever.extractAlbumArt();
-
- // TODO:
- // A better test would be to compare the retrieved album art with the
- // known result.
- if (albumArt == null) { // Do we have expect in JUnit?
- fail("Fails to extract album art for " + MediaNames.ALBUMART_TEST_FILES[i]);
- }
- } catch(Exception e) {
- throw new Exception("Fails to setDataSource for " + MediaNames.ALBUMART_TEST_FILES[i], e);
- }
- Thread.yield(); // Don't be evil
- }
- retriever.release();
- Log.v(TAG, "testAlbumArt completes.");
- }
-
- // Test frame capture
- // Suppressing until 1259652 is fixed.
- @Suppress
- public static void disableTestThumbnailCapture() throws Exception {
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- Log.v(TAG, "Thumbnail processing starts");
- long startedAt = System.currentTimeMillis();
- for(int i = 0, n = MediaNames.THUMBNAIL_CAPTURE_TEST_FILES.length; i < n; ++i) {
- try {
- Log.v(TAG, "File " + i + ": " + MediaNames.THUMBNAIL_CAPTURE_TEST_FILES[i]);
- retriever.setDataSource(MediaNames.THUMBNAIL_CAPTURE_TEST_FILES[i]);
- Bitmap bitmap = retriever.captureFrame();
- assertTrue(bitmap != null);
- try {
- java.io.OutputStream stream = new FileOutputStream(MediaNames.THUMBNAIL_CAPTURE_TEST_FILES[i] + ".jpg");
- bitmap.compress(Bitmap.CompressFormat.JPEG, 75, stream);
- stream.close();
- } catch (Exception e) {
- throw new Exception("Fails to convert the bitmap to a JPEG file for " + MediaNames.THUMBNAIL_CAPTURE_TEST_FILES[i], e);
- }
- } catch(Exception e) {
- throw new Exception("Fails to setDataSource for file " + MediaNames.THUMBNAIL_CAPTURE_TEST_FILES[i], e);
- }
- Thread.yield(); // Don't be evil
- }
- long endedAt = System.currentTimeMillis();
- Log.v(TAG, "Average processing time per thumbnail: " + (endedAt - startedAt)/MediaNames.THUMBNAIL_CAPTURE_TEST_FILES.length + " ms");
- retriever.release();
- }
-
- @LargeTest
- public static void testMetadataRetrieval() throws Exception {
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
- for(int i = 0, n = MediaNames.METADATA_RETRIEVAL_TEST_FILES.length; i < n; ++i) {
- try {
- retriever.setDataSource(MediaNames.METADATA_RETRIEVAL_TEST_FILES[i]);
- extractAllSupportedMetadataValues(retriever);
- } catch(Exception e) {
- throw new Exception("Fails to setDataSource for file " + MediaNames.METADATA_RETRIEVAL_TEST_FILES[i], e);
- }
- Thread.yield(); // Don't be evil
- }
- retriever.release();
- }
-
- // If the specified call order and valid media file is used, no exception
- // should be thrown.
- @MediumTest
- public static void testBasicNormalMethodCallSequence() throws Exception {
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
- try {
- retriever.setDataSource(MediaNames.TEST_PATH_1);
- /*
- * captureFrame() fails due to lack of permission to access hardware decoder devices
- Bitmap bitmap = retriever.captureFrame();
- assertTrue(bitmap != null);
- try {
- java.io.OutputStream stream = new FileOutputStream("/sdcard/thumbnailout.jpg");
- bitmap.compress(Bitmap.CompressFormat.JPEG, 75, stream);
- stream.close();
- } catch (Exception e) {
- throw new Exception("Fails to convert the bitmap to a JPEG file for " + MediaNames.TEST_PATH_1, e);
- }
- */
- extractAllSupportedMetadataValues(retriever);
- } catch(Exception e) {
- throw new Exception("Fails to setDataSource for " + MediaNames.TEST_PATH_1, e);
- }
- retriever.release();
- }
-
- // If setDataSource() has not been called, both captureFrame() and extractMetadata() must
- // return null.
- @MediumTest
- public static void testBasicAbnormalMethodCallSequence() {
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
- assertTrue(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM) == null);
- assertTrue(retriever.captureFrame() == null);
- }
-
- // Test setDataSource()
- @MediumTest
- public static void testSetDataSource() {
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
-
- // Null pointer argument
- try {
- String path = null;
- retriever.setDataSource(path);
- fail("IllegalArgumentException must be thrown.");
- } catch(Exception e) {
- assertTrue(e instanceof IllegalArgumentException);
- }
-
- // Use mem:// path
- try {
- retriever.setDataSource(MediaNames.TEST_PATH_5);
- fail("IllegalArgumentException must be thrown.");
- } catch(Exception e) {
- assertTrue(e instanceof IllegalArgumentException);
- }
-
- // The pathname does not correspond to any existing file
- try {
- retriever.setDataSource(MediaNames.TEST_PATH_4);
- fail("Runtime exception must be thrown.");
- } catch(Exception e) {
- assertTrue(e instanceof RuntimeException);
- }
-
- // The pathname does correspond to a file, but this file
- // is not a valid media file
- try {
- retriever.setDataSource(MediaNames.TEST_PATH_3);
- fail("Runtime exception must be thrown.");
- } catch(Exception e) {
- assertTrue(e instanceof RuntimeException);
- }
-
- retriever.release();
- }
-
- // Due to the lack of permission to access hardware decoder, any calls
- // attempting to capture a frame will fail. These are commented out for now
- // until we find a solution to this access permission problem.
- @MediumTest
- public static void testIntendedUsage() {
- // By default, capture frame and retrieve metadata
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- // retriever.setDataSource(MediaNames.TEST_PATH_1);
- // assertTrue(retriever.captureFrame() != null);
- // assertTrue(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS) != null);
-
- // Do not capture frame or retrieve metadata
- retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY & MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
- retriever.setDataSource(MediaNames.TEST_PATH_1);
- assertTrue(retriever.captureFrame() == null);
- assertTrue(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS) == null);
-
- // Capture frame only
- // retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
- // retriever.setDataSource(MediaNames.TEST_PATH_1);
- // assertTrue(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS) == null);
-
- // Retriever metadata only
- retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
- retriever.setDataSource(MediaNames.TEST_PATH_1);
- assertTrue(retriever.captureFrame() == null);
-
- // Capture frame and retrieve metadata
- // retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY | MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
- // retriever.setDataSource(MediaNames.TEST_PATH_1);
- // assertTrue(retriever.captureFrame() != null);
- // assertTrue(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS) != null);
- retriever.release();
- }
-
- // TODO:
- // Encode and test for the correct mix of metadata elements on a per-file basis?
- // We should be able to compare the actual returned metadata with the expected metadata
- // with each given sample test file.
- private static void extractAllSupportedMetadataValues(MediaMetadataRetriever retriever) {
- String value = null;
- Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER)) == null? "not found": value);
- Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)) == null? "not found": value);
- Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS)) == null? "not found": value);
- Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM)) == null? "not found": value);
- Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)) == null? "not found": value);
- Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR)) == null? "not found": value);
- Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER)) == null? "not found": value);
- Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)) == null? "not found": value);
- Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE)) == null? "not found": value);
- Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)) == null? "not found": value);
- Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR)) == null? "not found": value);
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetCurrentPositionStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetCurrentPositionStateUnitTest.java
deleted file mode 100644
index 032b469..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetCurrentPositionStateUnitTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.getCurrentPosition() method can be called.
- */
-public class MediaPlayerGetCurrentPositionStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call getCurrentPosition() in the following states:
- * {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}.
- * 2. It is invalid to call getCurrentPosition() in the following states:
- * {Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInInitializedState);
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
- assertTrue(!stateErrors.errorInStoppedState);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
- assertTrue(!stateErrors.errorInIdleStateAfterReset);
-
- // Invalid states.
- assertTrue(stateErrors.errorInErrorState);
- assertTrue(!stateErrors.errorInIdleState); // onError() won't be called
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.getCurrentPosition();
- }
-
- @LargeTest
- public void testGetCurrentPosition() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "getCurrentPosition()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetDurationStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetDurationStateUnitTest.java
deleted file mode 100644
index 5f7abe5..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetDurationStateUnitTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.getDuration() method can be called.
- */
-public class MediaPlayerGetDurationStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call getDuration() in the following states:
- * {Prepared, Started, Paused, Stopped, PlaybackCompleted}.
- * 2. It is invalid to call getDuration() in the following states:
- * {Idle, Initialized, Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
- assertTrue(!stateErrors.errorInStoppedState);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
-
- // Invalid states.
- assertTrue(!stateErrors.errorInIdleState); // onError() won't be called
- assertTrue(stateErrors.errorInInitializedState);
- assertTrue(stateErrors.errorInErrorState);
- assertTrue(stateErrors.errorInIdleStateAfterReset);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.getDuration();
- }
-
- @LargeTest
- public void testGetDuration() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "getDuration()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetVideoHeightStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetVideoHeightStateUnitTest.java
deleted file mode 100644
index 6d3c083..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetVideoHeightStateUnitTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.getVideoHeight() method can be called.
- */
-public class MediaPlayerGetVideoHeightStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call getVideoHeight() in the following states:
- * {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}.
- * 2. It is invalid to call getVideoHeight() in the following states:
- * {Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
- assertTrue(!stateErrors.errorInIdleState);
- assertTrue(!stateErrors.errorInIdleStateAfterReset);
- assertTrue(!stateErrors.errorInInitializedState);
- assertTrue(!stateErrors.errorInStoppedState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.getVideoHeight();
- }
-
- @LargeTest
- public void testGetVideoHeight() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "getVideoHeight()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetVideoWidthStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetVideoWidthStateUnitTest.java
deleted file mode 100644
index 198439c..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerGetVideoWidthStateUnitTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.getVideoWidth() method can be called.
- */
-public class MediaPlayerGetVideoWidthStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call getVideoWidth() in the following states:
- * {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}.
- * 2. It is invalid to call getVideoWidth() in the following states:
- * {Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
- assertTrue(!stateErrors.errorInIdleState);
- assertTrue(!stateErrors.errorInIdleStateAfterReset);
- assertTrue(!stateErrors.errorInInitializedState);
- assertTrue(!stateErrors.errorInStoppedState);
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
-
- // Invalid states.
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.getVideoWidth();
- }
-
- @LargeTest
- public void testGetVideoWidth() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "getVideoWidth()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerIsPlayingStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerIsPlayingStateUnitTest.java
deleted file mode 100644
index b9c63fd..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerIsPlayingStateUnitTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.isPlaying() method can be called.
- */
-public class MediaPlayerIsPlayingStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call isPlaying() in the following states:
- * {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}.
- * 2. It is invalid to call isPlaying() in the following states:
- * {Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
- assertTrue(!stateErrors.errorInIdleState);
- assertTrue(!stateErrors.errorInIdleStateAfterReset);
- assertTrue(!stateErrors.errorInInitializedState);
- assertTrue(!stateErrors.errorInStoppedState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.isPlaying();
- }
-
- @LargeTest
- public void testIsPlaying() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "isPlaying()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerMethodUnderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerMethodUnderTest.java
deleted file mode 100644
index 91ed694..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerMethodUnderTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-
-/**
- * All MediaPlayer method unit test subclass must implement this interface.
- */
-interface MediaPlayerMethodUnderTest {
- public void checkStateErrors(MediaPlayerStateErrors stateErrors);
- public void invokeMethodUnderTest(MediaPlayer player);
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerPauseStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerPauseStateUnitTest.java
deleted file mode 100644
index 0a18a39..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerPauseStateUnitTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.pause() method can be called.
- */
-public class MediaPlayerPauseStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call pause() in the following states:
- * {Started, Paused}.
- * 2. It is invalid to call pause() in the following states:
- * {Idle, Initialized, Prepared, Stopped, PlaybackCompleted, Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInPreparedState);
- assertTrue(stateErrors.errorInPreparedStateAfterStop);
- assertTrue(stateErrors.errorInPlaybackCompletedState);
- assertTrue(!stateErrors.errorInIdleState); // noError() won't be called
- assertTrue(stateErrors.errorInIdleStateAfterReset);
- assertTrue(stateErrors.errorInInitializedState);
- assertTrue(stateErrors.errorInStoppedState);
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.pause();
- }
-
- @LargeTest
- public void testPause() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "pause()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerResetStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerResetStateUnitTest.java
deleted file mode 100644
index 2497cd7..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerResetStateUnitTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.reset() method can be called.
- */
-public class MediaPlayerResetStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call reset() in the following states:
- * {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}.
- * 2. It is invalid to call reset() in the following states:
- * {Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
- assertTrue(!stateErrors.errorInIdleState);
- assertTrue(!stateErrors.errorInIdleStateAfterReset);
- assertTrue(!stateErrors.errorInInitializedState);
- assertTrue(!stateErrors.errorInStoppedState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.reset();
- }
-
- @LargeTest
- public void testReset() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "reset()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSeekToStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSeekToStateUnitTest.java
deleted file mode 100644
index 46bba9b..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSeekToStateUnitTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.seekTo() method can be called.
- */
-public class MediaPlayerSeekToStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call seekTo() in the following states:
- * {Prepared, Started, Paused, PlaybackComplted}.
- * 2. It is invalid to call seekTo() in the following states:
- * {Idle, Initialized, Stopped, Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
-
- // Invalid states.
- assertTrue(!stateErrors.errorInIdleState); // onError() won't be called
- assertTrue(stateErrors.errorInIdleStateAfterReset);
- assertTrue(stateErrors.errorInInitializedState);
- assertTrue(stateErrors.errorInStoppedState);
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.seekTo(0);
- }
-
- @LargeTest
- public void testSeekTo() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "seekTo()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetAudioStreamTypeStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetAudioStreamTypeStateUnitTest.java
deleted file mode 100644
index 3153792..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetAudioStreamTypeStateUnitTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.media.AudioManager;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.setAudioStreamType() method can be called.
- */
-public class MediaPlayerSetAudioStreamTypeStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call setAudioStreamType() in the following states:
- * {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackComplted}.
- * 2. It is invalid to call setAudioStreamType() in the following states:
- * {Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInIdleState);
- assertTrue(!stateErrors.errorInIdleStateAfterReset);
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
- assertTrue(!stateErrors.errorInInitializedState);
- assertTrue(!stateErrors.errorInStoppedState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.setAudioStreamType(AudioManager.STREAM_MUSIC);
- }
-
- @LargeTest
- public void testSetAudioSystemType() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "setAudioStreamType()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetLoopingStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetLoopingStateUnitTest.java
deleted file mode 100644
index 17c9d8c..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetLoopingStateUnitTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.setLooping() method can be called.
- */
-public class MediaPlayerSetLoopingStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
- private boolean looping = false;
-
- /**
- * 1. It is valid to call setLooping() in the following states:
- * {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackComplted}.
- * 2. It is invalid to call setLooping() in the following states:
- * {Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
- assertTrue(!stateErrors.errorInIdleStateAfterReset);
- assertTrue(!stateErrors.errorInInitializedState);
- assertTrue(!stateErrors.errorInStoppedState);
- assertTrue(!stateErrors.errorInIdleState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- looping = !looping; // Flip the looping mode.
- player.setLooping(looping);
- }
-
- @LargeTest
- public void testSetLooping() {
- mTestTemplate.runTestOnMethod(this);
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetVolumeStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetVolumeStateUnitTest.java
deleted file mode 100644
index a149565..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerSetVolumeStateUnitTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.setVolume() method can be called.
- */
-public class MediaPlayerSetVolumeStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call setVolume() in the following states:
- * {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackComplted}.
- * 2. It is invalid to call setVolume() in the following states:
- * {Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
- assertTrue(!stateErrors.errorInIdleStateAfterReset);
- assertTrue(!stateErrors.errorInInitializedState);
- assertTrue(!stateErrors.errorInStoppedState);
- assertTrue(!stateErrors.errorInIdleState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.setVolume(0.5f, 0.5f);
- }
-
- @LargeTest
- public void testSetVolume() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "setVolume()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStartStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStartStateUnitTest.java
deleted file mode 100644
index 6debbb4..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStartStateUnitTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.start() method can be called.
- */
-public class MediaPlayerStartStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call start() in the following states:
- * {Prepared, Started, Paused, PlaybackComplted}.
- * 2. It is invalid to call start() in the following states:
- * {Idle, Initialized, Stopped, Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInPausedState);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
-
- // Invalid states.
- assertTrue(!stateErrors.errorInIdleState); // onError() won't be called
- assertTrue(stateErrors.errorInErrorState);
- assertTrue(stateErrors.errorInIdleStateAfterReset);
- assertTrue(stateErrors.errorInInitializedState);
- assertTrue(stateErrors.errorInStoppedState);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.start();
- }
-
- @LargeTest
- public void testStart() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "start()";
- }
-
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStateErrors.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStateErrors.java
deleted file mode 100644
index 5be6fe3..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStateErrors.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-class MediaPlayerStateErrors {
- public static final int MEDIA_PLAYER_ERROR = 100;
- public static enum MediaPlayerState {
- IDLE,
- IDLE_AFTER_RESET,
- INITIALIZED,
- PREPARED,
- PREPARED_AFTER_STOP,
- STARTED,
- STARTED_AFTER_PAUSE,
- PAUSED,
- STOPPED,
- PLAYBACK_COMPLETED,
- ERROR,
- }
-
- // Error occurs in the states below?
- public boolean errorInIdleState = false;
- public boolean errorInIdleStateAfterReset = false;
- public boolean errorInInitializedState = false;
- public boolean errorInPreparedState = false;
- public boolean errorInStartedState = false;
- public boolean errorInPausedState = false;
- public boolean errorInStartedStateAfterPause = false;
- public boolean errorInStoppedState = false;
- public boolean errorInPreparedStateAfterStop = false;
- public boolean errorInPlaybackCompletedState = false;
- public boolean errorInErrorState = false;
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStateUnitTestTemplate.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStateUnitTestTemplate.java
deleted file mode 100644
index 6abfbb2..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStateUnitTestTemplate.java
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.util.Log;
-import android.os.Looper;
-import android.os.Handler;
-import android.os.Message;
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import com.android.mediaframeworktest.MediaNames;
-
-/**
- * A template class for running a method under test in all possible
- * states of a MediaPlayer object.
- *
- * @see com.android.mediaframeworktest.unit.MediaPlayerSeekToStateUnitTest
- * for an example of using this class.
- *
- * A typical concrete unit test class would implement the
- * MediaPlayerMethodUnderTest interface and have a reference to an object of
- * this class. Then it calls runTestOnMethod() to actually perform the unit
- * tests.
- *
- */
-class MediaPlayerStateUnitTestTemplate extends AndroidTestCase {
- private static final String TEST_PATH = MediaNames.TEST_PATH_1;
- private static final String TAG = "MediaPlayerSeekToStateUnitTest";
- private static final int SEEK_TO_END = 135110; // Milliseconds.
- private static int WAIT_FOR_COMMAND_TO_COMPLETE = 1000; // Milliseconds.
-
- private MediaPlayerStateErrors mStateErrors = new MediaPlayerStateErrors();
- private MediaPlayer mMediaPlayer = null;
- private boolean mInitialized = false;
- private boolean mOnCompletionHasBeenCalled = false;
- private MediaPlayerStateErrors.MediaPlayerState mMediaPlayerState = null;
- private Looper mLooper = null;
- private final Object lock = new Object();
- private MediaPlayerMethodUnderTest mMethodUnderTest = null;
-
- // An Handler object is absolutely necessary for receiving callback
- // messages from MediaPlayer objects.
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- /*
- switch(msg.what) {
- case MediaPlayerStateErrors.MEDIA_PLAYER_ERROR:
- Log.v(TAG, "handleMessage: received MEDIA_PLAYER_ERROR message");
- break;
- default:
- Log.v(TAG, "handleMessage: received unknown message");
- break;
- }
- */
- }
- };
-
- /**
- * Runs the given method under test in all possible states of a MediaPlayer
- * object.
- *
- * @param testMethod the method under test.
- */
- public void runTestOnMethod(MediaPlayerMethodUnderTest testMethod) {
- mMethodUnderTest = testMethod;
- if (mMethodUnderTest != null) { // Method under test has been set?
- initializeMessageLooper();
- synchronized(lock) {
- try {
- lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
- } catch(Exception e) {
- Log.v(TAG, "runTestOnMethod: wait was interrupted.");
- }
- }
- assertTrue(mInitialized); // mMediaPlayer has been initialized?
- checkMethodUnderTestInAllPossibleStates();
- terminateMessageLooper(); // Release message looper thread.
- assertTrue(mOnCompletionHasBeenCalled);
- mMethodUnderTest.checkStateErrors(mStateErrors);
- cleanUp();
- }
- }
-
- /*
- * Initializes the message looper so that the MediaPlayer object can
- * receive the callback messages.
- */
- private void initializeMessageLooper() {
- new Thread() {
- @Override
- public void run() {
- // Set up a looper to be used by mMediaPlayer.
- Looper.prepare();
-
- // Save the looper so that we can terminate this thread
- // after we are done with it.
- mLooper = Looper.myLooper();
-
- mMediaPlayer = new MediaPlayer();
- mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
- public boolean onError(MediaPlayer player, int what, int extra) {
- Log.v(TAG, "onError has been called.");
- synchronized(lock) {
- Log.v(TAG, "notify lock.");
- setStateError(mMediaPlayerState, true);
- if (mMediaPlayerState != MediaPlayerStateErrors.MediaPlayerState.ERROR) {
- notifyStateError();
- }
- lock.notify();
- }
- return true;
- }
- });
- mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
- public void onCompletion(MediaPlayer player) {
- Log.v(TAG, "onCompletion has been called.");
- synchronized(lock) {
- if (mMediaPlayerState == MediaPlayerStateErrors.MediaPlayerState.PLAYBACK_COMPLETED) {
- mOnCompletionHasBeenCalled = true;
- }
- lock.notify();
- }
- }
- });
- synchronized(lock) {
- mInitialized = true;
- lock.notify();
- }
- Looper.loop(); // Blocks forever until Looper.quit() is called.
- Log.v(TAG, "initializeMessageLooper: quit.");
- }
- }.start();
- }
-
- /*
- * Calls method under test in the given state of the MediaPlayer object.
- *
- * @param state the MediaPlayer state in which the method under test is called.
- */
- private void callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState state) {
- Log.v(TAG, "call " + mMethodUnderTest + ": started in state " + state);
- setMediaPlayerToState(state);
- mMethodUnderTest.invokeMethodUnderTest(mMediaPlayer);
- synchronized(lock) {
- try {
- lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
- } catch(Exception e) {
- Log.v(TAG, "callMediaPlayerMethodUnderTestInState: wait is interrupted in state " + state);
- }
- }
- Log.v(TAG, "call " + mMethodUnderTest + ": ended in state " + state);
- }
-
- /*
- * The following setMediaPlayerToXXXStateXXX methods sets the MediaPlayer
- * object to the corresponding state, given the assumption that reset()
- * always resets the MediaPlayer object to Idle (after reset) state.
- */
- private void setMediaPlayerToIdleStateAfterReset() {
- try {
- mMediaPlayer.reset();
- mMediaPlayer.setDataSource(TEST_PATH);
- mMediaPlayer.prepare();
- mMediaPlayer.reset();
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToIdleStateAfterReset: Exception " + e.getClass().getName() + " was thrown.");
- assertTrue(false);
- }
- }
-
- private void setMediaPlayerToInitializedState() {
- try {
- mMediaPlayer.reset();
- mMediaPlayer.setDataSource(TEST_PATH);
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToInitializedState: Exception " + e.getClass().getName() + " was thrown.");
- assertTrue(false);
- }
- }
-
- private void setMediaPlayerToPreparedState() {
- try {
- mMediaPlayer.reset();
- mMediaPlayer.setDataSource(TEST_PATH);
- mMediaPlayer.prepare();
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToPreparedState: Exception " + e.getClass().getName() + " was thrown.");
- assertTrue(false);
- }
- }
-
- private void setMediaPlayerToPreparedStateAfterStop() {
- try {
- mMediaPlayer.reset();
- mMediaPlayer.setDataSource(TEST_PATH);
- mMediaPlayer.prepare();
- mMediaPlayer.start();
- mMediaPlayer.stop();
- mMediaPlayer.prepare();
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToPreparedStateAfterStop: Exception " + e.getClass().getName() + " was thrown.");
- assertTrue(false);
- }
- }
-
- private void setMediaPlayerToStartedState() {
- try {
- mMediaPlayer.reset();
- mMediaPlayer.setDataSource(TEST_PATH);
- mMediaPlayer.prepare();
- mMediaPlayer.start();
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToStartedState: Exception " + e.getClass().getName() + " was thrown.");
- assertTrue(false);
- }
- }
-
- private void setMediaPlayerToStartedStateAfterPause() {
- try {
- mMediaPlayer.reset();
- mMediaPlayer.setDataSource(TEST_PATH);
- mMediaPlayer.prepare();
- mMediaPlayer.start();
- mMediaPlayer.pause();
-
- // pause() is an asynchronous call and returns immediately, but
- // PV player engine may take quite a while to actually set the
- // player state to Paused; if we call start() right after pause()
- // without waiting, start() may fail.
- try {
- Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
- } catch(Exception ie) {
- Log.v(TAG, "sleep was interrupted and terminated prematurely");
- }
-
- mMediaPlayer.start();
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToStartedStateAfterPause: Exception " + e.getClass().getName() + " was thrown.");
- assertTrue(false);
- }
- }
-
- private void setMediaPlayerToPausedState() {
- try {
- mMediaPlayer.reset();
- mMediaPlayer.setDataSource(TEST_PATH);
- mMediaPlayer.prepare();
- mMediaPlayer.start();
- mMediaPlayer.pause();
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToPausedState: Exception " + e.getClass().getName() + " was thrown.");
- assertTrue(false);
- }
- }
-
- private void setMediaPlayerToStoppedState() {
- try {
- mMediaPlayer.reset();
- mMediaPlayer.setDataSource(TEST_PATH);
- mMediaPlayer.prepare();
- mMediaPlayer.start();
- mMediaPlayer.stop();
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToStoppedState: Exception " + e.getClass().getName() + " was thrown.");
- assertTrue(false);
- }
- }
-
- private void setMediaPlayerToPlaybackCompletedState() {
- try {
- mMediaPlayer.reset();
- mMediaPlayer.setDataSource(TEST_PATH);
- mMediaPlayer.prepare();
- mMediaPlayer.seekTo(SEEK_TO_END);
- mMediaPlayer.start();
- synchronized(lock) {
- try {
- lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToPlaybackCompletedState: wait was interrupted.");
- }
- }
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToPlaybackCompletedState: Exception " + e.getClass().getName() + " was thrown.");
- assertTrue(false);
- }
- Log.v(TAG, "setMediaPlayerToPlaybackCompletedState: done.");
- }
-
- /*
- * There are a lot of ways to force the MediaPlayer object to enter
- * the Error state. The impact (such as onError is called or not) highly
- * depends on how the Error state is entered.
- */
- private void setMediaPlayerToErrorState() {
- try {
- mMediaPlayer.reset();
- mMediaPlayer.setDataSource(TEST_PATH);
- mMediaPlayer.start();
- synchronized(lock) {
- try {
- lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToErrorState: wait was interrupted.");
- }
- }
- } catch(Exception e) {
- Log.v(TAG, "setMediaPlayerToErrorState: Exception " + e.getClass().getName() + " was thrown.");
- assertTrue(e instanceof IllegalStateException);
- }
- Log.v(TAG, "setMediaPlayerToErrorState: done.");
- }
-
- /*
- * Sets the state of the MediaPlayer object to the specified one.
- *
- * @param state the state of the MediaPlayer object.
- */
- private void setMediaPlayerToState(MediaPlayerStateErrors.MediaPlayerState state) {
- mMediaPlayerState = state;
- switch(state) {
- case IDLE:
- // Does nothing.
- break;
- case IDLE_AFTER_RESET:
- setMediaPlayerToIdleStateAfterReset();
- break;
- case INITIALIZED:
- setMediaPlayerToInitializedState();
- break;
- case PREPARED:
- setMediaPlayerToPreparedState();
- break;
- case PREPARED_AFTER_STOP:
- setMediaPlayerToPreparedStateAfterStop();
- break;
- case STARTED:
- setMediaPlayerToStartedState();
- break;
- case STARTED_AFTER_PAUSE:
- setMediaPlayerToStartedStateAfterPause();
- break;
- case PAUSED:
- setMediaPlayerToPausedState();
- break;
- case STOPPED:
- setMediaPlayerToStoppedState();
- break;
- case PLAYBACK_COMPLETED:
- setMediaPlayerToPlaybackCompletedState();
- break;
- case ERROR:
- setMediaPlayerToErrorState();
- break;
- }
- }
-
- /*
- * Sets the error value of the corresponding state to the given error.
- *
- * @param state the state of the MediaPlayer object.
- * @param error the value of the state error to be set.
- */
- private void setStateError(MediaPlayerStateErrors.MediaPlayerState state, boolean error) {
- switch(state) {
- case IDLE:
- mStateErrors.errorInIdleState = error;
- break;
- case IDLE_AFTER_RESET:
- mStateErrors.errorInIdleStateAfterReset = error;
- break;
- case INITIALIZED:
- mStateErrors.errorInInitializedState = error;
- break;
- case PREPARED:
- mStateErrors.errorInPreparedState = error;
- break;
- case PREPARED_AFTER_STOP:
- mStateErrors.errorInPreparedStateAfterStop = error;
- break;
- case STARTED:
- mStateErrors.errorInStartedState = error;
- break;
- case STARTED_AFTER_PAUSE:
- mStateErrors.errorInStartedStateAfterPause = error;
- break;
- case PAUSED:
- mStateErrors.errorInPausedState = error;
- break;
- case STOPPED:
- mStateErrors.errorInStoppedState = error;
- break;
- case PLAYBACK_COMPLETED:
- mStateErrors.errorInPlaybackCompletedState = error;
- break;
- case ERROR:
- mStateErrors.errorInErrorState = error;
- break;
- }
- }
-
- private void notifyStateError() {
- mHandler.sendMessage(mHandler.obtainMessage(MediaPlayerStateErrors.MEDIA_PLAYER_ERROR));
- }
-
- private void checkIdleState() {
- callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState.IDLE);
- }
-
- private void checkIdleStateAfterReset() {
- callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState.IDLE_AFTER_RESET);
- }
-
- private void checkInitializedState() {
- callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState.INITIALIZED);
- }
-
- private void checkPreparedState() {
- callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState.PREPARED);
- }
-
- private void checkPreparedStateAfterStop() {
- callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState.PREPARED_AFTER_STOP);
- }
-
- private void checkStartedState() {
- callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState.STARTED);
- }
-
- private void checkPausedState() {
- callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState.PAUSED);
- }
-
- private void checkStartedStateAfterPause() {
- callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState.STARTED_AFTER_PAUSE);
- }
-
- private void checkStoppedState() {
- callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState.STOPPED);
- }
-
- private void checkPlaybackCompletedState() {
- callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState.PLAYBACK_COMPLETED);
- }
-
- private void checkErrorState() {
- callMediaPlayerMethodUnderTestInState(MediaPlayerStateErrors.MediaPlayerState.ERROR);
- }
-
- /*
- * Checks the given method under test in all possible states of the MediaPlayer object.
- */
- private void checkMethodUnderTestInAllPossibleStates() {
- // Must be called first.
- checkIdleState();
-
- // The sequence of the following method calls should not
- // affect the test results.
- checkErrorState();
- checkIdleStateAfterReset();
- checkInitializedState();
- checkStartedState();
- checkStartedStateAfterPause();
- checkPausedState();
- checkPreparedState();
-
- checkPreparedStateAfterStop();
-
- checkPlaybackCompletedState();
- checkStoppedState();
- }
-
- /*
- * Terminates the message looper thread.
- */
- private void terminateMessageLooper() {
- mLooper.quit();
- mMediaPlayer.release();
- }
-
- /*
- * Cleans up all the internal object references.
- */
- private void cleanUp() {
- mMediaPlayer = null;
- mMediaPlayerState = null;
- mLooper = null;
- mStateErrors = null;
- mMethodUnderTest = null;
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStopStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStopStateUnitTest.java
deleted file mode 100644
index 3427f86..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerStopStateUnitTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaPlayer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaPlayer.stop() method can be called.
- */
-public class MediaPlayerStopStateUnitTest extends AndroidTestCase implements MediaPlayerMethodUnderTest {
- private MediaPlayerStateUnitTestTemplate mTestTemplate = new MediaPlayerStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call stop() in the following states:
- * {Prepared, Started, Stopped, Paused, PlaybackCompleted}.
- * 2. It is invalid to call stop() in the following states:
- * {Idle, Initialized, Error}
- *
- * @param stateErrors the MediaPlayerStateErrors to check against.
- */
- public void checkStateErrors(MediaPlayerStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInStartedState);
- assertTrue(!stateErrors.errorInStartedStateAfterPause);
- assertTrue(!stateErrors.errorInStoppedState);
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInPreparedStateAfterStop);
- assertTrue(!stateErrors.errorInPlaybackCompletedState);
- assertTrue(!stateErrors.errorInPausedState);
-
- // Invalid states.
- assertTrue(!stateErrors.errorInIdleState); // noError() won't be called
- assertTrue(stateErrors.errorInIdleStateAfterReset);
- assertTrue(stateErrors.errorInInitializedState);
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaPlayer player) {
- player.stop();
- }
-
- @LargeTest
- public void testStop() {
- mTestTemplate.runTestOnMethod(this);
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderMethodUnderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderMethodUnderTest.java
deleted file mode 100644
index 3f46f74..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderMethodUnderTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaRecorder;
-
-/**
- * All MediaRecorder method unit test subclass must implement this interface.
- */
-interface MediaRecorderMethodUnderTest {
- public void checkStateErrors(MediaRecorderStateErrors stateErrors);
- public void invokeMethodUnderTest(MediaRecorder player);
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderPrepareStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderPrepareStateUnitTest.java
deleted file mode 100644
index 134144d..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderPrepareStateUnitTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaRecorder;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-import java.io.IOException;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaRecorder.prepare() method can be called.
- */
-public class MediaRecorderPrepareStateUnitTest extends AndroidTestCase implements MediaRecorderMethodUnderTest {
- private MediaRecorderStateUnitTestTemplate mTestTemplate = new MediaRecorderStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call prepare() in the following states:
- * {DataSourceConfigured}.
- * 2. It is invalid to call prepare() in the following states:
- * {Prepared, Initial, Initialized, Recording, Error}
- *
- * @param stateErrors the MediaRecorderStateErrors to check against.
- */
- public void checkStateErrors(MediaRecorderStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInDataSourceConfiguredState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInPreparedState);
- assertTrue(stateErrors.errorInRecordingState);
- assertTrue(stateErrors.errorInInitialState);
- assertTrue(stateErrors.errorInInitialStateAfterReset);
- assertTrue(stateErrors.errorInInitialStateAfterStop);
- assertTrue(stateErrors.errorInInitializedState);
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaRecorder recorder) {
- try {
- recorder.prepare();
- } catch (IOException exception) {
- throw new RuntimeException();
- }
- }
-
- @MediumTest
- public void testPrepare() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "prepare()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderResetStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderResetStateUnitTest.java
deleted file mode 100644
index cae9e31..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderResetStateUnitTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaRecorder;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaRecorder.reset() method can be called.
- */
-public class MediaRecorderResetStateUnitTest extends AndroidTestCase implements MediaRecorderMethodUnderTest {
- private MediaRecorderStateUnitTestTemplate mTestTemplate = new MediaRecorderStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call reset() in the following states:
- * {Prepared, Initial, Initialized, DataSourceConfigured, Recording, Error}.
- * 2. It is invalid to call reset() in the following states:
- * {}
- *
- * @param stateErrors the MediaRecorderStateErrors to check against.
- */
- public void checkStateErrors(MediaRecorderStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInRecordingState);
- assertTrue(!stateErrors.errorInInitialState);
- assertTrue(!stateErrors.errorInInitialStateAfterReset);
- assertTrue(!stateErrors.errorInInitialStateAfterStop);
- assertTrue(!stateErrors.errorInInitializedState);
- assertTrue(!stateErrors.errorInErrorState);
- assertTrue(!stateErrors.errorInDataSourceConfiguredState);
-
- // Invalid states.
- }
-
- public void invokeMethodUnderTest(MediaRecorder recorder) {
- recorder.reset();
- }
-
- @MediumTest
- public void testReset() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "reset()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetAudioEncoderStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetAudioEncoderStateUnitTest.java
deleted file mode 100644
index 4b5a818..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetAudioEncoderStateUnitTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaRecorder;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaRecorder.setAudioEncoder() method can be called.
- */
-public class MediaRecorderSetAudioEncoderStateUnitTest extends AndroidTestCase implements MediaRecorderMethodUnderTest {
- private MediaRecorderStateUnitTestTemplate mTestTemplate = new MediaRecorderStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call setAudioEncoder() in the following states:
- * {DataSourceConfigured}.
- * 2. It is invalid to call setAudioEncoder() in the following states:
- * {Initial, Initialized, Prepared, Recording, Error}
- *
- * @param stateErrors the MediaRecorderStateErrors to check against.
- */
- public void checkStateErrors(MediaRecorderStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInDataSourceConfiguredState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInPreparedState);
- assertTrue(stateErrors.errorInRecordingState);
- assertTrue(stateErrors.errorInErrorState);
- assertTrue(stateErrors.errorInInitialState);
- assertTrue(stateErrors.errorInInitialStateAfterReset);
- assertTrue(stateErrors.errorInInitialStateAfterStop);
- assertTrue(stateErrors.errorInInitializedState);
- }
-
- public void invokeMethodUnderTest(MediaRecorder recorder) {
- recorder.setAudioEncoder(MediaRecorderStateUnitTestTemplate.AUDIO_ENCODER);
- }
-
- @MediumTest
- public void testSetAudioEncoder() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "setAudioEncoder()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetAudioSourceStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetAudioSourceStateUnitTest.java
deleted file mode 100644
index f8ab48cf..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetAudioSourceStateUnitTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaRecorder;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaRecorder.setAudioSource() method can be called.
- */
-public class MediaRecorderSetAudioSourceStateUnitTest extends AndroidTestCase implements MediaRecorderMethodUnderTest {
- private MediaRecorderStateUnitTestTemplate mTestTemplate = new MediaRecorderStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call setAudioSource() in the following states:
- * {Initial, Initialized}.
- * 2. It is invalid to call setAudioSource() in the following states:
- * {Prepared, DataSourceConfigured, Recording, Error}
- *
- * @param stateErrors the MediaRecorderStateErrors to check against.
- */
- public void checkStateErrors(MediaRecorderStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInInitialState);
- assertTrue(!stateErrors.errorInInitialStateAfterReset);
- assertTrue(!stateErrors.errorInInitialStateAfterStop);
- assertTrue(!stateErrors.errorInInitializedState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInPreparedState);
- assertTrue(stateErrors.errorInRecordingState);
- assertTrue(stateErrors.errorInDataSourceConfiguredState);
- assertTrue(stateErrors.errorInErrorState);
- }
-
- public void invokeMethodUnderTest(MediaRecorder recorder) {
- recorder.setAudioSource(MediaRecorderStateUnitTestTemplate.AUDIO_SOURCE);
- }
-
- @MediumTest
- public void testSetAudioSource() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "setAudioSource()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetOutputFileStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetOutputFileStateUnitTest.java
deleted file mode 100644
index 712a758..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetOutputFileStateUnitTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaRecorder;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaRecorder.setOutputFile() method can be called.
- */
-public class MediaRecorderSetOutputFileStateUnitTest extends AndroidTestCase implements MediaRecorderMethodUnderTest {
- private MediaRecorderStateUnitTestTemplate mTestTemplate = new MediaRecorderStateUnitTestTemplate();
- /**
- * 1. It is valid to call setOutputFile() in the following states:
- * {DataSourceConfigured, Initial, Initialized, Prepared, Recording, Error}.
- * 2. It is invalid to call setOutputFile() in the following states:
- * {}
- *
- * @param stateErrors the MediaRecorderStateErrors to check against.
- */
- public void checkStateErrors(MediaRecorderStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInDataSourceConfiguredState);
- assertTrue(!stateErrors.errorInPreparedState);
- assertTrue(!stateErrors.errorInRecordingState);
- assertTrue(!stateErrors.errorInErrorState);
- assertTrue(!stateErrors.errorInInitialState);
- assertTrue(!stateErrors.errorInInitialStateAfterReset);
- assertTrue(!stateErrors.errorInInitialStateAfterStop);
- assertTrue(!stateErrors.errorInInitializedState);
- }
-
- public void invokeMethodUnderTest(MediaRecorder recorder) {
- recorder.setOutputFile(MediaRecorderStateUnitTestTemplate.RECORD_OUTPUT_PATH);
- }
-
- @MediumTest
- public void testSetOutputFile() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "setOutputFile()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetOutputFormatStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetOutputFormatStateUnitTest.java
deleted file mode 100644
index cacdd87..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderSetOutputFormatStateUnitTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaRecorder;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaRecorder.setOutputFormat() method can be called.
- */
-public class MediaRecorderSetOutputFormatStateUnitTest extends AndroidTestCase implements MediaRecorderMethodUnderTest {
- private MediaRecorderStateUnitTestTemplate mTestTemplate = new MediaRecorderStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call setOutputFormat() in the following states:
- * {Initialized}.
- * 2. It is invalid to call setOutputFormat() in the following states:
- * {Initial, Prepared, DataSourceConfigured, Recording, Error}
- *
- * @param stateErrors the MediaRecorderStateErrors to check against.
- */
- public void checkStateErrors(MediaRecorderStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInInitializedState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInInitialState);
- assertTrue(stateErrors.errorInInitialStateAfterReset);
- assertTrue(stateErrors.errorInInitialStateAfterStop);
- assertTrue(stateErrors.errorInPreparedState);
- assertTrue(stateErrors.errorInRecordingState);
- assertTrue(stateErrors.errorInErrorState);
- assertTrue(stateErrors.errorInDataSourceConfiguredState);
- }
-
- public void invokeMethodUnderTest(MediaRecorder recorder) {
- recorder.setOutputFormat(MediaRecorderStateUnitTestTemplate.OUTPUT_FORMAT);
- }
-
- @MediumTest
- public void testSetOutputFormat() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "setOutputFormat()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStartStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStartStateUnitTest.java
deleted file mode 100644
index d1232fc..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStartStateUnitTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaRecorder;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaRecorder.start() method can be called.
- */
-public class MediaRecorderStartStateUnitTest extends AndroidTestCase implements MediaRecorderMethodUnderTest {
- private MediaRecorderStateUnitTestTemplate mTestTemplate = new MediaRecorderStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call start() in the following states:
- * {Prepared}.
- * 2. It is invalid to call start() in the following states:
- * {Initial, Initialized, DataSourceConfigured, Recording, Error}
- *
- * @param stateErrors the MediaRecorderStateErrors to check against.
- */
- public void checkStateErrors(MediaRecorderStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInPreparedState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInRecordingState);
- assertTrue(stateErrors.errorInInitialState);
- assertTrue(stateErrors.errorInInitialStateAfterReset);
- assertTrue(stateErrors.errorInInitialStateAfterStop);
- assertTrue(stateErrors.errorInInitializedState);
- assertTrue(stateErrors.errorInErrorState);
- assertTrue(stateErrors.errorInDataSourceConfiguredState);
- }
-
- public void invokeMethodUnderTest(MediaRecorder recorder) {
- recorder.start();
- }
-
- @MediumTest
- public void testStart() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "start()";
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStateErrors.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStateErrors.java
deleted file mode 100644
index 2d6e5a2..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStateErrors.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-class MediaRecorderStateErrors {
- public static enum MediaRecorderState {
- INITIAL,
- INITIAL_AFTER_RESET,
- INITIAL_AFTER_STOP,
- INITIALIZED,
- DATASOURCECONFIGURED,
- PREPARED,
- RECORDING,
- ERROR,
- }
-
- // Error occurs in the states below?
- public boolean errorInInitialState = false;
- public boolean errorInInitialStateAfterReset = false;
- public boolean errorInInitialStateAfterStop = false;
- public boolean errorInInitializedState = false;
- public boolean errorInDataSourceConfiguredState = false;
- public boolean errorInPreparedState = false;
- public boolean errorInRecordingState = false;
- public boolean errorInErrorState = false;
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStateUnitTestTemplate.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStateUnitTestTemplate.java
deleted file mode 100644
index 9edc9aa..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStateUnitTestTemplate.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.util.Log;
-import android.media.MediaRecorder;
-import android.test.AndroidTestCase;
-
-/**
- * A template class for running a method under test in all possible
- * states of a MediaRecorder object.
- *
- * @see com.android.mediaframeworktest.unit.MediaRecorderStopStateUnitTest
- * for an example of using this class.
- *
- * A typical concrete unit test class would implement the
- * MediaRecorderMethodUnderTest interface and have a reference to an object of
- * this class. Then it calls runTestOnMethod() to actually perform the unit
- * tests. It is recommended that the toString() method of the concrete unit test
- * class be overridden to use the actual method name under test for logging
- * purpose.
- *
- */
-class MediaRecorderStateUnitTestTemplate extends AndroidTestCase {
- public static final String RECORD_OUTPUT_PATH = "/sdcard/recording.3gp";
- public static final int OUTPUT_FORMAT= MediaRecorder.OutputFormat.THREE_GPP;
- public static final int AUDIO_ENCODER = MediaRecorder.AudioEncoder.AMR_NB;
- public static final int AUDIO_SOURCE = MediaRecorder.AudioSource.MIC;
- private static final String TAG = "MediaRecorderStateUnitTest";
- private MediaRecorderStateErrors mStateErrors = new MediaRecorderStateErrors();
- private MediaRecorder mMediaRecorder = new MediaRecorder();
- private MediaRecorderStateErrors.MediaRecorderState mMediaRecorderState = null;
- private MediaRecorderMethodUnderTest mMethodUnderTest = null;
-
- /**
- * Runs the given method under test in all possible states of a MediaRecorder
- * object.
- *
- * @param testMethod the method under test.
- */
- public void runTestOnMethod(MediaRecorderMethodUnderTest testMethod) {
- mMethodUnderTest = testMethod;
- if (mMethodUnderTest != null) { // Method under test has been set?
- checkMethodUnderTestInAllPossibleStates();
- mMethodUnderTest.checkStateErrors(mStateErrors);
- cleanUp();
- }
- }
-
- /*
- * Calls method under test in the given state of the MediaRecorder object.
- *
- * @param state the MediaRecorder state in which the method under test is called.
- */
- private void callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState state) {
- Log.v(TAG, "call " + mMethodUnderTest + ": started in state " + state);
- setMediaRecorderToState(state);
- try {
- mMethodUnderTest.invokeMethodUnderTest(mMediaRecorder);
- } catch(Exception e) {
- setStateError(mMediaRecorderState, true);
- }
- Log.v(TAG, "call " + mMethodUnderTest + ": ended in state " + state);
- }
-
- /*
- * The following setMediaRecorderToXXXStateXXX methods sets the MediaRecorder
- * object to the corresponding state, given the assumption that reset()
- * always resets the MediaRecorder object to Initial (after reset) state.
- */
- private void setMediaRecorderToInitialStateAfterReset() {
- try {
- mMediaRecorder.reset();
- } catch(Exception e) {
- fail("setMediaRecorderToInitialStateAfterReset: Exception " + e.getClass().getName() + " was thrown.");
- }
- }
-
- // FIXME:
- // In the past, stop() == reset().
- // However, this is no longer true. The plan is to have a STOPPED state.
- // and from STOPPED state, start can be called without the need to
- // do the recording configuration again.
- private void setMediaRecorderToInitialStateAfterStop() {
- try {
- mMediaRecorder.reset();
-/*
- mMediaRecorder.setAudioSource(AUDIO_SOURCE);
- mMediaRecorder.setOutputFormat(OUTPUT_FORMAT);
- mMediaRecorder.setAudioEncoder(AUDIO_ENCODER);
- mMediaRecorder.setOutputFile(RECORD_OUTPUT_PATH);
- mMediaRecorder.prepare();
- mMediaRecorder.start();
- mMediaRecorder.stop();
-*/
- } catch(Exception e) {
- fail("setMediaRecorderToInitialStateAfterReset: Exception " + e.getClass().getName() + " was thrown.");
- }
- }
-
- private void setMediaRecorderToInitializedState() {
- try {
- mMediaRecorder.reset();
- if (mMethodUnderTest.toString() != "setAudioSource()") {
- mMediaRecorder.setAudioSource(AUDIO_SOURCE);
- }
- } catch(Exception e) {
- fail("setMediaRecorderToInitializedState: Exception " + e.getClass().getName() + " was thrown.");
- }
- }
-
- private void setMediaRecorderToPreparedState() {
- try {
- mMediaRecorder.reset();
- mMediaRecorder.setAudioSource(AUDIO_SOURCE);
- mMediaRecorder.setOutputFormat(OUTPUT_FORMAT);
- mMediaRecorder.setAudioEncoder(AUDIO_ENCODER);
- mMediaRecorder.setOutputFile(RECORD_OUTPUT_PATH);
- mMediaRecorder.prepare();
- } catch(Exception e) {
- fail("setMediaRecorderToPreparedState: Exception " + e.getClass().getName() + " was thrown.");
- }
- }
-
- private void setMediaRecorderToRecordingState() {
- try {
- mMediaRecorder.reset();
- mMediaRecorder.setAudioSource(AUDIO_SOURCE);
- mMediaRecorder.setOutputFormat(OUTPUT_FORMAT);
- mMediaRecorder.setAudioEncoder(AUDIO_ENCODER);
- mMediaRecorder.setOutputFile(RECORD_OUTPUT_PATH);
- mMediaRecorder.prepare();
- mMediaRecorder.start();
- } catch(Exception e) {
- fail("setMediaRecorderToRecordingState: Exception " + e.getClass().getName() + " was thrown.");
- }
- }
-
- private void setMediaRecorderToDataSourceConfiguredState() {
- try {
- mMediaRecorder.reset();
- mMediaRecorder.setAudioSource(AUDIO_SOURCE);
- mMediaRecorder.setOutputFormat(OUTPUT_FORMAT);
-
- /* Skip setAudioEncoder() and setOutputFile() calls if
- * the method under test is setAudioEncoder() since this
- * method can only be called once even in the DATASOURCECONFIGURED state
- */
- if (mMethodUnderTest.toString() != "setAudioEncoder()") {
- mMediaRecorder.setAudioEncoder(AUDIO_ENCODER);
- }
-
- if (mMethodUnderTest.toString() != "setOutputFile()") {
- mMediaRecorder.setOutputFile(RECORD_OUTPUT_PATH);
- }
- } catch(Exception e) {
- fail("setMediaRecorderToDataSourceConfiguredState: Exception " + e.getClass().getName() + " was thrown.");
- }
- }
-
- /*
- * There are a lot of ways to force the MediaRecorder object to enter
- * the Error state. We arbitrary choose one here.
- */
- private void setMediaRecorderToErrorState() {
- try {
- mMediaRecorder.reset();
-
- /* Skip setAudioSource() if the method under test is setAudioEncoder()
- * Because, otherwise, it is valid to call setAudioEncoder() after
- * start() since start() will fail, and then the mMediaRecorder
- * won't be set to the Error state
- */
- if (mMethodUnderTest.toString() != "setAudioEncoder()") {
- mMediaRecorder.setAudioSource(AUDIO_SOURCE);
- }
-
- /* Skip setOutputFormat if the method under test is setOutputFile()
- * Because, otherwise, it is valid to call setOutputFile() after
- * start() since start() will fail, and then the mMediaRecorder
- * won't be set to the Error state
- */
- if (mMethodUnderTest.toString() != "setOutputFile()") {
- mMediaRecorder.setOutputFormat(OUTPUT_FORMAT);
- }
-
- mMediaRecorder.start();
- } catch(Exception e) {
- if (!(e instanceof IllegalStateException)) {
- fail("setMediaRecorderToErrorState: Exception " + e.getClass().getName() + " was thrown.");
- }
- }
- Log.v(TAG, "setMediaRecorderToErrorState: done.");
- }
-
- /*
- * Sets the state of the MediaRecorder object to the specified one.
- *
- * @param state the state of the MediaRecorder object.
- */
- private void setMediaRecorderToState(MediaRecorderStateErrors.MediaRecorderState state) {
- mMediaRecorderState = state;
- switch(state) {
- case INITIAL:
- // Does nothing.
- break;
- case INITIAL_AFTER_RESET:
- setMediaRecorderToInitialStateAfterReset();
- break;
- case INITIAL_AFTER_STOP:
- setMediaRecorderToInitialStateAfterStop();
- break;
- case INITIALIZED:
- setMediaRecorderToInitializedState();
- break;
- case DATASOURCECONFIGURED:
- setMediaRecorderToDataSourceConfiguredState();
- break;
- case PREPARED:
- setMediaRecorderToPreparedState();
- break;
- case RECORDING:
- setMediaRecorderToRecordingState();
- break;
- case ERROR:
- setMediaRecorderToErrorState();
- break;
- }
- }
-
- /*
- * Sets the error value of the corresponding state to the given error.
- *
- * @param state the state of the MediaRecorder object.
- * @param error the value of the state error to be set.
- */
- private void setStateError(MediaRecorderStateErrors.MediaRecorderState state, boolean error) {
- switch(state) {
- case INITIAL:
- mStateErrors.errorInInitialState = error;
- break;
- case INITIAL_AFTER_RESET:
- mStateErrors.errorInInitialStateAfterReset = error;
- break;
- case INITIAL_AFTER_STOP:
- mStateErrors.errorInInitialStateAfterStop = error;
- break;
- case INITIALIZED:
- mStateErrors.errorInInitializedState = error;
- break;
- case DATASOURCECONFIGURED:
- mStateErrors.errorInDataSourceConfiguredState = error;
- break;
- case PREPARED:
- mStateErrors.errorInPreparedState = error;
- break;
- case RECORDING:
- mStateErrors.errorInRecordingState = error;
- break;
- case ERROR:
- mStateErrors.errorInErrorState = error;
- break;
- }
- }
-
- private void checkInitialState() {
- callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.INITIAL);
- }
-
- private void checkInitialStateAfterReset() {
- callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.INITIAL_AFTER_RESET);
- }
-
- private void checkInitialStateAfterStop() {
- callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.INITIAL_AFTER_STOP);
- }
-
- private void checkInitializedState() {
- callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.INITIALIZED);
- }
-
- private void checkPreparedState() {
- callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.PREPARED);
- }
-
- private void checkRecordingState() {
- callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.RECORDING);
- }
-
- private void checkDataSourceConfiguredState() {
- callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.DATASOURCECONFIGURED);
- }
-
- private void checkErrorState() {
- callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.ERROR);
- }
-
- /*
- * Checks the given method under test in all possible states of the MediaRecorder object.
- */
- private void checkMethodUnderTestInAllPossibleStates() {
- // Must be called first.
- checkInitialState();
-
- // The sequence of the following method calls should not
- // affect the test results.
- checkErrorState();
- checkInitialStateAfterReset();
- checkInitialStateAfterStop();
- checkInitializedState();
- checkRecordingState();
- checkDataSourceConfiguredState();
- checkPreparedState();
- }
-
- /*
- * Cleans up all the internal object references.
- */
- private void cleanUp() {
- mMediaRecorder.release();
- mMediaRecorder = null;
- mMediaRecorderState = null;
- mStateErrors = null;
- mMethodUnderTest = null;
- }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStopStateUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStopStateUnitTest.java
deleted file mode 100644
index 8737595..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaRecorderStopStateUnitTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.mediaframeworktest.unit;
-
-import android.media.MediaRecorder;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-/**
- * Unit test class to test the set of valid and invalid states that
- * MediaRecorder.stop() method can be called.
- */
-public class MediaRecorderStopStateUnitTest extends AndroidTestCase implements MediaRecorderMethodUnderTest {
- private MediaRecorderStateUnitTestTemplate mTestTemplate = new MediaRecorderStateUnitTestTemplate();
-
- /**
- * 1. It is valid to call stop() in the following states:
- * {Recording}.
- * 2. It is invalid to call stop() in the following states:
- * {Initial, Initialized, DataSourceConfigured, Prepared, Error}
- *
- * @param stateErrors the MediaRecorderStateErrors to check against.
- */
- public void checkStateErrors(MediaRecorderStateErrors stateErrors) {
- // Valid states.
- assertTrue(!stateErrors.errorInRecordingState);
-
- // Invalid states.
- assertTrue(stateErrors.errorInInitialState);
- assertTrue(stateErrors.errorInInitialStateAfterReset);
- assertTrue(stateErrors.errorInInitialStateAfterStop);
- assertTrue(stateErrors.errorInInitializedState);
- assertTrue(stateErrors.errorInErrorState);
- assertTrue(stateErrors.errorInDataSourceConfiguredState);
- assertTrue(stateErrors.errorInPreparedState);
- }
-
- public void invokeMethodUnderTest(MediaRecorder recorder) {
- recorder.stop();
- }
-
- @MediumTest
- public void testStop() {
- mTestTemplate.runTestOnMethod(this);
- }
-
- @Override
- public String toString() {
- return "stop()";
- }
-}