On Thu, Jul 10, 2014 at 09:31:57PM +0800, Star Brilliant wrote: > Some improvements in lrc_probe. > > Updated patch is attached. > > Thanks.
> Changelog | 1 > doc/general.texi | 1 > libavformat/Makefile | 2 > libavformat/allformats.c | 1 > libavformat/lrc.c | 34 ++++++ > libavformat/lrc.h | 29 +++++ > libavformat/lrcdec.c | 247 > +++++++++++++++++++++++++++++++++++++++++++++++ > libavformat/lrcenc.c | 142 +++++++++++++++++++++++++++ > 8 files changed, 457 insertions(+) > b89208d82122540e5d3c4c5ae4dc7f935ba29e29 > 0001-AVFormat-LRC-demuxer-and-muxer.patch > From 6ad46495be298fc7254676b141378295c2238e69 Mon Sep 17 00:00:00 2001 > From: Star Brilliant <m13...@hotmail.com> > Date: Wed, 9 Jul 2014 14:24:05 +0800 > Subject: [PATCH] AVFormat: LRC demuxer and muxer > > --- > Changelog | 1 + > doc/general.texi | 1 + > libavformat/Makefile | 2 + > libavformat/allformats.c | 1 + > libavformat/lrc.c | 34 +++++++ > libavformat/lrc.h | 29 ++++++ > libavformat/lrcdec.c | 247 > +++++++++++++++++++++++++++++++++++++++++++++++ > libavformat/lrcenc.c | 142 +++++++++++++++++++++++++++ > 8 files changed, 457 insertions(+) > create mode 100644 libavformat/lrc.c > create mode 100644 libavformat/lrc.h > create mode 100644 libavformat/lrcdec.c > create mode 100644 libavformat/lrcenc.c > > diff --git a/Changelog b/Changelog > index fa443dc..75bde5b 100644 > --- a/Changelog > +++ b/Changelog > @@ -29,6 +29,7 @@ version <next>: > - showcqt multimedia filter > - zoompan filter > - signalstats filter > +- LRC demuxer and muxer > > > version 2.2: > diff --git a/doc/general.texi b/doc/general.texi > index 86569a2..c008261 100644 > --- a/doc/general.texi > +++ b/doc/general.texi > @@ -310,6 +310,7 @@ library: > @tab Used by Linux Media Labs MPEG-4 PCI boards > @item LOAS @tab @tab X > @tab contains LATM multiplexed AAC audio > +@item LRC @tab X @tab X > @item LVF @tab @tab X > @item LXF @tab @tab X > @tab VR native stream format, used by Leitch/Harris' video servers. > diff --git a/libavformat/Makefile b/libavformat/Makefile > index ecae4d0..3218c4c 100644 > --- a/libavformat/Makefile > +++ b/libavformat/Makefile > @@ -202,6 +202,8 @@ OBJS-$(CONFIG_LATM_DEMUXER) += rawdec.o > OBJS-$(CONFIG_LATM_MUXER) += latmenc.o rawenc.o > OBJS-$(CONFIG_LMLM4_DEMUXER) += lmlm4.o > OBJS-$(CONFIG_LOAS_DEMUXER) += loasdec.o rawdec.o > +OBJS-$(CONFIG_LRC_DEMUXER) += lrcdec.o lrc.o subtitles.o > +OBJS-$(CONFIG_LRC_MUXER) += lrcenc.o lrc.o > OBJS-$(CONFIG_LVF_DEMUXER) += lvfdec.o > OBJS-$(CONFIG_LXF_DEMUXER) += lxfdec.o > OBJS-$(CONFIG_M4V_DEMUXER) += m4vdec.o rawdec.o > diff --git a/libavformat/allformats.c b/libavformat/allformats.c > index dc5557c..fff05ee 100644 > --- a/libavformat/allformats.c > +++ b/libavformat/allformats.c > @@ -163,6 +163,7 @@ void av_register_all(void) > REGISTER_MUXDEMUX(LATM, latm); > REGISTER_DEMUXER (LMLM4, lmlm4); > REGISTER_DEMUXER (LOAS, loas); > + REGISTER_MUXDEMUX(LRC, lrc); > REGISTER_DEMUXER (LVF, lvf); > REGISTER_DEMUXER (LXF, lxf); > REGISTER_MUXDEMUX(M4V, m4v); > diff --git a/libavformat/lrc.c b/libavformat/lrc.c > new file mode 100644 > index 0000000..67eeede > --- /dev/null > +++ b/libavformat/lrc.c > @@ -0,0 +1,34 @@ > +/* > + * LRC lyrics file format decoder > + * Copyright (c) 2014 StarBrilliant <m13...@hotmail.com> > + * > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 > USA > + */ > + > +#include "metadata.h" > +#include "lrc.h" > + > +const AVMetadataConv ffpriv_lrc_metadata_conv[] = { > + {"ti", "title"}, > + {"al", "album"}, > + {"ar", "artist"}, > + {"au", "author"}, > + {"by", "creator"}, > + {"re", "encoder"}, > + {"ve", "encoder_version"}, > + {0, 0} > +}; > diff --git a/libavformat/lrc.h b/libavformat/lrc.h > new file mode 100644 > index 0000000..93274d5 > --- /dev/null > +++ b/libavformat/lrc.h > @@ -0,0 +1,29 @@ > +/* > + * LRC lyrics file format decoder > + * Copyright (c) 2014 StarBrilliant <m13...@hotmail.com> > + * > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 > USA > + */ > + > +#ifndef AVFORMAT_LRC_H > +#define AVFORMAT_LRC_H > + > +#include "metadata.h" > + > +extern const AVMetadataConv ffpriv_lrc_metadata_conv[]; normally we just use ff_ though ffpriv shouldnt do any harm either > + > +#endif > diff --git a/libavformat/lrcdec.c b/libavformat/lrcdec.c > new file mode 100644 > index 0000000..917fb43 > --- /dev/null > +++ b/libavformat/lrcdec.c > @@ -0,0 +1,247 @@ > +/* > + * LRC lyrics file format decoder > + * Copyright (c) 2014 StarBrilliant <m13...@hotmail.com> > + * > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 > USA > + */ > + > +#include <inttypes.h> > +#include <stdint.h> > +#include <string.h> > + > +#include "avformat.h" > +#include "internal.h" > +#include "lrc.h" > +#include "metadata.h" > +#include "subtitles.h" > +#include "libavutil/bprint.h" > +#include "libavutil/dict.h" > + > +typedef struct LRCContext { > + FFDemuxSubtitlesQueue q; > + int64_t ts_offset; // offset metadata item > +} LRCContext; > + > +static int64_t find_header(const char *p) > +{ > + int64_t offset = 0; > + while(p[offset] && > + p[offset] == ' ' || p[offset] == '\t') { "p[offset] &&" is redundant > + offset++; > + } > + if(p[offset] && p[offset] == '[' && same here > + p[offset + 1] >= 'a' && p[offset + 1] <= 'z') { > + return offset; > + } else { > + return -1; > + } > +} > + > +static int64_t count_ts(const char *p) > +{ > + int64_t offset = 0; > + int in_brackets = 0; > + > + while(p[offset]) { > + if(p[offset] == ' ' || p[offset] == '\t') { > + offset++; > + } else if(p[offset] == '[') { > + offset++; > + in_brackets++; > + } else if (p[offset] == ']' && in_brackets) { > + offset++; > + in_brackets--; > + } else if(in_brackets && > + (p[offset] == ':' || p[offset] == '.' || p[offset] == '-' || > + (p[offset] >= '0' && p[offset] <= '9'))) { > + offset++; > + } else { > + break; > + } > + } while(1) { ... could be used here, the 0 case ends at "break" already [...] > +static int lrc_write_header(AVFormatContext *s) > +{ > + const AVDictionaryEntry *metadata_item; > + > + if(s->nb_streams != 1 || > + s->streams[0]->codec->codec_type != AVMEDIA_TYPE_SUBTITLE) { > + av_log(s, AV_LOG_ERROR, > + "LRC supports only a single subtitle stream.\n"); > + return AVERROR(EINVAL); > + } > + if(s->streams[0]->codec->codec_id != AV_CODEC_ID_SUBRIP && > + s->streams[0]->codec->codec_id != AV_CODEC_ID_TEXT) { > + av_log(s, AV_LOG_ERROR, "Unsupported subtitle codec: %s\n", > + avcodec_get_name(s->streams[0]->codec->codec_id)); > + return AVERROR(EINVAL); > + } > + avpriv_set_pts_info(s->streams[0], 64, 1, 100); > + > + ff_metadata_conv_ctx(s, ffpriv_lrc_metadata_conv, NULL); > + av_dict_set(&s->metadata, "ve", AV_STRINGIFY(LIBAVFORMAT_VERSION), 0); the LIBAVFORMAT_IDENT set by mux.c isnt enough ? if so, this needs a AVFMT_FLAG_BITEXACT check or it would break future regression tests [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB While the State exists there can be no freedom; when there is freedom there will be no State. -- Vladimir Lenin
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel