AVTranscoder.h
2.1 KB
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#pragma once
#include "AVDecoder.h"
class CAVTranscoder
{
public:
CAVTranscoder(bool bOne2One, int width_teacher, int height_teacher, int student_width,int student_height, bool has_teacher, int max_audio);
virtual ~CAVTranscoder();
int add(media_info & info);
int64_t transcode();
bool all_processed();
int close();
int open_output_file(const char *filename);
protected:
vector < CAVDecoder *> _decoders;
AVFormatContext * _ofmt_ctx;
int64_t _start_time;
double _cur_a_time;
int64_t _cur_v_time;
int _nOutputWidth;
int _nOutputHeight;
int64_t _cur_out_v_ts;
int64_t _cur_out_a_ts;
private:
int mix_and_output_vframe(vector<CAVDecoder *> & decoders_got_frame);
int mix_and_output_aframe(vector<CAVDecoder *> & decoders_got_frame);
bool _all_processed;
bool _one2one;
int mix_and_output_one2one_vframe(vector<CAVDecoder *> & decoders_got_frame);
int mix_and_output_one2many_vframe(vector<CAVDecoder *> & decoders_got_frame);
int fillDestFrame(AVFrame * pDstFrame, AVFrame * pSrcFrame, int x, int y);
int fillDestFrame(AVFrame * pDstFrame, AVFrame * pSrcFrame, int destx, int desty, int srcx,int srcy,int w,int h);
int encode_write_frame(AVFrame *filt_frame, unsigned int stream_index, int *got_frame);
int flush_encoder(unsigned int stream_index);
int init_scale_context(struct SwsContext ** ctx, AVFrame ** frame, int src_w, int src_h, int dest_w, int dest_h);
int free_scale_context(struct SwsContext ** ctx, AVFrame ** frame);
void * _a_frame_pool;
int _max_audio;
int _scaled_width;
int _scaled_height;
int _pip_width;
int _pip_height;
int _teacher_width;
int _teacher_height;
int _student_width;
int _student_height;
struct SwsContext * _sws_ctx_w_h;
struct SwsContext * _sws_ctx_h_w;
struct SwsContext * _sws_ctx_h_h;
AVFrame * _scaled_frame_w_h;
AVFrame * _scaled_frame_h_w;
AVFrame * _scaled_frame_h_h;
int _last_videos_got;
AVFrame * _teacherFrame;
AVFrame * _studentFrame; // for one2one,keep the last frame
uint8_t _blank_y, _blank_u, _blank_v;
public:
void set_max_audio(int max_audio);
};