OSDN Git Service

Set channel mask when opening audio sink
authorJean-Michel Trivi <jmtrivi@google.com>
Fri, 2 Mar 2012 22:34:10 +0000 (14:34 -0800)
committerJean-Michel Trivi <jmtrivi@google.com>
Mon, 5 Mar 2012 18:59:38 +0000 (10:59 -0800)
Update the code to use the AudioSink::open() interface that
 takes a channel mask as an additional parameter. The code
 is only stereo, and returns an error when attempting to create
 a video editor audio sink with more than two channels.

Change-Id: Ib9bba067da0b286c08656976b89fba7c8b42f99f

libvideoeditor/lvpp/VideoEditorAudioPlayer.cpp
libvideoeditor/lvpp/VideoEditorPlayer.cpp
libvideoeditor/lvpp/VideoEditorPlayer.h

index 219b849..66800ea 100755 (executable)
@@ -511,7 +511,7 @@ status_t VideoEditorAudioPlayer::start(bool sourceAlreadyStarted) {
 
     if (mAudioSink.get() != NULL) {
         status_t err = mAudioSink->open(
-                mSampleRate, numChannels, AUDIO_FORMAT_PCM_16_BIT,
+                mSampleRate, numChannels, CHANNEL_MASK_USE_CHANNEL_ORDER, AUDIO_FORMAT_PCM_16_BIT,
                 DEFAULT_AUDIOSINK_BUFFERCOUNT,
                 &VideoEditorAudioPlayer::AudioSinkCallback, this);
         if (err != OK) {
index fa2834a..cb2edde 100755 (executable)
@@ -383,7 +383,8 @@ status_t VideoEditorPlayer::VeAudioOutput::getPosition(uint32_t *position) {
 }
 
 status_t VideoEditorPlayer::VeAudioOutput::open(
-        uint32_t sampleRate, int channelCount, audio_format_t format, int bufferCount,
+        uint32_t sampleRate, int channelCount, audio_channel_mask_t channelMask,
+        audio_format_t format, int bufferCount,
         AudioCallback cb, void *cookie) {
 
     mCallback = cb;
@@ -413,14 +414,26 @@ status_t VideoEditorPlayer::VeAudioOutput::open(
 
     frameCount = (sampleRate*afFrameCount*bufferCount)/afSampleRate;
 
+    if (channelMask == CHANNEL_MASK_USE_CHANNEL_ORDER) {
+        switch(channelCount) {
+          case 1:
+            channelMask = AUDIO_CHANNEL_OUT_MONO;
+            break;
+          case 2:
+            channelMask = AUDIO_CHANNEL_OUT_STEREO;
+            break;
+          default:
+            return NO_INIT;
+        }
+    }
+
     AudioTrack *t;
     if (mCallback != NULL) {
         t = new AudioTrack(
                 mStreamType,
                 sampleRate,
                 format,
-                (channelCount == 2) ?
-                 AUDIO_CHANNEL_OUT_STEREO : AUDIO_CHANNEL_OUT_MONO,
+                channelMask,
                 frameCount,
                 0 /* flags */,
                 CallbackWrapper,
@@ -430,8 +443,7 @@ status_t VideoEditorPlayer::VeAudioOutput::open(
                 mStreamType,
                 sampleRate,
                 format,
-                (channelCount == 2) ?
-                 AUDIO_CHANNEL_OUT_STEREO : AUDIO_CHANNEL_OUT_MONO,
+                channelMask,
                 frameCount);
     }
 
index 88a2aeb..34f9bc5 100755 (executable)
@@ -49,7 +49,7 @@ class VideoEditorPlayer : public MediaPlayerInterface {
         virtual int             getSessionId();
 
         virtual status_t        open(
-                uint32_t sampleRate, int channelCount,
+                uint32_t sampleRate, int channelCount, audio_channel_mask_t channelMask,
                 audio_format_t format, int bufferCount,
                 AudioCallback cb, void *cookie);