title: Crop video before encoding with MediaCodec for Grafika's "Continuous Capture" Activity
body: <p>I am learning about Grafika's "Continuous Capture" Activity, It is about recording a video with MediaCodec.</p>
  
  <p>The activity source code is at <a href="https://github.com/google/grafika/blob/master/src/com/android/grafika/ContinuousCaptureActivity.java" rel="noreferrer">https://github.com/google/grafika/blob/master/src/com/android/grafika/ContinuousCaptureActivity.java</a></p>
  
  <p>The program uses a SurfaceTexture obj to receive data from camera and creates 2 EGLSurface obj with this SurfaceTexture obj, one EGLSurface obj feeds the data to MediaCodec and the other feeds data to SurfaceView for camera preview. MediaCodec encodes the data to h264 data and the MediaMuxer obj writes h264 data to a mp4 file. </p>
  
  <p>But there is a problem, the preview size supported by the camera is landspace (width > height) such as 1920*1080, 1440*1080,720*480 and so on. Usually, we take the phone in portrait orientation when we record a video, so we should use API: Camera.setDisplayOrientation(90) to rotate the picture to a portrait one, then a portrait video will be recorded.</p>
  
  <p>But I want to record a landscape video with the phone portrait in my hand, I have to crop every frame from the camera. My method is that cutting off the bottom and top of every frame picture and retain the middle of the picture, then the left picture will be a landscapce one.</p>
  
  <p>But I am not familiar with opengl, I do not know how to crop the SurfaceTexture data. Could anyone who is good at opengl give me some help?</p>