diff options
author | Shraddha Basantwani <shraddha.basantwani@ittiam.com> | 2019-05-22 18:07:27 +0530 |
---|---|---|
committer | Nick Chalko <nchalko@google.com> | 2019-09-16 15:52:58 -0700 |
commit | 906d4098e8264baf527b072179273517c1209eb5 (patch) | |
tree | dbd50ee67907fc5be392956de73bb6dcee56cd28 | |
parent | 5f6346e53981c847909d238d330805836052c4bc (diff) | |
download | TV-ndk-sysroot-r21.tar.gz |
Fix aspect ratio for recorded contentndk-sysroot-r21
The pixel aspect ratio for recorded content is not stored.
The pixel aspect ratio is applied to the width and the
modified width is stored.
Bug: 133364485
Change-Id: I8f6de7a9719167fa3e6c47e403e2f21b494159c3
Test: manual
-rw-r--r-- | src/com/android/tv/dvr/ui/playback/DvrPlayer.java | 8 | ||||
-rw-r--r-- | src/com/android/tv/ui/TunableTvView.java | 10 | ||||
-rw-r--r-- | tuner/src/com/android/tv/tuner/exoplayer/buffer/SampleChunkIoHelper.java | 23 |
3 files changed, 33 insertions, 8 deletions
diff --git a/src/com/android/tv/dvr/ui/playback/DvrPlayer.java b/src/com/android/tv/dvr/ui/playback/DvrPlayer.java index e8325e1f..6cfa2e20 100644 --- a/src/com/android/tv/dvr/ui/playback/DvrPlayer.java +++ b/src/com/android/tv/dvr/ui/playback/DvrPlayer.java @@ -521,13 +521,17 @@ public class DvrPlayer { for (TvTrackInfo trackInfo : trackInfos) { if (trackInfo.getId().equals(trackId)) { float videoAspectRatio; + float videoPixelAspectRatio = + trackInfo.getVideoPixelAspectRatio(); int videoWidth = trackInfo.getVideoWidth(); int videoHeight = trackInfo.getVideoHeight(); if (videoWidth > 0 && videoHeight > 0) { videoAspectRatio = - trackInfo.getVideoPixelAspectRatio() - * trackInfo.getVideoWidth() + (float) trackInfo.getVideoWidth() / trackInfo.getVideoHeight(); + videoAspectRatio *= + videoPixelAspectRatio > 0 ? + videoPixelAspectRatio : 1; } else { // Aspect ratio is unknown. Pass the message to // listeners. diff --git a/src/com/android/tv/ui/TunableTvView.java b/src/com/android/tv/ui/TunableTvView.java index 49f7d4c9..a736e79d 100644 --- a/src/com/android/tv/ui/TunableTvView.java +++ b/src/com/android/tv/ui/TunableTvView.java @@ -290,12 +290,12 @@ public class TunableTvView extends FrameLayout implements StreamInfo, TunableTvV if (mVideoWidth <= 0 || mVideoHeight <= 0) { mVideoDisplayAspectRatio = 0.0f; } else { - float VideoPixelAspectRatio = + float videoPixelAspectRatio = track.getVideoPixelAspectRatio(); - mVideoDisplayAspectRatio = - VideoPixelAspectRatio - * mVideoWidth - / mVideoHeight; + mVideoDisplayAspectRatio = (float) mVideoWidth + / mVideoHeight; + mVideoDisplayAspectRatio *= videoPixelAspectRatio > 0 ? + videoPixelAspectRatio : 1; } } else if (type == TvTrackInfo.TYPE_AUDIO) { mAudioChannelCount = track.getAudioChannelCount(); diff --git a/tuner/src/com/android/tv/tuner/exoplayer/buffer/SampleChunkIoHelper.java b/tuner/src/com/android/tv/tuner/exoplayer/buffer/SampleChunkIoHelper.java index 1454bdeb..82bf0df8 100644 --- a/tuner/src/com/android/tv/tuner/exoplayer/buffer/SampleChunkIoHelper.java +++ b/tuner/src/com/android/tv/tuner/exoplayer/buffer/SampleChunkIoHelper.java @@ -26,12 +26,14 @@ import android.util.Log; import android.util.Pair; import com.android.tv.common.SoftPreconditions; +import com.android.tv.common.flags.DvrFlags; import com.android.tv.tuner.exoplayer.buffer.RecordingSampleBuffer.BufferReason; import com.google.android.exoplayer.MediaFormat; import com.google.android.exoplayer.SampleHolder; import com.google.android.exoplayer.util.MimeTypes; import com.google.auto.factory.AutoFactory; +import com.google.auto.factory.Provided; import java.io.IOException; import java.util.ArrayList; @@ -67,6 +69,7 @@ public class SampleChunkIoHelper implements Handler.Callback { private final BufferManager mBufferManager; private final SamplePool mSamplePool; private final IoCallback mIoCallback; + private final DvrFlags mDvrFlags; private Handler mIoHandler; private final ConcurrentLinkedQueue<SampleHolder> mReadSampleBuffers[]; @@ -147,7 +150,8 @@ public class SampleChunkIoHelper implements Handler.Callback { @BufferReason int bufferReason, BufferManager bufferManager, SamplePool samplePool, - IoCallback ioCallback) { + IoCallback ioCallback, + @Provided DvrFlags dvrFlags) { mTrackCount = ids.size(); mIds = ids; mMediaFormats = mediaFormats; @@ -155,6 +159,7 @@ public class SampleChunkIoHelper implements Handler.Callback { mBufferManager = bufferManager; mSamplePool = samplePool; mIoCallback = ioCallback; + mDvrFlags = dvrFlags; mReadSampleBuffers = new ConcurrentLinkedQueue[mTrackCount]; mHandlerReadSampleBuffers = new ConcurrentLinkedQueue[mTrackCount]; @@ -208,6 +213,14 @@ public class SampleChunkIoHelper implements Handler.Callback { android.media.MediaFormat format = mMediaFormats.get(i).getFrameworkMediaFormatV16(); format.setLong(android.media.MediaFormat.KEY_DURATION, mBufferDurationUs); + if (mDvrFlags.storeVideoAspectRatio() && + mMediaFormats.get(i).pixelWidthHeightRatio > 0) { + // MediaFormats doesn't store aspect ratio so updating the width + // to maintain aspect ratio. + format.setInteger(android.media.MediaFormat.KEY_WIDTH, + (int) (mMediaFormats.get(i).width * + mMediaFormats.get(i).pixelWidthHeightRatio)); + } if (MimeTypes.isAudio(mMediaFormats.get(i).mimeType)) { audios.add(new BufferManager.TrackFormat(mIds.get(i), format)); } else if (MimeTypes.isVideo(mMediaFormats.get(i).mimeType)) { @@ -316,6 +329,14 @@ public class SampleChunkIoHelper implements Handler.Callback { android.media.MediaFormat format = mMediaFormats.get(i).getFrameworkMediaFormatV16(); format.setLong(android.media.MediaFormat.KEY_DURATION, mBufferDurationUs); + if (mDvrFlags.storeVideoAspectRatio() && + mMediaFormats.get(i).pixelWidthHeightRatio > 0) { + // MediaFormats doesn't store aspect ratio so updating the width + // to maintain aspect ratio. + format.setInteger(android.media.MediaFormat.KEY_WIDTH, + (int) (mMediaFormats.get(i).width * + mMediaFormats.get(i).pixelWidthHeightRatio)); + } if (MimeTypes.isAudio(mMediaFormats.get(i).mimeType)) { audios.add(new BufferManager.TrackFormat(mIds.get(i), format)); } else if (MimeTypes.isVideo(mMediaFormats.get(i).mimeType)) { |