2424import android .view .MenuItem ;
2525import android .view .View ;
2626import android .webkit .WebView ;
27+ import android .widget .AdapterView ;
28+ import android .widget .ArrayAdapter ;
29+ import android .widget .Spinner ;
30+ import android .widget .SpinnerAdapter ;
2731import android .widget .TextView ;
2832import android .widget .Toast ;
2933import android .widget .VideoView ;
@@ -93,6 +97,17 @@ public class MainActivity extends AppCompatActivity
9397 private Timer videoTimer = null ;
9498 private ProgressDialog progressDialog ;
9599
100+ private Spinner containerSpinner ;
101+ private Spinner videoCodecSpinner ;
102+ private Spinner fpsSpinner ;
103+ private Spinner resolutionSpinner ;
104+ private Spinner videoBitrateSpinner ;
105+ private Spinner audioCodecSpinner ;
106+ private Spinner audioBitrateSpinner ;
107+ private Spinner audioSampleRateSpinner ;
108+ private Spinner audioChannelSpinner ;
109+
110+
96111 private TextView tvLeft , tvRight ;
97112 private MediaInfo videoInfo ;
98113 private File outputDestination ;
@@ -114,6 +129,16 @@ protected void onCreate(Bundle savedInstanceState)
114129 progressDialog .setCancelable (false );
115130 rangeSeekBar .setEnabled (false );
116131
132+ containerSpinner = findViewById (R .id .containerSpinner );
133+ videoCodecSpinner = findViewById (R .id .videoCodecSpinner );
134+ fpsSpinner = findViewById (R .id .fpsSpinner );
135+ resolutionSpinner = findViewById (R .id .resolutionSpinner );
136+ videoBitrateSpinner = findViewById (R .id .videoBitrateSpinner );
137+ audioCodecSpinner = findViewById (R .id .audioCodecSpinner );
138+ audioBitrateSpinner = findViewById (R .id .audioBitrateSpinner );
139+ audioSampleRateSpinner = findViewById (R .id .audioSampleRateSpinner );
140+ audioChannelSpinner = findViewById (R .id .audioChannelSpinner );
141+
117142 FFmpegUtil .init (this , new ResultCallbackHandler <Boolean >()
118143 {
119144 @ Override
@@ -290,6 +315,66 @@ private void populateOptionDefaults()
290315 {
291316 findViewById (id ).setVisibility (View .VISIBLE );
292317 }
318+
319+ containerSpinner .setAdapter (new ArrayAdapter <>(this , R .layout .spinner_textview , MediaContainer .values ()));
320+ containerSpinner .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener ()
321+ {
322+ @ Override
323+ public void onItemSelected (AdapterView <?> parentView , View selectedItemView , int position , long id )
324+ {
325+ MediaContainer container = (MediaContainer )parentView .getItemAtPosition (position );
326+ int visibility = container .supportedVideoCodecs .size () > 0 ? View .VISIBLE : View .GONE ;
327+
328+ for (int resId : VIDEO_SETTINGS_IDS )
329+ {
330+ findViewById (resId ).setVisibility (visibility );
331+ }
332+
333+ videoCodecSpinner .setAdapter (new ArrayAdapter <>(MainActivity .this , R .layout .spinner_textview , container .supportedVideoCodecs ));
334+ audioCodecSpinner .setAdapter (new ArrayAdapter <>(MainActivity .this , R .layout .spinner_textview , container .supportedAudioCodecs ));
335+ }
336+
337+ @ Override
338+ public void onNothingSelected (AdapterView <?> parentView )
339+ {
340+ // Nothing to do
341+ }
342+ });
343+
344+ String [] fps = new String [] {"24" , "23.98" , "25" , "29.97" , "30" , "50" };
345+ fpsSpinner .setAdapter (new ArrayAdapter <>(this , R .layout .spinner_textview , fps ));
346+
347+ String [] resolution = new String [] {"176x144" , "320x240" , "480x360" , "640x360" , "640x480" , "800x600" , "960x720" , "1024x768" , "1280x720" , "1920x1080" , "2048x1080" , "2048x858" , "2560x1440" , "2560x1600" , "4096x2160" };
348+ resolutionSpinner .setAdapter (new ArrayAdapter <>(this , R .layout .spinner_textview , resolution ));
349+
350+ // TODO: Should be a text field, not a spinner
351+ String [] videoBitrate = new String [] {"500" };
352+ videoBitrateSpinner .setAdapter (new ArrayAdapter <>(this , R .layout .spinner_textview , videoBitrate ));
353+
354+ audioCodecSpinner .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener ()
355+ {
356+ @ Override
357+ public void onItemSelected (AdapterView <?> parentView , View selectedItemView , int position , long id )
358+ {
359+ AudioCodec audioCodec = (AudioCodec ) parentView .getItemAtPosition (position );
360+ audioChannelSpinner .setAdapter (new ArrayAdapter <>(MainActivity .this , R .layout .spinner_textview , audioCodec .supportedChannels ));
361+ }
362+
363+ @ Override
364+ public void onNothingSelected (AdapterView <?> parentView )
365+ {
366+ // Nothing to do
367+ }
368+ });
369+
370+ String [] audioBitrate = new String [] {"15" , "24" , "32" , "64" , "96" , "128" , "192" , "256" , "320" , "384" , "448" , "512" };
371+ audioBitrateSpinner .setAdapter (new ArrayAdapter <>(this , R .layout .spinner_textview , audioBitrate ));
372+
373+ String [] sampleRate = new String [] {"8000" , "11025" , "16000" , "22050" , "24000" , "32000" , "44100" , "48000" };
374+ audioSampleRateSpinner .setAdapter (new ArrayAdapter <>(this , R .layout .spinner_textview , sampleRate ));
375+
376+ String [] channels = new String [] {"1" , "2" };
377+ audioChannelSpinner .setAdapter (new ArrayAdapter <>(this , R .layout .spinner_textview , channels ));
293378 }
294379
295380 @ Override
0 commit comments