Skip to content

Commit 6fb5f18

Browse files
authored
Removes use of deprecated APIs (#30)
Co-authored-by: bjornvolcker <[email protected]>
1 parent 7678c7e commit 6fb5f18

File tree

3 files changed

+59
-57
lines changed

3 files changed

+59
-57
lines changed

apps/signer/gst-plugin/gstsigning.c

Lines changed: 57 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -164,55 +164,46 @@ create_buffer_with_current_time(GstSigning *signing)
164164
return buf;
165165
}
166166

167-
static void
168-
free_nalu_data(gpointer data)
169-
{
170-
signed_video_nalu_data_free(data);
171-
}
172-
173-
/* Prepend NALUs according to results from Signed Video lib calls. Returns the number of NALUs
174-
* that were prepended to |current_au|, or -1 on error. */
167+
/* Prepend seis fetched from Signed Video lib.
168+
* Returns the number of nalus that were prepended to @current_au,
169+
* or -1 on error. */
175170
static gint
176-
prepend_nalus(GstSigning *signing, GstBuffer *current_au)
171+
get_and_add_sei(GstSigning *signing, GstBuffer * current_au, gint idx, const guint8 * peek_nalu, gsize peek_nalu_size)
177172
{
178-
SignedVideoReturnCode sv_rc = SV_UNKNOWN_FAILURE;
179-
signed_video_nalu_to_prepend_t nalu_to_prepend = {0};
173+
SignedVideoReturnCode sv_rc;
180174
gint prepend_count = 0;
181-
182-
sv_rc = signed_video_get_nalu_to_prepend(signing->priv->signed_video, &nalu_to_prepend);
183-
while (sv_rc == SV_OK && nalu_to_prepend.prepend_instruction != SIGNED_VIDEO_PREPEND_NOTHING) {
184-
gpointer data = nalu_to_prepend.nalu_data;
185-
gsize size = nalu_to_prepend.nalu_data_size;
175+
guint8 *sei = NULL;
176+
gsize sei_size = 0;
177+
178+
/* Brief description of API. For more details see the public header file.
179+
* SignedVideoReturnCode
180+
* signed_video_get_sei(signed_video_t *self, uint8_t **sei, size_t *sei_size,
181+
* unsigned *payload_offset, const uint8_t *peek_nalu,
182+
* size_t peek_nalu_size, unsigned *num_pending_seis); */
183+
sv_rc = signed_video_get_sei (signing->priv->signed_video, &sei, &sei_size, NULL, peek_nalu, peek_nalu_size, NULL);
184+
while (sv_rc == SV_OK && sei_size > 0 && sei) {
186185
GstMemory *prepend_mem;
187186

188-
// Write size into NALU header. The size value should be the data size, minus the size of the
189-
// size value itself
190-
GST_WRITE_UINT32_BE(data, size - sizeof(guint32));
191-
192-
GST_DEBUG_OBJECT(signing, "create a %" G_GSIZE_FORMAT "bytes nalu to prepend", size);
193-
prepend_mem = gst_memory_new_wrapped(0, data, size, 0, size, data, free_nalu_data);
194-
195-
switch (nalu_to_prepend.prepend_instruction) {
196-
case SIGNED_VIDEO_PREPEND_NALU:
197-
GST_DEBUG_OBJECT(signing, "prepend nalu to current AU");
198-
gst_buffer_prepend_memory(current_au, prepend_mem);
199-
prepend_count++;
200-
break;
201-
default:
202-
GST_FIXME_OBJECT(
203-
signing, "unsupported prepend instruction %d", nalu_to_prepend.prepend_instruction);
204-
break;
205-
}
187+
/* Write size into nalu header. The size value should be the data size,
188+
* minus the size of the size value itself. */
189+
GST_WRITE_UINT32_BE(sei, (guint32)(sei_size - sizeof(guint32)));
190+
191+
GST_DEBUG_OBJECT(signing, "preped sei of size %" G_GSIZE_FORMAT " to current AU", sei_size);
192+
prepend_mem = gst_memory_new_wrapped(0, sei, sei_size, 0, sei_size, sei, g_free);
193+
gst_buffer_insert_memory(current_au, idx, prepend_mem);
194+
prepend_count++;
206195

207-
sv_rc = signed_video_get_nalu_to_prepend(signing->priv->signed_video, &nalu_to_prepend);
196+
sv_rc = signed_video_get_sei(signing->priv->signed_video, &sei, &sei_size, NULL, peek_nalu, peek_nalu_size, NULL);
208197
}
209198

210-
if (sv_rc != SV_OK) goto get_nalu_failed;
199+
if (sv_rc != SV_OK) {
200+
goto get_sei_failed;
201+
}
211202

212203
return prepend_count;
213204

214-
get_nalu_failed:
215-
GST_ERROR_OBJECT(signing, "signed_video_get_nalu_to_prepend failed");
205+
get_sei_failed:
206+
GST_ERROR_OBJECT(signing, "signed_video_get_sei failed");
216207
return -1;
217208
}
218209

@@ -224,7 +215,7 @@ gst_signing_transform_ip(GstBaseTransform *trans, GstBuffer *buf)
224215
guint idx = 0;
225216
GstMemory *nalu_mem = NULL;
226217
GstMapInfo map_info;
227-
gint prepend_count = 0;
218+
gboolean got_sei = false;
228219

229220
priv->last_pts = GST_BUFFER_PTS(buf);
230221
// last_pts is an GstClockTime object, which is measured in nanoseconds.
@@ -242,6 +233,26 @@ gst_signing_transform_ip(GstBaseTransform *trans, GstBuffer *buf)
242233
goto map_failed;
243234
}
244235

