15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Defines the <code>PPB_MediaStreamAudioTrack</code> interface. Used for
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * receiving audio samples from a MediaStream audio track in the browser.
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)[generate_thunk]
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)label Chrome {
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  [channel=dev] M34 = 0.1,
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  M35 = 0.1
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * This enumeration contains audio track attributes which are used by
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * <code>Configure()</code>.
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)enum PP_MediaStreamAudioTrack_Attrib {
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Attribute list terminator.
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PP_MEDIASTREAMAUDIOTRACK_ATTRIB_NONE = 0,
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * The maximum number of buffers to hold audio samples.
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Note: this is only used as advisory; the browser may allocate more or fewer
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * based on available resources. How many buffers depends on usage -
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * request at least 2 to make sure latency doesn't cause lost samples. If
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * the plugin expects to hold on to more than one buffer at a time (e.g. to do
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * multi-buffer processing), it should request that many more.
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PP_MEDIASTREAMAUDIOTRACK_ATTRIB_BUFFERS = 1,
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * The sample rate of audio data in buffers. The attribute value is a
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * <code>PP_AudioBuffer_SampleRate</code>.
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PP_MEDIASTREAMAUDIOTRACK_ATTRIB_SAMPLE_RATE = 2,
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * The sample size of audio data in buffers in bytes. The attribute value is a
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * <code>PP_AudioBuffer_SampleSize</code>.
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PP_MEDIASTREAMAUDIOTRACK_ATTRIB_SAMPLE_SIZE = 3,
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * The number of channels in audio buffers.
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Supported values: 1, 2
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PP_MEDIASTREAMAUDIOTRACK_ATTRIB_CHANNELS = 4,
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * The duration of an audio buffer in milliseconds.
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Valid range: 10 to 10000
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PP_MEDIASTREAMAUDIOTRACK_ATTRIB_DURATION = 5
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch[version=0.1]
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)interface PPB_MediaStreamAudioTrack {
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Determines if a resource is a MediaStream audio track resource.
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] resource The <code>PP_Resource</code> to test.
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @return A <code>PP_Bool</code> with <code>PP_TRUE</code> if the given
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * resource is a Mediastream audio track resource or <code>PP_FALSE</code>
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * otherwise.
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PP_Bool IsMediaStreamAudioTrack([in] PP_Resource resource);
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Configures underlying buffers for incoming audio samples.
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * If the application doesn't want to drop samples, then the
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * <code>PP_MEDIASTREAMAUDIOTRACK_ATTRIB_BUFFERS</code> should be
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * chosen such that inter-buffer processing time variability won't overrun all
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * the input buffers. If all buffers are filled, then samples will be
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * dropped. The application can detect this by examining the timestamp on
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * returned buffers. If <code>Configure()</code> is not called, default
8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * settings will be used. Calls to Configure while the plugin holds
8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * buffers will fail.
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Example usage from plugin code:
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @code
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * int32_t attribs[] = {
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *     PP_MEDIASTREAMAUDIOTRACK_ATTRIB_BUFFERS, 4,
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *     PP_MEDIASTREAMAUDIOTRACK_ATTRIB_DURATION, 10,
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *     PP_MEDIASTREAMAUDIOTRACK_ATTRIB_NONE};
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * track_if->Configure(track, attribs, callback);
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @endcode
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] audio_track A <code>PP_Resource</code> corresponding to an audio
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * resource.
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] attrib_list A list of attribute name-value pairs in which each
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * attribute is immediately followed by the corresponding desired value.
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * The list is terminated by
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * <code>PP_MEDIASTREAMAUDIOTRACK_ATTRIB_NONE</code>.
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * completion of <code>Configure()</code>.
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @return An int32_t containing a result code from <code>pp_errors.h</code>.
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int32_t Configure([in] PP_Resource audio_track,
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    [in] int32_t[] attrib_list,
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    [in] PP_CompletionCallback callback);
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Gets attribute value for a given attribute name.
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] audio_track A <code>PP_Resource</code> corresponding to an audio
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * resource.
1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] attrib A <code>PP_MediaStreamAudioTrack_Attrib</code> for
1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * querying.
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[out] value A int32_t for storing the attribute value on success.
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Otherwise, the value will not be changed.
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @return An int32_t containing a result code from <code>pp_errors.h</code>.
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int32_t GetAttrib([in] PP_Resource audio_track,
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    [in] PP_MediaStreamAudioTrack_Attrib attrib,
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    [out] int32_t value);
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Returns the track ID of the underlying MediaStream audio track.
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] audio_track The <code>PP_Resource</code> to check.
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @return A <code>PP_Var</code> containing the MediaStream track ID as
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * a string.
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PP_Var GetId([in] PP_Resource audio_track);
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Checks whether the underlying MediaStream track has ended.
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Calls to GetBuffer while the track has ended are safe to make and will
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * complete, but will fail.
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] audio_track The <code>PP_Resource</code> to check.
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @return A <code>PP_Bool</code> with <code>PP_TRUE</code> if the given
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * MediaStream track has ended or <code>PP_FALSE</code> otherwise.
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  [on_failure=PP_TRUE]
1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PP_Bool HasEnded([in] PP_Resource audio_track);
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Gets the next audio buffer from the MediaStream track.
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * If internal processing is slower than the incoming buffer rate, new buffers
1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * will be dropped from the incoming stream. Once all buffers are full,
1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * audio samples will be dropped until <code>RecycleBuffer()</code> is called
1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * to free a slot for another buffer.
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * If there are no audio data in the input buffer,
1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * <code>PP_OK_COMPLETIONPENDING</code> will be returned immediately and the
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * <code>callback</code> will be called, when a new buffer of audio samples
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * is received or an error happens.
1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] audio_track A <code>PP_Resource</code> corresponding to an audio
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * resource.
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[out] buffer A <code>PP_Resource</code> corresponding to
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * an AudioBuffer resource.
1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * completion of GetBuffer().
1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @return An int32_t containing a result code from <code>pp_errors.h</code>.
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int32_t GetBuffer([in] PP_Resource audio_track,
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    [out] PP_Resource buffer,
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    [in] PP_CompletionCallback callback);
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Recycles a buffer returned by <code>GetBuffer()</code>, so the track can
1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * reuse the buffer. And the buffer will become invalid. The caller should
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * release all references it holds to <code>buffer</code> and not use it
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * anymore.
1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] audio_track A <code>PP_Resource</code> corresponding to an audio
1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * resource.
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] buffer A <code>PP_Resource</code> corresponding to
1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * an AudioBuffer resource returned by <code>GetBuffer()</code>.
1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @return An int32_t containing a result code from <code>pp_errors.h</code>.
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int32_t RecycleBuffer([in] PP_Resource audio_track,
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        [in] PP_Resource buffer);
1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Closes the MediaStream audio track and disconnects it from the audio
1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * source. After calling <code>Close()</code>, no new buffers will be
1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * received.
1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param[in] audio_track A <code>PP_Resource</code> corresponding to a
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * MediaStream audio track resource.
1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void Close([in] PP_Resource audio_track);
2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
202