1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef MEDIA_BASE_ANDROID_DEMUXER_STREAM_PLAYER_PARAMS_H_
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MEDIA_BASE_ANDROID_DEMUXER_STREAM_PLAYER_PARAMS_H_
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector>
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "media/base/audio_decoder_config.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "media/base/decrypt_config.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "media/base/demuxer_stream.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "media/base/media_export.h"
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "media/base/video_decoder_config.h"
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/gfx/size.h"
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace media {
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)struct MEDIA_EXPORT DemuxerConfigs {
20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DemuxerConfigs();
21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ~DemuxerConfigs();
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AudioCodec audio_codec;
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int audio_channels;
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int audio_sampling_rate;
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool is_audio_encrypted;
27b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  std::vector<uint8> audio_extra_data;
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VideoCodec video_codec;
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Size video_size;
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool is_video_encrypted;
32b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  std::vector<uint8> video_extra_data;
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  base::TimeDelta duration;
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)struct MEDIA_EXPORT AccessUnit {
38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  AccessUnit();
39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ~AccessUnit();
40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  DemuxerStream::Status status;
42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  bool end_of_stream;
43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // TODO(ycheo): Use the shared memory to transfer the block data.
44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<uint8> data;
45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  base::TimeDelta timestamp;
46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<char> key_id;
47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<char> iv;
48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<media::SubsampleEntry> subsamples;
49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)struct MEDIA_EXPORT DemuxerData {
52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DemuxerData();
53424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ~DemuxerData();
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DemuxerStream::Type type;
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<AccessUnit> access_units;
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // If the last entry in |access_units| has a status equal to |kConfigChanged|,
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // a corresponding DemuxerConfigs is added into this vector. The
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // DemuxerConfigs should only contain information of the stream that is
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // specified by |type|. This solves the issue that we need multiple IPCs when
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // demuxer configs change.
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::vector<DemuxerConfigs> demuxer_configs;
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};  // namespace media
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // MEDIA_BASE_ANDROID_DEMUXER_STREAM_PLAYER_PARAMS_H_
68