out.append(mMediaFormat.toString()); 56
        } else {
57
            out.append("null");
58
        }
59
        out.append('}');
60
        return out.toString();
61
    }
62
}

+ 108 - 0
ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/AndroidTrackInfo.java

@ -0,0 +1,108 @@
1
/*
2
 * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
17
package tv.danmaku.ijk.media.player.misc;
18
19
import android.annotation.TargetApi;
20
import android.media.MediaFormat;
21
import android.media.MediaPlayer;
22
import android.os.Build;
23
24
public class AndroidTrackInfo implements ITrackInfo {
25
    private final MediaPlayer.TrackInfo mTrackInfo;
26
27
    public static AndroidTrackInfo[] fromMediaPlayer(MediaPlayer mp) {
28
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
29
            return fromTrackInfo(mp.getTrackInfo());
30
31
        return null;
32
    }
33
34
    private static AndroidTrackInfo[] fromTrackInfo(MediaPlayer.TrackInfo[] trackInfos) {
35
        if (trackInfos == null)
36
            return null;
37
38
        AndroidTrackInfo androidTrackInfo[] = new AndroidTrackInfo[trackInfos.length];
39
        for (int i = 0; i < trackInfos.length; ++i) {
40
            androidTrackInfo[i] = new AndroidTrackInfo(trackInfos[i]);
41
        }
42
43
        return androidTrackInfo;
44
    }
45
46
    private AndroidTrackInfo(MediaPlayer.TrackInfo trackInfo) {
47
        mTrackInfo = trackInfo;
48
    }
49
50
    @TargetApi(Build.VERSION_CODES.KITKAT)
51
    @Override
52
    public IMediaFormat getFormat() {
53
        if (mTrackInfo == null)
54
            return null;
55
56
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
57
            return null;
58
59
        MediaFormat mediaFormat = mTrackInfo.getFormat();
60
        if (mediaFormat == null)
61
            return null;
62
63
        return new AndroidMediaFormat(mediaFormat);
64
    }
65
66
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
67
    @Override
68
    public String getLanguage() {
69
        if (mTrackInfo == null)
70
            return "und";
71
72
        return mTrackInfo.getLanguage();
73
    }
74
75
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
76
    @Override
77
    public int getTrackType() {
78
        if (mTrackInfo == null)
79
            return MEDIA_TRACK_TYPE_UNKNOWN;
80
81
        return mTrackInfo.getTrackType();
82
    }
83
84
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
85
    @Override
86
    public String toString() {
87
        StringBuilder out = new StringBuilder(128);
88
        out.append(getClass().getSimpleName());
89
        out.append('{');
90
        if (mTrackInfo != null) {
91
            out.append(mTrackInfo.toString());
92
        } else {
93
            out.append("null");
94
        }
95
        out.append('}');
96
        return out.toString();
97
    }
98
99
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
100
    @Override
101
    public String getInfoInline() {
102
        if (mTrackInfo != null) {
103
            return mTrackInfo.toString();
104
        } else {
105
            return "null";
106
        }
107
    }
108
}

+ 28 - 0
ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IMediaDataSource.java

@ -0,0 +1,28 @@
1
/*
2
 * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
17
package tv.danmaku.ijk.media.player.misc;
18
19
import java.io.IOException;
20
21
@SuppressWarnings("RedundantThrows")
22
public interface IMediaDataSource {
23
    int	 readAt(long position, byte[] buffer, int offset, int size) throws IOException;
24
25
    long getSize() throws IOException;
26
27
    void close() throws IOException;
28
}

+ 30 - 0
ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IMediaFormat.java

@ -0,0 +1,30 @@
1
/*
2
 * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
17
package tv.danmaku.ijk.media.player.misc;
18
19
public interface IMediaFormat {
20
    // Common keys
21
    String KEY_MIME = "mime";
22
23
    // Video Keys
24
    String KEY_WIDTH = "width";
25
    String KEY_HEIGHT = "height";
26
27
    String getString(String name);
28
29
    int getInteger(String name);
30
}

+ 34 - 0
ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/ITrackInfo.java

@ -0,0 +1,34 @@
1
/*
2
 * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
17
package tv.danmaku.ijk.media.player.misc;
18
19
public interface ITrackInfo {
20
    int MEDIA_TRACK_TYPE_AUDIO = 2;
21
    int MEDIA_TRACK_TYPE_METADATA = 5;
22
    int MEDIA_TRACK_TYPE_SUBTITLE = 4;
23
    int MEDIA_TRACK_TYPE_TIMEDTEXT = 3;
24
    int MEDIA_TRACK_TYPE_UNKNOWN = 0;
25
    int MEDIA_TRACK_TYPE_VIDEO = 1;
26
27
    IMediaFormat getFormat();
28
29
    String getLanguage();
30
31
    int getTrackType();
32
33
    String getInfoInline();
34
}

+ 209 - 0
ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java

@ -0,0 +1,209 @@
1
/*
2
 * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
17
package tv.danmaku.ijk.media.player.misc;
18
19
import android.annotation.TargetApi;
20
import android.os.Build;
21
import android.text.TextUtils;
22
23
import java.util.HashMap;
24
import java.util.Locale;
25
import java.util.Map;
26
27
import tv.danmaku.ijk.media.player.IjkMediaMeta;
28
29
public class IjkMediaFormat implements IMediaFormat {
30
    // Common
31
    public static final String KEY_IJK_CODEC_LONG_NAME_UI = "ijk-codec-long-name-ui";
32
    public static final String KEY_IJK_BIT_RATE_UI = "ijk-bit-rate-ui";
33
34
    // Video
35
    public static final String KEY_IJK_CODEC_PROFILE_LEVEL_UI = "ijk-profile-level-ui";
36
    public static final String KEY_IJK_CODEC_PIXEL_FORMAT_UI = "ijk-pixel-format-ui";
37
    public static final String KEY_IJK_RESOLUTION_UI = "ijk-resolution-ui";
38
    public static final String KEY_IJK_FRAME_RATE_UI = "ijk-frame-rate-ui";
39
40
    // Audio
41
    public static final String KEY_IJK_SAMPLE_RATE_UI = "ijk-sample-rate-ui";
42
    public static final String KEY_IJK_CHANNEL_UI = "ijk-channel-ui";
43
44
    // Codec
45
    public static final String CODEC_NAME_H264 = "h264";
46
47
    public final IjkMediaMeta.IjkStreamMeta mMediaFormat;
48
49
    public IjkMediaFormat(IjkMediaMeta.IjkStreamMeta streamMeta) {
50
        mMediaFormat = streamMeta;
51
    }
52
53
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
54
    @Override
55
    public int getInteger(String name) {
56
        if (mMediaFormat == null)
57
            return 0;
58
59
        return mMediaFormat.getInt(name);
60
    }
61
62
    @Override
63
    public String getString(String name) {
64
        if (mMediaFormat == null)
65
            return null;
66
67
        if (sFormatterMap.containsKey(name)) {
68
            Formatter formatter = sFormatterMap.get(name);
69
            return formatter.format(this);
70
        }
71
72
        return mMediaFormat.getString(name);
73
    }
74
75
    //-------------------------
76
    // Formatter
77
    //-------------------------
78
79
    private static abstract class Formatter {
80
        public String format(IjkMediaFormat mediaFormat) {
81
            String value = doFormat(mediaFormat);
82
            if (TextUtils.isEmpty(value))
83
                return getDefaultString();
84
            return value;
85
        }
86
87
        protected abstract String doFormat(IjkMediaFormat mediaFormat);
88
89
        @SuppressWarnings("SameReturnValue")
90
        protected String getDefaultString() {
91
            return "N/A";
92
        }
93
    }
94
95
    private static final Map<String, Formatter> sFormatterMap = new HashMap<String, Formatter>();
96
97
    {
98
        sFormatterMap.put(KEY_IJK_CODEC_LONG_NAME_UI, new Formatter() {
99
            @Override
100
            public String doFormat(IjkMediaFormat mediaFormat) {
101
                return mMediaFormat.getString(IjkMediaMeta.IJKM_KEY_CODEC_LONG_NAME);
102
            }
103
        });
104
        sFormatterMap.put(KEY_IJK_BIT_RATE_UI, new Formatter() {
105
            @Override
106
            protected String doFormat(IjkMediaFormat mediaFormat) {
107
                int bitRate = mediaFormat.getInteger(IjkMediaMeta.IJKM_KEY_BITRATE);
108
                if (bitRate <= 0) {
109
                    return null;
110
                } else if (bitRate < 1000) {
111
                    return String.format(Locale.US, "%d bit/s", bitRate);
112
                } else {
113
                    return String.format(Locale.US, "%d kb/s", bitRate / 1000);
114
                }
115
            }
116
        });
117
        sFormatterMap.put(KEY_IJK_CODEC_PROFILE_LEVEL_UI, new Formatter() {
118
            @Override
119
            protected String doFormat(IjkMediaFormat mediaFormat) {
120
                String profile = mediaFormat.getString(IjkMediaMeta.IJKM_KEY_CODEC_PROFILE);
121
                if (TextUtils.isEmpty(profile))
122
                    return null;
123
124
                StringBuilder sb = new StringBuilder();
125
                sb.append(profile);
126
127
                String codecName = mediaFormat.getString(IjkMediaMeta.IJKM_KEY_CODEC_NAME);
128
                if (!TextUtils.isEmpty(codecName) && codecName.equalsIgnoreCase(CODEC_NAME_H264)) {
129
                    int level = mediaFormat.getInteger(IjkMediaMeta.IJKM_KEY_CODEC_LEVEL);
130
                    if (level < 10)
131
                        return sb.toString();
132
133
                    sb.append(" Profile Level ");
134
                    sb.append((level / 10) % 10);
135
                    if ((level % 10) != 0) {
136
                        sb.append(".");
137
                        sb.append(level % 10);
138
                    }
139
                }
140
141
                return sb.toString();
142
            }
143
        });
144
        sFormatterMap.put(KEY_IJK_CODEC_PIXEL_FORMAT_UI, new Formatter() {
145
            @Override
146
            protected String doFormat(IjkMediaFormat mediaFormat) {
147
                return mediaFormat.getString(IjkMediaMeta.IJKM_KEY_CODEC_PIXEL_FORMAT);
148
            }
149
        });
150
        sFormatterMap.put(KEY_IJK_RESOLUTION_UI, new Formatter() {
151
            @Override
152
            protected String doFormat(IjkMediaFormat mediaFormat) {
153
                int width = mediaFormat.getInteger(KEY_WIDTH);
154
                int height = mediaFormat.getInteger(KEY_HEIGHT);
155
                int sarNum = mediaFormat.getInteger(IjkMediaMeta.IJKM_KEY_SAR_NUM);
156
                int sarDen = mediaFormat.getInteger(IjkMediaMeta.IJKM_KEY_SAR_DEN);
157
158
                if (width <= 0 || height <= 0) {
159
                    return null;
160
                } else if (sarNum <= 0 || sarDen <= 0) {
161
                    return String.format(Locale.US, "%d x %d", width, height);
162
                } else {
163
                    return String.format(Locale.US, "%d x %d [SAR %d:%d]", width,
164
                            height, sarNum, sarDen);
165
                }
166
            }
167
        });
168
        sFormatterMap.put(KEY_IJK_FRAME_RATE_UI, new Formatter() {
169
            @Override
170
            protected String doFormat(IjkMediaFormat mediaFormat) {
171
                int fpsNum = mediaFormat.getInteger(IjkMediaMeta.IJKM_KEY_FPS_NUM);
172
                int fpsDen = mediaFormat.getInteger(IjkMediaMeta.IJKM_KEY_FPS_DEN);
173
                if (fpsNum <= 0 || fpsDen <= 0) {
174
                    return null;
175
                } else {
176
                    return String.valueOf(((float) (fpsNum)) / fpsDen);
177
                }
178
            }
179
        });
180
        sFormatterMap.put(KEY_IJK_SAMPLE_RATE_UI, new Formatter() {
181
            @Override
182
            protected String doFormat(IjkMediaFormat mediaFormat) {
183
                int sampleRate = mediaFormat.getInteger(IjkMediaMeta.IJKM_KEY_SAMPLE_RATE);
184
                if (sampleRate <= 0) {
185
                    return null;
186
                } else {
187
                    return String.format(Locale.US, "%d Hz", sampleRate);
188
                }
189
            }
190
        });
191
        sFormatterMap.put(KEY_IJK_CHANNEL_UI, new Formatter() {
192
            @Override
193
            protected String doFormat(IjkMediaFormat mediaFormat) {
194
                int channelLayout = mediaFormat.getInteger(IjkMediaMeta.IJKM_KEY_CHANNEL_LAYOUT);
195
                if (channelLayout <= 0) {
196
                    return null;
197
                } else {
198
                    if (channelLayout == IjkMediaMeta.AV_CH_LAYOUT_MONO) {
199
                        return "mono";
200
                    } else if (channelLayout == IjkMediaMeta.AV_CH_LAYOUT_STEREO) {
201
                        return "stereo";
202
                    } else {
203
                        return String.format(Locale.US, "%x", channelLayout);
204
                    }
205
                }
206
            }
207
        });
208
    }
209
}

+ 96 - 0
ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IjkTrackInfo.java

@ -0,0 +1,96 @@
1
/*
2
 * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
17
package tv.danmaku.ijk.media.player.misc;
18
19
import android.text.TextUtils;
20
21
import tv.danmaku.ijk.media.player.IjkMediaMeta;
22
23
public class IjkTrackInfo implements ITrackInfo {
24
    private int mTrackType = MEDIA_TRACK_TYPE_UNKNOWN;
25
    private IjkMediaMeta.IjkStreamMeta mStreamMeta;
26
27
    public IjkTrackInfo(IjkMediaMeta.IjkStreamMeta streamMeta) {
28
        mStreamMeta = streamMeta;
29
    }
30
31
    public void setMediaMeta(IjkMediaMeta.IjkStreamMeta streamMeta) {
32
        mStreamMeta = streamMeta;
33
    }
34
35
    @Override
36
    public IMediaFormat getFormat() {
37
        return new IjkMediaFormat(mStreamMeta);
38
    }
39
40
    @Override
41
    public String getLanguage() {
42
        if (mStreamMeta == null || TextUtils.isEmpty(mStreamMeta.mLanguage))
43
            return "und";
44
45
        return mStreamMeta.mLanguage;
46
    }
47
48
    @Override
49
    public int getTrackType() {
50
        return mTrackType;
51
    }
52
53
    public void setTrackType(int trackType) {
54
        mTrackType = trackType;
55
    }
56
57
    @Override
58
    public String toString() {
59
        return getClass().getSimpleName() + '{' + getInfoInline() + "}";
60
    }
61
62
    @Override
63
    public String getInfoInline() {
64
        StringBuilder out = new StringBuilder(128);
65
        switch (mTrackType) {
66
            case MEDIA_TRACK_TYPE_VIDEO:
67
                out.append("VIDEO");
68
                out.append(", ");
69
                out.append(mStreamMeta.getCodecShortNameInline());
70
                out.append(", ");
71
                out.append(mStreamMeta.getBitrateInline());
72
                out.append(", ");
73
                out.append(mStreamMeta.getResolutionInline());
74
                break;
75
            case MEDIA_TRACK_TYPE_AUDIO:
76
                out.append("AUDIO");
77
                out.append(", ");
78
                out.append(mStreamMeta.getCodecShortNameInline());
79
                out.append(", ");
80
                out.append(mStreamMeta.getBitrateInline());
81
                out.append(", ");
82
                out.append(mStreamMeta.getSampleRateInline());
83
                break;
84
            case MEDIA_TRACK_TYPE_TIMEDTEXT:
85
                out.append("TIMEDTEXT");
86
                break;
87
            case MEDIA_TRACK_TYPE_SUBTITLE:
88
                out.append("SUBTITLE");
89
                break;
90
            default:
91
                out.append("UNKNOWN");
92
                break;
93
        }
94
        return out.toString();
95
    }
96
}

+ 142 - 0
ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/pragma/DebugLog.java

@ -0,0 +1,142 @@
1
/*
2
 * Copyright (C) 2013 Zhang Rui <bbcallen@gmail.com>
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
17
package tv.danmaku.ijk.media.player.pragma;
18
19
import java.util.Locale;
20
21
22
import android.util.Log;
23
24
@SuppressWarnings({"SameParameterValue", "WeakerAccess"})
25
public class DebugLog {
26
    public static final boolean ENABLE_ERROR = Pragma.ENABLE_VERBOSE;
27
    public static final boolean ENABLE_INFO = Pragma.ENABLE_VERBOSE;
28
    public static final boolean ENABLE_WARN = Pragma.ENABLE_VERBOSE;
29
    public static final boolean ENABLE_DEBUG = Pragma.ENABLE_VERBOSE;
30
    public static final boolean ENABLE_VERBOSE = Pragma.ENABLE_VERBOSE;
31
32
    public static void e(String tag, String msg) {
33
        if (ENABLE_ERROR) {
34
            Log.e(tag, msg);
35
        }
36
    }
37
38
    public static void e(String tag, String msg, Throwable tr) {
39
        if (ENABLE_ERROR) {
40
            Log.e(tag, msg, tr);
41
        }
42
    }
43
44
    public static void efmt(String tag, String fmt, Object... args) {
45
        if (ENABLE_ERROR) {
46
            String msg = String.format(Locale.US, fmt, args);
47
            Log.e(tag, msg);
48
        }
49
    }
50
51
    public static void i(String tag, String msg) {
52
        if (ENABLE_INFO) {
53
            Log.i(tag, msg);
54
        }
55
    }
56
57
    public static void i(String tag, String msg, Throwable tr) {
58
        if (ENABLE_INFO) {
59
            Log.i(tag, msg, tr);
60
        }
61
    }
62
63
    public static void ifmt(String tag, String fmt, Object... args) {
64
        if (ENABLE_INFO) {
65
            String msg = String.format(Locale.US, fmt, args);
66
            Log.i(tag, msg);
67
        }
68
    }
69
70
    public static void w(String tag, String msg) {
71
        if (ENABLE_WARN) {
72
            Log.w(tag, msg);
73
        }
74
    }
75
76
    public static void w(String tag, String msg, Throwable tr) {
77
        if (ENABLE_WARN) {
78
            Log.w(tag, msg, tr);
79
        }
80
    }
81
82
    public static void wfmt(String tag, String fmt, Object... args) {
83
        if (ENABLE_WARN) {
84
            String msg = String.format(Locale.US, fmt, args);
85
            Log.w(tag, msg);
86
        }
87
    }
88
89
    public static void d(String tag, String msg) {
90
        if (ENABLE_DEBUG) {
91
            Log.d(tag, msg);
92
        }
93
    }
94
95
    public static void d(String tag, String msg, Throwable tr) {
96
        if (ENABLE_DEBUG) {
97
            Log.d(tag, msg, tr);
98
        }
99
    }
100
101
    public static void dfmt(String tag, String fmt, Object... args) {
102
        if (ENABLE_DEBUG) {
103
            String msg = String.format(Locale.US, fmt, args);
104
            Log.d(tag, msg);
105
        }
106
    }
107
108
    public static void v(String tag, String msg) {
109
        if (ENABLE_VERBOSE) {
110
            Log.v(tag, msg);
111
        }
112
    }
113
114
    public static void v(String tag, String msg, Throwable tr) {
115
        if (ENABLE_VERBOSE) {
116
            Log.v(tag, msg, tr);
117
        }
118
    }
119
120
    public static void vfmt(String tag, String fmt, Object... args) {
121
        if (ENABLE_VERBOSE) {
122
            String msg = String.format(Locale.US, fmt, args);
123
            Log.v(tag, msg);
124
        }
125
    }
126
127
    public static void printStackTrace(Throwable e) {
128
        if (ENABLE_WARN) {
129
            e.printStackTrace();
130
        }
131
    }
132
133
    public static void printCause(Throwable e) {
134
        if (ENABLE_WARN) {
135
            Throwable cause = e.getCause();
136
            if (cause != null)
137
                e = cause;
138
139
            printStackTrace(e);
140
        }
141
    }
142
}

+ 23 - 0
ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/pragma/Pragma.java

@ -0,0 +1,23 @@
1
/*
2
 * Copyright (C) 2013 Zhang Rui <bbcallen@gmail.com>
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
package tv.danmaku.ijk.media.player.pragma;
17
18
/*-
19
 * configurated by app project
20
 */
