//  *
        //   * Sets the TextureView transform to preserve the aspect ratio of the video.
        //
        private void AdjustAspectRatio(int videoWidth, int videoHeight)
        {
            int    viewWidth   = mTextureView.Width;
            int    viewHeight  = mTextureView.Height;
            double aspectRatio = (double)videoHeight / videoWidth;

            int newWidth, newHeight;

            if (viewHeight > (int)(viewWidth * aspectRatio))
            {
                // limited by narrow width; restrict height
                newWidth  = viewWidth;
                newHeight = (int)(viewWidth * aspectRatio);
            }
            else
            {
                // limited by short height; restrict width
                newWidth  = (int)(viewHeight / aspectRatio);
                newHeight = viewHeight;
            }
            int xoff = (viewWidth - newWidth) / 2;
            int yoff = (viewHeight - newHeight) / 2;

            Log.Verbose(TAG, "video=" + videoWidth + "x" + videoHeight + " view=" + viewWidth + "x" + viewHeight + " newView=" + newWidth + "x" + newHeight + " off=" + xoff + "," + yoff);

            Matrix txform = new Matrix();

            mTextureView.GetTransform(txform);
            txform.SetScale((float)newWidth / viewWidth, (float)newHeight / viewHeight);
            //txform.postRotate(10);          // just for fun
            txform.PostTranslate(xoff, yoff);
            mTextureView.SetTransform(txform);
        }