15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_SHARED_IMPL_MEDIA_STREAM_BUFFER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_SHARED_IMPL_MEDIA_STREAM_BUFFER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_audio_buffer.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_video_frame.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)union MediaStreamBuffer {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum Type { TYPE_UNKNOWN = 0, TYPE_AUDIO = 1, TYPE_VIDEO = 2, };
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  struct Header {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Type type;
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    uint32_t size;
19a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  };
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct Audio {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Header header;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_TimeDelta timestamp;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_AudioBuffer_SampleRate sample_rate;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32_t number_of_channels;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32_t number_of_samples;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32_t data_size;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Uses 8 bytes to make sure the Audio struct has consistent size between
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // NaCl code and renderer code.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint8_t data[8];
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  };
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct Video {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Header header;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_TimeDelta timestamp;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_VideoFrame_Format format;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_Size size;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32_t data_size;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Uses 8 bytes to make sure the Video struct has consistent size between
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // NaCl code and renderer code.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint8_t data[8];
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Because these structs are written and read in shared memory, we need
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the size and alighment to be consistent between NaCl and its host trusted
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // platform.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_COMPILE_ASSERT_SIZE_IN_BYTES(Header, 8);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_COMPILE_ASSERT_SIZE_IN_BYTES(Audio, 40);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_COMPILE_ASSERT_SIZE_IN_BYTES(Video, 40);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Header header;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Video video;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Audio audio;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ppapi
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // PPAPI_SHARED_IMPL_MEDIA_STREAM_BUFFER_H_
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)