21
public class Pragma {
22
    public static final boolean ENABLE_VERBOSE = true;
23
}

+ 15 - 0
ijkplayer-java/src/main/project.properties

@ -0,0 +1,15 @@
1
# This file is automatically generated by Android Tools.
2
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3
#
4
# This file must be checked in Version Control Systems.
5
#
6
# To customize properties used by the Ant build system edit
7
# "ant.properties", and override values to adapt the script to your
8
# project structure.
9
#
10
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
11
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
12
13
# Project target.
14
target=android-22
15
android.library=true

+ 6 - 0
ijkplayer-java/src/main/res/values/strings.xml

@ -0,0 +1,6 @@
1
<?xml version="1.0" encoding="utf-8"?>
2
<resources>
3
4
    <string name="ijkplayer_dummy"></string>
5
6
</resources>

cdzApp - Gogs: Go Git Service

充电桩app代码

.gitignore 24B

    /build /local.properties
编辑私人桩开发完成 · 5da7027f21 - Gogs: Go Git Service
Selaa lähdekoodia

编辑私人桩开发完成

huyuguo 6 vuotta sitten
vanhempi
commit
5da7027f21

+ 17 - 9
app/src/main/java/com/electric/chargingpile/activity/PrivateZhuangInfoActivity.java

@ -194,6 +194,7 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
194 194
195 195
    public static ImageItem[] selectBitmap = new ImageItem[3];
