forked from pockethook/player
-
Notifications
You must be signed in to change notification settings - Fork 0
/
video_decoder.cpp
40 lines (33 loc) · 945 Bytes
/
video_decoder.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "video_decoder.h"
#include "ffmpeg.h"
VideoDecoder::VideoDecoder(AVCodecContext* codec_context) :
codec_context_{codec_context} {
avcodec_register_all();
const auto codec_video =
avcodec_find_decoder(codec_context_->codec_id);
if (!codec_video) {
throw ffmpeg::Error{"Unsupported video codec"};
}
ffmpeg::check(avcodec_open2(
codec_context_, codec_video, nullptr));
}
VideoDecoder::~VideoDecoder() {
avcodec_close(codec_context_);
}
void VideoDecoder::operator()(
AVFrame* frame, int &finished, AVPacket* packet) {
ffmpeg::check(avcodec_decode_video2(
codec_context_, frame, &finished, packet));
}
unsigned VideoDecoder::width() const {
return codec_context_->width;
}
unsigned VideoDecoder::height() const {
return codec_context_->height;
}
AVPixelFormat VideoDecoder::pixel_format() const {
return codec_context_->pix_fmt;
}
AVRational VideoDecoder::time_base() const {
return codec_context_->time_base;
}