2 * Copyright 2012 Michael Chen <omxcodec@gmail.com>
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef SOFT_FFMPEGAUDIO_H_
19 #define SOFT_FFMPEGAUDIO_H_
21 #include "SimpleSoftOMXComponent.h"
30 #include <limits.h> /* INT_MAX */
33 #include "libavutil/avstring.h"
34 #include "libavutil/colorspace.h"
35 #include "libavutil/mathematics.h"
36 #include "libavutil/pixdesc.h"
37 #include "libavutil/imgutils.h"
38 #include "libavutil/dict.h"
39 #include "libavutil/parseutils.h"
40 #include "libavutil/samplefmt.h"
41 #include "libavutil/avassert.h"
42 #include "libavutil/intreadwrite.h"
43 #include "libavformat/avformat.h"
44 #include "libavdevice/avdevice.h"
45 #include "libswscale/swscale.h"
46 #include "libavcodec/audioconvert.h"
47 #include "libavutil/opt.h"
48 #include "libavutil/internal.h"
49 #include "libavcodec/avfft.h"
50 #include "libswresample/swresample.h"
55 #include <SDL_thread.h>
63 struct SoftFFmpegAudio : public SimpleSoftOMXComponent {
64 SoftFFmpegAudio(const char *name,
65 const OMX_CALLBACKTYPE *callbacks,
67 OMX_COMPONENTTYPE **component);
70 virtual ~SoftFFmpegAudio();
72 virtual OMX_ERRORTYPE internalGetParameter(
73 OMX_INDEXTYPE index, OMX_PTR params);
75 virtual OMX_ERRORTYPE internalSetParameter(
76 OMX_INDEXTYPE index, const OMX_PTR params);
78 virtual void onQueueFilled(OMX_U32 portIndex);
79 virtual void onPortFlushCompleted(OMX_U32 portIndex);
80 virtual void onPortEnableCompleted(OMX_U32 portIndex, bool enabled);
85 kOutputBufferSize = 4608 * 2
102 kPortIndexOutput = 1,
105 AVCodecContext *mCtx;
106 struct SwrContext *mSwrCtx;
109 bool mExtradataReady;
110 bool mIgnoreExtradata;
112 bool mSignalledError;
117 int64_t mAnchorTimeUs;
118 int64_t mNumFramesOutput;
119 int32_t mInputBufferSize;
121 uint8_t mSilenceBuffer[kOutputBufferSize];
122 DECLARE_ALIGNED(16, uint8_t, mAudioBuf2)[AVCODEC_MAX_AUDIO_FRAME_SIZE * 4];
123 uint8_t *mPAudioBuffer;
124 int32_t mAudioBufferSize;
126 int32_t mNumChannels;
127 int32_t mSamplingRate;
128 AVSampleFormat mSamplingFmt;
129 bool mAudioConfigChanged;
131 enum AVSampleFormat mAudioSrcFmt;
132 enum AVSampleFormat mAudioTgtFmt;
133 int mAudioSrcChannels;
134 int mAudioTgtChannels;
135 int64_t mAudioSrcChannelLayout;
136 int64_t mAudioTgtChannelLayout;
144 } mOutputPortSettingsChange;
146 void setAVCtxToDefault(AVCodecContext *avctx, const AVCodec *codec);
149 status_t initDecoder();
150 void deInitDecoder();
152 DISALLOW_EVIL_CONSTRUCTORS(SoftFFmpegAudio);
155 } // namespace android
157 #endif // SOFT_FFMPEGAUDIO_H_