| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COBALT_MEDIA_FORMATS_WEBM_TRACKS_BUILDER_H_ |
| #define COBALT_MEDIA_FORMATS_WEBM_TRACKS_BUILDER_H_ |
| |
| #include <stdint.h> |
| |
| #include <list> |
| #include <string> |
| #include <vector> |
| |
| #include "base/basictypes.h" |
| |
| namespace media { |
| |
| class TracksBuilder { |
| public: |
| // If |allow_invalid_values| is false, some AddTrack() parameters will be |
| // basically checked and will assert if out of valid range. |codec_id|, |
| // |name|, |language| and any device-specific constraints are not checked. |
| explicit TracksBuilder(bool allow_invalid_values); |
| TracksBuilder(); // Sets |allow_invalid_values| to false. |
| ~TracksBuilder(); |
| |
| // Only a non-negative |default_duration| will result in a serialized |
| // kWebMIdDefaultDuration element. Note, 0 is allowed here for testing only |
| // if |allow_invalid_values_| is true, since it is an illegal value for |
| // DefaultDuration. Similar applies to |audio_channels|, |
| // |audio_sampling_frequency|, |video_pixel_width| and |video_pixel_height|. |
| void AddVideoTrack(int track_num, uint64_t track_uid, |
| const std::string& codec_id, const std::string& name, |
| const std::string& language, int default_duration, |
| int video_pixel_width, int video_pixel_height); |
| void AddAudioTrack(int track_num, uint64_t track_uid, |
| const std::string& codec_id, const std::string& name, |
| const std::string& language, int default_duration, |
| int audio_channels, double audio_sampling_frequency); |
| void AddTextTrack(int track_num, uint64_t track_uid, |
| const std::string& codec_id, const std::string& name, |
| const std::string& language); |
| |
| std::vector<uint8_t> Finish(); |
| |
| private: |
| void AddTrackInternal(int track_num, int track_type, uint64_t track_uid, |
| const std::string& codec_id, const std::string& name, |
| const std::string& language, int default_duration, |
| int video_pixel_width, int video_pixel_height, |
| int audio_channels, double audio_sampling_frequency); |
| int GetTracksSize() const; |
| int GetTracksPayloadSize() const; |
| void WriteTracks(uint8_t* buffer, int buffer_size) const; |
| |
| class Track { |
| public: |
| Track(int track_num, int track_type, uint64_t track_uid, |
| const std::string& codec_id, const std::string& name, |
| const std::string& language, int default_duration, |
| int video_pixel_width, int video_pixel_height, int audio_channels, |
| double audio_sampling_frequency, bool allow_invalid_values); |
| |
| int GetSize() const; |
| void Write(uint8_t** buf, int* buf_size) const; |
| |
| private: |
| int GetPayloadSize() const; |
| int GetVideoPayloadSize() const; |
| int GetAudioPayloadSize() const; |
| |
| int track_num_; |
| int track_type_; |
| int track_uid_; |
| std::string codec_id_; |
| std::string name_; |
| std::string language_; |
| int default_duration_; |
| int video_pixel_width_; |
| int video_pixel_height_; |
| int audio_channels_; |
| double audio_sampling_frequency_; |
| }; |
| |
| typedef std::list<Track> TrackList; |
| TrackList tracks_; |
| bool allow_invalid_values_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TracksBuilder); |
| }; |
| |
| } // namespace media |
| |
| #endif // COBALT_MEDIA_FORMATS_WEBM_TRACKS_BUILDER_H_ |