gstreamer/mediainfo/README

194 lines
6.5 KiB
Text
Raw Normal View History

2010-10-16 19:43:20 +00:00
= Media detail browser =
The package contains a UI for browsing media files and showing details of the
files.
= Browsing =
- in the preview hook of the file browser we run discover and update the details
- if one has grillo installed we could use grillo sources in addition to local files
- there should be a "open url" menu entry in addition
= Details =
- show container, video-tracks, audio-track, subtitle-trackes, metadata and
parsing messages
- auto-play after updating the details
have a menu command to turn auto-play off
- offer several commands in addition (see below)
2010-10-17 19:35:50 +00:00
example output from commandline tool:
> gst-discoverer -v /home/ensonic/Musik/xotox-hypnocat.mp3
Topology:
audio: audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2, parsed=(boolean)true
Codec:
audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2, parsed=(boolean)true
Additional info:
None
Channels: 2
Sample rate: 44100
Depth: 16
Bitrate: 128000
Max bitrate: 0
Tags:
taglist, audio-codec=(string)"MPEG\ 1\ Audio\,\ Layer\ 3\ \(MP3\)", has-crc=(boolean)false, channel-mode=(string)stereo, bitrate=(uint)128000;
2010-12-15 09:46:08 +00:00
Properties:
Duration: 0:04:00.039125000
Seekable: yes
2010-10-17 19:35:50 +00:00
2010-10-16 19:43:20 +00:00
== compare ==
- dup detail pane and allow to pick a new file
- show differing entries in red
- add a narrow vertical bar between the two details panes and mark blocks with a
delta red
2010-10-25 07:54:07 +00:00
- diffing one (broken) file against several known working files would be nice
- it would build ranges for the group of files (e.g. for the video width)
- it would highlight fields that the are different to any of the working files
2010-10-16 19:43:20 +00:00
== analyse ==
- play the file by using fakesinks and gather statistics:
- bitrate profiles for each a/mediainfo/v track
2010-10-25 07:54:07 +00:00
- media specific:
- audio: volume profile
- video: contrast profile
- show disconts as vertical bars
2010-10-16 19:43:20 +00:00
2010-10-25 07:54:07 +00:00
== structural view/hex view ==
- make parsing elements post structural messages (if enabled via property)
- message would contain:
- stream offset in bytes
- block identifier (e.g. fourcc)
- human readable description (if available)
- flags (e.g. if the block is used or skipped)
- indentation depth
- we would need a way to indicate that e.g. h264parse would be indented below
the containing container block
2010-10-16 19:43:20 +00:00
- a structured hex view would be nice
(somehow align the parse tree with the hexdump)
2010-10-25 07:54:07 +00:00
== unsorted ==
2010-12-16 21:06:57 +00:00
- show named audio channel configurations instead only numbers
e.g. "mono", "stereo", "5.1"
- handle chapters (once the patches are merged)
- tag lists
- if there is a "language-code" in the tags (or subtitles?) use flag icons
2010-11-30 10:20:44 +00:00
- deluge installs some under: /usr/share/pyshared/deluge/data/mediainfo/pixmaps/flags/
2010-12-15 09:46:08 +00:00
- famfamfam-flag-png: locale/usr/share/flags/countries/
- handle album art in tag lists
- geo-tags: map-widget?, link to google-maps?
- artist: links to {last.fm,wikipedia}
2010-12-16 21:06:57 +00:00
- format dates nicely
2010-12-15 09:46:08 +00:00
- show level meters for audio next or below video drawable
2010-10-25 07:54:07 +00:00
2010-11-10 06:50:48 +00:00
== deep scan mode ==
- update fields when playing
- listen for duration messages on the bus
2010-11-30 10:20:44 +00:00
- get bit-rate over time
- specify window size, get min,max,avg bitrate for each window
- gst-mi can draw them as a graph
- get key-frame statistics
- number of keyframes
2010-12-15 09:46:08 +00:00
- min,max,avg keyframe interval
- disconts
2010-11-30 10:20:44 +00:00
- raw data statistics
- audio: level, ...
- video: histogram, ...
2010-11-10 06:50:48 +00:00
2010-12-21 21:09:43 +00:00
= TODO for gstreamer =
- file/stream layout
- from every element we'd like to know what data is processes, what is pushed
further and some metadata about it:
layout {
gsize offset; // in bytes
gsize length; // in bytes
gboolean known; // or an enum: handled, skipped, unknown
gchar *name; // e.g. atom/chunk name
gchar *description; // long description or NULL
enum block_type type; // meta, audio, video, text, ...
};
- offset is not neccesarily easy to determine for later elements, not sure
if we can make it relative
- elements could emit messages with this info
- need a common way to enable it ("post-stream-layout" property)
- we would need a cairo custom widget to draw a table
- one row per element
- each row contains colored segments
2010-11-03 08:34:57 +00:00
= TODO for discoverer =
2010-11-30 10:20:44 +00:00
- add deep-scan mode (see above)
2010-12-15 09:46:08 +00:00
- add a mode property: quick-scan, deep-scan
(or just a boolean for deep-scan that is false by default)
- in deep-scan, don't stop on handle_message::GST_MESSAGE_ASYNC_DONE
- in deep-scan we need pad-probes for encoded data pads (to get bitrates)
- uridecodebin_pad_added_cb() has raw pads :/
- look at uridecodebin_element_added_cb()
- the pads on uri-decodebin are sufficient to get keyframes and disconts
2010-11-03 08:34:57 +00:00
- get duration per stream
- this would need individual queries on the demuxer src pads
2010-11-10 06:50:48 +00:00
- or duration as part of per stream tags
2010-12-21 21:09:43 +00:00
- errors/warnings about files/stream processing
- we'd like to know about fixable, unfixable issues in the file/stream
- many elements do this already
- the pipeline and thus the bus is internal to discoverer, so it would be nice
if it could gather the messages and offer them
- having them globaly should be enough
2010-11-10 06:50:48 +00:00
2010-12-15 09:46:08 +00:00
= discoverer workflow =
== sync quick-scan ==
app disco
--- -----
| discover_uri() |
|--------------------->|
| done |
|<---------------------|
|
== async quick-scan ==
app disco
--- -----
| discover_uri_async() |
|--------------------->|
| ... |
| discover_uri_async() |
|--------------------->|
| start() |
|--------------------->|
| ::discovered |
|<---------------------|
| ... |
| ::discovered |
|<---------------------|
| ::finisheded |
|<---------------------|
|
== sync deep-scan ==
- same as "sync quick-scan", no intermediate result
== async deep-scan ==
- same as "async quick-scan", but each discovered signal is followed by an
"analyzed" signal with detailed information
app disco
--- -----
| discover_uri_async() |
|--------------------->|
| ... |
| discover_uri_async() |
|--------------------->|
| start() |
|--------------------->|
| ::discovered |
|<---------------------|
| ::analzeded |
|<---------------------|
| ... |
| ::discovered |
|<---------------------|
| ::analzeded |
|<---------------------|
| ::finisheded |
|<---------------------|
|