[MPlayer-G2-dev]  [RFC] first draft of stream/demux-metadata support (+playlist-infos)
    Fabian Franz 
    FabianFranz at gmx.de
       
    Mon May 26 20:04:40 CEST 2003
    
    
  
Hi,
I slept a while and think I found the different types, that need to be 
supported (supposed playlist-handlers will be complete in demuxer-level too)
To-be-supported Examples:
QT-MOVIE: (or other playlist)
Metadata:
Title: Foo's adventure
Author: Bar Bar cue
Date: 2005
References:
        (Ext-)Reference: 
                url: foo-high-res.mov
                bitrate: 16000
                quality: 9
                --
                url: foo-medi-res.mov
                --
                url: foo-low-res1.mov
                --
                url: foo-low-res2.mov
        (Ext-)Reference:
                url: foo-title2.mov
DVD:
Metadata:
Title: Foo on DVD
Author: Bar Bar Cue
Date: 2005
DVD-META:
Titles: 16
Chapters: 25
Subtitle-Languages: de en uk fr
Audio-Languages: de en
References:
        (Int-)Reference: 
                name: Main-Movie (title1)
                offset: 1656
                (Int-)Reference:
                        name: Chapter 1
                        offset: 1656
                (Int-)Reference:
                        name: Chapter 2
                        offset: 1856
                   ...
        (Int-)Reference:
                name: title2
                offset: 1987
                
CD:
Metadata:
Title: Bar is singing
Author: Foo's hidden microphone
Date: 2008
CD-META:
nb_tracks = 16
length = 00:57:68
References:
        (Int-)Reference:
                name: Foo Title 1
                offset: 108
        (Int-)Reference:
                name: Foo Title 2
                offset: 206
Proposed structures:
-> Metadata as list. (as already implemented)
<SPEC>-META as an struct specific to media.
Reference: (somewaht similar to metadata, which should not be specific to 
demuxer-level)
struct ref_list_s;
typedef struct ref_entry_s
{
  char* name;
  int offset;
  Url_t *URL;
  int bitrate; // perhaps present in Url_t ?
  int quality;
  ...
  int type; // external / internal reference
  ref_list_t* alternatives;
  ref_list_t* sublist;
} ref_entry_t;
typedef struct ref_list_s {
  int num_refs; // number of available entries
  int max_refs; // number of allocated entries 
(if(num_metas>=max_metas)realloc())
  ref_entry_t* refs;
} ref_list_t;
      
So CD is a flat structure, which do not use alternatives or sublist.
MOV can make use of alternatives to allow player an choice.
DVD does make heavy use of sublist, as disk/titles/chapters have a somewaht 
nested strucutre.
One goal in later implementation should be simplicity.
num=add_ext_reference(reflist,name, url) // returns the index ...
add_ext_reference_alternative(reflist,num, name, url, bitrate, quality, ...)
add_ext_reference_alternative(reflist,num, name2, url2, bitrate2, quality2, 
...)
num=add_reference(reflist,dvdname, offset) // returns the index ...
add_reference_sublist(reflist,num, chaptername, offset)
add_reference_sublist(reflist,num, chaptername2, offset2)
Later CONTROL-program can get the data via:
for (i=0;i<reflist.num_refs;i++)
{
  printf("Name: %s\n",reflist.refs[i]->name);
}
Convert it into own playlist/playtree-format and so on...
The whole thing shall be in stream_t stream* as 
meta_t *meta 
{
  metadata_list_t data;
  void* specific_data; // or struct some_specific_s (like stream_priv_s)
  ref_list_t list;
}
or similar.
cu
Fabian
    
    
More information about the MPlayer-G2-dev
mailing list