├── h264ExampleFFmpegStreamerAllMultiThreaded
├── gen
│ └── .gitignore
├── bin
│ ├── classes
│ │ └── .gitignore
│ ├── jarlist.cache
│ ├── AndroidManifest.xml
│ └── R.txt
├── lint.xml
├── ic_launcher-web.png
├── res
│ ├── drawable-hdpi
│ │ └── ic_launcher.png
│ ├── drawable-mdpi
│ │ └── ic_launcher.png
│ ├── drawable-xhdpi
│ │ └── ic_launcher.png
│ ├── drawable-xxhdpi
│ │ └── ic_launcher.png
│ ├── values
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-v11
│ │ └── styles.xml
│ ├── values-v14
│ │ └── styles.xml
│ └── layout
│ │ └── activity_main.xml
├── .classpath
├── project.properties
├── proguard-project.txt
├── .project
├── AndroidManifest.xml
└── src
│ └── com
│ └── example
│ └── h264FFmpegStreamer
│ ├── BufferQueue.java
│ ├── NV21Convertor.java
│ ├── X264Encoder.java
│ └── MainStreamerActivity.java
└── README.md
/h264ExampleFFmpegStreamerAllMultiThreaded/gen/.gitignore:
--------------------------------------------------------------------------------
1 | /android/
2 | /com/
3 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/bin/classes/.gitignore:
--------------------------------------------------------------------------------
1 | /android/
2 | /com/
3 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/lint.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/bin/jarlist.cache:
--------------------------------------------------------------------------------
1 | # cache for current jar dependency. DO NOT EDIT.
2 | # format is
3 | # Encoding is UTF-8
4 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdiKulkarni/h264ExmapleFFmpegStreamerAllMultiThreaded/HEAD/h264ExampleFFmpegStreamerAllMultiThreaded/ic_launcher-web.png
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdiKulkarni/h264ExmapleFFmpegStreamerAllMultiThreaded/HEAD/h264ExampleFFmpegStreamerAllMultiThreaded/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdiKulkarni/h264ExmapleFFmpegStreamerAllMultiThreaded/HEAD/h264ExampleFFmpegStreamerAllMultiThreaded/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdiKulkarni/h264ExmapleFFmpegStreamerAllMultiThreaded/HEAD/h264ExampleFFmpegStreamerAllMultiThreaded/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/res/drawable-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdiKulkarni/h264ExmapleFFmpegStreamerAllMultiThreaded/HEAD/h264ExampleFFmpegStreamerAllMultiThreaded/res/drawable-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | h264ExampleStreamerAll
5 | Hello world!
6 |
7 |
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # h264ExmapleFFmpegStreamerAllMultiThreaded
2 |
3 | FFmpeg based android video streamer with multi threaded h264 encoding support. Threading can inter-frame or intra-frame (inter-slice) basis. Videos can be streamed over TCP and UDP. As ffmpeg is a software based encoder over android, it is necessary to have multithreaded support for speed up.
4 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/res/values-v14/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/project.properties:
--------------------------------------------------------------------------------
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-20
15 | android.library.reference.1=../appcompat_v7
16 | android.library.reference.2=../../git/myFFmpegX264LatestLibAndroid/myFFmpegX264LatestLib
17 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
14 |
15 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/proguard-project.txt:
--------------------------------------------------------------------------------
1 | # To enable ProGuard in your project, edit project.properties
2 | # to define the proguard.config property as described in that file.
3 | #
4 | # Add project specific ProGuard rules here.
5 | # By default, the flags in this file are appended to flags specified
6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt
7 | # You can edit the include path and order by changing the ProGuard
8 | # include property in project.properties.
9 | #
10 | # For more details, see
11 | # http://developer.android.com/guide/developing/tools/proguard.html
12 |
13 | # Add any project specific keep options here:
14 |
15 | # If your project uses WebView with JS, uncomment the following
16 | # and specify the fully qualified class name to the JavaScript interface
17 | # class:
18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
19 | # public *;
20 | #}
21 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | h264ExampleFFmpegStreamerAllMultiThreaded
4 |
5 |
6 |
7 |
8 |
9 | com.android.ide.eclipse.adt.ResourceManagerBuilder
10 |
11 |
12 |
13 |
14 | com.android.ide.eclipse.adt.PreCompilerBuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.jdt.core.javabuilder
20 |
21 |
22 |
23 |
24 | com.android.ide.eclipse.adt.ApkBuilder
25 |
26 |
27 |
28 |
29 |
30 | com.android.ide.eclipse.adt.AndroidNature
31 | org.eclipse.jdt.core.javanature
32 |
33 |
34 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
19 |
20 |
25 |
26 |
30 |
31 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
21 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/bin/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
21 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/src/com/example/h264FFmpegStreamer/BufferQueue.java:
--------------------------------------------------------------------------------
1 | package com.example.h264FFmpegStreamer;
2 |
3 | import java.util.concurrent.Semaphore;
4 |
5 | // Thread safe byte buffer queue
6 | public class BufferQueue {
7 | private byte[] buff;
8 | private volatile int head, tail, count, size;
9 | private Semaphore appendsem, readsem, countsem;
10 |
11 | // Constructor
12 | public BufferQueue(int size) {
13 | appendsem = new Semaphore(1, true);
14 | readsem = new Semaphore(1, true);
15 | countsem = new Semaphore(1, true);
16 | buff = new byte[size];
17 | this.size = size;
18 | head = 0;
19 | tail = 0;
20 | count = 0;
21 | }
22 |
23 | // Get the number of bytes in the buffer
24 | public int getCount() {
25 | return count;
26 | }
27 |
28 | // Append bytes to the buffer
29 | public void append(byte[] data) {
30 | if (data != null)
31 | append(data, 0, data.length);
32 | }
33 |
34 | public void append(byte[] data, int offset, int length) {
35 | if (data == null)
36 | return;
37 | if (data.length < offset + length) {
38 | throw new RuntimeException(
39 | "array index out of bounds. offset + length extends beyond the length of the array.");
40 | }
41 |
42 | try {
43 | appendsem.acquire();
44 | } catch (InterruptedException e) {
45 | return;
46 | }
47 | // We need to acquire the semaphore so that this.tail doesn't change.
48 | for (int i = 0; i < length; i++)
49 | buff[(i + this.tail) % this.size] = data[i + offset];
50 | this.tail = (length + this.tail) % this.size;
51 | try {
52 | countsem.acquire();
53 | } catch (InterruptedException e) {
54 | return;
55 | }
56 | // We need to acquire the semaphore so that this.count doesn't change.
57 | this.count = this.count + length;
58 | if (this.count > this.size)
59 | throw new RuntimeException("Buffer overflow error.");
60 | countsem.release();
61 | appendsem.release();
62 | }
63 |
64 | // Read bytes from the buffer
65 | public int read(byte[] data) {
66 | if (data != null)
67 | return read(data, 0, data.length);
68 | else
69 | return 0;
70 | }
71 |
72 | public int read(byte[] data, int offset, int length) {
73 | if (data == null)
74 | return 0;
75 | if (data.length < offset + length)
76 | throw new RuntimeException(
77 | "array index out of bounds. offset + length extends beyond the length of the array.");
78 |
79 | int readlength = 0;
80 |
81 | try {
82 | readsem.acquire();
83 | } catch (InterruptedException e) {
84 | return 0;
85 | }
86 | // We need to acquire the semaphore so that this.head doesn't change.
87 | for (int i = 0; i < length; i++) {
88 | if (i == count)
89 | break;
90 | data[i + offset] = buff[(i + head) % this.size];
91 | readlength++;
92 | }
93 | this.head = (readlength + this.head) % this.size;
94 | try {
95 | countsem.acquire();
96 | } catch (InterruptedException e) {
97 | readsem.release();
98 | return 0;
99 | }
100 | // We need to acquire the semaphore so that this.count doesn't change.
101 | this.count = this.count - readlength;
102 | countsem.release();
103 | readsem.release();
104 |
105 | return readlength;
106 | }
107 |
108 | public int peek(byte[] data) {
109 | if (data != null)
110 | return peek(data, 0, data.length);
111 | else
112 | return 0;
113 | }
114 |
115 | public int peek(byte[] data, int offset, int length) {
116 | if (data == null)
117 | return 0;
118 | if (data.length < offset + length)
119 | throw new RuntimeException(
120 | "array index out of bounds. offset + length extends beyond the length of the array.");
121 |
122 | int readlength = 0;
123 |
124 | try {
125 | readsem.acquire();
126 | } catch (InterruptedException e) {
127 | return 0;
128 | }
129 | // We need to acquire the semaphore so that this.head doesn't change.
130 | for (int i = 0; i < length; i++) {
131 | if (i == count)
132 | break;
133 | data[i + offset] = buff[(i + head) % this.size];
134 | readlength++;
135 | }
136 |
137 | readsem.release();
138 |
139 | return readlength;
140 | }
141 |
142 | public byte[] readBytes() {
143 | byte[] data = new byte[count];
144 | try {
145 | read(data);
146 | } catch (Exception ex) {
147 | }
148 | return data;
149 | }
150 | }
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/src/com/example/h264FFmpegStreamer/NV21Convertor.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2011-2014 GUIGUI Simon, fyhertz@gmail.com
3 | *
4 | * This file is part of Spydroid (http://code.google.com/p/spydroid-ipcamera/)
5 | *
6 | * Spydroid is free software; you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation; either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * This source code is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with this source code; if not, write to the Free Software
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 | */
20 |
21 | package com.example.h264FFmpegStreamer;
22 |
23 | import java.nio.ByteBuffer;
24 |
25 | import android.media.MediaCodecInfo;
26 | import android.util.Log;
27 |
28 | /**
29 | * Converts from NV21 to YUV420 semi planar or planar.
30 | */
31 | public class NV21Convertor {
32 |
33 | private int mSliceHeight, mHeight;
34 | private int mStride, mWidth;
35 | private int mSize;
36 | private boolean mPlanar, mPanesReversed = false;
37 | private int mYPadding;
38 | private byte[] mBuffer;
39 | ByteBuffer mCopy;
40 |
41 | public void setSize(int width, int height) {
42 | mHeight = height;
43 | mWidth = width;
44 | mSliceHeight = height;
45 | mStride = width;
46 | mSize = mWidth*mHeight;
47 | }
48 |
49 | public void setStride(int width) {
50 | mStride = width;
51 | }
52 |
53 | public void setSliceHeigth(int height) {
54 | mSliceHeight = height;
55 | }
56 |
57 | public void setPlanar(boolean planar) {
58 | mPlanar = planar;
59 | }
60 |
61 | public void setYPadding(int padding) {
62 | mYPadding = padding;
63 | }
64 |
65 | public int getBufferSize() {
66 | return 3*mSize/2;
67 | }
68 |
69 | public void setEncoderColorFormat(int colorFormat) {
70 | switch (colorFormat) {
71 | case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar:
72 | case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420PackedSemiPlanar:
73 | case MediaCodecInfo.CodecCapabilities.COLOR_TI_FormatYUV420PackedSemiPlanar:
74 | setPlanar(false);
75 | break;
76 | case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar:
77 | case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420PackedPlanar:
78 | setPlanar(true);
79 | break;
80 | }
81 | }
82 |
83 | public void setColorPanesReversed(boolean b) {
84 | mPanesReversed = b;
85 | }
86 |
87 | public int getStride() {
88 | return mStride;
89 | }
90 |
91 | public int getSliceHeigth() {
92 | return mSliceHeight;
93 | }
94 |
95 | public int getYPadding() {
96 | return mYPadding;
97 | }
98 |
99 |
100 | public boolean getPlanar() {
101 | return mPlanar;
102 | }
103 |
104 | public boolean getUVPanesReversed() {
105 | return mPanesReversed;
106 | }
107 |
108 | public void convert(byte[] data, ByteBuffer buffer) {
109 | byte[] result = convert(data);
110 | int min = buffer.capacity() < data.length?buffer.capacity() : data.length;
111 | buffer.put(result, 0, min);
112 | }
113 |
114 | public byte[] convert(byte[] data) {
115 |
116 | // A buffer large enough for every case
117 | if (mBuffer==null || mBuffer.length != 3*mSliceHeight*mStride/2+mYPadding) {
118 | mBuffer = new byte[3*mSliceHeight*mStride/2+mYPadding];
119 | }
120 |
121 | if (!mPlanar) {
122 | if (mSliceHeight==mHeight && mStride==mWidth) {
123 | // Swaps U and V
124 | if (!mPanesReversed) {
125 | for (int i = mSize; i < mSize+mSize/2; i += 2) {
126 | mBuffer[0] = data[i+1];
127 | data[i+1] = data[i];
128 | data[i] = mBuffer[0];
129 | }
130 | }
131 | if (mYPadding>0) {
132 | System.arraycopy(data, 0, mBuffer, 0, mSize);
133 | System.arraycopy(data, mSize, mBuffer, mSize+mYPadding, mSize/2);
134 | return mBuffer;
135 | }
136 | return data;
137 | }
138 | } else {
139 | if (mSliceHeight==mHeight && mStride==mWidth) {
140 | // De-interleave U and V
141 | if (!mPanesReversed) {
142 | for (int i = 0; i < mSize/4; i+=1) {
143 | mBuffer[i] = data[mSize+2*i+1];
144 | mBuffer[mSize/4+i] = data[mSize+2*i];
145 | }
146 | } else {
147 | for (int i = 0; i < mSize/4; i+=1) {
148 | mBuffer[i] = data[mSize+2*i];
149 | mBuffer[mSize/4+i] = data[mSize+2*i+1];
150 | }
151 | }
152 | if (mYPadding == 0) {
153 | System.arraycopy(mBuffer, 0, data, mSize, mSize/2);
154 | } else {
155 | System.arraycopy(data, 0, mBuffer, 0, mSize);
156 | System.arraycopy(mBuffer, 0, mBuffer, mSize+mYPadding, mSize/2);
157 | return mBuffer;
158 | }
159 | return data;
160 | }
161 | }
162 |
163 | return data;
164 | }
165 |
166 | }
167 |
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/src/com/example/h264FFmpegStreamer/X264Encoder.java:
--------------------------------------------------------------------------------
1 | package com.example.h264FFmpegStreamer;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.DataOutputStream;
5 | import java.io.IOException;
6 | import java.io.InputStreamReader;
7 | import java.net.DatagramPacket;
8 | import java.net.DatagramSocket;
9 | import java.net.InetAddress;
10 | import java.net.ServerSocket;
11 | import java.net.Socket;
12 | import java.util.ArrayList;
13 | import android.util.Log;
14 |
15 | import com.android.myffmpegx264lib.exampleEncoder;
16 |
17 | public class X264Encoder {
18 |
19 | // For logging
20 | private static final String TAG = "com.example.h264FFmpegStreamer.AvcEncoder";
21 |
22 | // Networking variables
23 | private int DATAGRAM_PORT = 4002;
24 | private int TCP_SERVER_PORT = DATAGRAM_PORT + 1;
25 | private static final int MAX_UDP_DATAGRAM_LEN = 1400;
26 | private InetAddress clientIp;
27 | private int clientPort;
28 | private static boolean isClientConnected = false;
29 |
30 | // FIFO queue
31 | private static final int MAX_BUFFER_QUEUE_SIZE = 1000000;
32 | private BufferQueue nwkQueue = new BufferQueue(MAX_BUFFER_QUEUE_SIZE);
33 | private byte[] sendData = new byte[MAX_UDP_DATAGRAM_LEN];
34 | private byte[] outBytes = new byte[MAX_BUFFER_QUEUE_SIZE];
35 | private int[] outFrameSize = new int[1];
36 |
37 | // Encoder
38 | private ArrayList encoderInstances = new ArrayList();
39 | private int noOfEncoderInstances, noOfEncoderThreads, thread_type, noOfSlices;
40 |
41 | // constructor
42 | public X264Encoder() {
43 | Thread udpThread = new Thread() {
44 |
45 | private DatagramPacket datagramPacket;
46 | private DatagramSocket datagramSocket;
47 |
48 | @Override
49 | public void run() {
50 | try {
51 | datagramSocket = new DatagramSocket(DATAGRAM_PORT);
52 | datagramPacket = new DatagramPacket(sendData,
53 | sendData.length);
54 | datagramSocket.receive(datagramPacket);
55 | clientPort = datagramPacket.getPort();
56 | clientIp = datagramPacket.getAddress();
57 | datagramSocket.connect(datagramPacket.getAddress(),
58 | datagramPacket.getPort());
59 | Log.i(TAG, " Connected to: " + clientIp + ":" + clientPort);
60 | isClientConnected = true;
61 |
62 | while (isClientConnected) {
63 |
64 | if (MainStreamerActivity.getPreviewStatus()) {
65 |
66 | if (nwkQueue.getCount() > MAX_UDP_DATAGRAM_LEN) {
67 | nwkQueue.read(sendData, 0, MAX_UDP_DATAGRAM_LEN);
68 | DatagramPacket packet = new DatagramPacket(
69 | sendData, sendData.length, clientIp,
70 | clientPort);
71 | datagramSocket.send(packet);
72 | }
73 | }
74 | }
75 | datagramSocket.close();
76 | } catch (IOException e) {
77 | // TODO Auto-generated catch block
78 | e.printStackTrace();
79 | }
80 | }
81 | };
82 |
83 | udpThread.start();
84 |
85 | Thread tcpThread = new Thread() {
86 |
87 | private ServerSocket acceptSocket;
88 |
89 | @Override
90 | public void run() {
91 | try {
92 | acceptSocket = new ServerSocket(TCP_SERVER_PORT);
93 | Socket connectionSocket = acceptSocket.accept();
94 | BufferedReader inFromClient = new BufferedReader(
95 | new InputStreamReader(
96 | connectionSocket.getInputStream()));
97 | DataOutputStream outToClient = new DataOutputStream(
98 | connectionSocket.getOutputStream());
99 | String clientSentence = inFromClient.readLine();
100 | Log.i(TAG, "Received: " + clientSentence);
101 | isClientConnected = true;
102 |
103 | while (nwkQueue.read(sendData, 0, MAX_UDP_DATAGRAM_LEN) != 1) {
104 | outToClient.write(sendData, 0, sendData.length);
105 | }
106 | connectionSocket.close();
107 | } catch (Exception e) {
108 | // TODO Auto-generated catch block
109 | e.printStackTrace();
110 | }
111 | }
112 | };
113 |
114 | tcpThread.start();
115 | }
116 |
117 | // creating multiple encoding instances
118 | public void createEncoderInstances(int noOfEncoderInstances) {
119 |
120 | for (int i = 0; i < noOfEncoderInstances; i++) {
121 | exampleEncoder encoder = new exampleEncoder();
122 | encoderInstances.add(encoder);
123 | }
124 | }
125 |
126 | // initializer
127 | public void initFFmpegEncoder(int width, int height, int fps, int bitrate,
128 | int maxBFrames, int gopSize) {
129 |
130 | for (int i = 0; i < noOfEncoderInstances; i++) {
131 |
132 | encoderInstances.get(i).setBitrate(bitrate);
133 | encoderInstances.get(i).setFps(fps);
134 | encoderInstances.get(i).setGopSize(gopSize);
135 | encoderInstances.get(i).setHeight(height);
136 | encoderInstances.get(i).setWidth(width);
137 | encoderInstances.get(i).setMaxBframes(maxBFrames);
138 | encoderInstances.get(i).setNoOfThreads(getNoOfEncoderThreads());
139 | encoderInstances.get(i).setParallelType(getThread_type());
140 | encoderInstances.get(i).setSlices(getNoOfSlices());
141 | encoderInstances.get(i).initialize();
142 | }
143 | }
144 |
145 | // called from Camera.setPreviewCallbackWithBuffer(...) in other class
146 | public void encodeFrame(byte[] inBytes, int counter) {
147 |
148 | if (isClientConnected) {
149 |
150 | for (int i = 0; i < getNoOfEncoderInstances(); i++) {
151 | if (counter % getNoOfEncoderInstances() == i) {
152 | encoderInstances.get(i).video_encode(inBytes,
153 | inBytes.length, counter, outBytes, outFrameSize);
154 | nwkQueue.append(outBytes, 0, outFrameSize[0]);
155 | break;
156 | }
157 | }
158 | }
159 | }
160 |
161 | public void close() {
162 | try {
163 | for (int i = 0; i < getNoOfEncoderInstances(); i++) {
164 | encoderInstances.get(i).close();
165 | encoderInstances.get(i).delete();
166 | }
167 | isClientConnected = false;
168 | } catch (Exception e) {
169 | e.printStackTrace();
170 | }
171 | }
172 |
173 | public int getNoOfEncoderInstances() {
174 | return noOfEncoderInstances;
175 | }
176 |
177 | public void setNoOfEncoderInstances(int noOfEncoderInstances) {
178 | this.noOfEncoderInstances = noOfEncoderInstances;
179 | }
180 |
181 | public int getNoOfEncoderThreads() {
182 | return noOfEncoderThreads;
183 | }
184 |
185 | public void setNoOfEncoderThreads(int noOfEncoderThreads) {
186 | this.noOfEncoderThreads = noOfEncoderThreads;
187 | }
188 |
189 | public int getThread_type() {
190 | return thread_type;
191 | }
192 |
193 | public void setThread_type(int thread_type) {
194 | this.thread_type = thread_type;
195 | }
196 |
197 | public int getNoOfSlices() {
198 | return noOfSlices;
199 | }
200 |
201 | public void setNoOfSlices(int noOfSlices) {
202 | this.noOfSlices = noOfSlices;
203 | }
204 |
205 | }
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/src/com/example/h264FFmpegStreamer/MainStreamerActivity.java:
--------------------------------------------------------------------------------
1 | package com.example.h264FFmpegStreamer;
2 |
3 | import java.io.IOException;
4 | import java.util.Iterator;
5 | import java.util.List;
6 | import android.app.Activity;
7 | import android.graphics.ImageFormat;
8 | import android.graphics.PixelFormat;
9 | import android.hardware.Camera;
10 | import android.hardware.Camera.Parameters;
11 | import android.os.Bundle;
12 | import android.util.Log;
13 | import android.view.SurfaceHolder;
14 | import android.view.SurfaceView;
15 | import android.view.View;
16 | import android.widget.Button;
17 |
18 | import com.example.h264codecstreamer.R;
19 |
20 | public class MainStreamerActivity extends Activity implements
21 | SurfaceHolder.Callback {
22 |
23 | private static final String TAG = "com.example.h264FFmpegStreamer.MainActivity";
24 |
25 | private Camera camera;
26 | private SurfaceView surfaceView;
27 | private SurfaceHolder surfaceHolder;
28 | private static boolean previewing = false;
29 |
30 | public static int frameRate = 30;
31 | public static int width = 1280;
32 | public static int height = 720;
33 | public static int bitrate = 3000000;
34 | public static int maxBFrames = 0;
35 | public static int gopSize = 1;
36 | private int mCount = 0;
37 |
38 | /*
39 | * if (thread_type == FF_THREAD_FRAME) = 1 ///< Decode more than one frame
40 | * at once if (thread_type == FF_THREAD_SLICE) = 2 ///< Decode more than one
41 | * part of a single frame at once
42 | */
43 | private int thread_type = 2;
44 | private int noOfSlices = 100;
45 | private int noOfEncoderInstances = 1;
46 | private int noOfEncoderThreads = 100;
47 |
48 | private X264Encoder x264Encoder = new X264Encoder();
49 |
50 | /** Called when the activity is first created. */
51 | @Override
52 | public void onCreate(Bundle savedInstanceState) {
53 | super.onCreate(savedInstanceState);
54 | setContentView(R.layout.activity_main);
55 |
56 | Button buttonStartCameraPreview = (Button) findViewById(R.id.startcamerapreview);
57 | Button buttonStopCameraPreview = (Button) findViewById(R.id.stopcamerapreview);
58 |
59 | getWindow().setFormat(PixelFormat.UNKNOWN);
60 | surfaceView = (SurfaceView) findViewById(R.id.surfaceview);
61 | surfaceHolder = surfaceView.getHolder();
62 | surfaceHolder.addCallback(this);
63 | surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
64 |
65 | buttonStartCameraPreview
66 | .setOnClickListener(new Button.OnClickListener() {
67 |
68 | @Override
69 | public void onClick(View v) {
70 | // TODO Auto-generated method stub
71 |
72 | if (!previewing) {
73 | camera = Camera.open();
74 | if (camera != null) {
75 |
76 | try {
77 | final NV21Convertor converter = new NV21Convertor();
78 | converter.setSize(width, height);
79 | converter.setPlanar(true);
80 |
81 | x264Encoder
82 | .setNoOfEncoderInstances(noOfEncoderInstances);
83 | x264Encoder
84 | .setNoOfEncoderThreads(noOfEncoderThreads);
85 | x264Encoder.setThread_type(thread_type);
86 | x264Encoder.setNoOfSlices(noOfSlices);
87 | x264Encoder
88 | .createEncoderInstances(noOfEncoderInstances);
89 | x264Encoder.initFFmpegEncoder(width,
90 | height, frameRate, bitrate,
91 | maxBFrames, gopSize);
92 |
93 | Parameters parameters = camera
94 | .getParameters();
95 | int[] fpsRange = getBestPreviewFpsRange(camera);
96 | parameters.setPreviewFpsRange(fpsRange[0],
97 | fpsRange[1]);
98 | getBestPreviewSize(width, height,
99 | parameters);
100 | /*
101 | * parameters.setPreviewSize(
102 | * getBestPreviewSize(width, height,
103 | * parameters).width,
104 | * getBestPreviewSize(width, height,
105 | * parameters).height);
106 | */
107 | parameters.setPreviewSize(width, height);
108 | parameters
109 | .setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
110 | parameters
111 | .setPreviewFormat(ImageFormat.NV21);
112 | parameters.setRecordingHint(true);
113 | camera.setParameters(parameters);
114 | camera.setPreviewDisplay(surfaceHolder);
115 | camera.setDisplayOrientation(90);
116 | camera.startPreview();
117 |
118 | previewing = true;
119 |
120 | Camera.PreviewCallback callback = new Camera.PreviewCallback() {
121 | long now = System.nanoTime() / 1000,
122 | oldnow = now;
123 |
124 | @Override
125 | public void onPreviewFrame(
126 | byte[] frameFromCamera,
127 | Camera camera) {
128 | oldnow = now;
129 | now = System.nanoTime() / 1000;
130 |
131 | try {
132 | mCount++;
133 | x264Encoder.encodeFrame(
134 | converter
135 | .convert(frameFromCamera),
136 | mCount);
137 | if ((now - oldnow) != 0) {
138 | Log.d("Frames", "frame: "
139 | + mCount + " fps: "
140 | + 1000000L
141 | / (now - oldnow)
142 | + " time: "
143 | + (now - oldnow)
144 | / 1000);
145 | }
146 |
147 | } finally {
148 | camera.addCallbackBuffer(frameFromCamera);
149 | }
150 | }
151 | };
152 |
153 | for (int i = 0; i <= 10; i++)
154 | camera.addCallbackBuffer(new byte[width
155 | * height * 3 / 2]);
156 | camera.setPreviewCallbackWithBuffer(callback);
157 |
158 | } catch (IOException e) {
159 | // TODO Auto-generated catch block
160 | e.printStackTrace();
161 | }
162 | }
163 | }
164 | }
165 | });
166 |
167 | buttonStopCameraPreview
168 | .setOnClickListener(new Button.OnClickListener() {
169 |
170 | @Override
171 | public void onClick(View v) {
172 | // TODO Auto-generated method stub
173 |
174 | if (camera != null && previewing) {
175 | camera.stopPreview();
176 | camera.release();
177 | camera = null;
178 | x264Encoder.close();
179 | previewing = false;
180 | }
181 | finish();
182 | }
183 | });
184 | }
185 |
186 | @Override
187 | public void surfaceChanged(SurfaceHolder holder, int format, int width,
188 | int height) {
189 | // TODO Auto-generated method stub
190 |
191 | }
192 |
193 | @Override
194 | public void surfaceCreated(SurfaceHolder holder) {
195 | // TODO Auto-generated method stub
196 |
197 | }
198 |
199 | @Override
200 | public void surfaceDestroyed(SurfaceHolder holder) {
201 | // TODO Auto-generated method stub
202 |
203 | }
204 |
205 | public static boolean getPreviewStatus() {
206 | return previewing;
207 | }
208 |
209 | private Camera.Size getBestPreviewSize(int width, int height,
210 | Camera.Parameters parameters) {
211 | Camera.Size result = null;
212 | for (Camera.Size size : parameters.getSupportedPreviewSizes()) {
213 | Log.i(TAG, size.width + ":" + size.height);
214 |
215 | if (size.width <= width && size.height <= height) {
216 | if (result == null) {
217 | result = size;
218 | } else {
219 | int resultArea = result.width * result.height;
220 | int newArea = size.width * size.height;
221 | if (newArea > resultArea) {
222 | result = size;
223 | }
224 | }
225 | }
226 | }
227 | return (result);
228 | }
229 |
230 | private int[] getBestPreviewFpsRange(Camera camera) {
231 | int[] obj = null;
232 | List fpsBestRange = camera.getParameters()
233 | .getSupportedPreviewFpsRange();
234 | Iterator it = fpsBestRange.iterator();
235 | while (it.hasNext()) {
236 | obj = it.next();
237 | // Do something with obj
238 | Log.i(TAG, obj[0] + ":" + obj[1] + "");
239 | }
240 | return obj;
241 | }
242 | }
--------------------------------------------------------------------------------
/h264ExampleFFmpegStreamerAllMultiThreaded/bin/R.txt:
--------------------------------------------------------------------------------
1 | int anim abc_fade_in 0x7f040000
2 | int anim abc_fade_out 0x7f040001
3 | int anim abc_slide_in_bottom 0x7f040002
4 | int anim abc_slide_in_top 0x7f040003
5 | int anim abc_slide_out_bottom 0x7f040004
6 | int anim abc_slide_out_top 0x7f040005
7 | int attr actionBarDivider 0x7f01000f
8 | int attr actionBarItemBackground 0x7f010010
9 | int attr actionBarSize 0x7f01000e
10 | int attr actionBarSplitStyle 0x7f01000c
11 | int attr actionBarStyle 0x7f01000b
12 | int attr actionBarTabBarStyle 0x7f010008
13 | int attr actionBarTabStyle 0x7f010007
14 | int attr actionBarTabTextStyle 0x7f010009
15 | int attr actionBarWidgetTheme 0x7f01000d
16 | int attr actionButtonStyle 0x7f010016
17 | int attr actionDropDownStyle 0x7f010047
18 | int attr actionLayout 0x7f01004e
19 | int attr actionMenuTextAppearance 0x7f010011
20 | int attr actionMenuTextColor 0x7f010012
21 | int attr actionModeBackground 0x7f01003c
22 | int attr actionModeCloseButtonStyle 0x7f01003b
23 | int attr actionModeCloseDrawable 0x7f01003e
24 | int attr actionModeCopyDrawable 0x7f010040
25 | int attr actionModeCutDrawable 0x7f01003f
26 | int attr actionModeFindDrawable 0x7f010044
27 | int attr actionModePasteDrawable 0x7f010041
28 | int attr actionModePopupWindowStyle 0x7f010046
29 | int attr actionModeSelectAllDrawable 0x7f010042
30 | int attr actionModeShareDrawable 0x7f010043
31 | int attr actionModeSplitBackground 0x7f01003d
32 | int attr actionModeStyle 0x7f01003a
33 | int attr actionModeWebSearchDrawable 0x7f010045
34 | int attr actionOverflowButtonStyle 0x7f01000a
35 | int attr actionProviderClass 0x7f010050
36 | int attr actionViewClass 0x7f01004f
37 | int attr activityChooserViewStyle 0x7f01006c
38 | int attr background 0x7f01002f
39 | int attr backgroundSplit 0x7f010031
40 | int attr backgroundStacked 0x7f010030
41 | int attr buttonBarButtonStyle 0x7f010018
42 | int attr buttonBarStyle 0x7f010017
43 | int attr customNavigationLayout 0x7f010032
44 | int attr disableChildrenWhenDisabled 0x7f010054
45 | int attr displayOptions 0x7f010028
46 | int attr divider 0x7f01002e
47 | int attr dividerHorizontal 0x7f01001b
48 | int attr dividerPadding 0x7f010056
49 | int attr dividerVertical 0x7f01001a
50 | int attr dropDownListViewStyle 0x7f010021
51 | int attr dropdownListPreferredItemHeight 0x7f010048
52 | int attr expandActivityOverflowButtonDrawable 0x7f01006b
53 | int attr height 0x7f010026
54 | int attr homeAsUpIndicator 0x7f010013
55 | int attr homeLayout 0x7f010033
56 | int attr icon 0x7f01002c
57 | int attr iconifiedByDefault 0x7f01005a
58 | int attr indeterminateProgressStyle 0x7f010035
59 | int attr initialActivityCount 0x7f01006a
60 | int attr isLightTheme 0x7f010059
61 | int attr itemPadding 0x7f010037
62 | int attr listChoiceBackgroundIndicator 0x7f01004c
63 | int attr listPopupWindowStyle 0x7f010022
64 | int attr listPreferredItemHeight 0x7f01001c
65 | int attr listPreferredItemHeightLarge 0x7f01001e
66 | int attr listPreferredItemHeightSmall 0x7f01001d
67 | int attr listPreferredItemPaddingLeft 0x7f01001f
68 | int attr listPreferredItemPaddingRight 0x7f010020
69 | int attr logo 0x7f01002d
70 | int attr navigationMode 0x7f010027
71 | int attr paddingEnd 0x7f010039
72 | int attr paddingStart 0x7f010038
73 | int attr panelMenuListTheme 0x7f01004b
74 | int attr panelMenuListWidth 0x7f01004a
75 | int attr popupMenuStyle 0x7f010049
76 | int attr popupPromptView 0x7f010053
77 | int attr progressBarPadding 0x7f010036
78 | int attr progressBarStyle 0x7f010034
79 | int attr prompt 0x7f010051
80 | int attr queryHint 0x7f01005b
81 | int attr searchDropdownBackground 0x7f01005c
82 | int attr searchResultListItemHeight 0x7f010065
83 | int attr searchViewAutoCompleteTextView 0x7f010069
84 | int attr searchViewCloseIcon 0x7f01005d
85 | int attr searchViewEditQuery 0x7f010061
86 | int attr searchViewEditQueryBackground 0x7f010062
87 | int attr searchViewGoIcon 0x7f01005e
88 | int attr searchViewSearchIcon 0x7f01005f
89 | int attr searchViewTextField 0x7f010063
90 | int attr searchViewTextFieldRight 0x7f010064
91 | int attr searchViewVoiceIcon 0x7f010060
92 | int attr selectableItemBackground 0x7f010019
93 | int attr showAsAction 0x7f01004d
94 | int attr showDividers 0x7f010055
95 | int attr spinnerDropDownItemStyle 0x7f010058
96 | int attr spinnerMode 0x7f010052
97 | int attr spinnerStyle 0x7f010057
98 | int attr subtitle 0x7f010029
99 | int attr subtitleTextStyle 0x7f01002b
100 | int attr textAllCaps 0x7f01006d
101 | int attr textAppearanceLargePopupMenu 0x7f010014
102 | int attr textAppearanceListItem 0x7f010023
103 | int attr textAppearanceListItemSmall 0x7f010024
104 | int attr textAppearanceSearchResultSubtitle 0x7f010067
105 | int attr textAppearanceSearchResultTitle 0x7f010066
106 | int attr textAppearanceSmallPopupMenu 0x7f010015
107 | int attr textColorSearchUrl 0x7f010068
108 | int attr title 0x7f010025
109 | int attr titleTextStyle 0x7f01002a
110 | int attr windowActionBar 0x7f010000
111 | int attr windowActionBarOverlay 0x7f010001
112 | int attr windowFixedHeightMajor 0x7f010006
113 | int attr windowFixedHeightMinor 0x7f010004
114 | int attr windowFixedWidthMajor 0x7f010003
115 | int attr windowFixedWidthMinor 0x7f010005
116 | int attr windowSplitActionBar 0x7f010002
117 | int bool abc_action_bar_embed_tabs_pre_jb 0x7f060000
118 | int bool abc_action_bar_expanded_action_views_exclusive 0x7f060001
119 | int bool abc_config_actionMenuItemAllCaps 0x7f060005
120 | int bool abc_config_allowActionMenuItemTextWithIcon 0x7f060004
121 | int bool abc_config_showMenuShortcutsWhenKeyboardPresent 0x7f060003
122 | int bool abc_split_action_bar_is_narrow 0x7f060002
123 | int color abc_search_url_text_holo 0x7f070003
124 | int color abc_search_url_text_normal 0x7f070000
125 | int color abc_search_url_text_pressed 0x7f070002
126 | int color abc_search_url_text_selected 0x7f070001
127 | int dimen abc_action_bar_default_height 0x7f080002
128 | int dimen abc_action_bar_icon_vertical_padding 0x7f080003
129 | int dimen abc_action_bar_progress_bar_size 0x7f08000a
130 | int dimen abc_action_bar_stacked_max_height 0x7f080009
131 | int dimen abc_action_bar_stacked_tab_max_width 0x7f080001
132 | int dimen abc_action_bar_subtitle_bottom_margin 0x7f080007
133 | int dimen abc_action_bar_subtitle_text_size 0x7f080005
134 | int dimen abc_action_bar_subtitle_top_margin 0x7f080006
135 | int dimen abc_action_bar_title_text_size 0x7f080004
136 | int dimen abc_action_button_min_width 0x7f080008
137 | int dimen abc_config_prefDialogWidth 0x7f080000
138 | int dimen abc_dropdownitem_icon_width 0x7f080010
139 | int dimen abc_dropdownitem_text_padding_left 0x7f08000e
140 | int dimen abc_dropdownitem_text_padding_right 0x7f08000f
141 | int dimen abc_panel_menu_list_width 0x7f08000b
142 | int dimen abc_search_view_preferred_width 0x7f08000d
143 | int dimen abc_search_view_text_min_width 0x7f08000c
144 | int dimen dialog_fixed_height_major 0x7f080013
145 | int dimen dialog_fixed_height_minor 0x7f080014
146 | int dimen dialog_fixed_width_major 0x7f080011
147 | int dimen dialog_fixed_width_minor 0x7f080012
148 | int drawable abc_ab_bottom_solid_dark_holo 0x7f020000
149 | int drawable abc_ab_bottom_solid_light_holo 0x7f020001
150 | int drawable abc_ab_bottom_transparent_dark_holo 0x7f020002
151 | int drawable abc_ab_bottom_transparent_light_holo 0x7f020003
152 | int drawable abc_ab_share_pack_holo_dark 0x7f020004
153 | int drawable abc_ab_share_pack_holo_light 0x7f020005
154 | int drawable abc_ab_solid_dark_holo 0x7f020006
155 | int drawable abc_ab_solid_light_holo 0x7f020007
156 | int drawable abc_ab_stacked_solid_dark_holo 0x7f020008
157 | int drawable abc_ab_stacked_solid_light_holo 0x7f020009
158 | int drawable abc_ab_stacked_transparent_dark_holo 0x7f02000a
159 | int drawable abc_ab_stacked_transparent_light_holo 0x7f02000b
160 | int drawable abc_ab_transparent_dark_holo 0x7f02000c
161 | int drawable abc_ab_transparent_light_holo 0x7f02000d
162 | int drawable abc_cab_background_bottom_holo_dark 0x7f02000e
163 | int drawable abc_cab_background_bottom_holo_light 0x7f02000f
164 | int drawable abc_cab_background_top_holo_dark 0x7f020010
165 | int drawable abc_cab_background_top_holo_light 0x7f020011
166 | int drawable abc_ic_ab_back_holo_dark 0x7f020012
167 | int drawable abc_ic_ab_back_holo_light 0x7f020013
168 | int drawable abc_ic_cab_done_holo_dark 0x7f020014
169 | int drawable abc_ic_cab_done_holo_light 0x7f020015
170 | int drawable abc_ic_clear 0x7f020016
171 | int drawable abc_ic_clear_disabled 0x7f020017
172 | int drawable abc_ic_clear_holo_light 0x7f020018
173 | int drawable abc_ic_clear_normal 0x7f020019
174 | int drawable abc_ic_clear_search_api_disabled_holo_light 0x7f02001a
175 | int drawable abc_ic_clear_search_api_holo_light 0x7f02001b
176 | int drawable abc_ic_commit_search_api_holo_dark 0x7f02001c
177 | int drawable abc_ic_commit_search_api_holo_light 0x7f02001d
178 | int drawable abc_ic_go 0x7f02001e
179 | int drawable abc_ic_go_search_api_holo_light 0x7f02001f
180 | int drawable abc_ic_menu_moreoverflow_normal_holo_dark 0x7f020020
181 | int drawable abc_ic_menu_moreoverflow_normal_holo_light 0x7f020021
182 | int drawable abc_ic_menu_share_holo_dark 0x7f020022
183 | int drawable abc_ic_menu_share_holo_light 0x7f020023
184 | int drawable abc_ic_search 0x7f020024
185 | int drawable abc_ic_search_api_holo_light 0x7f020025
186 | int drawable abc_ic_voice_search 0x7f020026
187 | int drawable abc_ic_voice_search_api_holo_light 0x7f020027
188 | int drawable abc_item_background_holo_dark 0x7f020028
189 | int drawable abc_item_background_holo_light 0x7f020029
190 | int drawable abc_list_divider_holo_dark 0x7f02002a
191 | int drawable abc_list_divider_holo_light 0x7f02002b
192 | int drawable abc_list_focused_holo 0x7f02002c
193 | int drawable abc_list_longpressed_holo 0x7f02002d
194 | int drawable abc_list_pressed_holo_dark 0x7f02002e
195 | int drawable abc_list_pressed_holo_light 0x7f02002f
196 | int drawable abc_list_selector_background_transition_holo_dark 0x7f020030
197 | int drawable abc_list_selector_background_transition_holo_light 0x7f020031
198 | int drawable abc_list_selector_disabled_holo_dark 0x7f020032
199 | int drawable abc_list_selector_disabled_holo_light 0x7f020033
200 | int drawable abc_list_selector_holo_dark 0x7f020034
201 | int drawable abc_list_selector_holo_light 0x7f020035
202 | int drawable abc_menu_dropdown_panel_holo_dark 0x7f020036
203 | int drawable abc_menu_dropdown_panel_holo_light 0x7f020037
204 | int drawable abc_menu_hardkey_panel_holo_dark 0x7f020038
205 | int drawable abc_menu_hardkey_panel_holo_light 0x7f020039
206 | int drawable abc_search_dropdown_dark 0x7f02003a
207 | int drawable abc_search_dropdown_light 0x7f02003b
208 | int drawable abc_spinner_ab_default_holo_dark 0x7f02003c
209 | int drawable abc_spinner_ab_default_holo_light 0x7f02003d
210 | int drawable abc_spinner_ab_disabled_holo_dark 0x7f02003e
211 | int drawable abc_spinner_ab_disabled_holo_light 0x7f02003f
212 | int drawable abc_spinner_ab_focused_holo_dark 0x7f020040
213 | int drawable abc_spinner_ab_focused_holo_light 0x7f020041
214 | int drawable abc_spinner_ab_holo_dark 0x7f020042
215 | int drawable abc_spinner_ab_holo_light 0x7f020043
216 | int drawable abc_spinner_ab_pressed_holo_dark 0x7f020044
217 | int drawable abc_spinner_ab_pressed_holo_light 0x7f020045
218 | int drawable abc_tab_indicator_ab_holo 0x7f020046
219 | int drawable abc_tab_selected_focused_holo 0x7f020047
220 | int drawable abc_tab_selected_holo 0x7f020048
221 | int drawable abc_tab_selected_pressed_holo 0x7f020049
222 | int drawable abc_tab_unselected_pressed_holo 0x7f02004a
223 | int drawable abc_textfield_search_default_holo_dark 0x7f02004b
224 | int drawable abc_textfield_search_default_holo_light 0x7f02004c
225 | int drawable abc_textfield_search_right_default_holo_dark 0x7f02004d
226 | int drawable abc_textfield_search_right_default_holo_light 0x7f02004e
227 | int drawable abc_textfield_search_right_selected_holo_dark 0x7f02004f
228 | int drawable abc_textfield_search_right_selected_holo_light 0x7f020050
229 | int drawable abc_textfield_search_selected_holo_dark 0x7f020051
230 | int drawable abc_textfield_search_selected_holo_light 0x7f020052
231 | int drawable abc_textfield_searchview_holo_dark 0x7f020053
232 | int drawable abc_textfield_searchview_holo_light 0x7f020054
233 | int drawable abc_textfield_searchview_right_holo_dark 0x7f020055
234 | int drawable abc_textfield_searchview_right_holo_light 0x7f020056
235 | int drawable ic_launcher 0x7f020057
236 | int id action_bar 0x7f05001c
237 | int id action_bar_activity_content 0x7f050015
238 | int id action_bar_container 0x7f05001b
239 | int id action_bar_overlay_layout 0x7f05001f
240 | int id action_bar_root 0x7f05001a
241 | int id action_bar_subtitle 0x7f050023
242 | int id action_bar_title 0x7f050022
243 | int id action_context_bar 0x7f05001d
244 | int id action_menu_divider 0x7f050016
245 | int id action_menu_presenter 0x7f050017
246 | int id action_mode_close_button 0x7f050024
247 | int id activity_chooser_view_content 0x7f050025
248 | int id always 0x7f05000b
249 | int id beginning 0x7f050011
250 | int id checkbox 0x7f05002d
251 | int id collapseActionView 0x7f05000d
252 | int id default_activity_button 0x7f050028
253 | int id dialog 0x7f05000e
254 | int id disableHome 0x7f050008
255 | int id dropdown 0x7f05000f
256 | int id edit_query 0x7f050030
257 | int id end 0x7f050013
258 | int id expand_activities_button 0x7f050026
259 | int id expanded_menu 0x7f05002c
260 | int id home 0x7f050014
261 | int id homeAsUp 0x7f050005
262 | int id icon 0x7f05002a
263 | int id ifRoom 0x7f05000a
264 | int id image 0x7f050027
265 | int id listMode 0x7f050001
266 | int id list_item 0x7f050029
267 | int id middle 0x7f050012
268 | int id msgTextView 0x7f05003c
269 | int id never 0x7f050009
270 | int id none 0x7f050010
271 | int id normal 0x7f050000
272 | int id progress_circular 0x7f050018
273 | int id progress_horizontal 0x7f050019
274 | int id radio 0x7f05002f
275 | int id search_badge 0x7f050032
276 | int id search_bar 0x7f050031
277 | int id search_button 0x7f050033
278 | int id search_close_btn 0x7f050038
279 | int id search_edit_frame 0x7f050034
280 | int id search_go_btn 0x7f05003a
281 | int id search_mag_icon 0x7f050035
282 | int id search_plate 0x7f050036
283 | int id search_src_text 0x7f050037
284 | int id search_voice_btn 0x7f05003b
285 | int id shortcut 0x7f05002e
286 | int id showCustom 0x7f050007
287 | int id showHome 0x7f050004
288 | int id showTitle 0x7f050006
289 | int id split_action_bar 0x7f05001e
290 | int id startcamerapreview 0x7f05003d
291 | int id stopcamerapreview 0x7f05003e
292 | int id submit_area 0x7f050039
293 | int id surfaceview 0x7f05003f
294 | int id tabMode 0x7f050002
295 | int id title 0x7f05002b
296 | int id top_action_bar 0x7f050020
297 | int id up 0x7f050021
298 | int id useLogo 0x7f050003
299 | int id withText 0x7f05000c
300 | int integer abc_max_action_buttons 0x7f090000
301 | int layout abc_action_bar_decor 0x7f030000
302 | int layout abc_action_bar_decor_include 0x7f030001
303 | int layout abc_action_bar_decor_overlay 0x7f030002
304 | int layout abc_action_bar_home 0x7f030003
305 | int layout abc_action_bar_tab 0x7f030004
306 | int layout abc_action_bar_tabbar 0x7f030005
307 | int layout abc_action_bar_title_item 0x7f030006
308 | int layout abc_action_bar_view_list_nav_layout 0x7f030007
309 | int layout abc_action_menu_item_layout 0x7f030008
310 | int layout abc_action_menu_layout 0x7f030009
311 | int layout abc_action_mode_bar 0x7f03000a
312 | int layout abc_action_mode_close_item 0x7f03000b
313 | int layout abc_activity_chooser_view 0x7f03000c
314 | int layout abc_activity_chooser_view_include 0x7f03000d
315 | int layout abc_activity_chooser_view_list_item 0x7f03000e
316 | int layout abc_expanded_menu_layout 0x7f03000f
317 | int layout abc_list_menu_item_checkbox 0x7f030010
318 | int layout abc_list_menu_item_icon 0x7f030011
319 | int layout abc_list_menu_item_layout 0x7f030012
320 | int layout abc_list_menu_item_radio 0x7f030013
321 | int layout abc_popup_menu_item_layout 0x7f030014
322 | int layout abc_search_dropdown_item_icons_2line 0x7f030015
323 | int layout abc_search_view 0x7f030016
324 | int layout abc_simple_decor 0x7f030017
325 | int layout activity_main 0x7f030018
326 | int layout support_simple_spinner_dropdown_item 0x7f030019
327 | int string abc_action_bar_home_description 0x7f0a0001
328 | int string abc_action_bar_up_description 0x7f0a0002
329 | int string abc_action_menu_overflow_description 0x7f0a0003
330 | int string abc_action_mode_done 0x7f0a0000
331 | int string abc_activity_chooser_view_see_all 0x7f0a000a
332 | int string abc_activitychooserview_choose_application 0x7f0a0009
333 | int string abc_searchview_description_clear 0x7f0a0006
334 | int string abc_searchview_description_query 0x7f0a0005
335 | int string abc_searchview_description_search 0x7f0a0004
336 | int string abc_searchview_description_submit 0x7f0a0007
337 | int string abc_searchview_description_voice 0x7f0a0008
338 | int string abc_shareactionprovider_share_with 0x7f0a000c
339 | int string abc_shareactionprovider_share_with_application 0x7f0a000b
340 | int string app_name 0x7f0a000d
341 | int string hello_world 0x7f0a000e
342 | int style AppBaseTheme 0x7f0b008b
343 | int style AppTheme 0x7f0b008c
344 | int style TextAppearance_AppCompat_Base_CompactMenu_Dialog 0x7f0b0063
345 | int style TextAppearance_AppCompat_Base_SearchResult 0x7f0b006d
346 | int style TextAppearance_AppCompat_Base_SearchResult_Subtitle 0x7f0b006f
347 | int style TextAppearance_AppCompat_Base_SearchResult_Title 0x7f0b006e
348 | int style TextAppearance_AppCompat_Base_Widget_PopupMenu_Large 0x7f0b0069
349 | int style TextAppearance_AppCompat_Base_Widget_PopupMenu_Small 0x7f0b006a
350 | int style TextAppearance_AppCompat_Light_Base_SearchResult 0x7f0b0070
351 | int style TextAppearance_AppCompat_Light_Base_SearchResult_Subtitle 0x7f0b0072
352 | int style TextAppearance_AppCompat_Light_Base_SearchResult_Title 0x7f0b0071
353 | int style TextAppearance_AppCompat_Light_Base_Widget_PopupMenu_Large 0x7f0b006b
354 | int style TextAppearance_AppCompat_Light_Base_Widget_PopupMenu_Small 0x7f0b006c
355 | int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x7f0b0035
356 | int style TextAppearance_AppCompat_Light_SearchResult_Title 0x7f0b0034
357 | int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f0b0030
358 | int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f0b0031
359 | int style TextAppearance_AppCompat_SearchResult_Subtitle 0x7f0b0033
360 | int style TextAppearance_AppCompat_SearchResult_Title 0x7f0b0032
361 | int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f0b001a
362 | int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f0b0006
363 | int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f0b0008
364 | int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f0b0005
365 | int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f0b0007
366 | int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f0b001e
367 | int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x7f0b0020
368 | int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f0b001d
369 | int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x7f0b001f
370 | int style TextAppearance_AppCompat_Widget_Base_ActionBar_Menu 0x7f0b0054
371 | int style TextAppearance_AppCompat_Widget_Base_ActionBar_Subtitle 0x7f0b0056
372 | int style TextAppearance_AppCompat_Widget_Base_ActionBar_Subtitle_Inverse 0x7f0b0058
373 | int style TextAppearance_AppCompat_Widget_Base_ActionBar_Title 0x7f0b0055
374 | int style TextAppearance_AppCompat_Widget_Base_ActionBar_Title_Inverse 0x7f0b0057
375 | int style TextAppearance_AppCompat_Widget_Base_ActionMode_Subtitle 0x7f0b0051
376 | int style TextAppearance_AppCompat_Widget_Base_ActionMode_Subtitle_Inverse 0x7f0b0053
377 | int style TextAppearance_AppCompat_Widget_Base_ActionMode_Title 0x7f0b0050
378 | int style TextAppearance_AppCompat_Widget_Base_ActionMode_Title_Inverse 0x7f0b0052
379 | int style TextAppearance_AppCompat_Widget_Base_DropDownItem 0x7f0b0061
380 | int style TextAppearance_AppCompat_Widget_DropDownItem 0x7f0b0021
381 | int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f0b002e
382 | int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f0b002f
383 | int style TextAppearance_Widget_AppCompat_Base_ExpandedMenu_Item 0x7f0b0062
384 | int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f0b0028
385 | int style Theme_AppCompat 0x7f0b0077
386 | int style Theme_AppCompat_Base_CompactMenu 0x7f0b0083
387 | int style Theme_AppCompat_Base_CompactMenu_Dialog 0x7f0b0084
388 | int style Theme_AppCompat_CompactMenu 0x7f0b007c
389 | int style Theme_AppCompat_CompactMenu_Dialog 0x7f0b007d
390 | int style Theme_AppCompat_DialogWhenLarge 0x7f0b007a
391 | int style Theme_AppCompat_Light 0x7f0b0078
392 | int style Theme_AppCompat_Light_DarkActionBar 0x7f0b0079
393 | int style Theme_AppCompat_Light_DialogWhenLarge 0x7f0b007b
394 | int style Theme_Base 0x7f0b007e
395 | int style Theme_Base_AppCompat 0x7f0b0080
396 | int style Theme_Base_AppCompat_Dialog_FixedSize 0x7f0b0087
397 | int style Theme_Base_AppCompat_Dialog_Light_FixedSize 0x7f0b0088
398 | int style Theme_Base_AppCompat_DialogWhenLarge 0x7f0b0085
399 | int style Theme_Base_AppCompat_DialogWhenLarge_Base 0x7f0b0089
400 | int style Theme_Base_AppCompat_Light 0x7f0b0081
401 | int style Theme_Base_AppCompat_Light_DarkActionBar 0x7f0b0082
402 | int style Theme_Base_AppCompat_Light_DialogWhenLarge 0x7f0b0086
403 | int style Theme_Base_AppCompat_Light_DialogWhenLarge_Base 0x7f0b008a
404 | int style Theme_Base_Light 0x7f0b007f
405 | int style Widget_AppCompat_ActionBar 0x7f0b0000
406 | int style Widget_AppCompat_ActionBar_Solid 0x7f0b0002
407 | int style Widget_AppCompat_ActionBar_TabBar 0x7f0b0011
408 | int style Widget_AppCompat_ActionBar_TabText 0x7f0b0017
409 | int style Widget_AppCompat_ActionBar_TabView 0x7f0b0014
410 | int style Widget_AppCompat_ActionButton 0x7f0b000b
411 | int style Widget_AppCompat_ActionButton_CloseMode 0x7f0b000d
412 | int style Widget_AppCompat_ActionButton_Overflow 0x7f0b000f
413 | int style Widget_AppCompat_ActionMode 0x7f0b001b
414 | int style Widget_AppCompat_ActivityChooserView 0x7f0b0038
415 | int style Widget_AppCompat_AutoCompleteTextView 0x7f0b0036
416 | int style Widget_AppCompat_Base_ActionBar 0x7f0b003a
417 | int style Widget_AppCompat_Base_ActionBar_Solid 0x7f0b003c
418 | int style Widget_AppCompat_Base_ActionBar_TabBar 0x7f0b0045
419 | int style Widget_AppCompat_Base_ActionBar_TabText 0x7f0b004b
420 | int style Widget_AppCompat_Base_ActionBar_TabView 0x7f0b0048
421 | int style Widget_AppCompat_Base_ActionButton 0x7f0b003f
422 | int style Widget_AppCompat_Base_ActionButton_CloseMode 0x7f0b0041
423 | int style Widget_AppCompat_Base_ActionButton_Overflow 0x7f0b0043
424 | int style Widget_AppCompat_Base_ActionMode 0x7f0b004e
425 | int style Widget_AppCompat_Base_ActivityChooserView 0x7f0b0075
426 | int style Widget_AppCompat_Base_AutoCompleteTextView 0x7f0b0073
427 | int style Widget_AppCompat_Base_DropDownItem_Spinner 0x7f0b005d
428 | int style Widget_AppCompat_Base_ListPopupWindow 0x7f0b0065
429 | int style Widget_AppCompat_Base_ListView_DropDown 0x7f0b005f
430 | int style Widget_AppCompat_Base_ListView_Menu 0x7f0b0064
431 | int style Widget_AppCompat_Base_PopupMenu 0x7f0b0067
432 | int style Widget_AppCompat_Base_ProgressBar 0x7f0b005a
433 | int style Widget_AppCompat_Base_ProgressBar_Horizontal 0x7f0b0059
434 | int style Widget_AppCompat_Base_Spinner 0x7f0b005b
435 | int style Widget_AppCompat_DropDownItem_Spinner 0x7f0b0024
436 | int style Widget_AppCompat_Light_ActionBar 0x7f0b0001
437 | int style Widget_AppCompat_Light_ActionBar_Solid 0x7f0b0003
438 | int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x7f0b0004
439 | int style Widget_AppCompat_Light_ActionBar_TabBar 0x7f0b0012
440 | int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x7f0b0013
441 | int style Widget_AppCompat_Light_ActionBar_TabText 0x7f0b0018
442 | int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f0b0019
443 | int style Widget_AppCompat_Light_ActionBar_TabView 0x7f0b0015
444 | int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x7f0b0016
445 | int style Widget_AppCompat_Light_ActionButton 0x7f0b000c
446 | int style Widget_AppCompat_Light_ActionButton_CloseMode 0x7f0b000e
447 | int style Widget_AppCompat_Light_ActionButton_Overflow 0x7f0b0010
448 | int style Widget_AppCompat_Light_ActionMode_Inverse 0x7f0b001c
449 | int style Widget_AppCompat_Light_ActivityChooserView 0x7f0b0039
450 | int style Widget_AppCompat_Light_AutoCompleteTextView 0x7f0b0037
451 | int style Widget_AppCompat_Light_Base_ActionBar 0x7f0b003b
452 | int style Widget_AppCompat_Light_Base_ActionBar_Solid 0x7f0b003d
453 | int style Widget_AppCompat_Light_Base_ActionBar_Solid_Inverse 0x7f0b003e
454 | int style Widget_AppCompat_Light_Base_ActionBar_TabBar 0x7f0b0046
455 | int style Widget_AppCompat_Light_Base_ActionBar_TabBar_Inverse 0x7f0b0047
456 | int style Widget_AppCompat_Light_Base_ActionBar_TabText 0x7f0b004c
457 | int style Widget_AppCompat_Light_Base_ActionBar_TabText_Inverse 0x7f0b004d
458 | int style Widget_AppCompat_Light_Base_ActionBar_TabView 0x7f0b0049
459 | int style Widget_AppCompat_Light_Base_ActionBar_TabView_Inverse 0x7f0b004a
460 | int style Widget_AppCompat_Light_Base_ActionButton 0x7f0b0040
461 | int style Widget_AppCompat_Light_Base_ActionButton_CloseMode 0x7f0b0042
462 | int style Widget_AppCompat_Light_Base_ActionButton_Overflow 0x7f0b0044
463 | int style Widget_AppCompat_Light_Base_ActionMode_Inverse 0x7f0b004f
464 | int style Widget_AppCompat_Light_Base_ActivityChooserView 0x7f0b0076
465 | int style Widget_AppCompat_Light_Base_AutoCompleteTextView 0x7f0b0074
466 | int style Widget_AppCompat_Light_Base_DropDownItem_Spinner 0x7f0b005e
467 | int style Widget_AppCompat_Light_Base_ListPopupWindow 0x7f0b0066
468 | int style Widget_AppCompat_Light_Base_ListView_DropDown 0x7f0b0060
469 | int style Widget_AppCompat_Light_Base_PopupMenu 0x7f0b0068
470 | int style Widget_AppCompat_Light_Base_Spinner 0x7f0b005c
471 | int style Widget_AppCompat_Light_DropDownItem_Spinner 0x7f0b0025
472 | int style Widget_AppCompat_Light_ListPopupWindow 0x7f0b002a
473 | int style Widget_AppCompat_Light_ListView_DropDown 0x7f0b0027
474 | int style Widget_AppCompat_Light_PopupMenu 0x7f0b002c
475 | int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x7f0b0023
476 | int style Widget_AppCompat_ListPopupWindow 0x7f0b0029
477 | int style Widget_AppCompat_ListView_DropDown 0x7f0b0026
478 | int style Widget_AppCompat_ListView_Menu 0x7f0b002d
479 | int style Widget_AppCompat_PopupMenu 0x7f0b002b
480 | int style Widget_AppCompat_ProgressBar 0x7f0b000a
481 | int style Widget_AppCompat_ProgressBar_Horizontal 0x7f0b0009
482 | int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x7f0b0022
483 | int[] styleable ActionBar { 0x7f010025, 0x7f010026, 0x7f010027, 0x7f010028, 0x7f010029, 0x7f01002a, 0x7f01002b, 0x7f01002c, 0x7f01002d, 0x7f01002e, 0x7f01002f, 0x7f010030, 0x7f010031, 0x7f010032, 0x7f010033, 0x7f010034, 0x7f010035, 0x7f010036, 0x7f010037 }
484 | int styleable ActionBar_background 10
485 | int styleable ActionBar_backgroundSplit 12
486 | int styleable ActionBar_backgroundStacked 11
487 | int styleable ActionBar_customNavigationLayout 13
488 | int styleable ActionBar_displayOptions 3
489 | int styleable ActionBar_divider 9
490 | int styleable ActionBar_height 1
491 | int styleable ActionBar_homeLayout 14
492 | int styleable ActionBar_icon 7
493 | int styleable ActionBar_indeterminateProgressStyle 16
494 | int styleable ActionBar_itemPadding 18
495 | int styleable ActionBar_logo 8
496 | int styleable ActionBar_navigationMode 2
497 | int styleable ActionBar_progressBarPadding 17
498 | int styleable ActionBar_progressBarStyle 15
499 | int styleable ActionBar_subtitle 4
500 | int styleable ActionBar_subtitleTextStyle 6
501 | int styleable ActionBar_title 0
502 | int styleable ActionBar_titleTextStyle 5
503 | int[] styleable ActionBarLayout { 0x010100b3 }
504 | int styleable ActionBarLayout_android_layout_gravity 0
505 | int[] styleable ActionBarWindow { 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003, 0x7f010004, 0x7f010005, 0x7f010006 }
506 | int styleable ActionBarWindow_windowActionBar 0
507 | int styleable ActionBarWindow_windowActionBarOverlay 1
508 | int styleable ActionBarWindow_windowFixedHeightMajor 6
509 | int styleable ActionBarWindow_windowFixedHeightMinor 4
510 | int styleable ActionBarWindow_windowFixedWidthMajor 3
511 | int styleable ActionBarWindow_windowFixedWidthMinor 5
512 | int styleable ActionBarWindow_windowSplitActionBar 2
513 | int[] styleable ActionMenuItemView { 0x0101013f }
514 | int styleable ActionMenuItemView_android_minWidth 0
515 | int[] styleable ActionMenuView { }
516 | int[] styleable ActionMode { 0x7f010026, 0x7f01002a, 0x7f01002b, 0x7f01002f, 0x7f010031 }
517 | int styleable ActionMode_background 3
518 | int styleable ActionMode_backgroundSplit 4
519 | int styleable ActionMode_height 0
520 | int styleable ActionMode_subtitleTextStyle 2
521 | int styleable ActionMode_titleTextStyle 1
522 | int[] styleable ActivityChooserView { 0x7f01006a, 0x7f01006b }
523 | int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 1
524 | int styleable ActivityChooserView_initialActivityCount 0
525 | int[] styleable CompatTextView { 0x7f01006d }
526 | int styleable CompatTextView_textAllCaps 0
527 | int[] styleable LinearLayoutICS { 0x7f01002e, 0x7f010055, 0x7f010056 }
528 | int styleable LinearLayoutICS_divider 0
529 | int styleable LinearLayoutICS_dividerPadding 2
530 | int styleable LinearLayoutICS_showDividers 1
531 | int[] styleable MenuGroup { 0x0101000e, 0x010100d0, 0x01010194, 0x010101de, 0x010101df, 0x010101e0 }
532 | int styleable MenuGroup_android_checkableBehavior 5
533 | int styleable MenuGroup_android_enabled 0
534 | int styleable MenuGroup_android_id 1
535 | int styleable MenuGroup_android_menuCategory 3
536 | int styleable MenuGroup_android_orderInCategory 4
537 | int styleable MenuGroup_android_visible 2
538 | int[] styleable MenuItem { 0x01010002, 0x0101000e, 0x010100d0, 0x01010106, 0x01010194, 0x010101de, 0x010101df, 0x010101e1, 0x010101e2, 0x010101e3, 0x010101e4, 0x010101e5, 0x0101026f, 0x7f01004d, 0x7f01004e, 0x7f01004f, 0x7f010050 }
539 | int styleable MenuItem_actionLayout 14
540 | int styleable MenuItem_actionProviderClass 16
541 | int styleable MenuItem_actionViewClass 15
542 | int styleable MenuItem_android_alphabeticShortcut 9
543 | int styleable MenuItem_android_checkable 11
544 | int styleable MenuItem_android_checked 3
545 | int styleable MenuItem_android_enabled 1
546 | int styleable MenuItem_android_icon 0
547 | int styleable MenuItem_android_id 2
548 | int styleable MenuItem_android_menuCategory 5
549 | int styleable MenuItem_android_numericShortcut 10
550 | int styleable MenuItem_android_onClick 12
551 | int styleable MenuItem_android_orderInCategory 6
552 | int styleable MenuItem_android_title 7
553 | int styleable MenuItem_android_titleCondensed 8
554 | int styleable MenuItem_android_visible 4
555 | int styleable MenuItem_showAsAction 13
556 | int[] styleable MenuView { 0x010100ae, 0x0101012c, 0x0101012d, 0x0101012e, 0x0101012f, 0x01010130, 0x01010131, 0x01010438 }
557 | int styleable MenuView_android_headerBackground 4
558 | int styleable MenuView_android_horizontalDivider 2
559 | int styleable MenuView_android_itemBackground 5
560 | int styleable MenuView_android_itemIconDisabledAlpha 6
561 | int styleable MenuView_android_itemTextAppearance 1
562 | int styleable MenuView_android_preserveIconSpacing 7
563 | int styleable MenuView_android_verticalDivider 3
564 | int styleable MenuView_android_windowAnimationStyle 0
565 | int[] styleable SearchView { 0x0101011f, 0x01010220, 0x01010264, 0x7f01005a, 0x7f01005b }
566 | int styleable SearchView_android_imeOptions 2
567 | int styleable SearchView_android_inputType 1
568 | int styleable SearchView_android_maxWidth 0
569 | int styleable SearchView_iconifiedByDefault 3
570 | int styleable SearchView_queryHint 4
571 | int[] styleable Spinner { 0x010100af, 0x01010175, 0x01010176, 0x01010262, 0x010102ac, 0x010102ad, 0x7f010051, 0x7f010052, 0x7f010053, 0x7f010054 }
572 | int styleable Spinner_android_dropDownHorizontalOffset 4
573 | int styleable Spinner_android_dropDownSelector 1
574 | int styleable Spinner_android_dropDownVerticalOffset 5
575 | int styleable Spinner_android_dropDownWidth 3
576 | int styleable Spinner_android_gravity 0
577 | int styleable Spinner_android_popupBackground 2
578 | int styleable Spinner_disableChildrenWhenDisabled 9
579 | int styleable Spinner_popupPromptView 8
580 | int styleable Spinner_prompt 6
581 | int styleable Spinner_spinnerMode 7
582 | int[] styleable Theme { 0x7f010047, 0x7f010048, 0x7f010049, 0x7f01004a, 0x7f01004b, 0x7f01004c }
583 | int styleable Theme_actionDropDownStyle 0
584 | int styleable Theme_dropdownListPreferredItemHeight 1
585 | int styleable Theme_listChoiceBackgroundIndicator 5
586 | int styleable Theme_panelMenuListTheme 4
587 | int styleable Theme_panelMenuListWidth 3
588 | int styleable Theme_popupMenuStyle 2
589 | int[] styleable View { 0x010100da, 0x7f010038, 0x7f010039 }
590 | int styleable View_android_focusable 0
591 | int styleable View_paddingEnd 2
592 | int styleable View_paddingStart 1
593 |
--------------------------------------------------------------------------------