World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Класс AVAudioStream
+ Граф наследования:AVAudioStream:
+ Граф связей класса AVAudioStream:

Открытые члены

 AVAudioStream ()
 
virtual bool open (AVFormatContext *format_ctx)
 
PMemBuffer decode_frame (AVPacket *avpacket)
 
- Открытые члены унаследованные от AVStreamWrapper
 AVStreamWrapper ()
 
virtual ~AVStreamWrapper ()
 
virtual void reset ()
 
virtual void close ()
 
virtual bool open (AVFormatContext *format_ctx, AVMediaType type_)
 

Защищенные данные

SwrContextconverter
 

Дополнительные унаследованные члены

- Открытые атрибуты унаследованные от AVStreamWrapper
AVMediaType type
 
int stream_idx
 
AVStreamstream
 
AVCodecdec
 
AVCodecContextdec_ctx
 
std::queue< PMemBuffer, std::deque< PMemBuffer > > queue
 

Подробное описание

См. определение в файле MediaPlayer.cpp строка 116

Конструктор(ы)

◆ AVAudioStream()

AVAudioStream::AVAudioStream ( )
inline

См. определение в файле MediaPlayer.cpp строка 118

118 : AVStreamWrapper() { converter = nullptr; }

Перекрестные ссылки converter.

Методы

◆ open()

virtual bool AVAudioStream::open ( AVFormatContext format_ctx)
inlinevirtual

Замещает AVStreamWrapper.

См. определение в файле MediaPlayer.cpp строка 120

120  {
121  if (!AVStreamWrapper::open(format_ctx, AVMEDIA_TYPE_AUDIO)) {
122  return false;
123  }
124 
126  converter, AV_CH_LAYOUT_STEREO, AV_SAMPLE_FMT_S16,
128  dec_ctx->sample_rate, 0, nullptr);
129  if (swr_init(converter) < 0) {
130  logger->Warning(L"swr_init: failed");
132  converter = nullptr;
133  return false;
134  }
135 
136  return true;
137  }

Перекрестные ссылки AV_SAMPLE_FMT_S16, AVMEDIA_TYPE_AUDIO, AVCodecContext::channel_layout, converter, AVStreamWrapper::dec_ctx, logger, AVStreamWrapper::open(), AVCodecContext::sample_fmt, AVCodecContext::sample_rate, swr_alloc_set_opts(), swr_free(), swr_init() и Log::Warning().

Используется в Movie::Load().

+ Граф вызовов:
+ Граф вызова функции:

◆ decode_frame()

PMemBuffer AVAudioStream::decode_frame ( AVPacket avpacket)
inline

См. определение в файле MediaPlayer.cpp строка 139

139  {
141  AVFrame *frame = av_frame_alloc();
142 
143  if (!queue.empty()) {
144  result = queue.front();
145  queue.pop();
146  }
147 
148  if (avcodec_send_packet(dec_ctx, avpacket) >= 0) {
149  int res = 0;
150  while (res >= 0) {
152  if (res == AVERROR(EAGAIN) || res == AVERROR_EOF) {
153  break;
154  }
155  if (res < 0) {
156  av_frame_free(&frame);
157  return result;
158  }
159  PMemBuffer tmp_buf = AllocMemBuffer(
160  frame->nb_samples * 2 * 2);
161  uint8_t *dst_channels[8] = { 0 };
162  dst_channels[0] = (uint8_t*)tmp_buf->GetData();
163  int got_samples = swr_convert(
164  converter, dst_channels, frame->nb_samples,
165  (const uint8_t**)frame->data, frame->nb_samples);
166  if (got_samples > 0) {
167  if (!result) {
168  result = tmp_buf;
169  } else {
170  queue.push(tmp_buf);
171  }
172  }
173  }
174  }
175 
176  av_frame_free(&frame);
177 
178  return result;
179  }

Перекрестные ссылки AllocMemBuffer(), av_frame_alloc(), av_frame_free(), avcodec_receive_frame(), avcodec_send_packet(), converter, AVFrame::data, AVStreamWrapper::dec_ctx, AVFrame::nb_samples, AVStreamWrapper::queue и swr_convert().

Используется в Movie::GetFrame().

+ Граф вызовов:
+ Граф вызова функции:

Данные класса

◆ converter

SwrContext* AVAudioStream::converter
protected

См. определение в файле MediaPlayer.cpp строка 182

Используется в AVAudioStream(), decode_frame() и open().


Объявления и описания членов класса находятся в файле:
av_frame_free
void av_frame_free(AVFrame **frame)
AVStreamWrapper::dec_ctx
AVCodecContext * dec_ctx
Definition: MediaPlayer.cpp:112
AVStreamWrapper::AVStreamWrapper
AVStreamWrapper()
Definition: MediaPlayer.cpp:48
av_frame_alloc
AVFrame * av_frame_alloc(void)
result
GLuint64EXT * result
Definition: SDL_opengl_glext.h:9435
swr_init
int swr_init(struct SwrContext *s)
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
avcodec_receive_frame
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
AllocMemBuffer
PMemBuffer AllocMemBuffer(size_t size)
Definition: MemBuffer.cpp:20
swr_alloc_set_opts
struct SwrContext * swr_alloc_set_opts(struct SwrContext *s, int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate, int64_t in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate, int log_offset, void *log_ctx)
Log::Warning
void Warning(const wchar_t *pFormat,...)
Definition: Log.cpp:28
AVStreamWrapper::open
virtual bool open(AVFormatContext *format_ctx)=0
swr_free
void swr_free(struct SwrContext **s)
swr_convert
int swr_convert(struct SwrContext *s, uint8_t **out, int out_count, const uint8_t **in, int in_count)
AVCodecContext::sample_fmt
enum AVSampleFormat sample_fmt
sample format
Definition: avcodec.h:2233
avcodec_send_packet
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
AVFrame::nb_samples
int nb_samples
Definition: frame.h:361
uint8_t
unsigned __int8 uint8_t
Definition: SDL_config.h:35
AV_SAMPLE_FMT_S16
@ AV_SAMPLE_FMT_S16
signed 16 bits
Definition: samplefmt.h:61
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
Definition: frame.h:309
AVAudioStream::converter
SwrContext * converter
Definition: MediaPlayer.cpp:182
AVStreamWrapper::queue
std::queue< PMemBuffer, std::deque< PMemBuffer > > queue
Definition: MediaPlayer.cpp:113
logger
Log * logger
Definition: IocContainer.cpp:47
res
GLuint res
Definition: SDL_opengl_glext.h:7940
PMemBuffer
std::shared_ptr< IMemBuffer > PMemBuffer
Definition: MemBuffer.h:13
AVFrame
Definition: frame.h:295
AVCodecContext::channel_layout
uint64_t channel_layout
Definition: avcodec.h:2276
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:2225