• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef MEDIA_FORMATS_WEBM_WEBM_TRACKS_PARSER_H_
6 #define MEDIA_FORMATS_WEBM_WEBM_TRACKS_PARSER_H_
7 
8 #include <map>
9 #include <set>
10 #include <string>
11 #include <vector>
12 
13 #include "base/compiler_specific.h"
14 #include "base/memory/scoped_ptr.h"
15 #include "base/time/time.h"
16 #include "media/base/audio_decoder_config.h"
17 #include "media/base/media_log.h"
18 #include "media/base/text_track_config.h"
19 #include "media/base/video_decoder_config.h"
20 #include "media/formats/webm/webm_audio_client.h"
21 #include "media/formats/webm/webm_content_encodings_client.h"
22 #include "media/formats/webm/webm_parser.h"
23 #include "media/formats/webm/webm_video_client.h"
24 
25 namespace media {
26 
27 // Parser for WebM Tracks element.
28 class MEDIA_EXPORT WebMTracksParser : public WebMParserClient {
29  public:
30   explicit WebMTracksParser(const LogCB& log_cb, bool ignore_text_tracks);
31   virtual ~WebMTracksParser();
32 
33   // Parses a WebM Tracks element in |buf|.
34   //
35   // Returns -1 if the parse fails.
36   // Returns 0 if more data is needed.
37   // Returns the number of bytes parsed on success.
38   int Parse(const uint8* buf, int size);
39 
audio_track_num()40   int64 audio_track_num() const { return audio_track_num_; }
video_track_num()41   int64 video_track_num() const { return video_track_num_; }
42 
43   // If TrackEntry DefaultDuration field existed for the associated audio or
44   // video track, returns that value converted from ns to base::TimeDelta with
45   // precision not greater than |timecode_scale_in_us|. Defaults to
46   // kNoTimestamp().
47   base::TimeDelta GetAudioDefaultDuration(
48       const double timecode_scale_in_us) const;
49   base::TimeDelta GetVideoDefaultDuration(
50       const double timecode_scale_in_us) const;
51 
ignored_tracks()52   const std::set<int64>& ignored_tracks() const { return ignored_tracks_; }
53 
audio_encryption_key_id()54   const std::string& audio_encryption_key_id() const {
55     return audio_encryption_key_id_;
56   }
57 
audio_decoder_config()58   const AudioDecoderConfig& audio_decoder_config() {
59     return audio_decoder_config_;
60   }
61 
video_encryption_key_id()62   const std::string& video_encryption_key_id() const {
63     return video_encryption_key_id_;
64   }
65 
video_decoder_config()66   const VideoDecoderConfig& video_decoder_config() {
67     return video_decoder_config_;
68   }
69 
70   typedef std::map<int, TextTrackConfig> TextTracks;
71 
text_tracks()72   const TextTracks& text_tracks() const {
73     return text_tracks_;
74   }
75 
76  private:
77   // WebMParserClient implementation.
78   virtual WebMParserClient* OnListStart(int id) OVERRIDE;
79   virtual bool OnListEnd(int id) OVERRIDE;
80   virtual bool OnUInt(int id, int64 val) OVERRIDE;
81   virtual bool OnFloat(int id, double val) OVERRIDE;
82   virtual bool OnBinary(int id, const uint8* data, int size) OVERRIDE;
83   virtual bool OnString(int id, const std::string& str) OVERRIDE;
84 
85   int64 track_type_;
86   int64 track_num_;
87   int64 track_uid_;
88   std::string track_name_;
89   std::string track_language_;
90   std::string codec_id_;
91   std::vector<uint8> codec_private_;
92   int64 seek_preroll_;
93   int64 codec_delay_;
94   int64 default_duration_;
95   scoped_ptr<WebMContentEncodingsClient> track_content_encodings_client_;
96 
97   int64 audio_track_num_;
98   int64 audio_default_duration_;
99   int64 video_track_num_;
100   int64 video_default_duration_;
101   bool ignore_text_tracks_;
102   TextTracks text_tracks_;
103   std::set<int64> ignored_tracks_;
104   std::string audio_encryption_key_id_;
105   std::string video_encryption_key_id_;
106   LogCB log_cb_;
107 
108   WebMAudioClient audio_client_;
109   AudioDecoderConfig audio_decoder_config_;
110 
111   WebMVideoClient video_client_;
112   VideoDecoderConfig video_decoder_config_;
113 
114   DISALLOW_COPY_AND_ASSIGN(WebMTracksParser);
115 };
116 
117 }  // namespace media
118 
119 #endif  // MEDIA_FORMATS_WEBM_WEBM_TRACKS_PARSER_H_
120