@@ -1512,6 +1512,45 @@ render_fr_buffer()
15121512 }
15131513}
15141514
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,4,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+
15151554static void
15161555render_misc_buffer ()
15171556{
@@ -2821,6 +2860,9 @@ static int encode_frames(void)
28212860 render_misc_buffer ();
28222861 }
28232862
2863+ // setting qulity-performance trade-off
2864+ if (current_frame_encoding == 0 )
2865+ render_quality_buffer ();
28242866
28252867 render_packedpicture (); //render packed frame header
28262868 render_picture (); //render frame PPS buffer
0 commit comments