title: Android VideoView orientation change with buffered video
body: <p>I'm trying to replicate the functionality of the latest YouTube app in the Android marketplace.  When watching a video there's two separate layouts, one in portrait which provides additional info, and one in landscape which provides a full screen view of the video.</p>
  
  <p><img src="https://i.stack.imgur.com/wBuxS.png" alt="YouTube app portrait layout"><br>
  <strong>YouTupe app in portrait mode</strong>  </p>
  
  <p><img src="https://i.stack.imgur.com/S23Hp.png" alt="YouTube app landscape layout"><br>
  <strong>YouTube app in landscape mode</strong></p>
  
  <p>(Sorry for the randomness of the photos, but they were the first pics I could find of the actual layout)</p>
  
  <p>This is pretty easy to do normally - just specify an alternate layout in layout-land and all will be good.  The thing that the YouTube app does really well (and what I'm trying to replicate) is that on orientation change, the video continues playing and doesn't have to re-buffer from the beginning.</p>
  
  <p>I've figured out that overriding onConfigurationChange() and setting new LayoutParameters will allow me to resize the video without forcing a rebuffer - however the video will randomly scale to different widths/heights when rotating the screen multiple times.  I've tried doing all sorts of invalidate() calls on the VideoView, tried calling RequestLayout() on the parent RelativeLayout container and just trying as many different things as I can, but I can't seem to get it to work properly.  Any advice would be greatly appreciated!</p>
  
  <p>Here's my code:</p>
  
  <pre><code>@Override
  public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
      if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
          questionText.setVisibility(View.GONE);
          respond.setVisibility(View.GONE);
          questionVideo.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
      } else {
          questionText.setVisibility(View.VISIBLE);
          respond.setVisibility(View.VISIBLE);
          Resources r = getResources();
          int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 150.0f, r.getDisplayMetrics());
          questionVideo.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, height));
      }
  }
  </code></pre>
  
  <p>EDIT:  I've discovered in logcat some interesting output that comes up when my video is rotated which seems to be the culprit - although I have no idea how to fix it:</p>
  
  <p><strong>Logcat output when resizing properly (takes up entire window)</strong>  </p>
  
  <p>notice the h=726</p>
  
  <pre><code>12-13 15:37:35.468  1262  1270 I ActivityManager: Config changed: { scale=1.0 imsi=310/4 loc=en_US touch=3 keys=1/1/2 nav=1/1 orien=2 layout=34 uiMode=17 seq=210}
  12-13 15:37:35.561  1262  1268 I TIOverlay: Position/X0/Y76/W480/H225
  12-13 15:37:35.561  1262  1268 I TIOverlay: Adjusted Position/X1/Y0/W403/H225
  12-13 15:37:35.561  1262  1268 I TIOverlay: Rotation/90
  12-13 15:37:35.561  1262  1268 I Overlay : v4l2_overlay_set_position:: w=480 h=224
  12-13 15:37:35.561  1262  1268 I Overlay : v4l2_overlay_set_position:: w=402 h=726
  12-13 15:37:35.561  1262  1268 I Overlay : dumping driver state:
  12-13 15:37:35.561  1262  1268 I Overlay : output pixfmt:
  12-13 15:37:35.561  1262  1268 I Overlay : w: 432
  12-13 15:37:35.561  1262  1268 I Overlay : h: 240
  12-13 15:37:35.561  1262  1268 I Overlay : color: 7
  12-13 15:37:35.561  1262  1268 I Overlay : UYVY
  12-13 15:37:35.561  1262  1268 I Overlay : v4l2_overlay window:
  12-13 15:37:35.561  1262  1268 I Overlay : window l: 1 
  12-13 15:37:35.561  1262  1268 I Overlay : window t: 0 
  12-13 15:37:35.561  1262  1268 I Overlay : window w: 402 
  12-13 15:37:35.561  1262  1268 I Overlay : window h: 726
  </code></pre>
  
  <p><strong>Logcat output when resizing incorrectly (takes up tiny portion of full screen)</strong>  </p>
  
  <p>notice the h=480</p>
  
  <pre><code>12-13 15:43:00.085  1262  1270 I ActivityManager: Config changed: { scale=1.0 imsi=310/4 loc=en_US touch=3 keys=1/1/2 nav=1/1 orien=2 layout=34 uiMode=17 seq=216}
  12-13 15:43:00.171  1262  1268 I TIOverlay: Position/X0/Y76/W480/H225
  12-13 15:43:00.171  1262  1268 I TIOverlay: Adjusted Position/X138/Y0/W266/H225
  12-13 15:43:00.171  1262  1268 I TIOverlay: Rotation/90
  12-13 15:43:00.179  1262  1268 I Overlay : v4l2_overlay_set_position:: w=480 h=224
  12-13 15:43:00.179  1262  1268 I Overlay : v4l2_overlay_set_position:: w=266 h=480
  12-13 15:43:00.179  1262  1268 I Overlay : dumping driver state:
  12-13 15:43:00.179  1262  1268 I Overlay : output pixfmt:
  12-13 15:43:00.179  1262  1268 I Overlay : w: 432
  12-13 15:43:00.179  1262  1268 I Overlay : h: 240
  12-13 15:43:00.179  1262  1268 I Overlay : color: 7
  12-13 15:43:00.179  1262  1268 I Overlay : UYVY
  12-13 15:43:00.179  1262  1268 I Overlay : v4l2_overlay window:
  12-13 15:43:00.179  1262  1268 I Overlay : window l: 138 
  12-13 15:43:00.179  1262  1268 I Overlay : window t: 0 
  12-13 15:43:00.179  1262  1268 I Overlay : window w: 266 
  12-13 15:43:00.179  1262  1268 I Overlay : window h: 480
  </code></pre>
  
  <p>Maybe someone knows what 'Overlay' is and why it's not getting the correct height value?</p>