ffdec: zero copy support for edges
[gstreamer-omap:gst-ffmpeg.git] / ext / ffmpeg / gstffmpegutils.h
1 /* GStreamer
2  * Copyright (C) <2009> Edward Hervey <bilboed@bilboed.com>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 #ifndef __GST_FFMPEG_UTILS_H__
21 #define __GST_FFMPEG_UTILS_H__
22
23 #ifdef HAVE_FFMPEG_UNINSTALLED
24 #include <avcodec.h>
25 #else
26 #include <libavcodec/avcodec.h>
27 #endif
28 #include <gst/gst.h>
29
30
31 #define EDGE_WIDTH avcodec_get_edge_width()
32
33
34 /*
35  *Get the size of an picture
36  */
37 int
38 gst_ffmpeg_avpicture_get_size (int pix_fmt, int width, int height,
39         gboolean use_border);
40
41 /*
42  * Fill in pointers in an AVPicture, aligned by 4 (required by X).
43  */
44
45 int
46 gst_ffmpeg_avpicture_fill (AVPicture * picture,
47                            uint8_t *   ptr,
48                            enum PixelFormat pix_fmt,
49                            int         width,
50                            int         height,
51                            gboolean    use_border);
52
53 /*
54  * Convert from/to a GStreamer <-> FFMpeg timestamp.
55  */
56 static inline guint64
57 gst_ffmpeg_time_ff_to_gst (gint64 pts, AVRational base)
58 {
59   guint64 out;
60
61   if (pts == AV_NOPTS_VALUE){
62     out = GST_CLOCK_TIME_NONE;
63   } else {
64     AVRational bq = { 1, GST_SECOND };
65     out = av_rescale_q (pts, base, bq);
66   }
67
68   return out;
69 }
70
71 static inline gint64
72 gst_ffmpeg_time_gst_to_ff (guint64 time, AVRational base)
73 {
74   gint64 out;
75
76   if (!GST_CLOCK_TIME_IS_VALID (time) || base.num == 0) {
77     out = AV_NOPTS_VALUE;
78   } else {
79     AVRational bq = { 1, GST_SECOND };
80     out = av_rescale_q (time, bq, base);
81   }
82
83   return out;
84 }
85
86 void 
87 gst_ffmpeg_init_pix_fmt_info(void);
88
89 int
90 gst_ffmpeg_auto_max_threads(void);
91
92 G_CONST_RETURN gchar *
93 gst_ffmpeg_get_codecid_longname (enum CodecID codec_id);
94
95 gint
96 av_smp_format_depth(enum SampleFormat smp_fmt);
97
98 GstBuffer *
99 new_aligned_buffer (gint size, GstCaps * caps);
100
101 #endif /* __GST_FFMPEG_UTILS_H__ */