236+
/* SEIs generated by the Signed Video lib should be passed in as any nalu. The reason
237+
* for this is that not all are signed and hence 'floating around' in the stream.
238+
* Therefore, pull and add them before adding the current nalu. */
239+
gint add_count = get_and_add_sei(signing, buf, idx, &(map_info.data[4]), map_info.size - 4);
240+
if (add_count < 0) {
241+
GST_ELEMENT_ERROR(signing, STREAM, FAILED, ("failed to add nalus"), (NULL));
242+
goto get_and_add_sei_failed;
243+
}
244+
if (add_count > 0) {
245+
gst_memory_unmap(nalu_mem, &map_info);
246+
/* Get the newly added seis. They need to be added for signing like any other
247+
* Bitstream Unit. */
248+
nalu_mem = gst_buffer_peek_memory(buf, idx);
249+
if (G_UNLIKELY(!gst_memory_map(nalu_mem, &map_info, GST_MAP_READ))) {
250+
GST_ELEMENT_ERROR(signing, RESOURCE, FAILED, ("Failed to map memory"), (NULL));
251+
goto map_failed;
252+
}
253+
got_sei = true;
254+
}
255+
245256
// Depending on bitstream format the start code is optional, hence libsigned-video supports
246257
// both. Therefore, since the start code in the pipeline temporarily may have been replaced by
247258
// the picture data size this format is violated. To pass in valid input data, skip the first
@@ -254,19 +265,12 @@ gst_signing_transform_ip(GstBaseTransform *trans, GstBuffer *buf)
254265
goto add_nalu_failed;
255266
}
256267

257-
prepend_count = prepend_nalus(signing, buf);
258-
if (prepend_count < 0) {
259-
GST_ELEMENT_ERROR(signing, STREAM, FAILED, ("failed to prepend nalus"), (NULL));
260-
goto prepend_nalus_failed;
261-
}
262-
263268
gst_memory_unmap(nalu_mem, &map_info);
264269

265-
idx += prepend_count; // Move past prepended nalus
266270
idx++; // Go to next nalu
267271
}
268272

