]> git.sesse.net Git - mlt/commitdiff
avformat/factory.c, producer_avformat.yml, avformat/Makefile: add metadata for produc...
authorddennedy <ddennedy@d19143bc-622f-0410-bfdd-b5b2a6649095>
Tue, 26 Feb 2008 23:44:48 +0000 (23:44 +0000)
committerddennedy <ddennedy@d19143bc-622f-0410-bfdd-b5b2a6649095>
Tue, 26 Feb 2008 23:44:48 +0000 (23:44 +0000)
git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@1081 d19143bc-622f-0410-bfdd-b5b2a6649095

src/modules/avformat/Makefile
src/modules/avformat/factory.c
src/modules/avformat/producer_avformat.yml [new file with mode: 0644]

index 21524f6bb83d776186ede8c1bdc451e0e4edd558..38bfbecf117d5f469cc6a352f61ce9a0a7b288fc 100644 (file)
@@ -36,27 +36,33 @@ SRCS := $(OBJS:.o=.c)
 all:   $(TARGET)
 
 $(LOCAL_FFMPEG_OBJS):
-               if [ $(LOCAL_FFMPEG) ] ; then \
-                       $(MAKE) -C ffmpeg lib ; \
-               fi
+       if [ $(LOCAL_FFMPEG) ] ; then \
+               $(MAKE) -C ffmpeg lib ; \
+       fi
 
 $(TARGET): $(OBJS) $(LOCAL_FFMPEG_OBJS)
-               $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
+       $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
 
 depend:        $(SRCS)
-               if [ $(LOCAL_FFMPEG) ] ; then $(MAKE) -C ffmpeg dep ; fi
-               $(CC) -MM $(CFLAGS) $^ 1>.depend
+       if [ $(LOCAL_FFMPEG) ] ; then $(MAKE) -C ffmpeg dep ; fi
+       $(CC) -MM $(CFLAGS) $^ 1>.depend
 
 distclean:     clean
-               if [ $(LOCAL_FFMPEG) ] ; then $(MAKE) -C ffmpeg distclean ; fi
-               rm -f .depend
+       if [ $(LOCAL_FFMPEG) ] ; then $(MAKE) -C ffmpeg distclean ; fi
+       rm -f .depend
 
 clean: 
-               #if [ $(LOCAL_FFMPEG) ] ; then $(MAKE) -C ffmpeg clean ; fi
-               rm -f $(OBJS) $(TARGET)
+       #if [ $(LOCAL_FFMPEG) ] ; then $(MAKE) -C ffmpeg clean ; fi
+       rm -f $(OBJS) $(TARGET)
 
 install: all
-               install -m 755 $(TARGET) "$(DESTDIR)$(libdir)/mlt"
+       install -m 755 $(TARGET) "$(DESTDIR)$(libdir)/mlt"
+       install -d "$(DESTDIR)$(prefix)/share/mlt/avformat"
+       install -m 644 producer_avformat.yml "$(DESTDIR)$(prefix)/share/mlt/avformat"
+
+uninstall:
+       rm "$(DESTDIR)$(libdir)/mlt/libmltavformat$(LIBSUF)"
+       rm -rf "$(DESTDIR)$(prefix)/share/mlt/avformat" 
 
 ifneq ($(wildcard .depend),)
 include .depend
index fe2d65f2e487ecd63770b44c9200992af3128626..2b6d234ba4028bb3e0653acbbedabdd4b65b663f 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <string.h>
 #include <pthread.h>
+#include <limits.h>
 
 #include <framework/mlt.h>
 
@@ -113,6 +114,31 @@ static void *create_service( mlt_profile profile, mlt_service_type type, const c
        return NULL;
 }
 
+static mlt_properties avformat_metadata( mlt_service_type type, const char *id, void *data )
+{
+       char file[ PATH_MAX ];
+       char *service_type = NULL;
+       switch ( type )
+       {
+               case consumer_type:
+                       service_type = "consumer";
+                       break;
+               case filter_type:
+                       service_type = "filter";
+                       break;
+               case producer_type:
+                       service_type = "producer";
+                       break;
+               case transition_type:
+                       service_type = "transition";
+                       break;
+               default:
+                       return NULL;
+       }
+       snprintf( file, PATH_MAX, "%s/avformat/%s_%s.yml", mlt_environment( "MLT_DATA" ), service_type, id );
+       return mlt_properties_parse_yaml( file );
+}
+
 MLT_REPOSITORY
 {
        MLT_REGISTER( consumer_type, "avformat", create_service );
@@ -121,4 +147,6 @@ MLT_REPOSITORY
        MLT_REGISTER( filter_type, "avcolor_space", create_service );
        MLT_REGISTER( filter_type, "avdeinterlace", create_service );
        MLT_REGISTER( filter_type, "avresample", create_service );
+       
+       MLT_REGISTER_METADATA( producer_type, "avformat", avformat_metadata, NULL );
 }