196 196
    private int selectIndex = 0;
197
    private boolean isTakePhoto = false; // 是否更新图片
197 198
198 199
199 200
    private Handler handler = new Handler() {
@ -445,6 +446,7 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
445 446
                    ImageItem takePhoto = new ImageItem();
446 447
                    takePhoto.setBitmap(bitmap);
447 448
                    selectBitmap[selectIndex] = takePhoto;
449
                    isTakePhoto = true;
448 450
449 451
                    subscriber.onNext("");
450 452
                    subscriber.onComplete();
@ -990,15 +992,21 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
990 992
        String token = String.valueOf(updatetime);
991 993
        Log.i("token---", token);
992 994
993
        for (int i = 0; i < selectBitmap.length; i++) {
994
            if (selectBitmap[i] != null) {
995
                try {
996
                    bm = imageZoom(selectBitmap[i].getBitmap());
997
                    file = bitmapToBase64(bm);
998
                    par.put("file" + (i + 1), file);
999
                    par.put("filename" + (i + 1), "androidapp.jpg");
1000
                } catch (Exception e) {
1001
                    e.printStackTrace();
995
        if (selectBitmap[0] == null || selectBitmap[1] == null || selectBitmap[2] == null) {
996
            isTakePhoto = true;
997
        }
998
999
        if (isTakePhoto) {
1000
            for (int i = 0; i < selectBitmap.length; i++) {
1001
                if (selectBitmap[i] != null) {
1002
                    try {
1003
                        bm = imageZoom(selectBitmap[i].getBitmap());
1004
                        file = bitmapToBase64(bm);
1005
                        par.put("file" + (i + 1), file);
1006
                        par.put("filename" + (i + 1), "androidapp.jpg");
1007
                    } catch (Exception e) {
1008
                        e.printStackTrace();
1009
                    }
1002 1010
                }
1003 1011
            }
1004 1012
        }