TIF: Add Active Format Description to TvTrackInfo

Bug: 21277083
Change-Id: Ided4ffcd2816e7bb11a81ef10f3b6e1499c6e89b
diff --git a/api/current.txt b/api/current.txt
index db77d33..5934594 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -23067,6 +23067,7 @@
     method public final java.lang.String getId();
     method public final java.lang.String getLanguage();
     method public final int getType();
+    method public final byte getVideoActiveFormatDescription();
     method public final float getVideoFrameRate();
     method public final int getVideoHeight();
     method public final float getVideoPixelAspectRatio();
@@ -23086,6 +23087,7 @@
     method public final android.media.tv.TvTrackInfo.Builder setDescription(java.lang.CharSequence);
     method public final android.media.tv.TvTrackInfo.Builder setExtra(android.os.Bundle);
     method public final android.media.tv.TvTrackInfo.Builder setLanguage(java.lang.String);
+    method public final android.media.tv.TvTrackInfo.Builder setVideoActiveFormatDescription(byte);
     method public final android.media.tv.TvTrackInfo.Builder setVideoFrameRate(float);
     method public final android.media.tv.TvTrackInfo.Builder setVideoHeight(int);
     method public final android.media.tv.TvTrackInfo.Builder setVideoPixelAspectRatio(float);
diff --git a/api/system-current.txt b/api/system-current.txt
index 86419ce..3dc4978 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -24852,6 +24852,7 @@
     method public final java.lang.String getId();
     method public final java.lang.String getLanguage();
     method public final int getType();
+    method public final byte getVideoActiveFormatDescription();
     method public final float getVideoFrameRate();
     method public final int getVideoHeight();
     method public final float getVideoPixelAspectRatio();
@@ -24871,6 +24872,7 @@
     method public final android.media.tv.TvTrackInfo.Builder setDescription(java.lang.CharSequence);
     method public final android.media.tv.TvTrackInfo.Builder setExtra(android.os.Bundle);
     method public final android.media.tv.TvTrackInfo.Builder setLanguage(java.lang.String);
+    method public final android.media.tv.TvTrackInfo.Builder setVideoActiveFormatDescription(byte);
     method public final android.media.tv.TvTrackInfo.Builder setVideoFrameRate(float);
     method public final android.media.tv.TvTrackInfo.Builder setVideoHeight(int);
     method public final android.media.tv.TvTrackInfo.Builder setVideoPixelAspectRatio(float);
diff --git a/api/test-current.txt b/api/test-current.txt
index 675b993..ed90474 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -23076,6 +23076,7 @@
     method public final java.lang.String getId();
     method public final java.lang.String getLanguage();
     method public final int getType();
+    method public final byte getVideoActiveFormatDescription();
     method public final float getVideoFrameRate();
     method public final int getVideoHeight();
     method public final float getVideoPixelAspectRatio();
@@ -23095,6 +23096,7 @@
     method public final android.media.tv.TvTrackInfo.Builder setDescription(java.lang.CharSequence);
     method public final android.media.tv.TvTrackInfo.Builder setExtra(android.os.Bundle);
     method public final android.media.tv.TvTrackInfo.Builder setLanguage(java.lang.String);
+    method public final android.media.tv.TvTrackInfo.Builder setVideoActiveFormatDescription(byte);
     method public final android.media.tv.TvTrackInfo.Builder setVideoFrameRate(float);
     method public final android.media.tv.TvTrackInfo.Builder setVideoHeight(int);
     method public final android.media.tv.TvTrackInfo.Builder setVideoPixelAspectRatio(float);
diff --git a/media/java/android/media/tv/TvTrackInfo.java b/media/java/android/media/tv/TvTrackInfo.java
index ed432c46..6a44b1e 100644
--- a/media/java/android/media/tv/TvTrackInfo.java
+++ b/media/java/android/media/tv/TvTrackInfo.java
@@ -52,11 +52,14 @@
     private final int mVideoHeight;
     private final float mVideoFrameRate;
     private final float mVideoPixelAspectRatio;
