From: ddennedy Date: Tue, 26 Feb 2008 23:44:48 +0000 (+0000) Subject: avformat/factory.c, producer_avformat.yml, avformat/Makefile: add metadata for produc... X-Git-Url: http://research.m1stereo.tv/gitweb?a=commitdiff_plain;h=6fd86f1596d75ebaa4703ca6e9735813331e5c2f;p=melted avformat/factory.c, producer_avformat.yml, avformat/Makefile: add metadata for producer:avformat. git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@1081 d19143bc-622f-0410-bfdd-b5b2a6649095 --- diff --git a/src/modules/avformat/Makefile b/src/modules/avformat/Makefile index 21524f6..38bfbec 100644 --- a/src/modules/avformat/Makefile +++ b/src/modules/avformat/Makefile @@ -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 diff --git a/src/modules/avformat/factory.c b/src/modules/avformat/factory.c index fe2d65f..2b6d234 100644 --- a/src/modules/avformat/factory.c +++ b/src/modules/avformat/factory.c @@ -20,6 +20,7 @@ #include #include +#include #include @@ -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 index 0000000..958eeb6 --- /dev/null +++ b/src/modules/avformat/producer_avformat.yml @@ -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