]>
Commit | Line | Data |
---|---|---|
30ed4bf8 JR |
1 | --- OpenSceneGraph-3.5.1/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp~ 2015-06-01 15:40:20.000000000 +0200 |
2 | +++ OpenSceneGraph-3.5.1/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp 2016-03-21 11:37:09.380644409 +0100 | |
3 | @@ -226,9 +226,12 @@ | |
4 | // Open codec | |
5 | if (avcodec_open2(m_context, p_codec, NULL) < 0) | |
6 | throw std::runtime_error("avcodec_open() failed"); | |
7 | - | |
8 | +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(55, 0, 0) | |
9 | m_context->get_buffer = avcodec_default_get_buffer; | |
10 | m_context->release_buffer = avcodec_default_release_buffer; | |
11 | +#else | |
12 | + m_context->get_buffer2 = avcodec_default_get_buffer2; | |
13 | +#endif | |
14 | ||
15 | } | |
16 | ||
17 | --- OpenSceneGraph-3.5.1/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp.orig 2016-03-21 11:37:53.888177241 +0100 | |
18 | +++ OpenSceneGraph-3.5.1/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp 2016-03-21 11:54:04.889892930 +0100 | |
19 | @@ -71,7 +71,7 @@ | |
20 | findAspectRatio(); | |
21 | ||
22 | // Find out whether we support Alpha channel | |
23 | - m_alpha_channel = (m_context->pix_fmt == PIX_FMT_YUVA420P); | |
24 | + m_alpha_channel = (m_context->pix_fmt == AV_PIX_FMT_YUVA420P); | |
25 | ||
26 | // Find out the framerate | |
27 | #if LIBAVCODEC_VERSION_MAJOR >= 56 | |
28 | @@ -95,20 +95,24 @@ | |
29 | throw std::runtime_error("avcodec_open() failed"); | |
30 | ||
31 | // Allocate video frame | |
32 | - m_frame.reset(avcodec_alloc_frame()); | |
33 | + m_frame.reset(av_frame_alloc()); | |
34 | ||
35 | // Allocate converted RGB frame | |
36 | - m_frame_rgba.reset(avcodec_alloc_frame()); | |
37 | - m_buffer_rgba[0].resize(avpicture_get_size(PIX_FMT_RGB24, width(), height())); | |
38 | + m_frame_rgba.reset(av_frame_alloc()); | |
39 | + m_buffer_rgba[0].resize(avpicture_get_size(AV_PIX_FMT_RGB24, width(), height())); | |
40 | m_buffer_rgba[1].resize(m_buffer_rgba[0].size()); | |
41 | ||
42 | // Assign appropriate parts of the buffer to image planes in m_frame_rgba | |
43 | - avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[0])[0], PIX_FMT_RGB24, width(), height()); | |
44 | + avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[0])[0], AV_PIX_FMT_RGB24, width(), height()); | |
45 | ||
46 | // Override get_buffer()/release_buffer() from codec context in order to retrieve the PTS of each frame. | |
47 | m_context->opaque = this; | |
48 | +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(55, 0, 0) | |
49 | m_context->get_buffer = getBuffer; | |
50 | m_context->release_buffer = releaseBuffer; | |
51 | +#else | |
52 | + m_context->get_buffer2 = getBuffer; | |
53 | +#endif | |
54 | } | |
55 | ||
56 | ||
57 | @@ -267,8 +271,8 @@ | |
58 | #ifdef USE_SWSCALE | |
59 | if (m_swscale_ctx==0) | |
60 | { | |
61 | - m_swscale_ctx = sws_getContext(src_width, src_height, (PixelFormat) src_pix_fmt, | |
62 | - src_width, src_height, (PixelFormat) dst_pix_fmt, | |
63 | + m_swscale_ctx = sws_getContext(src_width, src_height, (AVPixelFormat) src_pix_fmt, | |
64 | + src_width, src_height, (AVPixelFormat) dst_pix_fmt, | |
65 | /*SWS_BILINEAR*/ SWS_BICUBIC, NULL, NULL, NULL); | |
66 | } | |
67 | ||
68 | @@ -315,14 +319,14 @@ | |
69 | AVPicture * const dst = (AVPicture *) m_frame_rgba.get(); | |
70 | ||
71 | // Assign appropriate parts of the buffer to image planes in m_frame_rgba | |
72 | - avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[m_writeBuffer])[0], PIX_FMT_RGB24, width(), height()); | |
73 | + avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[m_writeBuffer])[0], AV_PIX_FMT_RGB24, width(), height()); | |
74 | ||
75 | // Convert YUVA420p (i.e. YUV420p plus alpha channel) using our own routine | |
76 | ||
77 | - if (m_context->pix_fmt == PIX_FMT_YUVA420P) | |
78 | + if (m_context->pix_fmt == AV_PIX_FMT_YUVA420P) | |
79 | yuva420pToRgba(dst, src, width(), height()); | |
80 | else | |
81 | - convert(dst, PIX_FMT_RGB24, src, m_context->pix_fmt, width(), height()); | |
82 | + convert(dst, AV_PIX_FMT_RGB24, src, m_context->pix_fmt, width(), height()); | |
83 | ||
84 | // Wait 'delay' seconds before publishing the picture. | |
85 | int i_delay = static_cast<int>(delay * 1000000 + 0.5); | |
86 | @@ -349,7 +353,7 @@ | |
87 | ||
88 | void FFmpegDecoderVideo::yuva420pToRgba(AVPicture * const dst, AVPicture * const src, int width, int height) | |
89 | { | |
90 | - convert(dst, PIX_FMT_RGB24, src, m_context->pix_fmt, width, height); | |
91 | + convert(dst, AV_PIX_FMT_RGB24, src, m_context->pix_fmt, width, height); | |
92 | ||
93 | const size_t bpp = 4; | |
94 | ||
95 | @@ -369,6 +373,7 @@ | |
96 | ||
97 | ||
98 | ||
99 | +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(55, 0, 0) | |
100 | int FFmpegDecoderVideo::getBuffer(AVCodecContext * const context, AVFrame * const picture) | |
101 | { | |
102 | const FFmpegDecoderVideo * const this_ = reinterpret_cast<const FFmpegDecoderVideo*>(context->opaque); | |
103 | @@ -381,15 +386,31 @@ | |
104 | ||
105 | return result; | |
106 | } | |
107 | +#else | |
108 | +int FFmpegDecoderVideo::getBuffer(AVCodecContext * const context, AVFrame * const picture, int flags) | |
109 | +{ | |
110 | + const FFmpegDecoderVideo * const this_ = reinterpret_cast<const FFmpegDecoderVideo*>(context->opaque); | |
111 | + | |
112 | + const int result = avcodec_default_get_buffer2(context, picture, flags); | |
113 | + int64_t * p_pts = reinterpret_cast<int64_t*>( av_malloc(sizeof(int64_t)) ); | |
114 | + | |
115 | + *p_pts = this_->m_packet_pts; | |
116 | + picture->opaque = p_pts; | |
117 | + | |
118 | + return result; | |
119 | +} | |
120 | +#endif | |
121 | ||
122 | ||
123 | ||
124 | void FFmpegDecoderVideo::releaseBuffer(AVCodecContext * const context, AVFrame * const picture) | |
125 | { | |
126 | +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(55, 0, 0) | |
127 | if (picture != 0) | |
128 | av_freep(&picture->opaque); | |
129 | ||
130 | avcodec_default_release_buffer(context, picture); | |
131 | +#endif | |
132 | } | |
133 | ||
134 | ||
135 | --- OpenSceneGraph-3.5.1/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.hpp.orig 2016-03-21 11:55:42.261200729 +0100 | |
136 | +++ OpenSceneGraph-3.5.1/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.hpp 2016-03-21 11:55:58.214746802 +0100 | |
137 | @@ -94,7 +94,11 @@ | |
138 | int src_pix_fmt, int src_width, int src_height); | |
139 | ||
140 | ||
141 | +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(55, 0, 0) | |
142 | static int getBuffer(AVCodecContext * context, AVFrame * picture); | |
143 | +#else | |
144 | + static int getBuffer(AVCodecContext * context, AVFrame * picture, int flags); | |
145 | +#endif | |
146 | static void releaseBuffer(AVCodecContext * context, AVFrame * picture); | |
147 | ||
148 | PacketQueue & m_packets; | |
149 | --- OpenSceneGraph-3.5.1/src/osgPlugins/ffmpeg/FFmpegParameters.cpp~ 2013-09-05 12:04:56.000000000 +0200 | |
150 | +++ OpenSceneGraph-3.5.1/src/osgPlugins/ffmpeg/FFmpegParameters.cpp 2016-03-21 11:56:17.585004570 +0100 | |
151 | @@ -19,7 +19,7 @@ | |
152 | #include <libavutil/pixdesc.h> | |
153 | } | |
154 | ||
155 | -inline PixelFormat osg_av_get_pix_fmt(const char *name) { return av_get_pix_fmt(name); } | |
156 | +inline AVPixelFormat osg_av_get_pix_fmt(const char *name) { return av_get_pix_fmt(name); } | |
157 | ||
158 | ||
159 | namespace osgFFmpeg { |