├── .gitattributes
├── .gitignore
├── .gitmodules
├── Android
└── QMediaSDK
│ ├── app
│ ├── build.gradle
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── qmedia
│ │ │ └── qmediasdk
│ │ │ └── demo
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ │ ├── B1.bmp
│ │ │ ├── B2.bmp
│ │ │ ├── F1
│ │ │ ├── F1.bmp
│ │ │ ├── F2.bmp
│ │ │ ├── ID_24.bmp
│ │ │ ├── L1.bmp
│ │ │ ├── L2.bmp
│ │ │ ├── L3.bmp
│ │ │ ├── LR.mp3
│ │ │ ├── N1.bmp
│ │ │ ├── P1.bmp
│ │ │ ├── R1.bmp
│ │ │ ├── S1.bmp
│ │ │ ├── audio.mp3
│ │ │ ├── brightness
│ │ │ ├── f1.png
│ │ │ ├── f2.png
│ │ │ ├── f3.png
│ │ │ ├── heibai
│ │ │ ├── ic_launcher.png
│ │ │ ├── li.jpg
│ │ │ ├── li2.jpeg
│ │ │ ├── li2.jpg
│ │ │ ├── li3.jpg
│ │ │ ├── li3.png
│ │ │ ├── li4.jpg
│ │ │ ├── lookup_amatorka.png
│ │ │ ├── maicha
│ │ │ ├── test.mp4
│ │ │ ├── test2.m4v
│ │ │ └── timg.gif
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── qmedia
│ │ │ │ └── qmediasdk
│ │ │ │ └── sample
│ │ │ │ ├── GlideLoader.java
│ │ │ │ ├── MainActivity.java
│ │ │ │ └── PreviewMuxerActivity.java
│ │ └── res
│ │ │ ├── drawable-hdpi
│ │ │ ├── btn_down_n.png
│ │ │ ├── btn_down_p.png
│ │ │ ├── btn_up_n.png
│ │ │ ├── btn_up_p.png
│ │ │ ├── filter_img.png
│ │ │ ├── ic_arrow_back_white_24dp.png
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_media_stop.png
│ │ │ ├── ic_share.png
│ │ │ ├── seekbar_bg.jpg
│ │ │ ├── seekbar_n.jpg
│ │ │ ├── seekbar_p.jpg
│ │ │ └── video_clip_time_stamp_budge.png
│ │ │ ├── drawable-xhdpi
│ │ │ ├── file_enter_icon.png
│ │ │ ├── ic_account_circle_white_24dp.png
│ │ │ ├── ic_arrow_back_black_24dp.png
│ │ │ ├── ic_arrow_back_white_24dp.png
│ │ │ ├── ic_arrow_drop_down_grey_700_24dp.png
│ │ │ ├── ic_arrow_drop_up_grey_700_24dp.png
│ │ │ ├── ic_sd_storage_black_24dp.png
│ │ │ ├── jc_pause_normal.png
│ │ │ ├── jc_pause_pressed.png
│ │ │ ├── jc_play_normal.png
│ │ │ ├── jc_play_pressed.png
│ │ │ ├── rc_ac_ram_icon.png
│ │ │ ├── rc_ac_sd_card_icon.png
│ │ │ ├── rc_ac_text_file_icon.png
│ │ │ ├── rc_ad_list_audio_icon.png
│ │ │ ├── rc_ad_list_file_icon.png
│ │ │ ├── rc_ad_list_folder_icon.png
│ │ │ ├── rc_ad_list_other_icon.png
│ │ │ ├── rc_ad_list_video_icon.png
│ │ │ ├── rc_file_icon_else.png
│ │ │ ├── rc_file_icon_excel.png
│ │ │ ├── rc_file_icon_file.png
│ │ │ ├── rc_file_icon_mp3.png
│ │ │ ├── rc_file_icon_picture.png
│ │ │ ├── rc_file_icon_video.png
│ │ │ └── rc_file_icon_word.png
│ │ │ ├── drawable-xxhdpi
│ │ │ ├── ic_album_tick_blue.png
│ │ │ ├── ic_album_tick_white.png
│ │ │ └── ic_arrow_back_white_24dp.png
│ │ │ ├── drawable-xxxhdpi
│ │ │ └── ic_arrow_back_white_24dp.png
│ │ │ ├── drawable
│ │ │ ├── bg_seekbar_progress_drawable.xml
│ │ │ ├── capture_pressed.png
│ │ │ ├── capture_unpressed.png
│ │ │ ├── divide_line.xml
│ │ │ ├── ic_left_sliderbar.png
│ │ │ ├── ic_right_sliderbar.png
│ │ │ ├── ic_slider_left.png
│ │ │ ├── ic_slider_right.png
│ │ │ ├── jc_click_pause_selector.xml
│ │ │ ├── jc_click_play_selector.xml
│ │ │ ├── pointer.png
│ │ │ ├── save_pressed.png
│ │ │ ├── save_unpressed.png
│ │ │ ├── selector_bar.xml
│ │ │ ├── selector_bar_btn_down.xml
│ │ │ ├── selector_bar_btn_up.xml
│ │ │ ├── selector_capture.xml
│ │ │ ├── selector_save.xml
│ │ │ ├── shape_bt_send.xml
│ │ │ ├── shape_bt_send_blue.xml
│ │ │ ├── shape_path.xml
│ │ │ ├── top_r_bg.xml
│ │ │ ├── top_r_bg_a.xml
│ │ │ ├── top_r_bg_b.xml
│ │ │ └── top_r_text.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── activity_reader_muxer.xml
│ │ │ ├── content_main.xml
│ │ │ └── content_reader_muxer.xml
│ │ │ ├── menu
│ │ │ └── menu_main.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── qmedia
│ │ └── qmediasdk
│ │ └── demo
│ │ └── ExampleUnitTest.java
│ ├── build.gradle
│ ├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
│ ├── qmediasdk
│ ├── build.gradle
│ ├── gradle
│ │ └── wrapper
│ │ │ └── gradle-wrapper.properties
│ ├── jni
│ │ ├── AudioTargetAdapter.cpp
│ │ ├── AudioTargetAdapter.h
│ │ ├── CMakeLists.txt
│ │ ├── JniUtils.cpp
│ │ ├── JniUtils.h
│ │ ├── MediaSourceAdapter.cpp
│ │ ├── MediaSourceAdapter.h
│ │ ├── QAudioFrame_Jni.cpp
│ │ ├── QAudioFrame_Jni.h
│ │ ├── QAudioTrackNode_Jni.cpp
│ │ ├── QCombiner_Jni.cpp
│ │ ├── QDuplicateNode_Jni.cpp
│ │ ├── QEditorPlayer_Jni.cpp
│ │ ├── QEditorPlayer_Jni.h
│ │ ├── QEffectManage_Jni.cpp
│ │ ├── QEffect_Jni.cpp
│ │ ├── QExporter_Jni.cpp
│ │ ├── QExporter_Jni.h
│ │ ├── QGraphicNode_Jni.cpp
│ │ ├── QImageNode_Jni.cpp
│ │ ├── QLayer_Jni.cpp
│ │ ├── QMediaDescribe_Jni.cpp
│ │ ├── QMediaDescribe_Jni.h
│ │ ├── QMediaFactory_Jni.cpp
│ │ ├── QMediaTrack_Jni.cpp
│ │ ├── QMultiMediaTrack_Jni.cpp
│ │ ├── QNodeAnimator_Jni.cpp
│ │ ├── QVideoFrame_Jni.cpp
│ │ ├── QVideoFrame_Jni.h
│ │ ├── QVideoTrackNode_Jni.cpp
│ │ ├── VideoTargetAdapter.cpp
│ │ ├── VideoTargetAdapter.h
│ │ ├── j4a
│ │ │ ├── j4a_base.c
│ │ │ └── j4a_base.h
│ │ ├── j4a_generate
│ │ │ ├── QAudioDescribe.c
│ │ │ ├── QAudioDescribe.h
│ │ │ ├── QAudioFrame.c
│ │ │ ├── QAudioFrame.h
│ │ │ ├── QAudioRender.c
│ │ │ ├── QAudioRender.h
│ │ │ ├── QAudioTarget.c
│ │ │ ├── QAudioTarget.h
│ │ │ ├── QBlendFunc.c
│ │ │ ├── QBlendFunc.h
│ │ │ ├── QEditorPlayer.c
│ │ │ ├── QEditorPlayer.h
│ │ │ ├── QEffectConfig.c
│ │ │ ├── QEffectConfig.h
│ │ │ ├── QExporter.c
│ │ │ ├── QExporter.h
│ │ │ ├── QMediaSource.c
│ │ │ ├── QMediaSource.h
│ │ │ ├── QNodeAnimator.c
│ │ │ ├── QNodeAnimator.h
│ │ │ ├── QRange.c
│ │ │ ├── QRange.h
│ │ │ ├── QSize.c
│ │ │ ├── QSize.h
│ │ │ ├── QVector.c
│ │ │ ├── QVector.h
│ │ │ ├── QVideoDescribe.c
│ │ │ ├── QVideoDescribe.h
│ │ │ ├── QVideoFrame.c
│ │ │ ├── QVideoFrame.h
│ │ │ ├── QVideoRender.c
│ │ │ ├── QVideoRender.h
│ │ │ ├── QVideoTarget.c
│ │ │ ├── QVideoTarget.h
│ │ │ └── j4a_generate.h
│ │ └── qmediasdk_jni.cpp
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── qmedia
│ │ │ └── qmediasdk
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── qmedia
│ │ │ │ └── qmediasdk
│ │ │ │ ├── QAudio
│ │ │ │ ├── QAudioFrame.java
│ │ │ │ └── QAudioTrackNode.java
│ │ │ │ ├── QCommon
│ │ │ │ ├── GLSurfaceView14.java
│ │ │ │ ├── QAspectLayout.java
│ │ │ │ ├── QGLContext.java
│ │ │ │ ├── QRange.java
│ │ │ │ ├── QSize.java
│ │ │ │ ├── QVector.java
│ │ │ │ ├── gles
│ │ │ │ │ ├── Drawable2d.java
│ │ │ │ │ ├── EglCore.java
│ │ │ │ │ ├── EglSurfaceBase.java
│ │ │ │ │ ├── FullFrameRect.java
│ │ │ │ │ ├── GlUtil.java
│ │ │ │ │ ├── Texture2dProgram.java
│ │ │ │ │ └── WindowSurface.java
│ │ │ │ └── media
│ │ │ │ │ ├── EncodedPacketQueue.java
│ │ │ │ │ ├── FrameCacheQueue.java
│ │ │ │ │ ├── HardwareDecoder.java
│ │ │ │ │ ├── HardwareEncoder.java
│ │ │ │ │ └── MuxerCore.java
│ │ │ │ ├── QEditor
│ │ │ │ ├── QCombiner.java
│ │ │ │ ├── QEditorPlayer.java
│ │ │ │ ├── QExporter.java
│ │ │ │ ├── QFileExporter.java
│ │ │ │ └── QMediaFactory.java
│ │ │ │ ├── QEffect
│ │ │ │ ├── QEffect.java
│ │ │ │ ├── QEffectConfig.java
│ │ │ │ └── QEffectManage.java
│ │ │ │ ├── QGraphic
│ │ │ │ ├── QBlendFunc.java
│ │ │ │ ├── QDuplicateNode.java
│ │ │ │ ├── QGraphicNode.java
│ │ │ │ ├── QImageNode.java
│ │ │ │ ├── QLayer.java
│ │ │ │ ├── QNodeAnimator.java
│ │ │ │ ├── QVideoFrame.java
│ │ │ │ └── QVideoTrackNode.java
│ │ │ │ ├── QMediaSDK.java
│ │ │ │ ├── QSource
│ │ │ │ ├── MediaStream.java
│ │ │ │ ├── QAudioDescribe.java
│ │ │ │ ├── QMediaDescribe.java
│ │ │ │ ├── QMediaExtractorSource.java
│ │ │ │ ├── QMediaSource.java
│ │ │ │ └── QVideoDescribe.java
│ │ │ │ ├── QTarget
│ │ │ │ ├── Implements
│ │ │ │ │ ├── QAudioPlayer.java
│ │ │ │ │ ├── QFileExporterTarget.java
│ │ │ │ │ └── QPlayerView.java
│ │ │ │ ├── QAudioRender.java
│ │ │ │ ├── QAudioTarget.java
│ │ │ │ ├── QVideoRender.java
│ │ │ │ └── QVideoTarget.java
│ │ │ │ └── QTrack
│ │ │ │ ├── QMediaTrack.java
│ │ │ │ └── QMultiMediaTrack.java
│ │ └── res
│ │ │ └── values
│ │ │ └── strings.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── qmedia
│ │ └── qmediasdk
│ │ └── ExampleUnitTest.java
│ └── settings.gradle
├── QMediaCore
├── CMakeLists.txt
├── EffectEditor
│ ├── CMakeLists.txt
│ ├── EditorExporter.cpp
│ ├── EditorExporter.h
│ ├── EditorPlayer.cpp
│ ├── EditorPlayer.h
│ ├── EffectCombiner.cpp
│ ├── EffectCombiner.h
│ ├── MediaAudioChannel.cpp
│ ├── MediaAudioChannel.h
│ ├── MediaGraphicChannel.cpp
│ ├── MediaGraphicChannel.h
│ ├── MediaSource.h
│ ├── MediaSupervisor.cpp
│ ├── MediaSupervisor.h
│ ├── MediaTrack.h
│ ├── MediaTrackImpl.cpp
│ ├── MediaTrackImpl.h
│ ├── VideoFrameDrawer.h
│ └── sources
│ │ ├── SoftwareFrameDrawer.cpp
│ │ ├── SoftwareFrameDrawer.h
│ │ ├── SoftwareSource.cpp
│ │ └── SoftwareSource.h
├── GraphicCore
│ ├── CMakeLists.txt
│ ├── GcAnimaNode.cpp
│ ├── GcAnimaNode.h
│ ├── GcDuplicateNode.cpp
│ ├── GcDuplicateNode.h
│ ├── GcImageNode.cpp
│ ├── GcImageNode.h
│ ├── GcLayer.cpp
│ ├── GcLayer.h
│ ├── GcNode.cpp
│ ├── GcNode.h
│ ├── GcRenderNode.cpp
│ ├── GcRenderNode.h
│ ├── GcScene.cpp
│ ├── GcScene.h
│ ├── base
│ │ ├── ColorTypes.cpp
│ │ ├── ColorTypes.h
│ │ ├── Image.cpp
│ │ ├── Image.h
│ │ └── Macros.h
│ ├── effect
│ │ ├── Effect.h
│ │ ├── EffectGroup.cpp
│ │ ├── EffectGroup.h
│ │ ├── EffectManage.cpp
│ │ ├── EffectManage.h
│ │ └── FlashEffect.h
│ ├── filter
│ │ ├── ColorInvertConfig.cpp
│ │ ├── Filter.cpp
│ │ ├── Filter.h
│ │ ├── FilterConfig.cpp
│ │ ├── FilterConfig.h
│ │ ├── FilterDrawer.cpp
│ │ ├── FilterDrawer.h
│ │ ├── PolarPixellateConfig.cpp
│ │ ├── SobelEdgeDetectionConfig.cpp
│ │ ├── ToonConfig.cpp
│ │ └── WhiteBalanceConfig.cpp
│ ├── math
│ │ ├── CCAffineTransform.cpp
│ │ ├── CCAffineTransform.h
│ │ ├── CCGeometry.cpp
│ │ ├── CCGeometry.h
│ │ ├── CCMath.h
│ │ ├── CCMathBase.h
│ │ ├── Mat4.cpp
│ │ ├── Mat4.h
│ │ ├── Mat4.inl
│ │ ├── MathUtil.cpp
│ │ ├── MathUtil.h
│ │ ├── MathUtil.inl
│ │ ├── MathUtilNeon.inl
│ │ ├── MathUtilNeon64.inl
│ │ ├── MathUtilSSE.inl
│ │ ├── Quaternion.cpp
│ │ ├── Quaternion.h
│ │ ├── Quaternion.inl
│ │ ├── Vec2.cpp
│ │ ├── Vec2.h
│ │ ├── Vec2.inl
│ │ ├── Vec3.cpp
│ │ ├── Vec3.h
│ │ ├── Vec3.inl
│ │ ├── Vec4.cpp
│ │ ├── Vec4.h
│ │ └── Vec4.inl
│ └── opengl
│ │ ├── Drawable2D.cpp
│ │ ├── Drawable2D.h
│ │ ├── FrameBuffer.cpp
│ │ ├── FrameBuffer.h
│ │ ├── GLEngine.cpp
│ │ ├── GLEngine.h
│ │ ├── GLMacros.h
│ │ ├── ShaderProgram.cpp
│ │ ├── ShaderProgram.h
│ │ ├── Texture2D.cpp
│ │ ├── Texture2D.h
│ │ ├── Texture2DDrawer.cpp
│ │ ├── Texture2DDrawer.h
│ │ └── shaders
│ │ ├── ccShader_3D_Color.frag
│ │ ├── ccShader_3D_ColorNormal.frag
│ │ ├── ccShader_3D_ColorNormalTex.frag
│ │ ├── ccShader_3D_ColorTex.frag
│ │ ├── ccShader_3D_Particle.frag
│ │ ├── ccShader_3D_Particle.vert
│ │ ├── ccShader_3D_PositionNormalTex.vert
│ │ ├── ccShader_3D_PositionTex.vert
│ │ ├── ccShader_3D_Skybox.frag
│ │ ├── ccShader_3D_Skybox.vert
│ │ ├── ccShader_3D_Terrain.frag
│ │ ├── ccShader_3D_Terrain.vert
│ │ ├── ccShader_CameraClear.frag
│ │ ├── ccShader_CameraClear.vert
│ │ ├── ccShader_ETC1AS_PositionTextureColor.frag
│ │ ├── ccShader_ETC1AS_PositionTextureGray.frag
│ │ ├── ccShader_Label.vert
│ │ ├── ccShader_Label_df.frag
│ │ ├── ccShader_Label_df_glow.frag
│ │ ├── ccShader_Label_normal.frag
│ │ ├── ccShader_Label_outline.frag
│ │ ├── ccShader_LayerRadialGradient.frag
│ │ ├── ccShader_Position.vert
│ │ ├── ccShader_PositionColor.frag
│ │ ├── ccShader_PositionColor.vert
│ │ ├── ccShader_PositionColorLengthTexture.frag
│ │ ├── ccShader_PositionColorLengthTexture.vert
│ │ ├── ccShader_PositionColorTextureAsPointsize.vert
│ │ ├── ccShader_PositionTexture.frag
│ │ ├── ccShader_PositionTexture.vert
│ │ ├── ccShader_PositionTextureA8Color.frag
│ │ ├── ccShader_PositionTextureA8Color.vert
│ │ ├── ccShader_PositionTextureColor.frag
│ │ ├── ccShader_PositionTextureColor.vert
│ │ ├── ccShader_PositionTextureColorAlphaTest.frag
│ │ ├── ccShader_PositionTextureColor_noMVP.frag
│ │ ├── ccShader_PositionTextureColor_noMVP.vert
│ │ ├── ccShader_PositionTexture_uColor.frag
│ │ ├── ccShader_PositionTexture_uColor.vert
│ │ ├── ccShader_Position_uColor.frag
│ │ ├── ccShader_Position_uColor.vert
│ │ ├── ccShader_UI_Gray.frag
│ │ ├── ccShaders.cpp
│ │ └── ccShaders.h
├── MediaCore
│ ├── CMakeLists.txt
│ ├── QPlayer.cpp
│ ├── QPlayer.h
│ ├── audiocore
│ │ ├── AudioClock.h
│ │ ├── AudioEffect.cpp
│ │ ├── AudioEffect.h
│ │ ├── AudioProcess.cpp
│ │ ├── AudioProcess.h
│ │ ├── ResamplerSpeex.cpp
│ │ └── ResamplerSpeex.h
│ ├── core
│ │ ├── AudioFrame.cpp
│ │ ├── AudioFrame.h
│ │ ├── CodecSpecificInfo.h
│ │ ├── DecodedFrame.h
│ │ ├── DecodedFrameQueue.h
│ │ ├── EncodedPacket.h
│ │ ├── MediaComm.h
│ │ ├── MediaStream.cpp
│ │ ├── MediaStream.h
│ │ ├── SteadyClock.h
│ │ ├── VideoFrame.cpp
│ │ └── VideoFrame.h
│ ├── decoder
│ │ ├── AudioDecoder.h
│ │ ├── Decoder.h
│ │ ├── SoftwareDecoder.cpp
│ │ ├── SoftwareDecoder.h
│ │ └── VideoDecoder.h
│ ├── demuxer
│ │ ├── Demuxer.h
│ │ ├── GeneralDemuxer.cpp
│ │ ├── GeneralDemuxer.h
│ │ ├── Mp4Demuxer.cpp
│ │ └── Mp4Demuxer.h
│ ├── output
│ │ ├── AudioTarget.h
│ │ ├── OutputTarget.h
│ │ └── VideoTarget.h
│ └── protocol
│ │ ├── adts.h
│ │ ├── avcc_parse.c
│ │ ├── avcc_parse.h
│ │ ├── bitstream.c
│ │ ├── bitstream.h
│ │ ├── fs_io.c
│ │ ├── fs_io.h
│ │ ├── golomb.h
│ │ ├── h264_parse.c
│ │ ├── h264_parse.h
│ │ ├── hevc_parse.c
│ │ ├── hevc_parse.h
│ │ ├── hvcc_parse.c
│ │ ├── hvcc_parse.h
│ │ ├── sdp.h
│ │ ├── sdp_decode.c
│ │ └── sdp_util.c
├── Thirdparty
│ ├── CMakeLists.txt
│ ├── ffmpeg
│ │ ├── include
│ │ │ ├── libavcodec
│ │ │ │ ├── ac3_parser.h
│ │ │ │ ├── adts_parser.h
│ │ │ │ ├── avcodec.h
│ │ │ │ ├── avdct.h
│ │ │ │ ├── avfft.h
│ │ │ │ ├── d3d11va.h
│ │ │ │ ├── dirac.h
│ │ │ │ ├── dv_profile.h
│ │ │ │ ├── dxva2.h
│ │ │ │ ├── jni.h
│ │ │ │ ├── mediacodec.h
│ │ │ │ ├── qsv.h
│ │ │ │ ├── vaapi.h
│ │ │ │ ├── vdpau.h
│ │ │ │ ├── version.h
│ │ │ │ ├── videotoolbox.h
│ │ │ │ ├── vorbis_parser.h
│ │ │ │ └── xvmc.h
│ │ │ ├── libavdevice
│ │ │ │ ├── avdevice.h
│ │ │ │ └── version.h
│ │ │ ├── libavfilter
│ │ │ │ ├── avfilter.h
│ │ │ │ ├── buffersink.h
│ │ │ │ ├── buffersrc.h
│ │ │ │ └── version.h
│ │ │ ├── libavformat
│ │ │ │ ├── avformat.h
│ │ │ │ ├── avio.h
│ │ │ │ └── version.h
│ │ │ ├── libavutil
│ │ │ │ ├── adler32.h
│ │ │ │ ├── aes.h
│ │ │ │ ├── aes_ctr.h
│ │ │ │ ├── attributes.h
│ │ │ │ ├── audio_fifo.h
│ │ │ │ ├── avassert.h
│ │ │ │ ├── avconfig.h
│ │ │ │ ├── avstring.h
│ │ │ │ ├── avutil.h
│ │ │ │ ├── base64.h
│ │ │ │ ├── blowfish.h
│ │ │ │ ├── bprint.h
│ │ │ │ ├── bswap.h
│ │ │ │ ├── buffer.h
│ │ │ │ ├── camellia.h
│ │ │ │ ├── cast5.h
│ │ │ │ ├── channel_layout.h
│ │ │ │ ├── common.h
│ │ │ │ ├── cpu.h
│ │ │ │ ├── crc.h
│ │ │ │ ├── des.h
│ │ │ │ ├── dict.h
│ │ │ │ ├── display.h
│ │ │ │ ├── downmix_info.h
│ │ │ │ ├── encryption_info.h
│ │ │ │ ├── error.h
│ │ │ │ ├── eval.h
│ │ │ │ ├── ffversion.h
│ │ │ │ ├── fifo.h
│ │ │ │ ├── file.h
│ │ │ │ ├── frame.h
│ │ │ │ ├── hash.h
│ │ │ │ ├── hdr_dynamic_metadata.h
│ │ │ │ ├── hmac.h
│ │ │ │ ├── hwcontext.h
│ │ │ │ ├── hwcontext_cuda.h
│ │ │ │ ├── hwcontext_d3d11va.h
│ │ │ │ ├── hwcontext_drm.h
│ │ │ │ ├── hwcontext_dxva2.h
│ │ │ │ ├── hwcontext_mediacodec.h
│ │ │ │ ├── hwcontext_qsv.h
│ │ │ │ ├── hwcontext_vaapi.h
│ │ │ │ ├── hwcontext_vdpau.h
│ │ │ │ ├── hwcontext_videotoolbox.h
│ │ │ │ ├── imgutils.h
│ │ │ │ ├── intfloat.h
│ │ │ │ ├── intreadwrite.h
│ │ │ │ ├── lfg.h
│ │ │ │ ├── log.h
│ │ │ │ ├── macros.h
│ │ │ │ ├── mastering_display_metadata.h
│ │ │ │ ├── mathematics.h
│ │ │ │ ├── md5.h
│ │ │ │ ├── mem.h
│ │ │ │ ├── motion_vector.h
│ │ │ │ ├── murmur3.h
│ │ │ │ ├── opt.h
│ │ │ │ ├── parseutils.h
│ │ │ │ ├── pixdesc.h
│ │ │ │ ├── pixelutils.h
│ │ │ │ ├── pixfmt.h
│ │ │ │ ├── random_seed.h
│ │ │ │ ├── rational.h
│ │ │ │ ├── rc4.h
│ │ │ │ ├── replaygain.h
│ │ │ │ ├── ripemd.h
│ │ │ │ ├── samplefmt.h
│ │ │ │ ├── sha.h
│ │ │ │ ├── sha512.h
│ │ │ │ ├── spherical.h
│ │ │ │ ├── stereo3d.h
│ │ │ │ ├── tea.h
│ │ │ │ ├── threadmessage.h
│ │ │ │ ├── time.h
│ │ │ │ ├── timecode.h
│ │ │ │ ├── timestamp.h
│ │ │ │ ├── tree.h
│ │ │ │ ├── twofish.h
│ │ │ │ ├── tx.h
│ │ │ │ ├── version.h
│ │ │ │ └── xtea.h
│ │ │ ├── libswresample
│ │ │ │ ├── swresample.h
│ │ │ │ └── version.h
│ │ │ └── libswscale
│ │ │ │ ├── swscale.h
│ │ │ │ └── version.h
│ │ └── lib
│ │ │ └── android
│ │ │ ├── arm64-v8a
│ │ │ ├── libavcodec.a
│ │ │ ├── libavdevice.a
│ │ │ ├── libavfilter.a
│ │ │ ├── libavformat.a
│ │ │ ├── libavutil.a
│ │ │ ├── libswresample.a
│ │ │ ├── libswscale.a
│ │ │ └── pkgconfig
│ │ │ │ ├── libavcodec.pc
│ │ │ │ ├── libavdevice.pc
│ │ │ │ ├── libavfilter.pc
│ │ │ │ ├── libavformat.pc
│ │ │ │ ├── libavutil.pc
│ │ │ │ ├── libswresample.pc
│ │ │ │ └── libswscale.pc
│ │ │ ├── armeabi-v7a
│ │ │ ├── libavcodec.a
│ │ │ ├── libavdevice.a
│ │ │ ├── libavfilter.a
│ │ │ ├── libavformat.a
│ │ │ ├── libavutil.a
│ │ │ ├── libswresample.a
│ │ │ ├── libswscale.a
│ │ │ └── pkgconfig
│ │ │ │ ├── libavcodec.pc
│ │ │ │ ├── libavdevice.pc
│ │ │ │ ├── libavfilter.pc
│ │ │ │ ├── libavformat.pc
│ │ │ │ ├── libavutil.pc
│ │ │ │ ├── libswresample.pc
│ │ │ │ └── libswscale.pc
│ │ │ └── x86
│ │ │ ├── libavcodec.a
│ │ │ ├── libavdevice.a
│ │ │ ├── libavfilter.a
│ │ │ ├── libavformat.a
│ │ │ ├── libavutil.a
│ │ │ ├── libswresample.a
│ │ │ ├── libswscale.a
│ │ │ └── pkgconfig
│ │ │ ├── libavcodec.pc
│ │ │ ├── libavdevice.pc
│ │ │ ├── libavfilter.pc
│ │ │ ├── libavformat.pc
│ │ │ ├── libavutil.pc
│ │ │ ├── libswresample.pc
│ │ │ └── libswscale.pc
│ ├── giflib
│ │ ├── config.h
│ │ ├── dgif_lib.c
│ │ ├── egif_lib.c
│ │ ├── gif_err.c
│ │ ├── gif_hash.c
│ │ ├── gif_hash.h
│ │ ├── gif_lib.h
│ │ ├── gif_lib_private.h
│ │ ├── gifalloc.c
│ │ └── quantize.c
│ ├── sonic
│ │ ├── sonic.c
│ │ └── sonic.h
│ ├── speex_resampler
│ │ ├── fixed_generic.h
│ │ ├── resample_neon.h
│ │ ├── resample_sse.h
│ │ ├── speex_arch.h
│ │ ├── speex_resampler.c
│ │ ├── speex_resampler.h
│ │ └── speex_stack_alloc.h
│ └── thirdparty.cpp
├── Utils
│ ├── BlockingQueue.h
│ ├── CMakeLists.txt
│ ├── Comm.h
│ ├── Logger.cpp
│ ├── Logger.h
│ ├── PlatformConfig.h
│ ├── ThreadTask.h
│ ├── rw_lock.h
│ └── spin_lock.h
└── qmediacore.cpp
├── README.md
├── doc
├── ApiReference_ios.md
├── ClassUML.md
├── README.md
├── class_ios
│ ├── QAudioTrackNode_ios.md
│ ├── QCombiner_ios.md
│ ├── QDuplicateNode_ios.md
│ ├── QEditorPlayer_ios.md
│ ├── QFileExporter_ios.md
│ ├── QGraphicNode_ios.md
│ ├── QImageNode_ios.md
│ ├── QLayer_ios.md
│ ├── QMediaTrack_ios.md
│ ├── QNodeAnimator_ios.md
│ └── QVideoTrackNode_ios.md
└── resource
│ ├── IOSImplement.png
│ ├── SDKFramework.png
│ └── qmediaframework.png
└── iOS
├── Product
└── Sample
│ └── QMediaSDKSample
│ ├── QMediaSDKSample.xcodeproj
│ └── project.pbxproj
│ └── QMediaSDKSample
│ ├── AnimationViewController.h
│ ├── AnimationViewController.m
│ ├── AppDelegate.h
│ ├── AppDelegate.m
│ ├── Assets.xcassets
│ ├── Add Icon_20x20_.imageset
│ │ ├── Add Icon_20x20_@1x.png
│ │ ├── Add Icon_20x20_@2x.png
│ │ ├── Add Icon_20x20_@3x.png
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-120.png
│ │ ├── Icon-121.png
│ │ ├── Icon-180.png
│ │ ├── Icon-40.png
│ │ ├── Icon-58.png
│ │ ├── Icon-60.png
│ │ ├── Icon-80.png
│ │ └── Icon-87.png
│ ├── Camera_Start.imageset
│ │ ├── Contents.json
│ │ └── movieBtn_red_norm.png
│ ├── Camera_Stop.imageset
│ │ ├── Contents.json
│ │ └── PB_button_video_stop.png
│ ├── Close Icon_18x18_.imageset
│ │ ├── Close Icon_18x18_@1x.png
│ │ ├── Close Icon_18x18_@2x.png
│ │ ├── Close Icon_18x18_@3x.png
│ │ └── Contents.json
│ ├── Contents.json
│ ├── Edit Preview Pause_12x18_.imageset
│ │ ├── Contents.json
│ │ ├── Edit Preview Pause_12x18_@1x.png
│ │ ├── Edit Preview Pause_12x18_@2x.png
│ │ └── Edit Preview Pause_12x18_@3x.png
│ ├── Edit Preview Play_13x18_.imageset
│ │ ├── Contents.json
│ │ ├── Edit Preview Play_13x18_@1x.png
│ │ ├── Edit Preview Play_13x18_@2x.png
│ │ └── Edit Preview Play_13x18_@3x.png
│ ├── Edit Video Animation_19x17_.imageset
│ │ ├── Contents.json
│ │ ├── Edit Video Animation_19x17_@1x.png
│ │ ├── Edit Video Animation_19x17_@2x.png
│ │ └── Edit Video Animation_19x17_@3x.png
│ ├── Edit Video Effects_20x21_.imageset
│ │ ├── Contents.json
│ │ ├── Edit Video Effects_20x21_@1x.png
│ │ ├── Edit Video Effects_20x21_@2x.png
│ │ └── Edit Video Effects_20x21_@3x.png
│ ├── Edit Video Speed_21x14_.imageset
│ │ ├── Contents.json
│ │ ├── Edit Video Speed_21x14_@1x.png
│ │ ├── Edit Video Speed_21x14_@2x.png
│ │ └── Edit Video Speed_21x14_@3x.png
│ ├── Edit Video Trim_20x19_.imageset
│ │ ├── Contents.json
│ │ ├── Edit Video Trim_20x19_@1x.png
│ │ ├── Edit Video Trim_20x19_@2x.png
│ │ └── Edit Video Trim_20x19_@3x.png
│ ├── Settings_20x20_.imageset
│ │ ├── Contents.json
│ │ ├── Settings_20x20_@1x.png
│ │ ├── Settings_20x20_@2x.png
│ │ └── Settings_20x20_@3x.png
│ ├── Share Icon_16x24_.imageset
│ │ ├── Contents.json
│ │ ├── Share Icon_16x24_@1x.png
│ │ ├── Share Icon_16x24_@2x.png
│ │ └── Share Icon_16x24_@3x.png
│ ├── Slider Thumbnail_24x24_.imageset
│ │ ├── Contents.json
│ │ ├── Slider Thumbnail_24x24_@1x.png
│ │ ├── Slider Thumbnail_24x24_@2x.png
│ │ └── Slider Thumbnail_24x24_@3x.png
│ ├── Video Trimmer - Left Arrow_8x16_.imageset
│ │ ├── Contents.json
│ │ ├── Video Trimmer - Left Arrow_8x16_@1x.png
│ │ ├── Video Trimmer - Left Arrow_8x16_@2x.png
│ │ └── Video Trimmer - Left Arrow_8x16_@3x.png
│ ├── Video Trimmer - Left Handle_24x76_.imageset
│ │ ├── Contents.json
│ │ ├── Video Trimmer - Left Handle_24x76_@1x.png
│ │ ├── Video Trimmer - Left Handle_24x76_@2x.png
│ │ └── Video Trimmer - Left Handle_24x76_@3x.png
│ ├── Video Trimmer - Right Arrow_8x16_.imageset
│ │ ├── Contents.json
│ │ ├── Video Trimmer - Right Arrow_8x16_@1x.png
│ │ ├── Video Trimmer - Right Arrow_8x16_@2x.png
│ │ └── Video Trimmer - Right Arrow_8x16_@3x.png
│ └── Video Trimmer - Right Handle_24x76_.imageset
│ │ ├── Contents.json
│ │ ├── Video Trimmer - Right Handle_24x76_@1x.png
│ │ ├── Video Trimmer - Right Handle_24x76_@2x.png
│ │ └── Video Trimmer - Right Handle_24x76_@3x.png
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── BottomTabBarController.h
│ ├── BottomTabBarController.m
│ ├── CommonKits.h
│ ├── CommonKits.m
│ ├── EditorViewController.h
│ ├── EditorViewController.m
│ ├── ExportViewController.h
│ ├── ExportViewController.m
│ ├── FilterCollectionViewCell.h
│ ├── FilterCollectionViewCell.m
│ ├── FilterCollectionViewController.h
│ ├── FilterCollectionViewController.m
│ ├── FilterManager.h
│ ├── FilterManager.m
│ ├── FilterTableViewCell.h
│ ├── FilterTableViewCell.m
│ ├── FilterTableViewController.h
│ ├── FilterTableViewController.m
│ ├── FilterViewController.h
│ ├── FilterViewController.m
│ ├── FloatingTimeView.h
│ ├── FloatingTimeView.m
│ ├── FloatingTimeView.xib
│ ├── GlobalXMObject.h
│ ├── GlobalXMObject.m
│ ├── Info.plist
│ ├── MSColorPicker
│ ├── MSColorComponentView.h
│ ├── MSColorComponentView.m
│ ├── MSColorPicker.h
│ ├── MSColorSelectionView.h
│ ├── MSColorSelectionView.m
│ ├── MSColorSelectionViewController.h
│ ├── MSColorSelectionViewController.m
│ ├── MSColorUtils.h
│ ├── MSColorUtils.m
│ ├── MSColorView.h
│ ├── MSColorWheelView.h
│ ├── MSColorWheelView.m
│ ├── MSHSBView.h
│ ├── MSHSBView.m
│ ├── MSRGBView.h
│ ├── MSRGBView.m
│ ├── MSSliderView.h
│ ├── MSSliderView.m
│ ├── MSThumbView.h
│ ├── MSThumbView.m
│ ├── UIControl+HitTestEdgeInsets.h
│ └── UIControl+HitTestEdgeInsets.m
│ ├── MediaMainViewController.h
│ ├── MediaMainViewController.m
│ ├── PixelSizeManager.h
│ ├── PixelSizeManager.m
│ ├── PreviewSliderBarController.h
│ ├── PreviewSliderBarController.m
│ ├── PreviewViewController.h
│ ├── PreviewViewController.m
│ ├── ResTrackTableViewCell.h
│ ├── ResTrackTableViewCell.m
│ ├── ResTrackTableViewController.h
│ ├── ResTrackTableViewController.m
│ ├── SettingsTableViewController.h
│ ├── SettingsTableViewController.m
│ ├── TrackSettingTableViewController.h
│ ├── TrackSettingTableViewController.m
│ ├── TransformTableViewController.h
│ ├── TransformTableViewController.m
│ ├── VideoRecorderViewController.h
│ ├── VideoRecorderViewController.m
│ ├── VideoRecorderViewController.xib
│ ├── audio
│ └── LR.mp3
│ ├── image
│ ├── fish
│ │ ├── 41864623_1.png
│ │ ├── 41864623_10.png
│ │ ├── 41864623_11.png
│ │ ├── 41864623_12.png
│ │ ├── 41864623_13.png
│ │ ├── 41864623_14.png
│ │ ├── 41864623_2.png
│ │ ├── 41864623_3.png
│ │ ├── 41864623_4.png
│ │ ├── 41864623_5.png
│ │ ├── 41864623_6.png
│ │ ├── 41864623_7.png
│ │ ├── 41864623_8.png
│ │ └── 41864623_9.png
│ ├── li.jpg
│ └── test.gif
│ ├── main.mm
│ └── video
│ └── test.mp4
├── QMediaSDK
├── QMediaCore
│ └── QMediaCore.xcodeproj
│ │ └── project.pbxproj
├── QMediaSDK.xcodeproj
│ └── project.pbxproj
├── QMediaSDK.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── WorkspaceSettings.xcsettings
├── QMediaSDK
│ ├── Info.plist
│ ├── QAudio
│ │ ├── QAudioFrame.h
│ │ ├── QAudioFrame.mm
│ │ ├── QAudioTrackNode.h
│ │ ├── QAudioTrackNode.mm
│ │ └── QAudioTrackNode_internal.h
│ ├── QCommon
│ │ ├── IOSGLTextureDrawable.h
│ │ ├── IOSGLTextureDrawable.mm
│ │ ├── IOSTexture.h
│ │ ├── IOSTexture.m
│ │ ├── QCommon.h
│ │ ├── QCommon.m
│ │ ├── QDeviceUtils.h
│ │ ├── QDeviceUtils.m
│ │ ├── QFileUtils.h
│ │ ├── QFileUtils.m
│ │ ├── QObserverHoster.h
│ │ └── QObserverHoster.m
│ ├── QEditor
│ │ ├── QCombiner.h
│ │ ├── QCombiner.mm
│ │ ├── QCombiner_internal.h
│ │ ├── QEditorPlayer.h
│ │ ├── QEditorPlayer.mm
│ │ ├── QExporter.h
│ │ ├── QExporter.mm
│ │ ├── QFileExporter.h
│ │ ├── QFileExporter.mm
│ │ ├── SerializeSetting.h
│ │ └── SerializeSetting.mm
│ ├── QEffect
│ │ ├── QEffect.h
│ │ ├── QEffect.mm
│ │ ├── QEffectManage.h
│ │ ├── QEffectManage.mm
│ │ └── QEffect_internal.h
│ ├── QGraphic
│ │ ├── QDuplicateNode.h
│ │ ├── QDuplicateNode.mm
│ │ ├── QGLContext.h
│ │ ├── QGLContext.m
│ │ ├── QGraphicNode.h
│ │ ├── QGraphicNode.mm
│ │ ├── QGraphicNode_internal.h
│ │ ├── QImageNode.h
│ │ ├── QImageNode.mm
│ │ ├── QLayer.h
│ │ ├── QLayer.mm
│ │ ├── QNodeAnimator.h
│ │ ├── QNodeAnimator.mm
│ │ ├── QVideoFrame.h
│ │ ├── QVideoFrame.mm
│ │ ├── QVideoTrackNode.h
│ │ └── QVideoTrackNode.mm
│ ├── QMediaMerge
│ │ ├── QMediaMerge.h
│ │ ├── QMediaMerge.m
│ │ ├── QSourceFileForMerge.h
│ │ └── QSourceFileForMerge.m
│ ├── QMediaSDK.h
│ ├── QSource
│ │ ├── QAssetReaderSource.h
│ │ ├── QAssetReaderSource.m
│ │ ├── QCaptureSource.h
│ │ ├── QCaptureSource.mm
│ │ ├── QInternalVideoSource.h
│ │ ├── QInternalVideoSource.mm
│ │ ├── QInternalVideoSource_internal.h
│ │ ├── QMediaDescribe.h
│ │ ├── QMediaDescribe.mm
│ │ ├── QMediaSource.h
│ │ ├── QMediaSource_internal.h
│ │ ├── VideoCaptureSession.h
│ │ └── VideoCaptureSession.m
│ ├── QTarget
│ │ ├── Implements
│ │ │ ├── OpenGL
│ │ │ │ ├── CCDirectorCaller-ios.h
│ │ │ │ ├── CCDirectorCaller-ios.m
│ │ │ │ ├── CCEAGLView-ios.h
│ │ │ │ ├── CCEAGLView-ios.m
│ │ │ │ ├── CCES2Renderer-ios.h
│ │ │ │ ├── CCES2Renderer-ios.m
│ │ │ │ ├── CCESRenderer-ios.h
│ │ │ │ └── OpenGL_Internal-ios.h
│ │ │ ├── QAudioPlayer.h
│ │ │ ├── QAudioPlayer.m
│ │ │ ├── QFileExporterTarget.h
│ │ │ ├── QFileExporterTarget.m
│ │ │ ├── QPlayerView.h
│ │ │ └── QPlayerView.m
│ │ ├── QAudioTarget.h
│ │ ├── QAudioTarget_internal.h
│ │ ├── QVideoTarget.h
│ │ └── QVideoTarget_internal.h
│ └── QTrack
│ │ ├── QMediaFactory.h
│ │ ├── QMediaFactory.mm
│ │ ├── QMediaFactory_internal.h
│ │ ├── QMediaTrack.h
│ │ ├── QMediaTrack.mm
│ │ ├── QMediaTrack_internal.h
│ │ └── QTrack.h
└── QMediaSDKTests
│ ├── Info.plist
│ └── QMediaSDKTests.m
└── SDKBuild
└── ReleaseBuild.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | **/.DS_Store
2 | iOS/QMediaSDK/QMediaCore/QMediaCore.xcodeproj/xcuserdata/*
3 | iOS/QMediaSDK/QMediaSDK.xcodeproj/xcuserdata/*
4 | iOS/QMediaSDK/QMediaSDK.xcworkspace/xcshareddata/*
5 | iOS/QMediaSDK/QMediaSDK.xcworkspace/xcuserdata/*
6 | iOS/SDKBuild/Debug-Product/*
7 | iOS/SDKBuild/Debug-iphoneos/*
8 | iOS/SDKBuild/Debug-iphonesimulator/*
9 | iOS/Product/Sample/QMediaSDKSample/QMediaSDKSample.xcodeproj/project.xcworkspace/*
10 | iOS/Product/Sample/QMediaSDKSample/QMediaSDKSample.xcodeproj/xcuserdata/*
11 | Android/QMediaSDK/.gradle
12 | Android/QMediaSDK/qmediasdk/.externalNativeBuild
13 | Android/QMediaSDK/qmediasdk/build
14 | Android/QMediaSDK/.idea
15 | Android/QMediaSDK/app/build/generated
16 | Android/QMediaSDK/app/build/intermediates
17 | Android/QMediaSDK/qmediasdk/.cxx
18 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "QMediaCore/Thirdparty/stb"]
2 | path = QMediaCore/Thirdparty/stb
3 | url = https://github.com/nothings/stb.git
4 | [submodule "QMediaCore/Thirdparty/mp4"]
5 | path = QMediaCore/Thirdparty/mp4
6 | url = https://github.com/spring-zh/mp4.git
7 | branch = develop
8 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/androidTest/java/com/qmedia/qmediasdk/demo/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.demo;
2 |
3 | import android.content.Context;
4 | import android.support.test.InstrumentationRegistry;
5 | import android.support.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumentation test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() throws Exception {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.xunlei.xlmediasdk.demo", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/B1.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/B1.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/B2.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/B2.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/F1.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/F1.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/F2.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/F2.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/ID_24.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/ID_24.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/L1.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/L1.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/L2.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/L2.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/L3.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/L3.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/LR.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/LR.mp3
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/N1.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/N1.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/P1.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/P1.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/R1.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/R1.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/S1.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/S1.bmp
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/audio.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/audio.mp3
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/brightness:
--------------------------------------------------------------------------------
1 | [{
2 | "name": "Brightness",
3 | "desc": "Brightness",
4 | "textureTarget": "GL_TEXTURE_2D",
5 | "fragmentShader": "varying highp vec2 textureCoordinate;\n \n uniform sampler2D inputImageTexture;\n uniform lowp float brightness;\n \n void main()\n {\n lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);\n \n gl_FragColor = vec4((textureColor.rgb + vec3(brightness)), textureColor.w);\n }",
6 | "attrs": [{
7 | "brightness": [0.5]
8 | }]
9 | }]
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/f1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/f1.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/f2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/f2.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/f3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/f3.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/heibai:
--------------------------------------------------------------------------------
1 | [{
2 | "name": "heibai",
3 | "desc": "heibai",
4 | "textureTarget": "GL_TEXTURE_2D",
5 | "fragmentShader": " \nprecision highp float;\nvarying highp vec2 textureCoordinate; \nuniform sampler2D inputImageTexture;\n uniform highp float alpha;\n void main()\n{\n vec4 value = texture2D(inputImageTexture, textureCoordinate);\n float v = (value.r+value.g+value.b)/3.0; gl_FragColor = vec4(v,v,v,1.0);\n} ",
6 | "attrs": []
7 | }]
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/ic_launcher.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/li.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/li.jpg
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/li2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/li2.jpeg
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/li2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/li2.jpg
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/li3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/li3.jpg
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/li3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/li3.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/li4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/li4.jpg
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/lookup_amatorka.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/lookup_amatorka.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/maicha:
--------------------------------------------------------------------------------
1 | [{
2 | "name": "maicha",
3 | "desc": "maicha",
4 | "textureTarget": "GL_TEXTURE_2D",
5 | "fragmentShader": " \nprecision highp float;\nvarying highp vec2 textureCoordinate; \nuniform sampler2D inputImageTexture;\nuniform sampler2D inputImageTexture2;\nvoid main()\n{\n vec4 value = texture2D(inputImageTexture, textureCoordinate);\n float r = texture2D(inputImageTexture2, vec2(value.r, 0.5)).r;\n float g = texture2D(inputImageTexture2, vec2(value.g, 0.5)).g;\n float b = texture2D(inputImageTexture2, vec2(value.b, 0.5)).b;\n gl_FragColor = vec4(r,g,b,1.0);\n} ",
6 | "attrs": []
7 | }]
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/test.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/test.mp4
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/test2.m4v:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/test2.m4v
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/assets/timg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/assets/timg.gif
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/btn_down_n.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/btn_down_n.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/btn_down_p.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/btn_down_p.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/btn_up_n.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/btn_up_n.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/btn_up_p.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/btn_up_p.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/filter_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/filter_img.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/ic_arrow_back_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/ic_arrow_back_white_24dp.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/ic_media_stop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/ic_media_stop.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/ic_share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/ic_share.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/seekbar_bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/seekbar_bg.jpg
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/seekbar_n.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/seekbar_n.jpg
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/seekbar_p.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/seekbar_p.jpg
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-hdpi/video_clip_time_stamp_budge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-hdpi/video_clip_time_stamp_budge.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/file_enter_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/file_enter_icon.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_account_circle_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_account_circle_white_24dp.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_arrow_back_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_arrow_back_black_24dp.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_arrow_back_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_arrow_back_white_24dp.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_arrow_drop_down_grey_700_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_arrow_drop_down_grey_700_24dp.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_arrow_drop_up_grey_700_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_arrow_drop_up_grey_700_24dp.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_sd_storage_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/ic_sd_storage_black_24dp.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/jc_pause_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/jc_pause_normal.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/jc_pause_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/jc_pause_pressed.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/jc_play_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/jc_play_normal.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/jc_play_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/jc_play_pressed.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ac_ram_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ac_ram_icon.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ac_sd_card_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ac_sd_card_icon.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ac_text_file_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ac_text_file_icon.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ad_list_audio_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ad_list_audio_icon.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ad_list_file_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ad_list_file_icon.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ad_list_folder_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ad_list_folder_icon.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ad_list_other_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ad_list_other_icon.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ad_list_video_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_ad_list_video_icon.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_else.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_else.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_excel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_excel.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_file.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_mp3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_mp3.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_picture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_picture.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_video.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_video.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_word.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xhdpi/rc_file_icon_word.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xxhdpi/ic_album_tick_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xxhdpi/ic_album_tick_blue.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xxhdpi/ic_album_tick_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xxhdpi/ic_album_tick_white.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/bg_seekbar_progress_drawable.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | -
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | -
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/capture_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable/capture_pressed.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/capture_unpressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable/capture_unpressed.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/divide_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/ic_left_sliderbar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable/ic_left_sliderbar.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/ic_right_sliderbar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable/ic_right_sliderbar.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/ic_slider_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable/ic_slider_left.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/ic_slider_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable/ic_slider_right.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/jc_click_pause_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/jc_click_play_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/pointer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable/pointer.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/save_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable/save_pressed.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/save_unpressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/drawable/save_unpressed.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/selector_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/selector_bar_btn_down.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/selector_bar_btn_up.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/selector_capture.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 | -
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/selector_save.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 | -
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/shape_bt_send.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
10 |
12 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/shape_bt_send_blue.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
10 |
12 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/shape_path.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
10 |
13 |
15 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/top_r_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/top_r_bg_a.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
12 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/top_r_bg_b.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/drawable/top_r_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
18 |
19 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/layout/activity_reader_muxer.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/layout/content_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
14 |
15 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spring-zh/QMedia/9c12b351feeedaaa89ecf70cb347e4c10d9350fc/Android/QMediaSDK/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 16dp
3 | 16dp
4 | 16dp
5 |
6 | 45dp
7 | 62dp
8 |
9 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/app/src/test/java/com/qmedia/qmediasdk/demo/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.demo;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() throws Exception {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/Android/QMediaSDK/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | jcenter()
6 | google()
7 | }
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:3.6.4'
10 | //classpath 'com.android.tools.build:gradle-experimental:0.9.2'
11 |
12 | // NOTE: Do not place your application dependencies here; they belong
13 | // in the individual module build.gradle files
14 | }
15 | }
16 |
17 | allprojects {
18 | repositories {
19 | jcenter()
20 | maven {
21 | url "https://maven.google.com"
22 | }
23 | }
24 | }
25 |
26 | task clean(type: Delete) {
27 | delete rootProject.buildDir
28 | }
29 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Aug 24 15:17:10 CST 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
7 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu May 11 19:04:34 CST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
7 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/jni/AudioTargetAdapter.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by spring on 2020/5/19.
3 | //
4 |
5 | #ifndef QMEDIASDK_AUDIOTARGETADAPTER_H
6 | #define QMEDIASDK_AUDIOTARGETADAPTER_H
7 |
8 | #include "JniUtils.h"
9 | #include "MediaCore/output/AudioTarget.h"
10 |
11 | class AudioTargetAdapter : public AudioTarget{
12 | public:
13 | explicit AudioTargetAdapter(jobject jtarget) ;
14 | ~AudioTargetAdapter() ;
15 | bool init(AudioDescribe audioDesc) override;
16 |
17 | void unInit() override;
18 |
19 | int getSampleRate() const override;
20 |
21 | int getChannels() const override;
22 |
23 | RawAudioFormat getFormat() const override;
24 |
25 | void setVolume(float volume) override;
26 |
27 | float getVolume() const override;
28 |
29 | int getAudioDelayBytes() const override;
30 |
31 | bool start() override;
32 |
33 | bool stop() override;
34 |
35 | void pause(bool isPause) override;
36 |
37 | void flush() override;
38 |
39 | protected:
40 | const JniUtils::JWeakObject _weakObj;
41 | };
42 |
43 |
44 | #endif //QMEDIASDK_AUDIOTARGETADAPTER_H
45 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/jni/MediaSourceAdapter.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by spring on 2020/5/19.
3 | //
4 |
5 | #ifndef QMEDIASDK_MEDIASOURCEADAPTER_H
6 | #define QMEDIASDK_MEDIASOURCEADAPTER_H
7 |
8 | #include "JniUtils.h"
9 | #include "EffectEditor/MediaSource.h"
10 | #include "VideoTargetAdapter.h"
11 | #include "AudioTargetAdapter.h"
12 |
13 | class MediaSourceAdapter : public MediaSource{
14 | public:
15 | explicit MediaSourceAdapter(jobject jsource);
16 | ~MediaSourceAdapter();
17 |
18 | bool load() override;
19 |
20 | void unload() override;
21 |
22 | bool isInit() override;
23 |
24 | bool start(int64_t startMSec, int64_t endMSec) override ;
25 | void stop() override;
26 |
27 | bool seekTo(int64_t mSec) override;
28 |
29 | bool isEOF() override;
30 |
31 | VideoFrameDrawer *createVideoFrameDrawer() override;
32 |
33 | VideoFrame readNextVideoFrame(int &error) override;
34 |
35 | AudioFrame readNextAudioFrame(int &error) override;
36 |
37 | protected:
38 | const JniUtils::JWeakObject _weakObj;
39 | std::unique_ptr _videoTargetAdapter;
40 | std::unique_ptr _audioTargetAdapter;
41 | };
42 |
43 |
44 | #endif //QMEDIASDK_MEDIASOURCEADAPTER_H
45 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/jni/QAudioFrame_Jni.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by spring on 2020/5/20.
3 | //
4 |
5 | #ifndef QMEDIASDK_QAUDIOFRAME_JNI_H
6 | #define QMEDIASDK_QAUDIOFRAME_JNI_H
7 |
8 | #include "JniUtils.h"
9 | #include "MediaCore/core/AudioFrame.h"
10 |
11 | class JavaAudioFrameBuffer : public AudioFrameBuffer {
12 | public:
13 | JavaAudioFrameBuffer(jobject jframe);
14 | ~JavaAudioFrameBuffer();
15 | int Channels() const override;
16 |
17 | int SampleRate() const override;
18 |
19 | int SampleBits() const override;
20 |
21 | int Samples() const override;
22 |
23 | const uint8_t *Data() const override;
24 |
25 | uint32_t Size() const override;
26 |
27 | enum ChannelLayout ChannelLayout() const override;
28 |
29 | std::shared_ptr
30 | ReSampleBuffer(RawAudioFormat fmt, int samplerate, int channels) override;
31 | protected:
32 | jobject _object;
33 | uint8_t *_pbuffer;
34 | int64_t _size;
35 | int _channels;
36 | int _samplerate;
37 | int _samplebits;
38 | };
39 |
40 | extern AudioFrame createAudioFrameByObject(JNIEnv* env,jobject jframe);
41 |
42 | #endif //QMEDIASDK_QAUDIOFRAME_JNI_H
43 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/jni/QDuplicateNode_Jni.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by spring on 2020/5/21.
3 | //
4 |
5 | #include "GraphicCore/GcDuplicateNode.h"
6 | #include "JniUtils.h"
7 | #include "j4a_generate/j4a_generate.h"
8 |
9 | #define NATIVE_FUNCTION(retT, name)\
10 | extern "C" JNIEXPORT retT JNICALL Java_com_qmedia_qmediasdk_QGraphic_QDuplicateNode_##name
11 |
12 | NATIVE_FUNCTION(jlong, native_1create)(JNIEnv *env, jobject thiz, jobject jnode)
13 | {
14 | GraphicCore::RenderNodeRef * renderNode_ptr = reinterpret_cast(JniUtils::getObjectPtr(env, jnode));
15 | GraphicCore::DuplicateNodeRef * duplicateNode_ptr = new GraphicCore::DuplicateNodeRef(new GraphicCore::DuplicateNode((*renderNode_ptr).get()));
16 |
17 | return reinterpret_cast(duplicateNode_ptr);
18 | }
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/jni/QEditorPlayer_Jni.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by spring on 2020/5/21.
3 | //
4 |
5 | #ifndef QMEDIASDK_QEDITORPLAYER_JNI_H
6 | #define QMEDIASDK_QEDITORPLAYER_JNI_H
7 |
8 | #include "JniUtils.h"
9 | #include "EffectEditor/EditorPlayer.h"
10 |
11 | class QEditorPlayer_Jni : public EditorPlayer , EditorPlayer::Callback{
12 | public:
13 |
14 | QEditorPlayer_Jni(jobject jpalyer);
15 | ~QEditorPlayer_Jni();
16 |
17 | void onPrepare(RetCode code) override;
18 |
19 | void onPlayerStateChanged(PlayerState newState, PlayerState oldState) override;
20 |
21 | void onProgressUpdated(int64_t mSec) override;
22 |
23 | void onSeekTo(int64_t mSec) override;
24 |
25 | void onCompleted() override;
26 |
27 | private:
28 |
29 | JniUtils::JWeakObject _weakObj;
30 | };
31 |
32 |
33 | #endif //QMEDIASDK_QEDITORPLAYER_JNI_H
34 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/jni/QExporter_Jni.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by spring on 2020/5/29.
3 | //
4 |
5 | #ifndef QMEDIASDK_QEXPORTER_JNI_H
6 | #define QMEDIASDK_QEXPORTER_JNI_H
7 |
8 | #include "JniUtils.h"
9 | #include "EffectEditor/EditorExporter.h"
10 |
11 | class QExporter_Jni : public EditorExporter , public EditorExporter::Callback{
12 | public:
13 | QExporter_Jni(jobject jexporter);
14 | ~QExporter_Jni();
15 |
16 | void onStarted(RetCode code) override;
17 |
18 | void onStoped(RetCode code) override;
19 |
20 | void onProgressUpdated(int64_t mSec) override;
21 |
22 | void onCanceled(RetCode code) override;
23 |
24 | void onCompleted() override;
25 |
26 | private:
27 |
28 | JniUtils::JWeakObject _weakObj;
29 | };
30 |
31 |
32 | #endif //QMEDIASDK_QEXPORTER_JNI_H
33 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/jni/QImageNode_Jni.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by spring on 2020/6/7.
3 | //
4 |
5 | #include "GraphicCore/GcImageNode.h"
6 | #include "JniUtils.h"
7 | #include "j4a_generate/j4a_generate.h"
8 |
9 | #define NATIVE_FUNCTION(retT, name)\
10 | extern "C" JNIEXPORT retT JNICALL Java_com_qmedia_qmediasdk_QGraphic_QImageNode_##name
11 |
12 | NATIVE_FUNCTION(jlong, native_1create)(JNIEnv *env, jobject thiz, jstring jfilePath, jboolean jinAsset)
13 | {
14 | const char * pfilePath = env->GetStringUTFChars(jfilePath, NULL);
15 | GraphicCore::ImageNodeRef * imageNode_ptr = new GraphicCore::ImageNodeRef(new GraphicCore::ImageNode(pfilePath));
16 | env->ReleaseStringUTFChars(jfilePath, pfilePath);
17 |
18 | return reinterpret_cast(imageNode_ptr);
19 | }
20 |
21 | NATIVE_FUNCTION(jobject , native_1getSize)(JNIEnv *env, jobject thiz)
22 | {
23 | GraphicCore::ImageNodeRef *imageNode_ptr = reinterpret_cast(JniUtils::getObjectPtr(
24 | env, thiz));
25 | int width = 0;
26 | int height = 0;
27 | if (imageNode_ptr){
28 | width = (*imageNode_ptr)->getWidth();
29 | height = (*imageNode_ptr)->getHeight();
30 | }
31 | return J4AC_com_qmedia_qmediasdk_QCommon_QSize__QSize(env, width, height);
32 | }
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/jni/QMediaDescribe_Jni.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by spring on 2020/5/19.
3 | //
4 |
5 | #ifndef QMEDIASDK_QMEDIADESCRIBE_JNI_H
6 | #define QMEDIASDK_QMEDIADESCRIBE_JNI_H
7 |
8 | #include "JniUtils.h"
9 | #include "MediaCore/core/MediaComm.h"
10 |
11 | #define QAUDIODESCRIBE_CLASSPATH "com/qmedia/qmediasdk/QSource/QAudioDescribe"
12 | #define QVIDEODESCRIBE_CLASSPATH "com/qmedia/qmediasdk/QSource/QVideoDescribe"
13 |
14 | class QMediaDescribe_Jni {
15 | public:
16 | static jobject VideoDescribeToJava(JNIEnv* env, VideoDescribe videoDescribe);
17 | static jobject AudioDescribeToJava(JNIEnv* env, AudioDescribe audioDescribe);
18 |
19 | static VideoDescribe JavaToVideoDescribe(JNIEnv* env, jobject jvideoDescribe);
20 | static AudioDescribe JavaToAudioDescribe(JNIEnv* env, jobject jaudioDescribe);
21 | };
22 |
23 |
24 | #endif //QMEDIASDK_QMEDIADESCRIBE_JNI_H
25 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/jni/QVideoTrackNode_Jni.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by spring on 2020/5/21.
3 | //
4 |
5 | #include "EffectEditor/MediaGraphicChannel.h"
6 | #include "EffectEditor/MediaTrackImpl.h"
7 | #include "JniUtils.h"
8 | #include "j4a_generate/j4a_generate.h"
9 |
10 | #define NATIVE_FUNCTION(retT, name)\
11 | extern "C" JNIEXPORT retT JNICALL Java_com_qmedia_qmediasdk_QGraphic_QVideoTrackNode_##name
12 |
13 | NATIVE_FUNCTION(jlong, native_1create)(JNIEnv *env, jobject thiz, jobject jtrack)
14 | {
15 | MediaTrackRef * mediaTrack_ptr = reinterpret_cast(JniUtils::getObjectPtr(env, jtrack));
16 | MediaGraphicChannelRef * graphicChannel_ptr = new MediaGraphicChannelRef(new MediaGraphicChannel((*mediaTrack_ptr).get()));
17 |
18 | return reinterpret_cast(graphicChannel_ptr);
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/jni/VideoTargetAdapter.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by spring on 2020/5/19.
3 | //
4 |
5 | #ifndef QMEDIASDK_VIDEOTARGETADAPTER_H
6 | #define QMEDIASDK_VIDEOTARGETADAPTER_H
7 |
8 | #include "JniUtils.h"
9 | #include "MediaCore/output/VideoTarget.h"
10 |
11 | class VideoTargetAdapter : public VideoTarget{
12 | public:
13 | explicit VideoTargetAdapter(jobject jtarget) ;
14 | ~VideoTargetAdapter() ;
15 | bool start() override;
16 |
17 | bool stop() override;
18 |
19 | void pause(bool isPause) override;
20 |
21 | void flush() override;
22 |
23 | bool init(VideoDescribe videoDesc) override;
24 |
25 | const int getWidth() const override;
26 |
27 | const int getHeight() const override;
28 |
29 | const float getFrameRate() const override;
30 |
31 | void * getRenderContext() const override;
32 |
33 | protected:
34 |
35 | const JniUtils::JWeakObject _weakObj;
36 | };
37 |
38 |
39 | #endif //QMEDIASDK_VIDEOTARGETADAPTER_H
40 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/jni/j4a_generate/j4a_generate.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by spring on 2020/5/20.
3 | //
4 |
5 | #ifndef QMEDIASDK_J4A_GENERATE_H
6 | #define QMEDIASDK_J4A_GENERATE_H
7 |
8 | #ifdef __cplusplus
9 | extern "C" {
10 | #endif
11 |
12 | #include "j4a_generate/QAudioDescribe.h"
13 | #include "j4a_generate/QVideoDescribe.h"
14 | #include "j4a_generate/QRange.h"
15 | #include "j4a_generate/QVector.h"
16 | #include "j4a_generate/QSize.h"
17 | #include "j4a_generate/QBlendFunc.h"
18 | #include "j4a_generate/QEffectConfig.h"
19 | #include "j4a_generate/QVideoFrame.h"
20 | #include "j4a_generate/QAudioFrame.h"
21 | #include "j4a_generate/QNodeAnimator.h"
22 | #include "j4a_generate/QMediaSource.h"
23 | #include "j4a_generate/QVideoTarget.h"
24 | #include "j4a_generate/QAudioTarget.h"
25 | #include "j4a_generate/QAudioTarget.h"
26 | #include "j4a_generate/QVideoTarget.h"
27 | #include "j4a_generate/QAudioRender.h"
28 | #include "j4a_generate/QVideoRender.h"
29 | #include "j4a_generate/QEditorPlayer.h"
30 | #include "j4a_generate/QExporter.h"
31 |
32 | #ifdef __cplusplus
33 | }
34 | #endif
35 |
36 | #endif //QMEDIASDK_J4A_GENERATE_H
37 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/androidTest/java/com/qmedia/qmediasdk/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk;
2 |
3 | import android.content.Context;
4 | import android.support.test.InstrumentationRegistry;
5 | import android.support.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumentation test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() throws Exception {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.xunlei.xlmediasdk.test", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QCommon/QRange.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QCommon;
2 |
3 | public class QRange {
4 | public QRange(){
5 | this.start = 0;
6 | this.end = 0;
7 | }
8 | public QRange(long start, long end){
9 | this.start = start;
10 | this.end = end;
11 | }
12 |
13 | public boolean isValid() {
14 | return end > start;
15 | }
16 |
17 | public long getLength() {
18 | return end - start;
19 | }
20 |
21 | public long start;
22 | public long end;
23 | }
24 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QCommon/QSize.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QCommon;
2 |
3 | public class QSize {
4 | public QSize() {
5 | this.width = 0;
6 | this.height = 0;
7 | }
8 |
9 | public QSize(float width ,float height) {
10 | this.width = width;
11 | this.height = height;
12 | }
13 |
14 | boolean isZero() {
15 | return (width == 0 && height == 0);
16 | }
17 |
18 | public float width;
19 | public float height;
20 | }
21 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QCommon/QVector.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QCommon;
2 |
3 | public class QVector {
4 | public QVector(float v0) {
5 | this.v0 = v0;
6 | }
7 | public QVector(float v0, float v1) {
8 | this.v0 = v0;
9 | this.v1 = v1;
10 | }
11 | public QVector(float v0, float v1, float v2) {
12 | this.v0 = v0;
13 | this.v1 = v1;
14 | this.v2 = v2;
15 | }
16 | public QVector(float v0, float v1, float v2, float v3) {
17 | this.v0 = v0;
18 | this.v1 = v1;
19 | this.v2 = v2;
20 | this.v3 = v3;
21 | }
22 |
23 | public float v0 = 0, v1 = 0, v2 = 0, v3 = 0;
24 | }
25 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QCommon/media/EncodedPacketQueue.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QCommon.media;
2 |
3 | import java.util.LinkedList;
4 |
5 | //this queue use to cache packets
6 | public class EncodedPacketQueue extends LinkedList {
7 | @Override
8 | public boolean add(HardwareDecoder.EncodedPacket packet)
9 | {
10 | synchronized (this) {
11 | boolean bRet = super.add(packet);
12 | this.notify();
13 | return bRet;
14 | }
15 | }
16 |
17 | @Override
18 | public HardwareDecoder.EncodedPacket remove() {
19 | HardwareDecoder.EncodedPacket packet = null;
20 | synchronized (this) {
21 |
22 | while (super.size() <= 0){
23 | try {
24 | this.wait();
25 | } catch (InterruptedException e) {
26 | e.printStackTrace();
27 | }
28 | }
29 |
30 | packet = super.remove();
31 | }
32 | return packet;
33 | }
34 |
35 | @Override
36 | public void clear(){
37 | synchronized (this) {
38 | super.clear();
39 | }
40 | }
41 | }
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QEditor/QFileExporter.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QEditor;
2 |
3 | import android.os.Handler;
4 |
5 | import com.qmedia.qmediasdk.QTarget.Implements.QFileExporterTarget;
6 |
7 | public class QFileExporter extends QExporter {
8 | public QFileExporter(String filePath) {
9 | this(filePath, null);
10 | }
11 |
12 | public QFileExporter(String filePath, Handler cbHandler) {
13 | super(cbHandler);
14 | this.filePath = filePath;
15 | fileExporterTarget = new QFileExporterTarget(filePath);
16 | setVideoTarget(fileExporterTarget);
17 | setAudioTarget(fileExporterTarget);
18 | fileExporterTarget.setVideoRender(this);
19 | fileExporterTarget.setAudioRender(this);
20 | }
21 |
22 | public String getFilePath() {
23 | return filePath;
24 | }
25 |
26 | private QFileExporterTarget fileExporterTarget;
27 | private String filePath;
28 | }
29 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QEffect/QEffectConfig.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QEffect;
2 |
3 | public class QEffectConfig {
4 | public QEffectConfig(String name, String describe, String type) {
5 | this.name = name;
6 | this.describe = describe;
7 | this.type = type;
8 | }
9 |
10 | public String getName() {
11 | return name;
12 | }
13 |
14 | public String getDescribe() {
15 | return describe;
16 | }
17 |
18 | public String getType() {
19 | return type;
20 | }
21 |
22 | String name;
23 | String describe;
24 | String type;
25 | }
26 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QEffect/QEffectManage.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QEffect;
2 |
3 | public class QEffectManage {
4 | /**
5 | * get all effect config, {name , describe , type}
6 | */
7 | public static QEffectConfig[] getAllEffectConfig() {
8 | return native_getAllEffectConfig();
9 | }
10 |
11 | static boolean addFilterConfig(String json_config) {
12 | return native_addFilterConfig(json_config);
13 | }
14 |
15 | /**
16 | * create effect by effect_name
17 | * @param effect_name: use name in the name of all EffectConfig
18 | * @return failed is null
19 | */
20 | public static QEffect createEffect(String effect_name) {
21 | long effect_ptr = native_createEffect(effect_name);
22 | if (effect_ptr != 0) {
23 | return new QEffect(effect_ptr);
24 | }else
25 | return null;
26 | }
27 |
28 | private static native QEffectConfig[] native_getAllEffectConfig();
29 | private static native boolean native_addFilterConfig(String json_config);
30 | private static native long native_createEffect(String effect_name);
31 | }
32 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QGraphic/QDuplicateNode.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QGraphic;
2 |
3 | import com.qmedia.qmediasdk.QEditor.QCombiner;
4 |
5 | import java.util.UUID;
6 |
7 | public class QDuplicateNode extends QGraphicNode {
8 | public QDuplicateNode(QGraphicNode fromNode, QCombiner combiner) {
9 | this(fromNode, combiner, UUID.randomUUID().toString());
10 | }
11 | //set id for index
12 | public QDuplicateNode(QGraphicNode fromNode, QCombiner combiner, String id) {
13 | super(combiner, id);
14 | this.fromNode = fromNode;
15 | mPtr = native_create(fromNode);
16 | }
17 |
18 | public QGraphicNode getFromNode() {
19 | return fromNode;
20 | }
21 |
22 | private QGraphicNode fromNode;
23 |
24 | //TODO: native
25 | protected native long native_create(QGraphicNode fromNode);
26 | }
27 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QGraphic/QImageNode.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QGraphic;
2 |
3 | import com.qmedia.qmediasdk.QCommon.QSize;
4 | import com.qmedia.qmediasdk.QEditor.QCombiner;
5 |
6 | import java.util.UUID;
7 |
8 | public class QImageNode extends QGraphicNode {
9 | public QImageNode(String filePath, boolean inAsset , QCombiner combiner) {
10 | this(filePath, inAsset, combiner, UUID.randomUUID().toString());
11 | }
12 |
13 | public QImageNode(String filePath, boolean inAsset , QCombiner combiner, String id) {
14 | super(combiner, id);
15 | mPtr = native_create(filePath, inAsset);
16 | name = filePath;
17 | this.inAsset = inAsset;
18 | }
19 |
20 | //get image size
21 | public QSize getSize() {
22 | return native_getSize();
23 | }
24 |
25 | public String getFilePath() {
26 | return name;
27 | }
28 | public boolean isInAsset() { return inAsset; }
29 |
30 | private boolean inAsset;
31 |
32 | protected native long native_create(String filePath, boolean inAsset);
33 | protected native QSize native_getSize();
34 | }
35 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QGraphic/QVideoTrackNode.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QGraphic;
2 |
3 | import com.qmedia.qmediasdk.QEditor.QCombiner;
4 | import com.qmedia.qmediasdk.QTrack.QMediaTrack;
5 |
6 | import java.util.UUID;
7 |
8 | public class QVideoTrackNode extends QGraphicNode {
9 | public QVideoTrackNode(QMediaTrack mediaTrack, QCombiner combiner) {
10 | this(mediaTrack,combiner, UUID.randomUUID().toString());
11 | }
12 | public QVideoTrackNode(QMediaTrack mediaTrack, QCombiner combiner, String id) {
13 | super(combiner, id);
14 | this.mediaTrack = mediaTrack;
15 | mPtr = native_create(mediaTrack);
16 | }
17 | public QMediaTrack getMediaTrack() {
18 | return mediaTrack;
19 | }
20 |
21 | @Override
22 | public void release() {
23 | super.release();
24 | mediaTrack = null;
25 | }
26 |
27 | private QMediaTrack mediaTrack;
28 |
29 | //TODO: native
30 | protected native long native_create(QMediaTrack mediaTrack);
31 | }
32 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QMediaSDK.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk;
2 |
3 | import android.content.Context;
4 | import android.content.res.AssetManager;
5 | import android.util.Log;
6 |
7 | public class QMediaSDK {
8 |
9 | static {
10 | System.loadLibrary("qmediasdk");
11 | }
12 |
13 | public static boolean init(Context context) {
14 | g_context = context;
15 | g_assetManager = context.getAssets();
16 | Log.i("QMediaSDK", "init sdk version: " + SDK_VERSION);
17 | return true;
18 | }
19 |
20 | public static Context getContext() {
21 | return g_context;
22 | }
23 |
24 | public static final String SDK_VERSION = _version();
25 |
26 | public static AssetManager g_assetManager;
27 |
28 |
29 | private static Context g_context;
30 |
31 | static private native String _version();
32 | }
33 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QSource/QMediaDescribe.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QSource;
2 |
3 | public class QMediaDescribe {
4 | //enum QMediaType
5 | public static final int QMediaTypeVideo = 1;
6 | public static final int QMediaTypeAudio = 2;
7 | public static final int QMediaTypeSubtitle = 4;
8 |
9 | public int mediaType; //QMediaType
10 | public QVideoDescribe videoDescribe = null;
11 | public QAudioDescribe audioDescribe = null;
12 | }
13 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QSource/QMediaSource.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QSource;
2 |
3 | import com.qmedia.qmediasdk.QAudio.QAudioFrame;
4 | import com.qmedia.qmediasdk.QGraphic.QVideoFrame;
5 | import com.qmedia.qmediasdk.QTarget.QAudioTarget;
6 | import com.qmedia.qmediasdk.QTarget.QVideoTarget;
7 |
8 | public interface QMediaSource {
9 |
10 | void setVideoTarget(QVideoTarget videoTarget);
11 | void setAudioTarget(QAudioTarget audioTarget);
12 | QVideoTarget getVideoTarget();
13 | QAudioTarget getAudioTarget();
14 |
15 | QVideoDescribe getVideoDescribe();
16 | QAudioDescribe getAudioDescribe();
17 |
18 | boolean load();
19 | boolean unload();
20 | boolean isInit();
21 | boolean start(long startMSec, long endMSec);
22 | void stop();
23 | boolean seekTo(long mSec);
24 | boolean isEOF();
25 | boolean isStarted();
26 | long getMediaDuration();
27 |
28 | QVideoFrame readNextVideoFrame();
29 | QAudioFrame readNextAudioFrame();
30 | }
31 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QTarget/QAudioRender.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QTarget;
2 |
3 | public interface QAudioRender {
4 | boolean onAudioRender(byte[] buffer , int needBytes , long wantTime);
5 | }
6 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QTarget/QAudioTarget.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QTarget;
2 |
3 | import com.qmedia.qmediasdk.QSource.QAudioDescribe;
4 |
5 | public interface QAudioTarget {
6 | boolean startAudio();
7 | boolean stopAudio();
8 | void pauseAudio();
9 | void resumeAudio();
10 | void flushAudio();
11 | //for audio
12 | boolean initAudio(QAudioDescribe describe);
13 | void unInitAudio();
14 | int getSampleRate();
15 | int getChannels();
16 | int getFormat();
17 | void setVolume(float volume);
18 | float getVolume();
19 |
20 | void setAudioDelay(int audioDelay);
21 | int getAudioDelay();
22 | //render
23 | void setAudioRender(QAudioRender audioRender);
24 | QAudioRender getAudioRender();
25 | }
26 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QTarget/QVideoRender.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QTarget;
2 |
3 | public interface QVideoRender {
4 | boolean onVideoRender(long wantTime);
5 | boolean onVideoCreate();
6 | void onVideoDestroy();
7 |
8 | void setDisplayMode(int displayMode, int viewW, int viewH);
9 | }
10 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/java/com/qmedia/qmediasdk/QTarget/QVideoTarget.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk.QTarget;
2 |
3 | import com.qmedia.qmediasdk.QSource.QVideoDescribe;
4 |
5 | public interface QVideoTarget {
6 | boolean startVideo();
7 | boolean stopVideo();
8 | void pauseVideo(boolean isPause);
9 | void flushVideo();
10 |
11 | boolean initVideo(QVideoDescribe describe);
12 | int getTargetWidth();
13 | int getTargetHeight();
14 | float getFrameRate();
15 | Object getTargetContext();
16 |
17 |
18 | //render
19 | void setVideoRender(QVideoRender videoRender);
20 | QVideoRender getVideoRender();
21 | }
22 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | qmediasdk
3 |
4 |
--------------------------------------------------------------------------------
/Android/QMediaSDK/qmediasdk/src/test/java/com/qmedia/qmediasdk/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.qmedia.qmediasdk;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() throws Exception {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/Android/QMediaSDK/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':qmediasdk'
2 |
--------------------------------------------------------------------------------
/QMediaCore/EffectEditor/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | set(EFFECT_EDITOR_HEADER
2 |
3 | EffectEditor/sources/SoftwareSource.h
4 | EffectEditor/sources/SoftwareFrameDrawer.h
5 | EffectEditor/VideoFrameDrawer.h
6 | EffectEditor/MediaSource.h
7 | EffectEditor/EditorExporter.h
8 | EffectEditor/MediaTrack.h
9 | EffectEditor/MediaTrackImpl.h
10 | EffectEditor/MediaAudioChannel.h
11 | EffectEditor/MediaGraphicChannel.h
12 | EffectEditor/MediaSupervisor.h
13 | EffectEditor/EffectCombiner.h
14 | EffectEditor/EditorPlayer.h
15 | EffectEditor/EditorExporter.h
16 | )
17 |
18 | set(EFFECT_EDITOR_SRC
19 |
20 | EffectEditor/sources/SoftwareSource.cpp
21 | EffectEditor/sources/SoftwareFrameDrawer.cpp
22 | EffectEditor/MediaTrackImpl.cpp
23 | EffectEditor/MediaAudioChannel.cpp
24 | EffectEditor/MediaGraphicChannel.cpp
25 | EffectEditor/MediaSupervisor.cpp
26 | EffectEditor/EffectCombiner.cpp
27 | EffectEditor/EditorPlayer.cpp
28 | EffectEditor/EditorExporter.cpp
29 | )
30 |
--------------------------------------------------------------------------------
/QMediaCore/EffectEditor/MediaSupervisor.h:
--------------------------------------------------------------------------------
1 | //
2 | // MediaSupervisor.h
3 | // QMediaCore
4 | //
5 | // Created by spring on 20/05/2019.
6 | // Copyright © 2017 QMedia. All rights reserved.
7 | //
8 |
9 | #ifndef EFFECTEDITOR_MEDIASUPERVISOR_H
10 | #define EFFECTEDITOR_MEDIASUPERVISOR_H
11 |
12 | #include
13 | #include
14 | #include "MediaTrack.h"
15 | #include "MediaGraphicChannel.h"
16 | #include "MediaAudioChannel.h"
17 |
18 | class MediaSupervisor {
19 | public:
20 | MediaSupervisor();
21 | ~MediaSupervisor();
22 |
23 | inline bool hasMediaTrack(const MediaTrackRef& mediaTrack) const {
24 | return _mediaTracks.find(mediaTrack) != _mediaTracks.end();
25 | }
26 |
27 | //proxy mediaTracks
28 | Range getMediaTimeRange() const;
29 |
30 | void start();
31 | void setPositionTo(int64_t mSec);
32 | void stop();
33 |
34 | protected:
35 | std::set _mediaTracks;
36 |
37 | std::list _graphicChannels;
38 | std::list _audioChannels;
39 | };
40 |
41 | #endif /* EFFECTEDITOR_MEDIASUPERVISOR_H */
42 |
--------------------------------------------------------------------------------
/QMediaCore/GraphicCore/GcDuplicateNode.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // GcDuplicateNode.cpp
3 | // QMediaCore
4 | //
5 | // Created by spring on 20/05/2019.
6 | // Copyright © 2017 QMedia. All rights reserved.
7 | //
8 |
9 | #include "GcDuplicateNode.h"
10 |
11 | GRAPHICCORE_BEGIN
12 |
13 | DuplicateNode::DuplicateNode(RenderNode* node):_referenceNode(node){
14 | _renderRange = _referenceNode->getRange();
15 | }
16 |
17 | DuplicateNode::~DuplicateNode(){
18 | }
19 |
20 | void DuplicateNode::draw(Scene* scene, const Mat4 & transform, uint32_t flags)
21 | {
22 | _referenceNode->duplicateDraw(scene, transform, this);
23 | }
24 |
25 | GRAPHICCORE_END
26 |
--------------------------------------------------------------------------------
/QMediaCore/GraphicCore/GcDuplicateNode.h:
--------------------------------------------------------------------------------
1 | //
2 | // GcDuplicateNode.h
3 | // QMediaCore
4 | //
5 | // Created by spring on 20/05/2019.
6 | // Copyright © 2017 QMedia. All rights reserved.
7 | //
8 |
9 | #ifndef EFFECTEDITOR_DUPLICATENODE_H
10 | #define EFFECTEDITOR_DUPLICATENODE_H
11 |
12 | #include "GcRenderNode.h"
13 |
14 | GRAPHICCORE_BEGIN
15 |
16 | /**
17 | * DuplicateNode which can duplicate an other RenderNode's render result
18 | */
19 | class DuplicateNode : public RenderNode{
20 | public:
21 |
22 | DuplicateNode(RenderNode* node);
23 | virtual ~DuplicateNode();
24 |
25 | virtual void draw(Scene* /*scene*/, const Mat4 & /*transform*/, uint32_t /*flags*/) override;
26 |
27 | const Color4F& getBKColor() const { return _bkColor; }
28 | void setBKColor(const Color4F& color) { _bkColor = color; }
29 | private:
30 | RenderNode* _referenceNode;
31 | Color4F _bkColor;
32 | };
33 |
34 | CLASSREF(DuplicateNode)
35 |
36 | GRAPHICCORE_END
37 |
38 | #endif /* EFFECTEDITOR_DUPLICATENODE_H */
39 |
--------------------------------------------------------------------------------
/QMediaCore/GraphicCore/base/Macros.h:
--------------------------------------------------------------------------------
1 | //
2 | // Macros.h
3 | // QMediaCore
4 | //
5 | // Created by spring on 20/05/2019.
6 | // Copyright © 2017 QMedia. All rights reserved.
7 | //
8 |
9 | #ifndef GRAPHICCORE_MACROS_H
10 | #define GRAPHICCORE_MACROS_H
11 |
12 | /** @def DEPRECATED_ATTRIBUTE
13 | * Only certain compilers support __attribute__((deprecated)).
14 | */
15 | #if defined(__GNUC__) && ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
16 | #define DEPRECATED_ATTRIBUTE __attribute__((deprecated))
17 | #elif _MSC_VER >= 1400 //vs 2005 or higher
18 | #define DEPRECATED_ATTRIBUTE __declspec(deprecated)
19 | #else
20 | #define DEPRECATED_ATTRIBUTE
21 | #endif
22 |
23 | /** @def DEGREES_TO_RADIANS
24 | converts degrees to radians
25 | */
26 | #define DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) * 0.01745329252f) // PI / 180
27 |
28 | /** @def RADIANS_TO_DEGREES
29 | converts radians to degrees
30 | */
31 | #define RADIANS_TO_DEGREES(__ANGLE__) ((__ANGLE__) * 57.29577951f) // PI * 180
32 |
33 |
34 | #define GRAPHICCORE_BEGIN namespace GraphicCore {
35 | #define GRAPHICCORE_END }
36 | #define USING_GRAPHICCORE using namespace GraphicCore;
37 |
38 | #endif /* GRAPHICCORE_MACROS_H */
39 |
--------------------------------------------------------------------------------
/QMediaCore/GraphicCore/effect/EffectGroup.h:
--------------------------------------------------------------------------------
1 | //
2 | // EffectGroup.h
3 | // QMediaCore
4 | //
5 | // Created by spring on 20/05/2019.
6 | // Copyright © 2017 QMedia. All rights reserved.
7 | //
8 |
9 | #ifndef GRAPHICCORE_EFFECTGROUP_H
10 | #define GRAPHICCORE_EFFECTGROUP_H
11 |
12 | #include
13 | #include "Utils/Comm.h"
14 | #include "Effect.h"
15 |
16 | GRAPHICCORE_BEGIN
17 |
18 | class EffectGroup {
19 | public:
20 | EffectGroup();
21 | ~EffectGroup() {};
22 |
23 | void addEffect(EffectRef effectRef);
24 | void removeEffect(EffectRef effectRef);
25 |
26 | bool has_effect() { return _effects.size() > 0;}
27 |
28 | void release();
29 |
30 | const Texture2D * drawEffects(int64_t duration, GraphicCore::GLEngine* gle, const Texture2D *inputTexture );
31 |
32 | private:
33 | std::shared_ptr _textureCache[2];
34 | std::shared_ptr _framebuffer;
35 | std::vector _effects;
36 | };
37 |
38 | GRAPHICCORE_END
39 |
40 | #endif /* GRAPHICCORE_EFFECTGROUP_H */
41 |
--------------------------------------------------------------------------------
/QMediaCore/GraphicCore/effect/EffectManage.h:
--------------------------------------------------------------------------------
1 | //
2 | // EffectManage.h
3 | // QMediaCore
4 | //
5 | // Created by spring on 20/05/2019.
6 | // Copyright © 2017 QMedia. All rights reserved.
7 | //
8 |
9 | #ifndef GRAPHICCORE_EFFECTMANAGE_H
10 | #define GRAPHICCORE_EFFECTMANAGE_H
11 |
12 | #include "Effect.h"
13 | #include "GraphicCore/filter/Filter.h"
14 |
15 | GRAPHICCORE_BEGIN
16 |
17 | using EffectConfigRef = std::shared_ptr;
18 |
19 | class EffectManage {
20 | public:
21 | ~EffectManage();
22 |
23 | static EffectManage* instance();
24 |
25 | //add filter config by json
26 | void addFilterConfig(std::string& config_json);
27 | //add effect config by json
28 | void addEffectConfig(std::string& config_json);
29 |
30 | std::vector getAllEffectConfig();
31 | Effect* createEffect(const char* effect_name);
32 |
33 | private:
34 | void addEffectConfig(EffectConfig* config);
35 | EffectManage();
36 | std::mutex _config_mutex;
37 | std::map _effectConfigs;
38 | };
39 |
40 | GRAPHICCORE_END
41 |
42 | #endif /* GRAPHICCORE_EFFECT_H */
43 |
--------------------------------------------------------------------------------
/QMediaCore/GraphicCore/filter/FilterDrawer.h:
--------------------------------------------------------------------------------
1 | //
2 | // FilterDrawer.h
3 | // QMediaCore
4 | //
5 | // Created by spring on 20/05/2019.
6 | // Copyright © 2017 QMedia. All rights reserved.
7 | //
8 |
9 | #ifndef GRAPHICCORE_TEXTUREFILTER_H
10 | #define GRAPHICCORE_TEXTUREFILTER_H
11 |
12 | #include
13 | #include