<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>I have no experience with the NTP timestamp part.</p>
    <p>But I have successfully appended custom metadata to the EXIF of
      JPEG.</p>
    <p>In this way I'm not depend on gstreamer for extracting the
      metadata again.</p>
    <p><br>
    </p>
    <p>You need a jpegenc and a jifmux:</p>
    <div style="color: #d4d4d4;background-color: #1e1e1e;font-family: 'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback';font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;"><div><span style="color: #d4d4d4;">        </span><span style="color: #dcdcaa;">g_string_append_printf</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">pipe_desc</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                               </span><span style="color: #ce9178;">"jpegenc name=</span><span style="color: #9cdcfe;">%s</span><span style="color: #ce9178;"> ! jifmux name=</span><span style="color: #9cdcfe;">%s</span><span style="color: #ce9178;"> ! "</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                               </span><span style="color: #569cd6;">JPEG_ENCODER_NAME</span><span style="color: #d4d4d4;">, </span><span style="color: #569cd6;">JIF_MUX_NAME</span><span style="color: #d4d4d4;">);</span></div></div>
    <p>Then add a pad probe to the jpegenc:</p>
    <div style="color: #d4d4d4;background-color: #1e1e1e;font-family: 'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback';font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;"><div><span style="color: #d4d4d4;">        </span><span style="color: #6a9955;">//add pad probe to jpeg encoder</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">enc</span><span style="color: #d4d4d4;"> = </span><span style="color: #dcdcaa;">get_elem</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">bin</span><span style="color: #d4d4d4;">, </span><span style="color: #569cd6;">JPEG_ENCODER_NAME</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #c586c0;">if</span><span style="color: #d4d4d4;"> (</span><span style="color: #9cdcfe;">enc</span><span style="color: #d4d4d4;"> != </span><span style="color: #569cd6;">NULL</span><span style="color: #d4d4d4;">) {</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #4ec9b0;">GstPad</span><span style="color: #d4d4d4;"> *</span><span style="color: #9cdcfe;">pad</span><span style="color: #d4d4d4;"> = </span><span style="color: #dcdcaa;">gst_element_get_static_pad</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">enc</span><span style="color: #d4d4d4;">, </span><span style="color: #ce9178;">"src"</span><span style="color: #d4d4d4;">);</span></div>