269-
if (prepend_count > 0) {
273+
if (got_sei) {
270274
// Push an event to produce a message saying SEIs have been added.
271275
GstStructure *structure = gst_structure_new(
272276
SIGNING_STRUCTURE_NAME, SIGNING_FIELD_NAME, G_TYPE_STRING, "signed", NULL);
@@ -275,11 +279,11 @@ gst_signing_transform_ip(GstBaseTransform *trans, GstBuffer *buf)
275279
GST_ELEMENT_ERROR(signing, STREAM, FAILED, ("failed to push message"), (NULL));
276280
}
277281
}
278-
GST_DEBUG_OBJECT(signing, "push AU with %d nalus", gst_buffer_n_memory(buf));
282+
GST_DEBUG_OBJECT(signing, "push AU with %d Bitstream Units", gst_buffer_n_memory(buf));
279283

280284
return GST_FLOW_OK;
281285

282-
prepend_nalus_failed:
286+
get_and_add_sei_failed:
283287
add_nalu_failed:
284288
gst_memory_unmap(nalu_mem, &map_info);
285289
map_failed:
@@ -298,8 +302,8 @@ push_access_unit_at_eos(GstSigning *signing)
298302
}
299303

300304
au = create_buffer_with_current_time(signing);
301-
if (prepend_nalus(signing, au) < 0) {
302-
GST_ERROR_OBJECT(signing, "failed to prepend nalus");
305+
if (get_and_add_sei(signing, au, 0, NULL, 0) < 0) {
306+
GST_ERROR_OBJECT(signing, "failed to get SEIs");
303307
goto prepend_failed;
304308
}
305309

@@ -363,13 +367,11 @@ setup_signing(GstSigning *signing, GstCaps *caps)
363367
GST_ERROR_OBJECT(signing, "could not create Signed Video object");
364368
goto create_failed;
365369
}
366-
if (signed_video_generate_private_key(
367-
SIGN_ALGO_ECDSA, PATH_TO_KEY_FILES, &private_key, &private_key_size) != SV_OK) {
370+
if (signed_video_generate_ecdsa_private_key(PATH_TO_KEY_FILES, &private_key, &private_key_size) != SV_OK) {
368371
GST_DEBUG_OBJECT(signing, "failed to generate pem file");
369372
goto generate_private_key_failed;
370373
}
371-
if (signed_video_set_private_key(
372-
priv->signed_video, SIGN_ALGO_ECDSA, private_key, private_key_size) != SV_OK) {
374+
if (signed_video_set_private_key_new(priv->signed_video, private_key, private_key_size) != SV_OK) {
373375
GST_DEBUG_OBJECT(signing, "failed to set private key content");
374376
goto set_private_key_failed;
375377
}

apps/validator/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -528,10 +528,10 @@ on_source_message(GstBus __attribute__((unused)) *bus, GstMessage *message, Vali
528528
}
529529
gint num_unsigned_gops = (data->invalid_gops || data->valid_gops_with_missing || data->valid_gops) ? 0 : data->no_sign_gops;
530530
if (is_unsigned) {
531-
fprintf(f, "Number of unsigned NAL Units: %u\n", data->auth_report->accumulated_validation.number_of_received_nalus);
531+
fprintf(f, "Number of unsigned Bitstream Units: %u\n", data->auth_report->accumulated_validation.number_of_received_nalus);
532532
} else {
533533
fprintf(f, "Number of valid GOPs: %d\n", data->valid_gops);
534-
fprintf(f, "Number of valid GOPs with missing NALUs: %d\n", data->valid_gops_with_missing);
534+
fprintf(f, "Number of valid GOPs with missing BUs: %d\n", data->valid_gops_with_missing);
535535
fprintf(f, "Number of invalid GOPs: %d\n", data->invalid_gops);
536536
fprintf(f, "Number of GOPs without signature: %d\n", num_unsigned_gops);
537537
}

test-files/signed_test_h264.mp4

-5 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)