6cb5fb5 | Oliver Woodman | 02 February 2016, 20:47:27 UTC | Javadoc r1.5.5 | 02 February 2016, 20:47:27 UTC |
aa60620 | Oliver Woodman | 22 January 2016, 16:37:51 UTC | Merge branch 'gh-pages' of https://github.com/google/ExoPlayer into gh-pages | 22 January 2016, 16:37:51 UTC |
f07e10d | Oliver Woodman | 22 January 2016, 16:22:41 UTC | Javadoc r1.5.4 | 22 January 2016, 16:36:57 UTC |
7b8a6be | Oliver Woodman | 22 January 2016, 16:22:41 UTC | Javadoc r1.5.4 | 22 January 2016, 16:22:41 UTC |
986e87e | Oliver Woodman | 10 December 2015, 15:48:44 UTC | Javadoc r1.5.3 | 10 December 2015, 15:48:44 UTC |
97abb7a | Oliver Woodman | 15 October 2015, 11:40:55 UTC | Update dev guide for 1.5.1 | 15 October 2015, 11:40:55 UTC |
bd395fd | Oliver Woodman | 15 October 2015, 11:33:49 UTC | Javadoc r1.5.1 | 15 October 2015, 11:33:49 UTC |
8927ad0 | Oliver Woodman | 01 October 2015, 10:48:20 UTC | Add howto #1 | 01 October 2015, 11:20:43 UTC |
7af822a | Oliver Woodman | 30 September 2015, 14:41:35 UTC | Tweak 1.5.0 news post | 30 September 2015, 14:41:35 UTC |
f092c7c | Oliver Woodman | 30 September 2015, 14:39:03 UTC | Add 1.5.0 news post | 30 September 2015, 14:39:03 UTC |
9542aa0 | Oliver Woodman | 29 September 2015, 21:13:00 UTC | Disqus experiment | 30 September 2015, 12:01:30 UTC |
3d70837 | Oliver Woodman | 29 September 2015, 11:54:17 UTC | Update dev guide for 1.5.0 | 29 September 2015, 11:58:17 UTC |
ebccbfd | Oliver Woodman | 29 September 2015, 11:31:12 UTC | Javadoc r1.5.0 | 29 September 2015, 11:31:12 UTC |
ac06653 | Oliver Woodman | 04 August 2015, 16:17:54 UTC | Update dev guide for r1.4.2 | 04 August 2015, 16:20:45 UTC |
514ccb5 | Oliver Woodman | 04 August 2015, 16:03:33 UTC | Javadoc r1.4.2 | 04 August 2015, 16:03:33 UTC |
bcb7241 | Oliver Woodman | 17 July 2015, 18:12:14 UTC | r1.4.0 notes II | 17 July 2015, 18:12:14 UTC |
c78cedd | Oliver Woodman | 17 July 2015, 18:09:17 UTC | 1.4.0 news | 17 July 2015, 18:09:17 UTC |
78af4cc | Oliver Woodman | 17 July 2015, 10:46:05 UTC | Javadoc r1.4.1 | 17 July 2015, 10:46:05 UTC |
9f17bc6 | Oliver Woodman | 16 July 2015, 20:44:07 UTC | Update guide for r.1.4.0 | 16 July 2015, 20:44:07 UTC |
bb868cf | Oliver Woodman | 16 July 2015, 20:00:03 UTC | Javadoc r1.4.0 | 16 July 2015, 20:26:50 UTC |
ce06d60 | Oliver Woodman | 26 June 2015, 16:06:17 UTC | Fix typo | 26 June 2015, 16:06:17 UTC |
c3732f9 | Oliver Woodman | 18 June 2015, 13:35:40 UTC | Fix typo | 18 June 2015, 13:35:40 UTC |
e8ceca0 | Oliver Woodman | 19 May 2015, 13:45:48 UTC | Javadoc r1.3.2 | 19 May 2015, 13:45:48 UTC |
14edd26 | Oliver Woodman | 19 May 2015, 13:32:07 UTC | Update index.md | 19 May 2015, 13:32:07 UTC |
9c34b86 | Oliver Woodman | 12 May 2015, 15:55:47 UTC | Regen Javadoc | 12 May 2015, 15:59:43 UTC |
25622a0 | Oliver Woodman | 12 May 2015, 15:51:26 UTC | Redirect | 12 May 2015, 15:51:26 UTC |
cd33026 | Oliver Woodman | 12 May 2015, 14:27:50 UTC | Update javadoc | 12 May 2015, 14:27:50 UTC |
66d0cab | Andrew Lewis | 12 May 2015, 12:45:36 UTC | Fix selected menu item hover highlight. | 12 May 2015, 12:45:36 UTC |
401089b | Andrew Lewis | 12 May 2015, 11:41:30 UTC | Force a vertical scroll bar to appear for consistent content width. | 12 May 2015, 11:41:30 UTC |
16d6195 | Andrew Lewis | 12 May 2015, 11:32:47 UTC | Fix highlighting. | 12 May 2015, 11:32:47 UTC |
ae17fba | Andrew Lewis | 12 May 2015, 10:13:34 UTC | Highlight selected page. | 12 May 2015, 11:15:53 UTC |
440f2b5 | Oliver Woodman | 12 May 2015, 09:48:03 UTC | Update site | 12 May 2015, 09:57:41 UTC |
3b7e641 | Oliver Woodman | 11 May 2015, 20:26:18 UTC | Adjust header level | 11 May 2015, 20:26:18 UTC |
44b3641 | Oliver Woodman | 11 May 2015, 19:48:51 UTC | Add index page. | 11 May 2015, 19:54:45 UTC |
eaf2389 | Oliver Woodman | 11 May 2015, 19:33:53 UTC | Experiment with author | 11 May 2015, 19:33:59 UTC |
beaa7e6 | Oliver Woodman | 11 May 2015, 17:27:59 UTC | Tweak diagram 3 | 11 May 2015, 17:27:59 UTC |
5053a98 | Oliver Woodman | 11 May 2015, 17:25:13 UTC | Tweak diagram 2 | 11 May 2015, 17:25:13 UTC |
a58d4ed | Oliver Woodman | 11 May 2015, 17:20:30 UTC | Tweak diagram | 11 May 2015, 17:20:30 UTC |
a82ff2f | Oliver Woodman | 11 May 2015, 14:28:38 UTC | Update dev guide (draft) | 11 May 2015, 16:31:04 UTC |
b0fe055 | Oliver Woodman | 08 May 2015, 15:57:18 UTC | Tweaks | 08 May 2015, 15:57:18 UTC |
cae8906 | Oliver Woodman | 08 May 2015, 15:53:21 UTC | Snap gh-pages back to something sensible. | 08 May 2015, 15:53:21 UTC |
801645a | Oliver Woodman | 08 May 2015, 00:09:28 UTC | First blog post test. | 08 May 2015, 02:11:09 UTC |
3cd020a | Oliver Woodman | 07 May 2015, 23:14:26 UTC | Merge branch 'gh-pages' of https://github.com/google/ExoPlayer into gh-pages | 07 May 2015, 23:57:27 UTC |
acb0f81 | Oliver Woodman | 05 May 2015, 17:34:56 UTC | Get rid of plugin (custom plugins don't work) | 06 May 2015, 16:59:44 UTC |
d29bd6d | Oliver Woodman | 05 May 2015, 19:11:38 UTC | Fix broken demo links | 05 May 2015, 19:11:38 UTC |
6349906 | Oliver Woodman | 05 May 2015, 17:18:34 UTC | Dummy plugin test. | 05 May 2015, 17:25:14 UTC |
9a11aac | Oliver Woodman | 05 May 2015, 16:47:25 UTC | Add guide experiment. | 05 May 2015, 17:04:15 UTC |
8c556b3 | Oliver Woodman | 05 May 2015, 14:27:51 UTC | Test index | 05 May 2015, 16:39:38 UTC |
fbcd6e2 | Oliver Woodman | 05 May 2015, 14:22:23 UTC | Test post | 05 May 2015, 14:22:23 UTC |
df9e552 | ojw28 | 31 March 2015, 10:21:14 UTC | Merge pull request #373 from google/dev-1.2.4-rc Minor release to enhance DASH mpd parsing | 31 March 2015, 10:21:14 UTC |
0e2b2ce | Oliver Woodman | 31 March 2015, 10:18:29 UTC | Bump version to 1.2.4 | 31 March 2015, 10:18:29 UTC |
6130db0 | Oliver Woodman | 10 March 2015, 10:50:15 UTC | Add ability to release via Bintray. | 31 March 2015, 10:17:04 UTC |
ab1fbd2 | Oliver Woodman | 31 March 2015, 10:15:57 UTC | Enable ContentProtect elements at the Representation level | 31 March 2015, 10:15:57 UTC |
f506eff | ojw28 | 25 February 2015, 11:45:09 UTC | Merge pull request #320 from google/dev-1.2.3-rc Merge minor release 1.2.3 | 25 February 2015, 11:45:09 UTC |
cc6a29c | Oliver Woodman | 25 February 2015, 11:42:37 UTC | Set version number to 1.2.3 | 25 February 2015, 11:42:37 UTC |
51dd664 | Oliver Woodman | 25 February 2015, 11:37:39 UTC | Two small fixes for HLS. 1. Clear prefixFlags when a NAL unit is found. 2. continueBuffering should return true if loading is finished. | 25 February 2015, 11:40:47 UTC |
cb03441 | ojw28 | 19 February 2015, 11:31:53 UTC | Merge pull request #309 from google/dev-1.2.2-rc 1.2.2 release | 19 February 2015, 11:31:53 UTC |
11d7e8f | Oliver Woodman | 19 February 2015, 11:22:42 UTC | Fix EIA-608 issues. - Data needs to be unescaped before it's passed to SeiReader. - SeiReader should loop over potentially multiple child messages. - I also changed the sample passed to the EIA-608 renderer so that it's the entire sei message payload. The first 8 bytes are unnecessary, but it seems nicer conceptually to do it this way. Issue: #295 | 19 February 2015, 11:28:10 UTC |
3e5370f | J. Oliva | 19 February 2015, 00:17:35 UTC | Fixed issue in CODEC regular expression Previous regular expression for extracting codec information was wrong, given a line that defines a variant it added information from “CODEC=“ text to the end of the line (including also information about RESOLUTION or alternate rendition groups as part of the CODEC field). This is not causing a functional problem (at least known by me) although is making codecs field storing information that is not related with the codec. | 19 February 2015, 11:27:56 UTC |
a9d2205 | ojw28 | 18 February 2015, 23:42:42 UTC | Update CONTRIBUTING.md | 19 February 2015, 11:27:11 UTC |
a2476b4 | ojw28 | 18 February 2015, 23:39:10 UTC | Update CONTRIBUTING.md | 19 February 2015, 11:26:44 UTC |
b3a0114 | Oliver Woodman | 18 February 2015, 20:00:08 UTC | Set version number to 1.2.2 | 18 February 2015, 20:00:08 UTC |
5c9a616 | Oliver Woodman | 18 February 2015, 19:11:52 UTC | Fix off-by-one-bug preventing NAL unit detection at the limit. | 18 February 2015, 19:57:59 UTC |
c78a00d | Oliver Woodman | 18 February 2015, 15:15:20 UTC | Ensure we always seek after selecting a track. Some extractor implementations underneath MediaExtractor require a seekTo call after tracks are selected to ensure samples are read from the correct position. De-duplicating logic was preventing this from happening in some cases, causing issues like: https://github.com/google/ExoPlayer/issues/301 Note that seeking all tracks a side effect of track selection sucks if you already have one or more tracks selected, because it introduces discontinuities to the already selected tracks. However, in general, it *is* necessary to specify the position for the track being selected, because the underlying extractor doesn't have enough information to know where to start reading from. It can't determine this based on the read positions of the already selected tracks, because the samples in these tracks might be very sparse with respect to time. I think a more optimal fix would be to change the SampleExtractor interface to receive the current position as an argument to selectTrack. For our own extractors, we'd seek the newly selected track to that position, whilst the already enabled tracks would be left in their current positions (if possible). For FrameworkSampleExtractor we'd still have no choice but to call seekTo on the extractor to seek all of the tracks. This solution ends up being more complex though, because: - The SampleExtractor then needs a way of telling DefaultSampleSource which tracks were actually seeked, so that the pendingDiscontinuities flags can be set correctly. - It's a weird API that requires the "current playback position to seek only the track being enabled" So it may not be worth it! I think this fix is definitely good for now, in any case. Issue: #301 | 18 February 2015, 19:57:48 UTC |
fb7e48f | Oliver Woodman | 18 February 2015, 15:09:45 UTC | Fix bad assertion | 18 February 2015, 19:57:37 UTC |
6f897b1 | Oliver Woodman | 17 February 2015, 16:04:44 UTC | Handle the edge case of zero-length chunks. Issue: #289 | 18 February 2015, 19:57:23 UTC |
9137962 | Oliver Woodman | 17 February 2015, 15:41:59 UTC | Add support for elementary AAC/ADTS streams. - This change: 1. Extracts HlsExtractor interface from TsExtractor. 2. Adds AdtsExtractor for AAC/ADTS streams, which turned out to be really easy. Selection of the ADTS extractor relies on seeing the .aac extension. This is at least guaranteed not to break anything that works already (since no-one is going to be using .aac as the extension for something that's not elementary AAC/ADTS). Issue: #209 | 18 February 2015, 19:57:04 UTC |
407dee2 | Oliver Woodman | 16 February 2015, 22:29:06 UTC | Finalize 1.2.1 release. | 16 February 2015, 22:29:06 UTC |
4e02bc6 | ojw28 | 16 February 2015, 22:23:21 UTC | Merge pull request #299 from google/dev Correctly reset ADTSreader state | 16 February 2015, 22:23:21 UTC |
3472e86 | Oliver Woodman | 16 February 2015, 22:22:25 UTC | Correctly reset ADTSreader state | 16 February 2015, 22:22:25 UTC |
7b68975 | Oliver Woodman | 16 February 2015, 20:10:25 UTC | Fix javadoc | 16 February 2015, 20:10:25 UTC |
2f71666 | Oliver Woodman | 16 February 2015, 19:43:48 UTC | Update javadoc | 16 February 2015, 19:43:48 UTC |
c61b6f1 | ojw28 | 16 February 2015, 17:48:31 UTC | Merge pull request #298 from google/gh-pages-1.2.0-rc Update docs for 1.2.0. | 16 February 2015, 17:48:31 UTC |
953e111 | ojw28 | 16 February 2015, 17:47:44 UTC | Merge pull request #297 from google/dev-1.2.0-rc dev-1.2.0-rc -> master | 16 February 2015, 17:47:44 UTC |
2f04580 | ojw28 | 13 February 2015, 20:39:01 UTC | Merge pull request #294 from google/dev dev -> dev-1.2.0-rc | 13 February 2015, 20:39:01 UTC |
4041126 | Oliver Woodman | 13 February 2015, 20:36:27 UTC | Use C.SAMPLE_FLAG_SYNC | 13 February 2015, 20:36:27 UTC |
9d480ec | Oliver Woodman | 13 February 2015, 20:34:30 UTC | Fix broken javadoc link | 13 February 2015, 20:34:30 UTC |
bc99435 | Oliver Woodman | 13 February 2015, 20:20:45 UTC | Add C.SAMPLE_FLAG_SYNC and removed InlinedApi suppression in a few places. | 13 February 2015, 20:20:45 UTC |
5f64a1f | Oliver Woodman | 13 February 2015, 20:13:11 UTC | Restrict HLS buffering by total buffer size as well as duration. This prevents excessive memory consumption when switching to very high bitrate streams. Issue: #278 | 13 February 2015, 20:13:11 UTC |
c3788c0 | Oliver Woodman | 13 February 2015, 20:11:12 UTC | Eliminate memory copy of H264 data through H264 reader. I think this is the limit of how far we should be pushing complexity v.s. efficiency. It's a little complicated to understand, but probably worth it since the H264 bitstream is the majority of the data. Issue: #278 | 13 February 2015, 20:11:12 UTC |
37e6946 | Oliver Woodman | 13 February 2015, 19:32:01 UTC | Finally - Remove Sample, fix GC churn + inefficient memory usage. Use of Sample objects was inefficient for several reasons: - Lots of objects (1 per sample, obviously). - When switching up bitrates, there was a tendency for all Sample instances to need to expand, which effectively led to our whole media buffer being GC'd as each Sample discarded its byte[] to obtain a larger one. - When a keyframe was encountered, the Sample would typically need to expand to accommodate it. Over time, this would lead to a gradual increase in the population of Samples that were sized to accommodate keyframes. These Sample instances were then typically underutilized whenever recycled to hold a non-keyframe, leading to inefficient memory usage. This CL introduces RollingBuffer, which tightly packs pending sample data into a byte[]s obtained from an underlying BufferPool. Which fixes all of the above. There is still an issue where the total memory allocation may grow when switching up bitrate, but we can easily fix that from this point, if we choose to restrict the buffer based on allocation size rather than time. Issue: #278 | 13 February 2015, 19:32:01 UTC |
28166d8 | Oliver Woodman | 13 February 2015, 19:31:01 UTC | Rename ParsableByteArray.length() to limit(). Add capacity(). | 13 February 2015, 19:31:01 UTC |
321005e | Oliver Woodman | 13 February 2015, 19:27:52 UTC | Use 'bitrate' not 'bit-rate' consistently. | 13 February 2015, 19:27:52 UTC |
d1360ad | Oliver Woodman | 13 February 2015, 19:26:49 UTC | Pragmatic fix for "stuck-in-ready-state" when seeking near the end of some streams. | 13 February 2015, 19:26:49 UTC |
066334d | Oliver Woodman | 12 February 2015, 17:24:23 UTC | Continue TsExtractor refactor. - Remove TsExtractor's knowledge of Sample. - Push handling of Sample objects into SampleQueue as much as possible. This is a precursor to replacing Sample objects with a different type of backing memory. Ideally, the individual readers shouldn't know how the sample data is stored. This is true after this CL, with the except of the TODO in H264Reader. - Avoid double-scanning every H264 sample for NAL units, by moving the scan for SEI units from SeiReader into H264Reader. Issue: #278 | 12 February 2015, 17:24:23 UTC |
61a8629 | Oliver Woodman | 12 February 2015, 17:02:34 UTC | Fix for video-only playbacks transitioning straight to STATE_ENDED. The complexity around not enabling the video renderer before it has a valid surface is because MediaCodecTrackRenderer supports a "discard" mode where it pulls through and discards samples without a decoder. This mode means that if the demo app were to enable the renderer before supplying the surface, the renderer could discard the first few frames prior to getting the surface, meaning video rendering wouldn't happen until the following sync frame. To get a handle on complexity, I think we're better off just removing support for this mode, which nicely decouples how the demo app handles surfaces v.s. how it handles enabling/disabling renderers. | 12 February 2015, 17:02:34 UTC |
784431f | Oliver Woodman | 12 February 2015, 12:48:27 UTC | Move EIA reordering back to the renderer (sorry for churn). Reordering in the extractor isn't going to work well with the optimizations I'm making there. This change moves sorting back to the renderer, although keeps all of the renderer simplifications. It's basically just moving where the sort happens from one place to another. | 12 February 2015, 12:48:27 UTC |
f7fb4d4 | Oliver Woodman | 12 February 2015, 12:46:58 UTC | Optimize NAL unit search. I'm not really a fan of micro-optimizations, but given this method scans through every H264 frame in the HLS case, it seems worthwhile. The trick here is to examine the first 7 bits of the third byte first. If they're not all 0s, then we know that we haven't found a NAL unit, and also that we wont find one at the next two positions. This allows the loop to increment 3 bytes at a time. Speedup is around 60% on Art according to some ad-hoc benchmarking. | 12 February 2015, 12:46:58 UTC |
3568eca | Oliver Woodman | 12 February 2015, 12:09:57 UTC | Split TsExtractor into multiple files. There's no code change here at all, except for how TsExtractor's getLargestSampleTimestamp method works. | 12 February 2015, 12:09:57 UTC |
92f085b | Oliver Woodman | 11 February 2015, 14:57:07 UTC | Remove intermediate copy steps in TsExtractor. 1. AdtsReader would previously copy all data through an intermediate adtsBuffer. This change eliminates the additional copy step, and instead copies directly into Sample objects. 2. PesReader would previously accumulate a whole packet by copying multiple TS packets into an intermediate buffer. This change eliminates this copy step. After the change, TS packet buffers are propagated directly to PesPayloadReaders, which are required to handle partial payload data correctly. The copy steps in the extractor are simplified from: DataSource->Ts_BitArray->Pes_BitArray->Sample->SampleHolder To: DataSource->Ts_BitArray->Sample->SampleHolder Issue: #278 | 11 February 2015, 14:57:07 UTC |
797fa7f | Oliver Woodman | 10 February 2015, 22:13:01 UTC | Make TsExtractor use ParsableByteArray where possible. - TsExtractor is now based on ParsableByteArray rather than BitArray. This makes is much clearer that, for the most part, data is byte aligned. It will allow us to optimize TsExtractor without worrying about arbitrary bit offsets. - BitArray is renamed ParsableBitArray for consistency, and is now exclusively for bit-stream level reading. - There are some temporary methods in ParsableByteArray that should be cleared up once the optimizations are in place. Issue: #278 | 10 February 2015, 22:13:01 UTC |
7c66b6e | Oliver Woodman | 10 February 2015, 12:25:13 UTC | HLS optimization #1 (refactor). This is the start of a sequence of changes to fix the ref'd github issue. Currently TsExtractor involves multiple memory copy steps: DataSource->Ts_BitArray->Pes_BitArray->Sample->SampleHolder This is inefficient, but more importantly, the copy into Sample is problematic, because Samples are of dynamically varying size. The way we end up expanding Sample objects to be large enough to hold the data being written means that we end up gradually expanding all Sample objects in the pool (which wastes memory), and that we generate a lot of GC churn, particularly when switching to a higher quality which can trigger all Sample objects to expand. The fix will be to reduce the copy steps to: DataSource->TsPacket->SampleHolder We will track Pes and Sample data with lists of pointers into TsPackets, rather than actually copying the data. We will recycle these pointers. The following steps are approximately how the refactor will progress: 1. Start reducing use of BitArray. It's going to be way too complicated to track bit-granularity offsets into multiple packets, and allow reading across packet boundaries. In practice reads from Ts packets are all byte aligned except for small sections, so we'll move over to using ParsableByteArray instead, so we only need to track byte offsets. 2. Move TsExtractor to use ParsableByteArray except for small sections where we really need bit-granularity offsets. 3. Do the actual optimization. Issue: #278 | 10 February 2015, 12:25:13 UTC |
d95e5d0 | Oliver Woodman | 09 February 2015, 18:22:23 UTC | Update docs for 1.2.0. | 09 February 2015, 18:22:23 UTC |
33db570 | Oliver Woodman | 09 February 2015, 18:04:59 UTC | Pre 1.2.0 release. - Bump version. - Remove AC3 renderer. It's not ready. | 09 February 2015, 18:04:59 UTC |
b0a3c30 | Oliver Woodman | 09 February 2015, 17:28:07 UTC | Improve EIA608 caption support. - Also make text renderers respect the decodeOnly flag. - Also fix AC3 passthrough to always allocate direct buffers. | 09 February 2015, 17:28:07 UTC |
32f0eb1 | Oliver Woodman | 09 February 2015, 17:25:39 UTC | Enhance mp4 parsing. | 09 February 2015, 17:25:39 UTC |
147bbe6 | Oliver Woodman | 06 February 2015, 11:52:14 UTC | Simplify demo application. - Remove simple variant. Maintaining both simple + full is unnecessary effort. - Remove need to specify content id in Sample definition, except where it's actually required (for DRM requests in the Widevine GTS samples) | 06 February 2015, 11:52:14 UTC |
bfa1de6 | Oliver Woodman | 06 February 2015, 11:43:37 UTC | Move common MP4 parsing code to CommonMp4AtomParsers and Mp4Util. Also add parseMp4vFromParent and return the track's duration in parseTrak. This is in preparation for adding a non-fragmented MP4 extractor. | 06 February 2015, 11:43:37 UTC |
a968e55 | Oliver Woodman | 06 February 2015, 11:32:46 UTC | Continue playback of tracks with longer duration than the timesource. If the timesource track renderer ends, but other track renderers haven't finished, the player would get stuck in a pending state. This change enables automatic switching to the media clock in the case that the timesource renderer has ended, which allows other renderers to continue to play. | 06 February 2015, 11:32:46 UTC |
03ef3d1 | Oliver Woodman | 06 February 2015, 11:32:08 UTC | Add MP4V mimetype. | 06 February 2015, 11:32:08 UTC |