mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-27 02:30:35 +00:00
87c7a4648b
Original commit message from CVS: * configure.ac * ext/metadata/README: * ext/metadata/metadataexif.c: * ext/metadata/metadatatags.c: * ext/metadata/metadatatags.h: Start using core geo tags (bump req). Fix handling of location references. * tests/check/Makefile.am: Sort blacklisted elements and remove moved ones. Add new test. * tests/check/pipelines/metadata.c: Add first tests for metadata element. * tests/icles/metadata_editor.c: Move free to correct place.
106 lines
6.7 KiB
Text
106 lines
6.7 KiB
Text
### design proposal for metadata mux and parser ###
|
|
|
|
## use cases ##
|
|
|
|
1- Create metadata
|
|
|
|
[ App send tag events to the pipeline ]
|
|
|| /\
|
|
|| ||
|
|
|| jpegenc send tag messages like (width, height and compression info)
|
|
|| ||
|
|
\/ ||
|
|
+---------+ +---------+ +-------------+ +----------+
|
|
| v4l2src | -> | jpegenc | -> | metadatamux | -> | filesink |
|
|
+---------+ +---------+ +-------------+ +----------+
|
|
|
|
* elements like videoscale should also send (width and height tags)
|
|
* should metadatamux get info from caps (width and height) and use if not receive a event with such tags?
|
|
|
|
|
|
2- View metadata
|
|
|
|
+---------+ +---------------+ +---------+ +-------------+
|
|
| filesrc | -> | metadataparse | -> | jpegdec | -> | xvimagesink |
|
|
+---------+ +---------------+ +---------+ +-------------+
|
|
|
|
or
|
|
|
|
+--> whole chunk send as event to next element
|
|
|
|
|
+---------+ +---------------+ +----------+
|
|
| filesrc | -> | metadataparse | -> | fakesink |
|
|
+---------+ +---------------+ +----------+
|
|
||
|
|
\/
|
|
1- individual tags send as messages (what about not mapped tags??)
|
|
2- whole chunk send as message (probably the application will ignore this)
|
|
|
|
* in any case metadataparse strips out metadata chunks (different from current implementation)
|
|
|
|
|
|
3- Modify (add, change, delete tags)
|
|
|
|
+--> whole chunk send as event to next element -- ... --+
|
|
| |
|
|
| V
|
|
+---------+ +---------------+ +-------------+ +----------+
|
|
| filesrc | -> | metadataparse | --------------- ... --------------> | metadatamux | -> | filesink |
|
|
+---------+ +---------------+ +-------------+ +----------+
|
|
/\ ||
|
|
|| \/
|
|
|| 1- individual tags send as messages (what about not mapped tags??) ==============\\
|
|
|| 2- whole chunk send as message (probably the application will ignore this) ||
|
|
|| ||
|
|
[ App send tag events to the pipeline ] <=======================================================//
|
|
|
|
* metadataparse strips out metadata chunks (different from current implementation)
|
|
* application receives individual tag messages (what about not mapped ones?)
|
|
* the application only send events back to the pipeline for the tags the application wants to modify or keep.
|
|
The tags not sent will not be included in metadata chunks
|
|
* the metadatamux modify the whole chunk event received before to just keep the individual tags sent by application
|
|
* the metadatamux could have a property to say if it should remove or keep tags not sent by application.
|
|
|
|
Obs: By looking at the proposed design (1- view and 2- modify) seems that the metadataparse and metadatamux should not know about mapped tags.
|
|
Only the application map the tags to/from metadata specific format. This is because, if you notice, only tags sent by application will be keep
|
|
on new file.
|
|
|
|
|
|
4- Convert (for example from jpeg to png)
|
|
|
|
+--> whole chunk send as event to next element -- ... --+
|
|
| |
|
|
| V
|
|
+---------+ +---------------+ +-------------+ +----------+
|
|
| filesrc | -> | metadataparse | -> | jpegdec | -> ... -> | pngenc | -> | metadatamux | -> | filesink |
|
|
+---------+ +---------------+ +-------------+ +----------+
|
|
/\ ||
|
|
|| \/
|
|
|| 1- individual tags send as messages (what about not mapped tags??) ==============\\
|
|
|| 2- whole chunk send as message (probably the application will ignore this) ||
|
|
|| ||
|
|
[ App send tag events to the pipeline ] <=======================================================//
|
|
|
|
* in this case the application set the metadatamux property to always keep the tags by default (application don't not need to send tag events)
|
|
* metadatamux needs additional smartness to check what tags still does make sense (some from original jpeg may not make sense anymore)
|
|
* if the image is resized, the videoscale should send messages to the application with new width (in the same way pngenc should also) and the
|
|
application could send width and height tag events to the pipeline
|
|
* should metadatamux get info from caps (width and height) and use if not receive a event with such tags?
|
|
|
|
|
|
Testing
|
|
GST_DEBUG="*:2,metadata*:4"
|
|
gst-launch videotestsrc num-buffers=1 ! jpegenc ! taginject tags="geo-location-latitude=66.1,geo-location-longitude=22.5,geo-location-elevation=10.3" ! metadatamux ! filesink location="meta_test_ppp.jpeg"
|
|
gst-launch videotestsrc num-buffers=1 ! jpegenc ! taginject tags="geo-location-latitude=66.1,geo-location-longitude=22.5,geo-location-elevation=-10.3" ! metadatamux ! filesink location="meta_test_ppn.jpeg"
|
|
gst-launch videotestsrc num-buffers=1 ! jpegenc ! taginject tags="geo-location-latitude=66.1,geo-location-longitude=-22.5,geo-location-elevation=10.3" ! metadatamux ! filesink location="meta_test_pnp.jpeg"
|
|
gst-launch videotestsrc num-buffers=1 ! jpegenc ! taginject tags="geo-location-latitude=66.1,geo-location-longitude=-22.5,geo-location-elevation=-10.3" ! metadatamux ! filesink location="meta_test_pnn.jpeg"
|
|
gst-launch videotestsrc num-buffers=1 ! jpegenc ! taginject tags="geo-location-latitude=-66.1,geo-location-longitude=22.5,geo-location-elevation=10.3" ! metadatamux ! filesink location="meta_test_npp.jpeg"
|
|
gst-launch videotestsrc num-buffers=1 ! jpegenc ! taginject tags="geo-location-latitude=-66.1,geo-location-longitude=22.5,geo-location-elevation=-10.3" ! metadatamux ! filesink location="meta_test_npn.jpeg"
|
|
gst-launch videotestsrc num-buffers=1 ! jpegenc ! taginject tags="geo-location-latitude=-66.1,geo-location-longitude=-22.5,geo-location-elevation=10.3" ! metadatamux ! filesink location="meta_test_nnp.jpeg"
|
|
gst-launch videotestsrc num-buffers=1 ! jpegenc ! taginject tags="geo-location-latitude=-66.1,geo-location-longitude=-22.5,geo-location-elevation=-10.3" ! metadatamux ! filesink location="meta_test_nnn.jpeg"
|
|
|
|
exiv2 -pt pr meta_test_ppp.jpeg | grep "Exif.GPSInfo"
|
|
exif meta_test_ppp.jpeg
|
|
|
|
gst-launch -t filesrc location="meta_test_ppp.jpeg" ! metadatademux ! fakesink
|
|
|