<div><span style="color: #d4d4d4;">                </span><span style="color: #dcdcaa;">gst_pad_add_probe</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">pad</span><span style="color: #d4d4d4;">, </span><span style="color: #4fc1ff;">GST_PAD_PROBE_TYPE_BUFFER</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                                  (</span><span style="color: #4ec9b0;">GstPadProbeCallback</span><span style="color: #d4d4d4;">) </span><span style="color: #dcdcaa;">jpeg_encoder_cb</span><span style="color: #d4d4d4;">, </span><span style="color: #569cd6;">NULL</span><span style="color: #d4d4d4;">, </span><span style="color: #569cd6;">NULL</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #dcdcaa;">gst_object_unref</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">pad</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;">        }</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #dcdcaa;">gst_object_unref</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">enc</span><span style="color: #d4d4d4;">);</span></div></div>
    <p>The callback to attach the metadata using the tagsetter:</p>
    <div style="color: #d4d4d4;background-color: #1e1e1e;font-family: 'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback';font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;"><div><span style="color: #4ec9b0;">GstPadProbeReturn</span></div><div><span style="color: #dcdcaa;">jpeg_encoder_cb</span><span style="color: #d4d4d4;">(</span><span style="color: #4ec9b0;">GstPad</span><span style="color: #d4d4d4;"> *</span><span style="color: #9cdcfe;">pad</span><span style="color: #d4d4d4;">, </span><span style="color: #4ec9b0;">GstPadProbeInfo</span><span style="color: #d4d4d4;"> *</span><span style="color: #9cdcfe;">info</span><span style="color: #d4d4d4;">, </span><span style="color: #4ec9b0;">gpointer</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">user_data</span><span style="color: #d4d4d4;">)</span></div><div><span style="color: #d4d4d4;">{</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #4ec9b0;">GstTagSetter</span><span style="color: #d4d4d4;"> *</span><span style="color: #9cdcfe;">tagsetter</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #4ec9b0;">GstElement</span><span style="color: #d4d4d4;"> *</span><span style="color: #9cdcfe;">mux</span><span style="color: #d4d4d4;">;</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #569cd6;">struct</span><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">Pan355_RPC_Data</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">pos0</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">pos1</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">tar0</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">tar1</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #4ec9b0;">QtecGeometryPoint3d</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">current_xyz</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">target_xyz</span><span style="color: #d4d4d4;">;</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #4ec9b0;">gdouble</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">tof</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #4ec9b0;">QtecGeometryPoint3d</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">cam_loc</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #569cd6;">struct</span><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">Pan355Intrinsics</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">intrinsics</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #569cd6;">struct</span><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">QtecMatrix</span><span style="color: #d4d4d4;"> *</span><span style="color: #9cdcfe;">cam_rot</span><span style="color: #d4d4d4;"> = </span><span style="color: #569cd6;">NULL</span><span style="color: #d4d4d4;">;</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #4ec9b0;">gint</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">width</span><span style="color: #d4d4d4;"> = -</span><span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">height</span><span style="color: #d4d4d4;"> = -</span><span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #4ec9b0;">gdouble</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">ratio_x</span><span style="color: #d4d4d4;"> = </span><span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">ratio_y</span><span style="color: #d4d4d4;"> = </span><span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">cx</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">cy</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">fx</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">fy</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">f_mm</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">px_size_x</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">px_size_y</span><span style="color: #d4d4d4;">;</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #6a9955;">//QTEC_DEBUG("jpeg_encoder_cb");</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">pos0</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">axis</span><span style="color: #d4d4d4;"> = </span><span style="color: #9cdcfe;">tar0</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">axis</span><span style="color: #d4d4d4;"> = </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">pos1</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">axis</span><span style="color: #d4d4d4;"> = </span><span style="color: #9cdcfe;">tar1</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">axis</span><span style="color: #d4d4d4;"> = </span><span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">;</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">mux</span><span style="color: #d4d4d4;"> = </span><span style="color: #dcdcaa;">get_elem</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">bin</span><span style="color: #d4d4d4;">, </span><span style="color: #569cd6;">JIF_MUX_NAME</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #c586c0;">if</span><span style="color: #d4d4d4;"> (!</span><span style="color: #9cdcfe;">mux</span><span style="color: #d4d4d4;">)</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #c586c0;">return</span><span style="color: #d4d4d4;"> </span><span style="color: #4fc1ff;">GST_PAD_PROBE_OK</span><span style="color: #d4d4d4;">;</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">tagsetter</span><span style="color: #d4d4d4;"> = </span><span style="color: #569cd6;">GST_TAG_SETTER</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">mux</span><span style="color: #d4d4d4;">);</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #6a9955;">//get position</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #c586c0;">if</span><span style="color: #d4d4d4;"> (!</span><span style="color: #dcdcaa;">get_axis_pos</span><span style="color: #d4d4d4;">(&</span><span style="color: #9cdcfe;">pos0</span><span style="color: #d4d4d4;">) || !</span><span style="color: #dcdcaa;">get_axis_pos</span><span style="color: #d4d4d4;">(&</span><span style="color: #9cdcfe;">pos1</span><span style="color: #d4d4d4;">) ||</span></div><div><span style="color: #d4d4d4;">                !</span><span style="color: #dcdcaa;">get_xyz_pos</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">pos0</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">angle</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">pos1</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">angle</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">, &</span><span style="color: #9cdcfe;">current_xyz</span><span style="color: #d4d4d4;">) ||</span></div><div><span style="color: #d4d4d4;">                !</span><span style="color: #dcdcaa;">get_axis_params</span><span style="color: #d4d4d4;">(&</span><span style="color: #9cdcfe;">tar0</span><span style="color: #d4d4d4;">) || !</span><span style="color: #dcdcaa;">get_axis_params</span><span style="color: #d4d4d4;">(&</span><span style="color: #9cdcfe;">tar1</span><span style="color: #d4d4d4;">) ||</span></div><div><span style="color: #d4d4d4;">                !</span><span style="color: #dcdcaa;">get_xyz_pos</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">tar0</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">angle</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">tar1</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">angle</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">, &</span><span style="color: #9cdcfe;">target_xyz</span><span style="color: #d4d4d4;">)) {</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #dcdcaa;">gst_tag_setter_add_tags</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">tagsetter</span><span style="color: #d4d4d4;">, </span><span style="color: #4fc1ff;">GST_TAG_MERGE_REPLACE</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                                        </span><span style="color: #569cd6;">GST_TAG_ARTIST</span><span style="color: #d4d4d4;">, </span><span style="color: #ce9178;"><a class="moz-txt-link-rfc2396E" href="mailto:msb@qtec.com">"msb@qtec.com"</a></span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                                        </span><span style="color: #569cd6;">NULL</span><span style="color: #d4d4d4;">);</span></div>
<div><span style="color: #d4d4d4;">                </span><span style="color: #dcdcaa;">gst_object_unref</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">mux</span><span style="color: #d4d4d4;">);</span></div>
<div><span style="color: #d4d4d4;">                </span><span style="color: #c586c0;">return</span><span style="color: #d4d4d4;"> </span><span style="color: #4fc1ff;">GST_PAD_PROBE_OK</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        }</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #dcdcaa;">get_cam_tilt_offset</span><span style="color: #d4d4d4;">(&</span><span style="color: #9cdcfe;">tof</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #dcdcaa;">get_cam_loc</span><span style="color: #d4d4d4;">(&</span><span style="color: #9cdcfe;">cam_loc</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #dcdcaa;">get_cam_intrinsics</span><span style="color: #d4d4d4;">(&</span><span style="color: #9cdcfe;">intrinsics</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">cam_rot</span><span style="color: #d4d4d4;"> = </span><span style="color: #dcdcaa;">get_cam_rot_matrix</span><span style="color: #d4d4d4;">();</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #4ec9b0;">GstCaps</span><span style="color: #d4d4d4;"> *</span><span style="color: #9cdcfe;">caps</span><span style="color: #d4d4d4;"> = </span><span style="color: #dcdcaa;">gst_pad_get_current_caps</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">pad</span><span style="color: #d4d4d4;">);</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #c586c0;">if</span><span style="color: #d4d4d4;"> (</span><span style="color: #9cdcfe;">caps</span><span style="color: #d4d4d4;"> != </span><span style="color: #569cd6;">NULL</span><span style="color: #d4d4d4;">) {</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #4ec9b0;">GstStructure</span><span style="color: #d4d4d4;"> *</span><span style="color: #9cdcfe;">structure</span><span style="color: #d4d4d4;"> = </span><span style="color: #dcdcaa;">gst_caps_get_structure</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">caps</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">);</span></div>
<div><span style="color: #d4d4d4;">                </span><span style="color: #c586c0;">if</span><span style="color: #d4d4d4;"> (</span><span style="color: #9cdcfe;">structure</span><span style="color: #d4d4d4;"> != </span><span style="color: #569cd6;">NULL</span><span style="color: #d4d4d4;">) {</span></div><div><span style="color: #d4d4d4;">                        </span><span style="color: #dcdcaa;">gst_structure_get_int</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">structure</span><span style="color: #d4d4d4;">, </span><span style="color: #ce9178;">"width"</span><span style="color: #d4d4d4;">, &</span><span style="color: #9cdcfe;">width</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;">                        </span><span style="color: #dcdcaa;">gst_structure_get_int</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">structure</span><span style="color: #d4d4d4;">, </span><span style="color: #ce9178;">"height"</span><span style="color: #d4d4d4;">, &</span><span style="color: #9cdcfe;">height</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;">                }</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #dcdcaa;">gst_caps_unref</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">caps</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;">        }</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #6a9955;">//re-scale principal point and pixel size based on MJPEG size</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #c586c0;">if</span><span style="color: #d4d4d4;"> (</span><span style="color: #9cdcfe;">width</span><span style="color: #d4d4d4;"> > </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">)</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #9cdcfe;">ratio_x</span><span style="color: #d4d4d4;"> = </span><span style="color: #569cd6;">FULL_HD_WIDTH</span><span style="color: #d4d4d4;"> / </span><span style="color: #9cdcfe;">width</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #c586c0;">if</span><span style="color: #d4d4d4;"> (</span><span style="color: #9cdcfe;">height</span><span style="color: #d4d4d4;"> > </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">)</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #9cdcfe;">ratio_y</span><span style="color: #d4d4d4;"> = </span><span style="color: #569cd6;">FULL_HD_HEIGHT</span><span style="color: #d4d4d4;"> / </span><span style="color: #9cdcfe;">height</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">cx</span><span style="color: #d4d4d4;"> = </span><span style="color: #9cdcfe;">intrinsics</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">cx</span><span style="color: #d4d4d4;"> / </span><span style="color: #9cdcfe;">ratio_x</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">cy</span><span style="color: #d4d4d4;"> = </span><span style="color: #9cdcfe;">intrinsics</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">cy</span><span style="color: #d4d4d4;"> / </span><span style="color: #9cdcfe;">ratio_y</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">fx</span><span style="color: #d4d4d4;"> = </span><span style="color: #9cdcfe;">intrinsics</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">fx</span><span style="color: #d4d4d4;"> / </span><span style="color: #9cdcfe;">ratio_x</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">fy</span><span style="color: #d4d4d4;"> = </span><span style="color: #9cdcfe;">intrinsics</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">fy</span><span style="color: #d4d4d4;"> / </span><span style="color: #9cdcfe;">ratio_y</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">f_mm</span><span style="color: #d4d4d4;"> = </span><span style="color: #9cdcfe;">intrinsics</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">fx</span><span style="color: #d4d4d4;"> * </span><span style="color: #569cd6;">DECIMATED_PIXEL_SIZE</span><span style="color: #d4d4d4;">(</span><span style="color: #569cd6;">SONY_PIXEL_SIZE</span><span style="color: #d4d4d4;">) / </span><span style="color: #b5cea8;">1000</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">px_size_x</span><span style="color: #d4d4d4;"> = </span><span style="color: #569cd6;">DECIMATED_PIXEL_SIZE</span><span style="color: #d4d4d4;">(</span><span style="color: #569cd6;">SONY_PIXEL_SIZE</span><span style="color: #d4d4d4;">) * </span><span style="color: #9cdcfe;">ratio_x</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #9cdcfe;">px_size_y</span><span style="color: #d4d4d4;"> = </span><span style="color: #569cd6;">DECIMATED_PIXEL_SIZE</span><span style="color: #d4d4d4;">(</span><span style="color: #569cd6;">SONY_PIXEL_SIZE</span><span style="color: #d4d4d4;">) * </span><span style="color: #9cdcfe;">ratio_y</span><span style="color: #d4d4d4;">;</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #4ec9b0;">gchar</span><span style="color: #d4d4d4;"> *</span><span style="color: #9cdcfe;">metadata</span><span style="color: #d4d4d4;"> = </span><span style="color: #dcdcaa;">g_strdup_printf</span><span style="color: #d4d4d4;">(</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #ce9178;">"{</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">Cur_pos</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:{</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">x</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">y</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">z</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">}, "</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #ce9178;">"</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">Tar_pos</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:{</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">x</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">y</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">z</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">}, "</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #ce9178;">"</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">T_base</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:{</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">x</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">y</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">z</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">}, "</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #ce9178;">"</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">R_base</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:[[</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">], [</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">], [</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">]], "</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #ce9178;">"</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">Tilt_offset</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, "</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #ce9178;">"</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">K</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:{</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">cx</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">cy</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">fx</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">fy</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">px_size_x</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">, </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">px_size_y</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">:</span><span style="color: #9cdcfe;">%.3f</span><span style="color: #ce9178;">}}"</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #9cdcfe;">current_xyz</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">x</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">current_xyz</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">current_xyz</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">z</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #9cdcfe;">target_xyz</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">x</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">target_xyz</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">target_xyz</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">z</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #9cdcfe;">cam_loc</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">x</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">cam_loc</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">cam_loc</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">z</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #569cd6;">QTEC_CORE_MATRIX_AT</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">cam_rot</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">),</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #569cd6;">QTEC_CORE_MATRIX_AT</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">cam_rot</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">),</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #569cd6;">QTEC_CORE_MATRIX_AT</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">cam_rot</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">2</span><span style="color: #d4d4d4;">),</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #569cd6;">QTEC_CORE_MATRIX_AT</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">cam_rot</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">),</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #569cd6;">QTEC_CORE_MATRIX_AT</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">cam_rot</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">),</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #569cd6;">QTEC_CORE_MATRIX_AT</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">cam_rot</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">2</span><span style="color: #d4d4d4;">),</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #569cd6;">QTEC_CORE_MATRIX_AT</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">cam_rot</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">2</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">0</span><span style="color: #d4d4d4;">),</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #569cd6;">QTEC_CORE_MATRIX_AT</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">cam_rot</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">2</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">),</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #569cd6;">QTEC_CORE_MATRIX_AT</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">cam_rot</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">2</span><span style="color: #d4d4d4;">, </span><span style="color: #b5cea8;">2</span><span style="color: #d4d4d4;">),</span></div><div><span style="color: #d4d4d4;">                </span><span style="color: #9cdcfe;">tof</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">cx</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">cy</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">fx</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">fy</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">px_size_x</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">px_size_y</span><span style="color: #d4d4d4;">);</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #dcdcaa;">gst_tag_setter_add_tags</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">tagsetter</span><span style="color: #d4d4d4;">, </span><span style="color: #4fc1ff;">GST_TAG_MERGE_REPLACE</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                                </span><span style="color: #569cd6;">GST_TAG_GEO_LOCATION_ELEVATION</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">f_mm</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                                </span><span style="color: #569cd6;">GST_TAG_GEO_LOCATION_LATITUDE</span><span style="color: #d4d4d4;"> , </span><span style="color: #9cdcfe;">pos1</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">angle</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                                </span><span style="color: #569cd6;">GST_TAG_GEO_LOCATION_LONGITUDE</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">pos0</span><span style="color: #d4d4d4;">.</span><span style="color: #9cdcfe;">angle</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                                </span><span style="color: #569cd6;">GST_TAG_ARTIST</span><span style="color: #d4d4d4;">, </span><span style="color: #ce9178;"><a class="moz-txt-link-rfc2396E" href="mailto:msb@qtec.com">"msb@qtec.com"</a></span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                                </span><span style="color: #569cd6;">GST_TAG_DESCRIPTION</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">metadata</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                                </span><span style="color: #569cd6;">NULL</span><span style="color: #d4d4d4;">);</span></div><div><span style="color: #d4d4d4;">        </span><span style="color: #dcdcaa;">g_free</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">metadata</span><span style="color: #d4d4d4;">);</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #dcdcaa;">gst_object_unref</span><span style="color: #d4d4d4;">(</span><span style="color: #9cdcfe;">mux</span><span style="color: #d4d4d4;">);</span></div>
<div><span style="color: #d4d4d4;">        </span><span style="color: #c586c0;">return</span><span style="color: #d4d4d4;"> </span><span style="color: #4fc1ff;">GST_PAD_PROBE_OK</span><span style="color: #d4d4d4;">;</span></div><div><span style="color: #d4d4d4;">}</span></div></div>
    <p>As you can see I'm using the GPS (ELEVATION, LATITUDE, LONGITUDE)
      part of EXIF as well as the ARTIST (as author).</p>
    <p>And then anything else custom has to go into <span style="color:
        #569cd6;">DESCRIPTION</span><span style="color: #d4d4d4;"></span></p>
    <p><br>
    </p>
    <p>Best Regards</p>
    <p>Marianna<br>
    </p>
    <div class="moz-cite-prefix">On 08.12.2021 13.00,
      <a class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel-request@lists.freedesktop.org">gstreamer-devel-request@lists.freedesktop.org</a> wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:mailman.37.1638964803.30359.gstreamer-devel@lists.freedesktop.org">
      <pre class="moz-quote-pre" wrap="">Hi all,
i have a node js application that uses ffmpeg to receive an h264 stream
from a camera and convert to jpeg images.
the timestamp is overimpressed on the image and is extracted with an OCR
(tesseract.js)
My goal is to remove the OCR and extract the NTP timestamp of the frame
directly.
I was told gstreamer has all i need but it seems too difficult.
For now i'm able to build a pipeline to write on file the single jpeg with
gst launch.
The problems i see are
1)extract the NTP timestamp, 2)synchronize with the jpeg,
3)put the timestamp somewhere (maybe metadata?)
4)Compile the application to be standalone without requiring to install
gstreamer

i'm not a developer so i need to know if this is doable for me or i need to
look elsewhere.
Any help is much appreciated
Thanks</pre>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Best regards / Med venlig hilsen
“Marianna Smidth Buschle”</pre>
  </body>
</html>