1. 15 Jun, 2016 27 commits
    • Discard CSD buffers from the raw decoder in passthrough mode. · 9f4e46bd
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=117129870
      olly committed
    • Use a separate MIME type for DTS Express. · 835a9e9a
      DTS Express (which is DTS LBR according to http://www.mp4ra.org/codecs.html) is
      not supported for passthrough playback currently. Associate a different MIME
      type with it so that we don't try to use DTS passthrough for playing DTS
      Express.
      
      The MIME type for DTS Express is just vnd.dts.hd, with a profile parameter
      indicating that it's DTS Express rather than one of the other formats.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=117129583
      olly committed
    • DashChunkSource: Handle minor timing differences · e116125c
      Handle minor timing difference between the different media content
      and the available range values as specified in the MPD.
      
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=117127112
      olly committed
    • Disable funky FRC on L on nVidia shield. · c2eb9d55
      The logic in the platform was causing captions and the reported
      playback position to gradually drift out of sync with respect to
      audio and video.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=117126970
      olly committed
    • Fix incorrect position calculation in VBRI seeker. · 8ef4af13
      Issue: #1197
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=117125081
      olly committed
    • [Refactor - Step #5] Introduce TrackSelector · d3d63101
      Notes:
      
      - The way this works is that every time the player needs to
        select some tracks it invokes the TrackSelector. When a
        track selection is actually activated (i.e. "hits the
        screen") it gets passed back to the TrackSelector, which
        allows it to expose the current tracks through an API that
        it may choose to define. Since playlist support doesn't exist
        yet, it's currently the case that the pass-back always occurs
        immediately.
      - A TrackSelector can invalidate its previous selections if its
        selection criteria changes. This will force the player to invoke
        it again to make a new selection. If the new selection is the
        same as the previous one for a renderer then the player handles
        this efficiently (i.e. turns it into a no-op).
      - DefaultTrackSelector supports disabling/enabling of renderers.
        Separately, it supports overrides to select specific formats.
        Since formats may change (playlists/periods), overrides are
        specific to not only the renderer but also the set of formats
        that are available to it. If the formats available to a renderer
        change then the override will no longer apply. If the same set
        of formats become available at some point later, it will apply
        once more. This will nicely handle cases like ad-insertion where
        the ads have different formats, but all segments of main content
        use the same set of formats.
      - In general, in  multi-period or playlist cases, the preferred
        way of selecting formats will be via constraints (e.g. "don't play
        HD", "prefer higher quality audio") rather than explicit format
        selections. The ability to set various constraints on
        DefaultTrackSelector is future work.
      
      Note about the demo app:
      
      - I've removed the verbose log toggle. I doubt anyone has
        ever used it! I've also removed the background audio option.
        Without using a service it can't be considered a reference
        implementation, so it's probably best to leave developers to
        figure this one out. Finally, listening to AudioCapabilities
        has also gone. This will be replaced by having the player
        detect and handle the capabilities change internally in a
        future CL. This will work by allowing a renderer to invalidate
        the track selections when its capabilities change, much like
        how a selector is able to invalidate the track selections in
        this CL.
      - It's now possible to enable ABR with an arbitrary subset of
        tracks.
      - Unsupported tracks are shown grayed out in the UI. I'm not
        showing tracks that aren't associated to any renderer, but we
        could optionally add that later.
      - Every time the tracks change, there's logcat output showing
        all of the tracks and which ones are enabled. Unassociated
        tracks are displayed in this output.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=117122202
      olly committed
    • Make Track[Group|GroupArray|Selection] consistent. · 9c98c4bb
      - I don't think the length is useful in hashCode; if the length
        is different then Arrays.hashCode should account for that.
      - "this." just for consistency across these classes.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=116641142
      olly committed
    • Make TrackSelection implement equals/hashCode. · 00191848
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=116638211
      olly committed
    • Introduce TrackGroupArray. · 73400907
      This change replaces TrackGroup[] with TrackGroupArray. This is
      to allow equality based hashCode and equals implementations.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=115563146
      olly committed
    • Fix hasSampleFormat in experimental version. Oops! · d1cb4bc1
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=115561885
      olly committed
    • Allow more precise reporting of format support. · 1208d8ec
      This change allows a TrackRenderer to distinguish between the
      "I don't support this type at all" case and the "I am a general
      purpose renderer of this type, but cannot support the specific
      subtype" case.
      
      Bug=26622675
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=115454950
      olly committed
    • Make SampleSource interfaces right for TrackSelector. · 6ba4fa3b
      The TrackSelector API will look like:
      
      TrackSelection[] selectTrack(
          TrackRenderer[] renderers, TrackGroup[] trackGroups);
      
      In this CL:
      
      - SampleSources return TrackGroup[], so that the result can be easily
        passed to the selector.
      - TrackStream gets its own file to sit alongside other Track* classes.
      - A TrackSelection object is introduced to encapsulate group and track
        indices.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=115251331
      olly committed
    • Return format and adaptation support from single method. · 39a92445
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=114963314
      olly committed
    • Add structure to ExoPlaybackException. · 0e603350
      - Add a top level failure type (source/renderer/unexpected),
        and convenience methods for retrieving the underlying cause
        without needing to cast.
      - Also add renderer index in the case of renderer failures.
      - setIndex/getIndex is a little . . . unclean, but alternatives
        involve either having the top line of the stack trace be a
        non-interesting line, or loads of try/catch blocks in
        ExoPlayerImplInternal.
      
      Issue: #777
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=114763073
      olly committed
    • Use FormatEvaluator for HLS. · c48dd4f3
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=114743795
      olly committed
    • One Format object to rule them all. · a7adcce0
      - Format can represent both container and sample formats.
        If a container contains a single track (as is true in
        DASH and SmoothStreaming) then the container Format can
        also contain sufficient information about the samples
        to allow for track selection. This avoids the Format to
        MediaFormat conversions that we were previously doing in
        ChunkSource implementations.
      
      - One important result of this change is that adaptive
        format evaluation and static format selection now use the
        same format objects, which is a whole lot less confusing
        for someone who wants to implement both initial selection
        and subsequent adaptation logic. It's not in the V2 doc,
        but it may well make sense if the TrackSelector not only
        selects the tracks to enable for an adaptive playback, but
        also injects a FormatEvaluator when enabling them that will
        control the subsequent adaptive selections. That would make
        it so that all format selection logic originates from the
        same place.
      
      - As part of this change, the adaptiveX variables are removed
        from the format object; they don't really correspond to a
        single format. This also saves on having to inject the max
        video dimensions through a bunch of classes.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=114546777
      olly committed
    • Don't pass chunk list to ChunkSource.disable(). · 362d0400
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=114545827
      olly committed
    • Remove durationUs from MediaFormat. · 782817d5
      Duration was originally included in MediaFormat to match the
      framework class, but it actually doesn't make much sense. In
      many containers there's no such thing as per-stream duration,
      and in any case we don't really care. Setting the duration on
      each format required excessive piping.
      
      This change moves duration into SeekMap instead, which seems
      to make a lot more sense because it's at the container level,
      and because being able to seek is generally couplied with
      knowing how long the stream is.
      
      This change is also a step toward merging Format and MediaFormat
      into a single class (because Format doesn't have a duration),
      which is coming soon.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=114428500
      olly committed
    • Simplify codec configuration. · ebf87a36
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=114427767
      olly committed
    • Implement decoder capability checks in MediaCodecTrackRenderers. · 335bb0af
      [Step 4 - Partial, of []
      
      - The capabilities checks previously performed in VideoFormatSelectorUtil
        are now performed in MediaCodecVideoTrackRenderer. This means they'll be
        useful for non-chunk use cases (e.g. when using ExtractorSampleSource).
      - Added capabilities checks for audio in MediaCodecAudioTrackRenderer. We
        didn't check audio capabilities previously.
      - Added functionality to allow a TrackRenderer to indicate the extent of
        its adaptive support.
      
      The idea here is that a TrackSelector (to be introduced) will have access to:
      
      (a) TrackGroups from the SampleSource that indicate whether they support
      adaptive playbacks and the formats of each individual track.
      (b) TrackRenderers that indicate whether they support adaptive playbacks as
      well as how capable they are of rendering formats of individual tracks.
      
      This is everything that a TrackSelector needs from the player components in
      order to decide how to wire things up. Note that a TrackSelector may opt to
      treat FORMAT_EXCEEDS_CAPABILITIES as FORMAT_HANDLED at its own risk, if it
      thinks that it (or the user) knows better. This is a request that we've seen
      from third parties for better handling cases where capabilities aren't
      accurately reported by the underlying platform.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=114427428
      olly committed
    • Minor tweaks/fixes. · 6bc52262
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=113868179
      cblay committed
    • ExoPlayer V2 Refactor - Misc · 43e1e7e8
      Delete SingleSampleChunkSource. I don't think it's really
      useful for anything, now we have SingleSampleSource.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=113259289
      olly committed
    • ExoPlayer V2 Refactor - Step 7 (partial) · ce324f1c
      This change removes the need for SourceBuilders to load their
      manifests before building their sources. This is done by pushing
      initial manifest loads into the ChunkSource classes. This simplifies
      the SourceBuilders a lot, and also DemoPlayer.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=113259259
      olly committed
    • ExoPlayer V2 Refactor - Step 4 · be471489
      Notes:
      1. The logic in ExoPlayerImplInternal is very temporary, until we
         have proper TrackSelector implementations. Ignore the fact that
         it's crazy and has loads of nesting.
      2. This change removes all capabilities checking. TrackRenderer
         implementations will be updated to perform these checks in a
         subsequent CL.
      
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=113151233
      olly committed
    • ExoPlayer V2 Refactor - Step 3 · 6cb20525
      Move binding of tracks<->renderers to ExoPlayerImplInternal.
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=113046018
      olly committed
    • ExoPlayer V2 Refactor - Steps 1/2. · cdae9ac5
      GitHub note - Apologies for the cryptic change descriptions,
      they relate to a design doc that's not externally visible.
      
      -------------
      Created by MOE: https://github.com/google/moe
      MOE_MIGRATED_REVID=113043764
      olly committed
    • Prepare for 2.x push · 61d581fe
      Oliver Woodman committed
  2. 22 Jan, 2016 13 commits