+    private final byte mVideoActiveFormatDescription;
+
     private final Bundle mExtra;
 
     private TvTrackInfo(int type, String id, String language, CharSequence description,
             int audioChannelCount, int audioSampleRate, int videoWidth, int videoHeight,
-            float videoFrameRate, float videoPixelAspectRatio, Bundle extra) {
+            float videoFrameRate, float videoPixelAspectRatio, byte videoActiveFormatDescription,
+            Bundle extra) {
         mType = type;
         mId = id;
         mLanguage = language;
@@ -67,6 +70,7 @@
         mVideoHeight = videoHeight;
         mVideoFrameRate = videoFrameRate;
         mVideoPixelAspectRatio = videoPixelAspectRatio;
+        mVideoActiveFormatDescription = videoActiveFormatDescription;
         mExtra = extra;
     }
 
@@ -81,6 +85,7 @@
         mVideoHeight = in.readInt();
         mVideoFrameRate = in.readFloat();
         mVideoPixelAspectRatio = in.readFloat();
+        mVideoActiveFormatDescription = in.readByte();
         mExtra = in.readBundle();
     }
 
@@ -179,6 +184,20 @@
     }
 
     /**
+     * Returns the Active Format Description (AFD) code of the video.
+     * Valid only for {@link #TYPE_VIDEO} tracks.
+     *
+     * <p>The complete list of values are defined in ETSI TS 101 154 V1.7.1 Annex B, ATSC A/53 Part
+     * 4 and SMPTE 2016-1-2007.
+     */
+    public final byte getVideoActiveFormatDescription() {
+        if (mType != TYPE_VIDEO) {
+            throw new IllegalStateException("Not a video track");
+        }
+        return mVideoActiveFormatDescription;
+    }
+
+    /**
      * Returns the extra information about the current track.
      */
     public final Bundle getExtra() {
@@ -208,6 +227,7 @@
         dest.writeInt(mVideoHeight);
         dest.writeFloat(mVideoFrameRate);
         dest.writeFloat(mVideoPixelAspectRatio);
+        dest.writeByte(mVideoActiveFormatDescription);
         dest.writeBundle(mExtra);
     }
 
@@ -238,6 +258,7 @@
         private int mVideoHeight;
         private float mVideoFrameRate;
         private float mVideoPixelAspectRatio = 1.0f;
+        private byte mVideoActiveFormatDescription;
         private Bundle mExtra;
 
         /**
@@ -368,6 +389,25 @@
         }
 
         /**
+         * Sets the Active Format Description (AFD) code of the video.
+         * Valid only for {@link #TYPE_VIDEO} tracks.
+         *
+         * <p>This is needed for applications to be able to scale the video properly based on the
+         * information about where in the coded picture the active video is.
+         * The complete list of values are defined in ETSI TS 101 154 V1.7.1 Annex B, ATSC A/53 Part
+         * 4 and SMPTE 2016-1-2007.
+         *
+         * @param videoActiveFormatDescription The AFD code of the video.
+         */
+        public final Builder setVideoActiveFormatDescription(byte videoActiveFormatDescription) {
+            if (mType != TYPE_VIDEO) {
+                throw new IllegalStateException("Not a video track");
+            }
+            mVideoActiveFormatDescription = videoActiveFormatDescription;
+            return this;
+        }
+
+        /**
          * Sets the extra information about the current track.
          *
          * @param extra The extra information.
@@ -385,7 +425,7 @@
         public TvTrackInfo build() {
             return new TvTrackInfo(mType, mId, mLanguage, mDescription, mAudioChannelCount,
                     mAudioSampleRate, mVideoWidth, mVideoHeight, mVideoFrameRate,
-                    mVideoPixelAspectRatio, mExtra);
+                    mVideoPixelAspectRatio, mVideoActiveFormatDescription, mExtra);
         }
     }
 }