diff --git a/src/modules/avformat/producer_avformat.yml b/src/modules/avformat/producer_avformat.yml
new file mode 100644 (file)
index 0000000..958eeb6
--- /dev/null
@@ -0,0 +1,169 @@
+schema version: 0.1
+type: producer # consumer, filter, producer, or transition
+identifier: avformat
+title: FFmpeg Reader
+version: 0.2.5
+copyright: Copyright (C) 2003-2008 Ushodaya Enterprises Limited
+license: LGPL
+language: en
+url: http://www.ffmpeg.org/
+creator: Charles Yates
+contributor:
+  - Dan Dennedy
+tags:
+  - Audio # this may produce audio
+  - Video # this may produce video
+description: Read an audio and/or video file using FFmpeg
+icon:
+  filename: avformat/producer.png # relative to $MLT_DATA/modules/
+  content-type: image/png
+  content-encoding: base64 # could also be hex or none if inline SVG
+  content: |
+    iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
+    WXMAAAsSAAALEgHS3X78AAAAB3RJTUUH1gsBEgMLZIL+swAAAB10RVh0Q29tbWVudABDcmVhdGVk
+    IHdpdGggVGhlIEdJTVDvZCVuAAAEgUlEQVQ4y2VUSWwbZRT+5p/xP4v3eIntceLEThOylKgkB070
+    UAUOCNFDFYkIVeqBijMHQKiCAwLEDbVIPVQCUalFQggph6pUoWKRWoS6RCGJ04biOG7sOI638TJe
+    xjM/FwwRfKf3vve99+kd3uNubNxgVb0Km2W7Tbt06fQLpwv4G8u3k6/88nvJcXYhnJ+dGfsRR/Dl
+    8tqpfKkZJ736d++cf6nU53Nra0utTOarVrMpdCj9XFhJr2C1sQq1pZ6ac8zNAljpi7ezzc+e5Lvx
+    je29H8rlyk8DA14GAOl05tT1n6tf39uqBM69GFgAsNjvaezsvKVfuyZkKxXIi4tvknn/PCQi4cA4
+    QMQf+aIv3Nvbm0sVTGe9zfDg8eGxUrk83689eFQcyhStQLluYG+/NNfny6VSsLW5Ge3pOjSHAy2e
+    /4TwjP84KAfBKRzW99f59G7aAQCVav20SZQAtdlQbfGxteTuNACkd/dsguR8W9NNiKKEVFbjisUi
+    BQAtnz8rFAq+LgAWDjN/IpEkk97JzYQjAdkhI2fkwtVG9X0AWN+pwTA5iJSH1qEoaMZC8tFjfv3J
+    IckcdiYNk0GUZVRbXKipt5YAoP7wYZDXNKHOGKR4fCs+NbVGBpwDt3zw3VEUBbqo437qvjuXy7kr
+    HbtqWQzUJgC8Ar2Dpe1UXpgZC763W+RAOAaR2tAxRTmV3kvsJJPjSrf7umEYqAoC1NnZVCAY3CLD
+    6nBpfnC+4hJc4B08DGqc1xr1l5126RzAIHAWqCjjj1wb8eHQq9uZ6nS9a4PAmaACD8bLWN16itrG
+    hoJ8Ptw2TVjRKAZjsWUAIABACHk3RmOQ7BIyegbpg/1oqWGBoAc0U5BFAt20o1CqXSk26YLZM8Aa
+    u5AEAwKV4XQNLHpGRq5zpRJ0QuCdmUGpUPgGAAQAoKBPJ5wTyDfzKLMyGMGntRZAmIHxMA/TTnDA
+    e3FvM+siXhfMdgXjIQbmUpCvMjTa7fFG5imUdhtNSYIcCCxHx8Y6/2zgUTwNq2Nd8FIvYAHFch1d
+    RmHjuhhVfdnjI1LPYVeQaw3gsMZAmYYTk+oT1SdBkiSU6z3U6k30AHR9PrhU9WYoHP7XYHR41Jpw
+    TxSDQhAuzgXLtIMQG0RioFwuX3IrwiWPnUByDsKyGPxKB5S3Phj0UkgiRdMQ0FYcqBECFgj8GY7F
+    7vZvg/QDl+S66mg5fg2IATDBC45jkPgOJhODLa8dN4d8BJQKYN06RgfF/eNTibRpWVcdsg2MV1An
+    FJrbDfXEiWxEVdf/ZxCPxVvTnmkjqgzB4p0gMGGnPUyMjUANupNusXNHpDxYt4wR1XtrKBq9a3W0
+    B047hSg7ofUIxMlJePz+K0d/FjmahLyh146rzyUNw0Jby8LGWvckSbwcjUayx1RpzWZWELR3jZln
+    Eh8CwDFVgcLr4HpNVDtMi588ecEbCHx7dKZwNBkODed+W318Zipk3Rx1iTG9GbwYiUQMAAj53Zef
+    H2u/Ua16L4ZCgykA8A94vn/W1DdH3dK0wIdXwkNDH+E/+Avfv/E5LPIz8wAAAABJRU5ErkJggg==
+
+notes: Implementation or additional usage notes go here.
+bugs: # this can be just for documentation, or the tool may disclose it to help user avoid pitfalls
+  - Audio sync discrepancy with some content.
+  - Not all libavformat supported formats are seekable.
+  - >
+    Seeking is not always accurate. Sometimes it doesn't seek to I-frames so you
+    may get junk for a few frames.
+  - >
+    Fails to play beyond first frame of video of sources with PTS not starting
+    at 0 (video4linux).
+
+parameters:
+  - identifier: argument # 'argument' is a reserved name for a value supplied to the factory
+    title: File  # the title can be used as a label for the widget
+    type: string
+    description: |
+      A file name specification or URL in the form:
+      [{protocol}|{format}]:{resource}[?{format-parameter}[&{format-parameter}...]]
+      For example, video4linux:/dev/video1?width:320&height:240
+      Note: on the bash command line, & must be escaped as '\&'.
+      Also, note the use of ':' instead of '=' for parameters.
+      Use 'ffmpeg -formats' to see a list of supported protocols and formats.
+    readonly: no
+    required: yes
+    mutable: no
+    widget: fileopen # could provide a button to use a file-open dialog 
+
+  - identifier: audio_index # the name is the mlt_properties name
+    title: Audio Index
+    type: integer
+    # the description can be used in a tool tip
+    description: Choose the index of audio stream to use (-1 is off)
+    readonly: no
+    mutable: no
+    minimum: -1
+    # when maximum not specified, the scalar limit is used
+    default: 0
+    widget: spinner
+
+  - identifier: video_index
+    title: Video Index
+    type: integer
+    description: Choose the index of video stream to use (-1 is off)
+    readonly: no
+    mutable: no
+    minimum: -1
+    default: 0
+    widget: spinner
+
+  - identifier: in
+    title: In Point
+    type: time # time is not implemented, but it will correspond to the mlt_position replacement
+    description: Set the start time offset to use within the clip
+    readonly: no
+    mutable: no
+    minimum: 0
+    default: 0
+    widget: timecode # this is a special form of time value/code entry (e.g. see Kino)
+
+  - identifier: out
+    title: Out Point
+    type: time
+    description: Set the ending time offset to use within the clip
+    readonly: no
+    minimum: 0
+    mutable: no
+    widget: timecode # as opposed to time, which could be confused for a wallclock-style time widget
+
+  - identifier: threads
+    title: Decoding Threads
+    type: integer
+    description: Choose the number of threads to use in the decoder(s)
+    readonly: no
+    mutable: no
+    minimum: 0
+    maximum: 4
+    default: 1
+    widget: spinner
+    unit: threads # the unit is a label that appears after the widget
+
+  - identifier: force_aspect_ratio
+    title: Sample Aspect Ratio
+    type: float
+    description: Optionally override a (mis)detected aspect ratio
+    readonly: no
+    mutable: yes
+    minimum: 0.001 # just a UI suggestion
+    maximum: 9.999 # just a suggestion
+    # no default property means it should be blank in the UI and not applied unless provided
+
+  - identifier: resource
+    title: File
+    type: string
+    description: file or protocol specification
+    readonly: yes
+
+  - identifier: source_fps
+    title: Frame Rate
+    type: float
+    scale: 2 # scale is the number of digits to display after the decimal point
+    description: the framerate of the resource
+    readonly: yes
+    unit: frames/second
+
+  - identifier: aspect_ratio
+    title: Sample Aspect Ratio
+    type: float
+    description: >
+      The sample aspect ratio of the resource.
+      This is determined on every frame read.
+    readonly: yes
+
+  - identifier: length
+    title: Duration
+    type: time
+    description: duration
+    readonly: yes
+    widget: timecode
+
+  - identifier: seekable
+    title: Supports Seek
+    type: integer
+    description: if the resource can seek
+    readonly: yes