11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef CHROMECAST_MEDIA_CMA_BASE_DECODER_BUFFER_BASE_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define CHROMECAST_MEDIA_CMA_BASE_DECODER_BUFFER_BASE_H_ 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/basictypes.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/macros.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/ref_counted.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/time/time.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace media { 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass DecryptConfig; 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace chromecast { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace media { 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// DecoderBufferBase exposes only the properties of an audio/video buffer. 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// The way a DecoderBufferBase is created and organized in memory 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// is left as a detail of the implementation of derived classes. 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass DecoderBufferBase 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : public base::RefCountedThreadSafe<DecoderBufferBase> { 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DecoderBufferBase(); 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns the PTS of the frame. 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual base::TimeDelta timestamp() const = 0; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Gets the frame data. 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual const uint8* data() const = 0; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual uint8* writable_data() const = 0; 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns the size of the frame in bytes. 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual int data_size() const = 0; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns the decrypt configuration. 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns NULL if the buffer has no decrypt info. 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual const ::media::DecryptConfig* decrypt_config() const = 0; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Indicate if this is a special frame that indicates the end of the stream. 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If true, functions to access the frame content cannot be called. 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool end_of_stream() const = 0; 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci friend class base::RefCountedThreadSafe<DecoderBufferBase>; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~DecoderBufferBase(); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(DecoderBufferBase); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace media 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace chromecast 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // CHROMECAST_MEDIA_CMA_BASE_DECODER_BUFFER_BASE_H_ 58