胡斌

V2.0.8

1.修改在一对一布局下,有学生或老师视频需要缩放时,如果学生或老师有多个段,会出现程序异常
2.修改在一对一布局下,不需要缩放时,学生视频如果宽度小于输出视频宽度,输出视频有部分背景花屏
... ... @@ -722,29 +722,29 @@ int CAVTranscoder::open_output_file(const char *filename)
}
int CAVTranscoder::scale_fill_one2one_teacherframe(AVFrame *pDstFrame)
{
if (_src_width_teacher != _teacherFrame->width || _src_height_teacher != _teacherFrame->height) {//init scale context
if (_scaled_frame_teacher != _teacherFrame) {
if (_src_width_teacher != _teacherFrame->width || _src_height_teacher != _teacherFrame->height) {//init scale context
free_scale_context(&_sws_ctx_teacher, &_scaled_frame_teacher);
free_scale_context(&_sws_ctx_teacher, &_scaled_frame_teacher);
int scaled_width, scaled_height;
get_scaled_dest_size(_teacherFrame, _teacher_width, _teacher_height, &scaled_width, &scaled_height);
init_scale_context(&_sws_ctx_teacher, &_scaled_frame_teacher, _teacherFrame->width, _teacherFrame->height, scaled_width, scaled_height);
int scaled_width, scaled_height;
get_scaled_dest_size(_teacherFrame, _teacher_width, _teacher_height, &scaled_width, &scaled_height);
init_scale_context(&_sws_ctx_teacher, &_scaled_frame_teacher, _teacherFrame->width, _teacherFrame->height, scaled_width, scaled_height);
_src_width_teacher = _teacherFrame->width;
_src_height_teacher = _teacherFrame->height;
}
_src_width_teacher = _teacherFrame->width;
_src_height_teacher = _teacherFrame->height;
}
int h = 0;
h = sws_scale(_sws_ctx_teacher, _teacherFrame->data, _teacherFrame->linesize, 0, _teacherFrame->height,
_scaled_frame_teacher->data, _scaled_frame_teacher->linesize);
_scaled_frame_teacher->pkt_dts = _teacherFrame->pkt_dts;//pass rotation
int h = 0;
h = sws_scale(_sws_ctx_teacher, _teacherFrame->data, _teacherFrame->linesize, 0, _teacherFrame->height,
_scaled_frame_teacher->data, _scaled_frame_teacher->linesize);
_scaled_frame_teacher->pkt_dts = _teacherFrame->pkt_dts;//pass rotation
av_frame_free(&_teacherFrame);
_teacherFrame = _scaled_frame_teacher;
av_frame_free(&_teacherFrame);
_teacherFrame = _scaled_frame_teacher;
}
if (_teacherFrame->pkt_dts == 0 || _teacherFrame->pkt_dts == 180) {
if (_teacher_width != _teacherFrame->width || _teacher_height != _teacherFrame->height){
... ... @@ -774,25 +774,27 @@ int CAVTranscoder::open_output_file(const char *filename)
int CAVTranscoder::scale_fill_one2one_studentframe(AVFrame * pDstFrame, int y)
{
if (_src_width_student != _studentFrame->width || _src_height_student != _studentFrame->height) {//init scale context
free_scale_context(&_sws_ctx_student, &_scaled_frame_student);
if (_scaled_frame_student != _studentFrame) {
if (_src_width_student != _studentFrame->width || _src_height_student != _studentFrame->height) {//init scale context
free_scale_context(&_sws_ctx_student, &_scaled_frame_student);
int scaled_width, scaled_height;
int scaled_width, scaled_height;
get_scaled_dest_size(_studentFrame, _student_width, _student_height, &scaled_width, &scaled_height);
init_scale_context(&_sws_ctx_student, &_scaled_frame_student, _studentFrame->width, _studentFrame->height, scaled_width, scaled_height);
get_scaled_dest_size(_studentFrame, _student_width, _student_height, &scaled_width, &scaled_height);
init_scale_context(&_sws_ctx_student, &_scaled_frame_student, _studentFrame->width, _studentFrame->height, scaled_width, scaled_height);
_src_width_student = _studentFrame->width;
_src_height_student = _studentFrame->height;
}
_src_width_student = _studentFrame->width;
_src_height_student = _studentFrame->height;
}
int h = 0;
h = sws_scale(_sws_ctx_student, _studentFrame->data, _studentFrame->linesize, 0, _studentFrame->height,
_scaled_frame_student->data, _scaled_frame_student->linesize);
_scaled_frame_student->pkt_dts = _studentFrame->pkt_dts;//pass rotation
int h = 0;
h = sws_scale(_sws_ctx_student, _studentFrame->data, _studentFrame->linesize, 0, _studentFrame->height,
_scaled_frame_student->data, _scaled_frame_student->linesize);
_scaled_frame_student->pkt_dts = _studentFrame->pkt_dts;//pass rotation
av_frame_free(&_studentFrame);
_studentFrame = _scaled_frame_student;
av_frame_free(&_studentFrame);
_studentFrame = _scaled_frame_student;
}
if (_studentFrame->pkt_dts == 0 || _studentFrame->pkt_dts == 180) {
if (_teacher_width != _studentFrame->width || _teacher_height != _studentFrame->height){
... ... @@ -823,6 +825,7 @@ int CAVTranscoder::open_output_file(const char *filename)
int CAVTranscoder::fill_one2one_student_frame(AVFrame * pDstFrame, int y)
{
/*
if (_studentFrame->width == _student_width && _studentFrame->height == _student_height) {
if (_studentFrame->pkt_dts != 90){
fillDestFrame(pDstFrame, _studentFrame, 0, y);
... ... @@ -842,18 +845,29 @@ int CAVTranscoder::open_output_file(const char *filename)
else if (_studentFrame->width == _student_height && _studentFrame->height == _student_height) {
fillDestFrame(pDstFrame, _studentFrame, (_nOutputWidth - _student_height) / 2, y);
}
else {
else {*/
if (_one2one_same_size){
scale_fill_one2one_studentframe(pDstFrame, y);
}
else {
//printf("\nresolution: %dx%d unexpected!", _studentFrame->width, _studentFrame->height);
memset(pDstFrame->data[0] + y * pDstFrame->linesize[0], _blank_y, pDstFrame->linesize[0] * _teacher_height);
memset(pDstFrame->data[1] + y * pDstFrame->linesize[1] / 2, _blank_u, pDstFrame->linesize[1] * _teacher_height / 2);
memset(pDstFrame->data[2] + y * pDstFrame->linesize[2] /2 , _blank_v, pDstFrame->linesize[2] * _teacher_height / 2);
fillDestFrame(pDstFrame, _studentFrame, 0, y);
}
}
if (_studentFrame->pkt_dts == 0 || _studentFrame->pkt_dts == 180) {
if (_studentFrame->width < _nOutputWidth || _studentFrame->height < _nOutputHeight - y) {
memset(pDstFrame->data[0] + y * pDstFrame->linesize[0], _blank_y, pDstFrame->linesize[0] * _student_height);
memset(pDstFrame->data[1] + y * pDstFrame->linesize[1] / 2, _blank_u, pDstFrame->linesize[1] * _student_height / 2);
memset(pDstFrame->data[2] + y * pDstFrame->linesize[2] / 2, _blank_v, pDstFrame->linesize[2] * _student_height / 2);
}
fillDestFrame(pDstFrame, _studentFrame, 0, y);
}
else {
if (_studentFrame->height < _nOutputWidth || _studentFrame->width < _nOutputHeight - y) {
memset(pDstFrame->data[0] + y * pDstFrame->linesize[0], _blank_y, pDstFrame->linesize[0] * _student_height);
memset(pDstFrame->data[1] + y * pDstFrame->linesize[1] / 2, _blank_u, pDstFrame->linesize[1] * _student_height / 2);
memset(pDstFrame->data[2] + y * pDstFrame->linesize[2] / 2, _blank_v, pDstFrame->linesize[2] * _student_height / 2);
}
fillDestFrame(pDstFrame, _studentFrame, 0, y);
}
}
//}
return 0;
}
... ...
... ... @@ -83,4 +83,8 @@ V2.0.6
V2.0.7
1.修改bug: 在V2.0.4开放了设置视频编码参数,由于修改不完整,其中fps设置如果不是默认的参数20,会导致音视频不同步。
2.修改在一对一布局下,有一个视频是竖屏时,对竖屏的缩放处理不正常
\ No newline at end of file
2.修改在一对一布局下,有一个视频是竖屏时,对竖屏的缩放处理不正常
V2.0.8
1.修改在一对一布局下,有学生或老师视频需要缩放时,如果学生或老师有多个段,会出现程序异常
2.修改在一对一布局下,不需要缩放时,学生视频如果宽度小于输出视频宽度,输出视频有部分背景花屏
\ No newline at end of file
... ...
... ... @@ -1211,7 +1211,7 @@ int process_av_files(char * record_info, int piptype, bool one2one_same_size, in
int main(int argc, char * argv[])
{
if (argc < 2) {
printf(" merge_pip 2.0.7\n");
printf(" merge_pip 2.0.8\n");
printf(" merge video files to one pip video according to record info file,\nusage:");
printf("\n %s record_info_filename [-t {0,1,2}] [-c codec.cfg] [-s {1,0}]", argv[0]);
printf("\n\n");
... ...