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

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

 AVVideoStream ()
 
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_)
 

Открытые атрибуты

PMemBuffer last_frame
 
double frames_per_second
 
double frame_len
 
SwsContext * converter
 
int width
 
int height
 
- Открытые атрибуты унаследованные от AVStreamWrapper
AVMediaType type
 
int stream_idx
 
AVStreamstream
 
AVCodecdec
 
AVCodecContextdec_ctx
 
std::queue< PMemBuffer, std::deque< PMemBuffer > > queue
 

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

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

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

◆ AVVideoStream()

AVVideoStream::AVVideoStream ( )
inline

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

187  : AVStreamWrapper() {
188  frame_len = 0.;
189  frames_per_second = 0.;
190  converter = nullptr;
191  }

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

Методы

◆ open()

virtual bool AVVideoStream::open ( AVFormatContext format_ctx)
inlinevirtual

Замещает AVStreamWrapper.

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

193  {
194  if (!AVStreamWrapper::open(format_ctx, AVMEDIA_TYPE_VIDEO)) {
195  return false;
196  }
197 
198  width = dec_ctx->width;
199  height = dec_ctx->height;
200 
201  frame_len = av_q2d(stream->time_base) * 1000.;
202  frames_per_second = 1. / av_q2d(stream->time_base);
203 
206  AV_PIX_FMT_RGB32, SWS_BICUBIC, nullptr, nullptr, nullptr);
207 
208  return true;
209  }

Перекрестные ссылки av_q2d(), AVMEDIA_TYPE_VIDEO, converter, AVStreamWrapper::dec_ctx, frame_len, frames_per_second, AVCodecContext::height, AVStreamWrapper::open(), AVCodecContext::pix_fmt, sws_getContext() и AVCodecContext::width.

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

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

◆ decode_frame()

PMemBuffer AVVideoStream::decode_frame ( AVPacket avpacket)
inline

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

211  {
213  AVFrame *frame = av_frame_alloc();
214 
215  if (!queue.empty()) {
216  result = queue.front();
217  queue.pop();
218  }
219 
220  if (avcodec_send_packet(dec_ctx, avpacket) >= 0) {
221  int res = 0;
222  while (res >= 0) {
224  if (res == AVERROR(EAGAIN) || res == AVERROR_EOF) {
225  break;
226  }
227  if (res < 0) {
228  av_frame_free(&frame);
229  return result;
230  }
231  int linesizes[4] = { 0, 0, 0, 0 };
232  if (av_image_fill_linesizes(linesizes, AV_PIX_FMT_RGB32, width) < 0) {
233  assert(false);
234  }
235  uint8_t *data[4] = { nullptr, nullptr, nullptr, nullptr };
236  PMemBuffer tmp_buf = AllocMemBuffer(frame->height * linesizes[0] * 2);
237  data[0] = (uint8_t*)tmp_buf->GetData();
238 
239  if (sws_scale(converter, frame->data, frame->linesize, 0, frame->height,
240  data, linesizes) < 0) {
241  assert(false);
242  }
243 
244  if (!result) {
245  result = tmp_buf;
246  } else {
247  queue.push(tmp_buf);
248  }
249  }
250  }
251 
252  av_frame_free(&frame);
253 
254  last_frame = result;
255 
256  return result;
257  }

Перекрестные ссылки AllocMemBuffer(), av_frame_alloc(), av_frame_free(), av_image_fill_linesizes(), avcodec_receive_frame(), avcodec_send_packet(), converter, AVFrame::data, AVStreamWrapper::dec_ctx, AVFrame::height, last_frame, AVFrame::linesize, AVStreamWrapper::queue и sws_scale().

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

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

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

◆ last_frame

PMemBuffer AVVideoStream::last_frame

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

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

◆ frames_per_second

double AVVideoStream::frames_per_second

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

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

◆ frame_len

double AVVideoStream::frame_len

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

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

◆ converter

SwsContext* AVVideoStream::converter

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

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

◆ width

int AVVideoStream::width

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

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

◆ height

int AVVideoStream::height

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

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


Объявления и описания членов класса находятся в файле:
AVCodecContext::height
int height
Definition: avcodec.h:1738
av_frame_free
void av_frame_free(AVFrame **frame)
height
EGLSurface EGLint EGLint EGLint EGLint height
Definition: SDL_egl.h:1596
AVVideoStream::last_frame
PMemBuffer last_frame
Definition: MediaPlayer.cpp:259
sws_scale
int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])
AVVideoStream::frame_len
double frame_len
Definition: MediaPlayer.cpp:261
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
av_image_fill_linesizes
int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width)
av_q2d
static double av_q2d(AVRational a)
Definition: rational.h:104
avcodec_receive_frame
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
AllocMemBuffer
PMemBuffer AllocMemBuffer(size_t size)
Definition: MemBuffer.cpp:20
width
EGLSurface EGLint EGLint EGLint width
Definition: SDL_egl.h:1596
AVFrame::height
int height
Definition: frame.h:353
AVStreamWrapper::open
virtual bool open(AVFormatContext *format_ctx)=0
sws_getContext
struct SwsContext * sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param)
AVCodecContext::width
int width
Definition: avcodec.h:1738
AVFrame::linesize
int linesize[AV_NUM_DATA_POINTERS]
Definition: frame.h:326
stream
EGLStreamKHR stream
Definition: SDL_egl.h:1082
avcodec_send_packet
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
uint8_t
unsigned __int8 uint8_t
Definition: SDL_config.h:35
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1974
AVVideoStream::frames_per_second
double frames_per_second
Definition: MediaPlayer.cpp:260
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
Definition: frame.h:309
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
AVStreamWrapper::queue
std::queue< PMemBuffer, std::deque< PMemBuffer > > queue
Definition: MediaPlayer.cpp:113
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Definition: avcodec.h:1775
res
GLuint res
Definition: SDL_opengl_glext.h:7940
PMemBuffer
std::shared_ptr< IMemBuffer > PMemBuffer
Definition: MemBuffer.h:13
AVFrame
Definition: frame.h:295
AVVideoStream::converter
SwsContext * converter
Definition: MediaPlayer.cpp:262