@@ -1512,6 +1512,45 @@ render_fr_buffer()
1512
1512
}
1513
1513
}
1514
1514
1515
+ static void
1516
+ render_quality_buffer ()
1517
+ {
1518
+ VABufferID param_buf = VA_INVALID_ID ;
1519
+ VAStatus va_status ;
1520
+ VABufferID render_id = VA_INVALID_ID ;
1521
+
1522
+ VAEncMiscParameterBuffer * misc_param ;
1523
+ VAEncMiscParameterBufferQualityLevel * misc_quality ;
1524
+
1525
+ va_status = vaCreateBuffer (va_dpy , context_id ,
1526
+ VAEncMiscParameterBufferType ,
1527
+ sizeof (VAEncMiscParameterBuffer ) + sizeof (VAEncMiscParameterBufferQualityLevel ),
1528
+ 1 , NULL , & param_buf );
1529
+ CHECK_VASTATUS (va_status , "vaCreateBuffer" );
1530
+
1531
+ vaMapBuffer (va_dpy , param_buf , (void * * )& misc_param );
1532
+ misc_param -> type = VAEncMiscParameterTypeQualityLevel ;
1533
+ misc_quality = (VAEncMiscParameterBufferQualityLevel * )misc_param -> data ;
1534
+ memset (misc_quality , 0 , sizeof (* misc_quality ));
1535
+
1536
+ //quality_level range {1...7}, 1 is best quality, 7 is best performance
1537
+ // 7 is default setting
1538
+ misc_quality -> quality_level = 7 ;
1539
+
1540
+ vaUnmapBuffer (va_dpy , param_buf );
1541
+
1542
+ render_id = param_buf ;
1543
+
1544
+ va_status = vaRenderPicture (va_dpy , context_id , & render_id , 1 );
1545
+ CHECK_VASTATUS (va_status , "vaRenderPicture" );
1546
+
1547
+ if (param_buf != VA_INVALID_ID )
1548
+ {
1549
+ vaDestroyBuffer (va_dpy , param_buf );
1550
+ param_buf = VA_INVALID_ID ;
1551
+ }
1552
+ }
1553
+
1515
1554
static void
1516
1555
render_misc_buffer ()
1517
1556
{
@@ -2821,6 +2860,9 @@ static int encode_frames(void)
2821
2860
render_misc_buffer ();
2822
2861
}
2823
2862
2863
+ // setting qulity-performance trade-off
2864
+ if (current_frame_encoding == 0 )
2865
+ render_quality_buffer ();
2824
2866
2825
2867
render_packedpicture (); //render packed frame header
2826
2868
render_picture (); //render frame PPS buffer
0 commit comments