vaapi_h264: Add source version identifier as unregistered SEI
authorMark Thompson <sw@jkqxz.net>
Wed, 18 May 2016 09:19:07 +0000 (10:19 +0100)
committerMark Thompson <sw@jkqxz.net>
Thu, 9 Jun 2016 20:15:39 +0000 (21:15 +0100)
Contains the libavcodec version, the VAAPI version and the libva
driver vendor string.

libavcodec/vaapi_encode_h264.c

index d991469..a288980 100644 (file)
@@ -606,6 +606,30 @@ static void vaapi_encode_h264_write_pic_timing(PutBitContext *pbc,
     }
 }
 
+static void vaapi_encode_h264_write_identifier(PutBitContext *pbc,
+                                               VAAPIEncodeContext *ctx,
+                                               VAAPIEncodePicture *pic)
+{
+    const char *lavc   = LIBAVCODEC_IDENT;
+    const char *vaapi  = VA_VERSION_S;
+    const char *driver = vaQueryVendorString(ctx->hwctx->display);
+    char tmp[256];
+    int i;
+
+    // Random (version 4) ISO 11578 UUID.
+    uint8_t uuid[16] = {
+        0x59, 0x94, 0x8b, 0x28, 0x11, 0xec, 0x45, 0xaf,
+        0x96, 0x75, 0x19, 0xd4, 0x1f, 0xea, 0xa9, 0x4d,
+    };
+
+    for (i = 0; i < 16; i++)
+        u(8, uuid[i], uuid_iso_iec_11578);
+
+    snprintf(tmp, sizeof(tmp), "%s / VAAPI %s / %s", lavc, vaapi, driver);
+    for (i = 0; i < sizeof(tmp) && tmp[i]; i++)
+        u(8, tmp[i], user_data_payload_byte);
+}
+
 static void vaapi_encode_h264_write_sei(PutBitContext *pbc,
                                         VAAPIEncodeContext *ctx,
                                         VAAPIEncodePicture *pic)
@@ -633,6 +657,11 @@ static void vaapi_encode_h264_write_sei(PutBitContext *pbc,
                 continue;
             write_payload = &vaapi_encode_h264_write_pic_timing;
             break;
+        case SEI_TYPE_USER_DATA_UNREGISTERED:
+            if (pic->encode_order != 0)
+                continue;
+            write_payload = &vaapi_encode_h264_write_identifier;
+            break;
         default:
             continue;
         }