diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/libav/Makefile.am | 8 | ||||
-rw-r--r-- | ext/libav/gstavauddec.c (renamed from ext/libav/gstavdec.c) | 80 | ||||
-rw-r--r-- | ext/libav/gstavauddec.h | 107 | ||||
-rw-r--r-- | ext/libav/gstavaudenc.c (renamed from ext/libav/gstavenc.c) | 2 | ||||
-rw-r--r-- | ext/libav/gstavaudenc.h (renamed from ext/libav/gstavenc.h) | 2 | ||||
-rw-r--r-- | ext/libav/gstavviddec.c | 63 | ||||
-rw-r--r-- | ext/libav/gstavviddec.h | 92 | ||||
-rw-r--r-- | ext/libav/gstavvidenc.h | 2 |
8 files changed, 211 insertions, 145 deletions
diff --git a/ext/libav/Makefile.am b/ext/libav/Makefile.am index a5928ac..52f197e 100644 --- a/ext/libav/Makefile.am +++ b/ext/libav/Makefile.am @@ -10,9 +10,9 @@ libgstlibav_la_SOURCES = gstav.c \ gstavprotocol.c \ gstavcodecmap.c \ gstavutils.c \ - gstavenc.c \ + gstavaudenc.c \ gstavvidenc.c \ - gstavdec.c \ + gstavauddec.c \ gstavviddec.c \ gstavcfg.c \ gstavdemux.c \ @@ -40,7 +40,9 @@ noinst_HEADERS = \ gstav.h \ gstavcodecmap.h \ gstavutils.h \ - gstavenc.h \ + gstavauddec.h \ + gstavviddec.h \ + gstavaudenc.h \ gstavvidenc.h \ gstavcfg.h \ gstavpipe.h diff --git a/ext/libav/gstavdec.c b/ext/libav/gstavauddec.c index 93a7808..66e59dc 100644 --- a/ext/libav/gstavdec.c +++ b/ext/libav/gstavauddec.c @@ -31,77 +31,10 @@ #include "gstav.h" #include "gstavcodecmap.h" #include "gstavutils.h" +#include "gstavauddec.h" GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE); -typedef struct _GstFFMpegAudDec GstFFMpegAudDec; - -#define MAX_TS_MASK 0xff - -/* for each incomming buffer we keep all timing info in a structure like this. - * We keep a circular array of these structures around to store the timing info. - * The index in the array is what we pass as opaque data (to pictures) and - * pts (to parsers) so that ffmpeg can remember them for us. */ -typedef struct -{ - gint idx; - GstClockTime dts; - GstClockTime pts; - GstClockTime duration; - gint64 offset; -} GstTSInfo; - -struct _GstFFMpegAudDec -{ - GstElement element; - - /* We need to keep track of our pads, so we do so here. */ - GstPad *srcpad; - GstPad *sinkpad; - - /* decoding */ - AVCodecContext *context; - gboolean opened; - - /* current output format */ - gint channels, samplerate, depth; - GstAudioChannelPosition ffmpeg_layout[64], gst_layout[64]; - - gboolean discont; - gboolean clear_ts; - - /* for tracking DTS/PTS */ - GstClockTime next_out; - - /* parsing */ - gboolean turnoff_parser; /* used for turning off aac raw parsing - * See bug #566250 */ - AVCodecParserContext *pctx; - GstBuffer *pcache; - - /* clipping segment */ - GstSegment segment; - - GstTSInfo ts_info[MAX_TS_MASK + 1]; - gint ts_idx; - - /* reverse playback queue */ - GList *queued; - - /* prevent reopening the decoder on GST_EVENT_CAPS when caps are same as last time. */ - GstCaps *last_caps; -}; - -typedef struct _GstFFMpegAudDecClass GstFFMpegAudDecClass; - -struct _GstFFMpegAudDecClass -{ - GstElementClass parent_class; - - AVCodec *in_plugin; - GstPadTemplate *srctempl, *sinktempl; -}; - #define GST_TS_INFO_NONE &ts_info_none static const GstTSInfo ts_info_none = { -1, -1, -1, -1 }; @@ -129,17 +62,6 @@ gst_ts_info_get (GstFFMpegAudDec * dec, gint idx) return &dec->ts_info[idx]; } -#define GST_TYPE_FFMPEGDEC \ - (gst_ffmpegauddec_get_type()) -#define GST_FFMPEGDEC(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FFMPEGDEC,GstFFMpegAudDec)) -#define GST_FFMPEGAUDDEC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FFMPEGDEC,GstFFMpegAudDecClass)) -#define GST_IS_FFMPEGDEC(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FFMPEGDEC)) -#define GST_IS_FFMPEGAUDDEC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FFMPEGDEC)) - /* A number of function prototypes are given so we can refer to them later. */ static void gst_ffmpegauddec_base_init (GstFFMpegAudDecClass * klass); static void gst_ffmpegauddec_class_init (GstFFMpegAudDecClass * klass); diff --git a/ext/libav/gstavauddec.h b/ext/libav/gstavauddec.h new file mode 100644 index 0000000..1b38430 --- /dev/null +++ b/ext/libav/gstavauddec.h @@ -0,0 +1,107 @@ +/* GStreamer + * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ +#ifndef __GST_FFMPEGAUDDEC_H__ +#define __GST_FFMPEGAUDDEC_H__ + +G_BEGIN_DECLS + +#include <gst/gst.h> +#include <libavcodec/avcodec.h> + +#define MAX_TS_MASK 0xff + +/* for each incomming buffer we keep all timing info in a structure like this. + * We keep a circular array of these structures around to store the timing info. + * The index in the array is what we pass as opaque data (to pictures) and + * pts (to parsers) so that ffmpeg can remember them for us. */ +typedef struct +{ + gint idx; + GstClockTime dts; + GstClockTime pts; + GstClockTime duration; + gint64 offset; +} GstTSInfo; + +typedef struct _GstFFMpegAudDec GstFFMpegAudDec; +struct _GstFFMpegAudDec +{ + GstElement element; + + /* We need to keep track of our pads, so we do so here. */ + GstPad *srcpad; + GstPad *sinkpad; + + /* decoding */ + AVCodecContext *context; + gboolean opened; + + /* current output format */ + gint channels, samplerate, depth; + GstAudioChannelPosition ffmpeg_layout[64], gst_layout[64]; + + gboolean discont; + gboolean clear_ts; + + /* for tracking DTS/PTS */ + GstClockTime next_out; + + /* parsing */ + gboolean turnoff_parser; /* used for turning off aac raw parsing + * See bug #566250 */ + AVCodecParserContext *pctx; + GstBuffer *pcache; + + /* clipping segment */ + GstSegment segment; + + GstTSInfo ts_info[MAX_TS_MASK + 1]; + gint ts_idx; + + /* reverse playback queue */ + GList *queued; + + /* prevent reopening the decoder on GST_EVENT_CAPS when caps are same as last time. */ + GstCaps *last_caps; +}; + +typedef struct _GstFFMpegAudDecClass GstFFMpegAudDecClass; + +struct _GstFFMpegAudDecClass +{ + GstElementClass parent_class; + + AVCodec *in_plugin; + GstPadTemplate *srctempl, *sinktempl; +}; + +#define GST_TYPE_FFMPEGDEC \ + (gst_ffmpegauddec_get_type()) +#define GST_FFMPEGDEC(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FFMPEGDEC,GstFFMpegAudDec)) +#define GST_FFMPEGAUDDEC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FFMPEGDEC,GstFFMpegAudDecClass)) +#define GST_IS_FFMPEGDEC(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FFMPEGDEC)) +#define GST_IS_FFMPEGAUDDEC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FFMPEGDEC)) + +G_END_DECLS + +#endif diff --git a/ext/libav/gstavenc.c b/ext/libav/gstavaudenc.c index 26a7a30..ccffbb9 100644 --- a/ext/libav/gstavenc.c +++ b/ext/libav/gstavaudenc.c @@ -35,7 +35,7 @@ #include "gstav.h" #include "gstavcodecmap.h" #include "gstavutils.h" -#include "gstavenc.h" +#include "gstavaudenc.h" #define DEFAULT_AUDIO_BITRATE 128000 diff --git a/ext/libav/gstavenc.h b/ext/libav/gstavaudenc.h index 4665303..370ac13 100644 --- a/ext/libav/gstavenc.h +++ b/ext/libav/gstavaudenc.h @@ -26,7 +26,9 @@ G_BEGIN_DECLS +#include <gst/gst.h> #include <gst/base/gstadapter.h> +#include <libavcodec/avcodec.h> typedef struct _GstFFMpegAudEnc GstFFMpegAudEnc; diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c index 6b7d6ce..852f133 100644 --- a/ext/libav/gstavviddec.c +++ b/ext/libav/gstavviddec.c @@ -35,73 +35,12 @@ #include "gstav.h" #include "gstavcodecmap.h" #include "gstavutils.h" +#include "gstavviddec.h" GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE); -typedef struct _GstFFMpegVidDec GstFFMpegVidDec; - #define MAX_TS_MASK 0xff -struct _GstFFMpegVidDec -{ - GstVideoDecoder parent; - - GstVideoCodecState *input_state; - GstVideoCodecState *output_state; - - /* decoding */ - AVCodecContext *context; - AVFrame *picture; - gboolean opened; - - /* current context */ - enum PixelFormat ctx_pix_fmt; - gint ctx_width; - gint ctx_height; - gint ctx_par_n; - gint ctx_par_d; - gint ctx_ticks; - gint ctx_time_d; - gint ctx_time_n; - gint ctx_interlaced; - - guint8 *padded; - guint padded_size; - - gboolean current_dr; /* if direct rendering is enabled */ - - /* some properties */ - enum AVDiscard skip_frame; - gint lowres; - gboolean direct_rendering; - gboolean debug_mv; - int max_threads; - - gboolean is_realvideo; - - GstCaps *last_caps; -}; - -typedef struct _GstFFMpegVidDecClass GstFFMpegVidDecClass; - -struct _GstFFMpegVidDecClass -{ - GstVideoDecoderClass parent_class; - - AVCodec *in_plugin; -}; - -#define GST_TYPE_FFMPEGDEC \ - (gst_ffmpegviddec_get_type()) -#define GST_FFMPEGDEC(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FFMPEGDEC,GstFFMpegVidDec)) -#define GST_FFMPEGVIDDEC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FFMPEGDEC,GstFFMpegVidDecClass)) -#define GST_IS_FFMPEGDEC(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FFMPEGDEC)) -#define GST_IS_FFMPEGVIDDEC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FFMPEGDEC)) - #define DEFAULT_LOWRES 0 #define DEFAULT_SKIPFRAME 0 #define DEFAULT_DIRECT_RENDERING TRUE diff --git a/ext/libav/gstavviddec.h b/ext/libav/gstavviddec.h new file mode 100644 index 0000000..47db3b9 --- /dev/null +++ b/ext/libav/gstavviddec.h @@ -0,0 +1,92 @@ +/* GStreamer + * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ +#ifndef __GST_FFMPEGVIDDEC_H__ +#define __GST_FFMPEGVIDDEC_H__ + +G_BEGIN_DECLS + +#include <gst/gst.h> +#include <gst/video/video.h> +#include <gst/video/gstvideodecoder.h> +#include <libavcodec/avcodec.h> + +typedef struct _GstFFMpegVidDec GstFFMpegVidDec; +struct _GstFFMpegVidDec +{ + GstVideoDecoder parent; + + GstVideoCodecState *input_state; + GstVideoCodecState *output_state; + + /* decoding */ + AVCodecContext *context; + AVFrame *picture; + gboolean opened; + + /* current context */ + enum PixelFormat ctx_pix_fmt; + gint ctx_width; + gint ctx_height; + gint ctx_par_n; + gint ctx_par_d; + gint ctx_ticks; + gint ctx_time_d; + gint ctx_time_n; + gint ctx_interlaced; + + guint8 *padded; + guint padded_size; + + gboolean current_dr; /* if direct rendering is enabled */ + + /* some properties */ + enum AVDiscard skip_frame; + gint lowres; + gboolean direct_rendering; + gboolean debug_mv; + int max_threads; + + gboolean is_realvideo; + + GstCaps *last_caps; +}; + +typedef struct _GstFFMpegVidDecClass GstFFMpegVidDecClass; + +struct _GstFFMpegVidDecClass +{ + GstVideoDecoderClass parent_class; + + AVCodec *in_plugin; +}; + +#define GST_TYPE_FFMPEGDEC \ + (gst_ffmpegviddec_get_type()) +#define GST_FFMPEGDEC(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FFMPEGDEC,GstFFMpegVidDec)) +#define GST_FFMPEGVIDDEC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FFMPEGDEC,GstFFMpegVidDecClass)) +#define GST_IS_FFMPEGDEC(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FFMPEGDEC)) +#define GST_IS_FFMPEGVIDDEC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FFMPEGDEC)) + +G_END_DECLS + +#endif diff --git a/ext/libav/gstavvidenc.h b/ext/libav/gstavvidenc.h index 98a980a..857f9e4 100644 --- a/ext/libav/gstavvidenc.h +++ b/ext/libav/gstavvidenc.h @@ -26,7 +26,9 @@ G_BEGIN_DECLS +#include <gst/gst.h> #include <gst/video/gstvideoencoder.h> +#include <libavcodec/avcodec.h> typedef struct _GstFFMpegVidEnc GstFFMpegVidEnc; |