]> git.sesse.net Git - nageru/blobdiff - h264encode.cpp
Rename compressor to level_compressor.
[nageru] / h264encode.cpp
index eb6faf3c4ec20a4c81fdde303c75b48dfc068761..ad688fc58ee87b59e5232b94ad75bc4c24b36ad1 100644 (file)
@@ -7,11 +7,11 @@
 #include <assert.h>
 #include <epoxy/egl.h>
 #include <libavcodec/avcodec.h>
-#include <libavformat/avio.h>
-#include <libavutil/mathematics.h>
+#include <libavutil/channel_layout.h>
+#include <libavutil/frame.h>
 #include <libavutil/rational.h>
+#include <libavutil/samplefmt.h>
 #include <libdrm/drm_fourcc.h>
-#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <va/va_enc_h264.h>
 #include <va/va_x11.h>
 #include <condition_variable>
+#include <cstdint>
+#include <memory>
 #include <mutex>
 #include <queue>
 #include <string>
 #include <thread>
+#include <utility>
 
 #include "context.h"
 #include "httpd.h"
@@ -343,12 +346,12 @@ static void sps_rbsp(bitstream *bs)
         bitstream_put_ui(bs, 1, 1); /* video_signal_type_present_flag */
         {
             bitstream_put_ui(bs, 5, 3);  /* video_format (5 = Unspecified) */
-            bitstream_put_ui(bs, 1, 1);  /* video_full_range_flag */
+            bitstream_put_ui(bs, 0, 1);  /* video_full_range_flag */
             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, 1, 8);  /* transfer_characteristics (1 = BT.709) */
-                bitstream_put_ui(bs, 1, 8);  /* matrix_coefficients (1 = BT.709) */
+                bitstream_put_ui(bs, 2, 8);  /* transfer_characteristics (2 = unspecified, since we use sRGB) */
+                bitstream_put_ui(bs, 6, 8);  /* matrix_coefficients (6 = BT.601/SMPTE 170M) */
             }
         }
         bitstream_put_ui(bs, 0, 1); /* chroma_loc_info_present_flag */
@@ -1865,7 +1868,7 @@ H264Encoder::H264Encoder(QSurface *surface, int width, int height, HTTPD *httpd)
 
        copy_thread = std::thread([this]{
                //SDL_GL_MakeCurrent(window, context);
-               QOpenGLContext *context = create_context();
+               QOpenGLContext *context = create_context(this->surface);
                eglBindAPI(EGL_OPENGL_API);
                if (!make_current(context, this->surface)) {
                        printf("display=%p surface=%p context=%p curr=%p err=%d\n", eglGetCurrentDisplay(), this->surface, context, eglGetCurrentContext(),