]> git.sesse.net Git - nageru/blobdiff - quicksync_encoder.cpp
Fix a few Clang warnings.
[nageru] / quicksync_encoder.cpp
index b288fa6f7e7f035de8de9354cc1b1e34fbf33b10..068e2d416dc3fe3b2c1ccdebcfc6ab97244fe82e 100644 (file)
@@ -82,6 +82,7 @@ std::atomic<int64_t> metric_quick_sync_stalled_frames{0};
         exit(1);                                                        \
     }
 
+#undef BUFFER_OFFSET
 #define BUFFER_OFFSET(i) ((char *)NULL + (i))
 
 //#include "loadsurface.h"
@@ -336,7 +337,7 @@ void QuickSyncEncoderImpl::sps_rbsp(YCbCrLumaCoefficients ycbcr_coefficients, bi
             bitstream_put_ui(bs, 1, 1);  /* colour_description_present_flag */
             {
                 bitstream_put_ui(bs, 1, 8);  /* colour_primaries (1 = BT.709) */
-                bitstream_put_ui(bs, 2, 8);  /* transfer_characteristics (2 = unspecified, since we use sRGB) */
+                bitstream_put_ui(bs, 13, 8);  /* transfer_characteristics (13 = sRGB) */
                 if (ycbcr_coefficients == YCBCR_REC_709) {
                     bitstream_put_ui(bs, 1, 8);  /* matrix_coefficients (1 = BT.709) */
                 } else {
@@ -763,7 +764,7 @@ void QuickSyncEncoderImpl::va_close_display(VADisplay va_dpy)
 
 int QuickSyncEncoderImpl::init_va(const string &va_display)
 {
-    VAProfile profile_list[]={VAProfileH264High, VAProfileH264Main, VAProfileH264Baseline, VAProfileH264ConstrainedBaseline};
+    VAProfile profile_list[]={VAProfileH264High, VAProfileH264Main, VAProfileH264ConstrainedBaseline};
     VAEntrypoint *entrypoints;
     int num_entrypoints, slice_entrypoint;
     int support_encode = 0;    
@@ -806,11 +807,6 @@ int QuickSyncEncoderImpl::init_va(const string &va_display)
         exit(1);
     } else {
         switch (h264_profile) {
-            case VAProfileH264Baseline:
-                ip_period = 1;
-                constraint_set_flag |= (1 << 0); /* Annex A.2.1 */
-                h264_entropy_mode = 0;
-                break;
             case VAProfileH264ConstrainedBaseline:
                 constraint_set_flag |= (1 << 0 | 1 << 1); /* Annex A.2.2 */
                 ip_period = 1;
@@ -824,7 +820,7 @@ int QuickSyncEncoderImpl::init_va(const string &va_display)
                 constraint_set_flag |= (1 << 3); /* Annex A.2.4 */
                 break;
             default:
-                h264_profile = VAProfileH264Baseline;
+                h264_profile = VAProfileH264ConstrainedBaseline;
                 ip_period = 1;
                 constraint_set_flag |= (1 << 0); /* Annex A.2.1 */
                 break;
@@ -1656,8 +1652,8 @@ bool QuickSyncEncoderImpl::begin_frame(int64_t pts, int64_t duration, YCbCrLumaC
                        // Create CbCr image.
                        surf->cbcr_egl_image = EGL_NO_IMAGE_KHR;
                        EGLint cbcr_attribs[] = {
-                               EGL_WIDTH, frame_width,
-                               EGL_HEIGHT, frame_height,
+                               EGL_WIDTH, frame_width / 2,
+                               EGL_HEIGHT, frame_height / 2,
                                EGL_LINUX_DRM_FOURCC_EXT, fourcc_code('G', 'R', '8', '8'),
                                EGL_DMA_BUF_PLANE0_FD_EXT, EGLint(buf_info.handle),
                                EGL_DMA_BUF_PLANE0_OFFSET_EXT, EGLint(surf->surface_image.offsets[1]),
@@ -1875,8 +1871,11 @@ void QuickSyncEncoderImpl::encode_thread_func()
 
                        if (frame_type == FRAME_IDR) {
                                // Release any reference frames from the previous GOP.
-                               for (const ReferenceFrame &frame : reference_frames) {
-                                       release_gl_surface(frame.display_number);
+                               {
+                                       unique_lock<mutex> lock(storage_task_queue_mutex);
+                                       for (const ReferenceFrame &frame : reference_frames) {
+                                               release_gl_surface(frame.display_number);
+                                       }
                                }
                                reference_frames.clear();
                                current_ref_frame_num = 0;