ff_audio_player.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. //
  2. // Created by xu fulong on 2022/9/4.
  3. //
  4. #ifndef FF_AUDIO_PLAYER_H
  5. #define FF_AUDIO_PLAYER_H
  6. #include <atomic>
  7. #include "ffmpeg_jni_define.h"
  8. #include "visualizer/frank_visualizer.h"
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. #include "libavformat/avformat.h"
  13. #include "libavcodec/avcodec.h"
  14. #include "libswresample/swresample.h"
  15. #include "libavfilter/buffersink.h"
  16. #include "libavfilter/buffersrc.h"
  17. #include "libavfilter/avfiltergraph.h"
  18. #ifdef __cplusplus
  19. }
  20. #endif
  21. struct AudioPlayerState {
  22. int out_channel;
  23. int out_ch_layout;
  24. int out_sample_rate;
  25. enum AVSampleFormat out_sample_fmt;
  26. AVPacket *packet;
  27. AVFrame *inputFrame;
  28. AVFrame *filterFrame;
  29. int audioIndex = -1;
  30. uint8_t *outBuffer;
  31. SwrContext *swrContext;
  32. AVFormatContext *formatContext;
  33. AVCodecContext *codecContext;
  34. const char *filterDesc;
  35. std::atomic<bool> filterAgain;
  36. std::atomic<bool> exitPlaying;
  37. AVFilterGraph *audioFilterGraph;
  38. AVFilterContext *audioSrcContext;
  39. AVFilterContext *audioSinkContext;
  40. };
  41. class FFAudioPlayer {
  42. private:
  43. AudioPlayerState *m_state;
  44. bool m_enableVisualizer = false;
  45. FrankVisualizer *m_visualizer;
  46. public:
  47. FFAudioPlayer();
  48. ~FFAudioPlayer();
  49. int open(const char* path);
  50. int getSampleRate() const;
  51. int getChannel() const;
  52. int decodeAudio();
  53. uint8_t *getDecodeFrame() const;
  54. void setFilterAgain(bool again);
  55. void setFilterDesc(const char *filterDescription);
  56. void setEnableVisualizer(bool enable);
  57. bool enableVisualizer() const;
  58. int8_t* getFFTData() const;
  59. int getFFTSize() const;
  60. void setExit(bool exit);
  61. void close();
  62. };
  63. #endif //FF_AUDIO_PLAYER_H