History

lavf: remove the libnut library wrapper

libnut is outdated and not developed anymore, all nut developments happens in this repo, so users are getting mislead

Rostislav Pehlivanov committed 9 years ago

Commit a3deeaa1 parent e091b9b6 files · +1 −334Browse files

Unified · Split

6 files
  1. Changelog +1 −0
  2. MAINTAINERS +0 −1
  3. configure +0 −6
  4. libavformat/Makefile +0 −2
  5. libavformat/allformats.c +0 −1
  6. libavformat/libnut.c +0 −324
Changelog+1−0
@@ -14,6 +14,7 @@ version <next>: · 13 unmodified lines
14- librsvg support for svg rasterization14- librsvg support for svg rasterization
15- crossfeed audio filter15- crossfeed audio filter
16- spec compliant VP9 muxing support in MP416- spec compliant VP9 muxing support in MP4
17- remove the libnut muxer/demuxer wrappers
17 18
18version 3.3:19version 3.3:
19- CrystalHD decoder moved to new decode API20- CrystalHD decoder moved to new decode API
MAINTAINERS+0−1
@@ -416,7 +416,6 @@ Muxers/Demuxers: · 415 unmodified lines
416 iss.c Stefan Gehrer416 iss.c Stefan Gehrer
417 jvdec.c Peter Ross417 jvdec.c Peter Ross
418 libmodplug.c Clément Bœsch418 libmodplug.c Clément Bœsch
419 libnut.c Oded Shimon
420 libopenmpt.c Josh de Kock419 libopenmpt.c Josh de Kock
421 lmlm4.c Ivo van Poorten420 lmlm4.c Ivo van Poorten
422 lvfdec.c Paul B Mahol421 lvfdec.c Paul B Mahol
configure+0−6
@@ -234,8 +234,6 @@ External library support: · 233 unmodified lines
234 --enable-libkvazaar enable HEVC encoding via libkvazaar [no]234 --enable-libkvazaar enable HEVC encoding via libkvazaar [no]
235 --enable-libmodplug enable ModPlug via libmodplug [no]235 --enable-libmodplug enable ModPlug via libmodplug [no]
236 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]236 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
237 --enable-libnut enable NUT (de)muxing via libnut,
238 native (de)muxer exists [no]
239 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]237 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
240 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]238 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
241 --enable-libopencv enable video filtering via libopencv [no]239 --enable-libopencv enable video filtering via libopencv [no]
@@ -1553,7 +1551,6 @@ EXTERNAL_LIBRARY_LIST=" · 1311 unmodified lines
1553 libkvazaar1551 libkvazaar
1554 libmodplug1552 libmodplug
1555 libmp3lame1553 libmp3lame
1556 libnut
1557 libopencv1554 libopencv
1558 libopenh2641555 libopenh264
1559 libopenjpeg1556 libopenjpeg
@@ -2940,8 +2937,6 @@ image2_alias_pix_demuxer_select="image2_demuxer" · 1380 unmodified lines
2940image2_brender_pix_demuxer_select="image2_demuxer"2937image2_brender_pix_demuxer_select="image2_demuxer"
2941ipod_muxer_select="mov_muxer"2938ipod_muxer_select="mov_muxer"
2942ismv_muxer_select="mov_muxer"2939ismv_muxer_select="mov_muxer"
2943libnut_demuxer_deps="libnut"
2944libnut_muxer_deps="libnut"
2945matroska_audio_muxer_select="matroska_muxer"2940matroska_audio_muxer_select="matroska_muxer"
2946matroska_demuxer_select="iso_media riffdec"2941matroska_demuxer_select="iso_media riffdec"
2947matroska_demuxer_suggest="bzlib lzo zlib"2942matroska_demuxer_suggest="bzlib lzo zlib"
@@ -5825,7 +5820,6 @@ enabled libmfx && { use_pkg_config libmfx "mfx/mfxvideo.h" MFXInit || · 2877 unmodified lines
5825 { require libmfx "mfx/mfxvideo.h" MFXInit -llibmfx && warn "using libmfx without pkg-config"; } }5820 { require libmfx "mfx/mfxvideo.h" MFXInit -llibmfx && warn "using libmfx without pkg-config"; } }
5826enabled libmodplug && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load5821enabled libmodplug && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
5827enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame5822enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
5828enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
5829enabled libnpp && require libnpp npp.h nppGetLibVersion -lnppi -lnppc5823enabled libnpp && require libnpp npp.h nppGetLibVersion -lnppi -lnppc
5830enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb5824enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
5831enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb5825enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
libavformat/Makefile+0−2
@@ -537,8 +537,6 @@ OBJS-$(CONFIG_AVISYNTH_DEMUXER) += avisynth.o · 536 unmodified lines
537OBJS-$(CONFIG_CHROMAPRINT_MUXER) += chromaprint.o537OBJS-$(CONFIG_CHROMAPRINT_MUXER) += chromaprint.o
538OBJS-$(CONFIG_LIBGME_DEMUXER) += libgme.o538OBJS-$(CONFIG_LIBGME_DEMUXER) += libgme.o
539OBJS-$(CONFIG_LIBMODPLUG_DEMUXER) += libmodplug.o539OBJS-$(CONFIG_LIBMODPLUG_DEMUXER) += libmodplug.o
540OBJS-$(CONFIG_LIBNUT_DEMUXER) += libnut.o
541OBJS-$(CONFIG_LIBNUT_MUXER) += libnut.o
542OBJS-$(CONFIG_LIBOPENMPT_DEMUXER) += libopenmpt.o540OBJS-$(CONFIG_LIBOPENMPT_DEMUXER) += libopenmpt.o
543OBJS-$(CONFIG_LIBRTMP) += librtmp.o541OBJS-$(CONFIG_LIBRTMP) += librtmp.o
544OBJS-$(CONFIG_LIBSSH_PROTOCOL) += libssh.o542OBJS-$(CONFIG_LIBSSH_PROTOCOL) += libssh.o
libavformat/allformats.c+0−1
@@ -379,7 +379,6 @@ static void register_all(void) · 378 unmodified lines
379 REGISTER_MUXER (CHROMAPRINT, chromaprint);379 REGISTER_MUXER (CHROMAPRINT, chromaprint);
380 REGISTER_DEMUXER (LIBGME, libgme);380 REGISTER_DEMUXER (LIBGME, libgme);
381 REGISTER_DEMUXER (LIBMODPLUG, libmodplug);381 REGISTER_DEMUXER (LIBMODPLUG, libmodplug);
382 REGISTER_MUXDEMUX(LIBNUT, libnut);
383 REGISTER_DEMUXER (LIBOPENMPT, libopenmpt);382 REGISTER_DEMUXER (LIBOPENMPT, libopenmpt);
384}383}
385 384
libavformat/libnut.c+0−324
@@ -1,324 +0,0 @@
1/*
2 * NUT (de)muxing via libnut
3 * copyright (c) 2006 Oded Shimon <ods15@ods15.dyndns.org>
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22/**
23 * @file
24 * NUT demuxing and muxing via libnut.
25 * @author Oded Shimon <ods15@ods15.dyndns.org>
26 */
27
28#include "avformat.h"
29#include "internal.h"
30#include "riff.h"
31#include <libnut.h>
32
33#define ID_STRING "nut/multimedia container"
34#define ID_LENGTH (strlen(ID_STRING) + 1)
35
36typedef struct {
37 nut_context_tt * nut;
38 nut_stream_header_tt * s;
39} NUTContext;
40
41static const AVCodecTag nut_tags[] = {
42 { AV_CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') },
43 { AV_CODEC_ID_MP3, MKTAG('m', 'p', '3', ' ') },
44 { AV_CODEC_ID_VORBIS, MKTAG('v', 'r', 'b', 's') },
45 { 0, 0 },
46};
47
48#if CONFIG_LIBNUT_MUXER
49static int av_write(void * h, size_t len, const uint8_t * buf) {
50 AVIOContext * bc = h;
51 avio_write(bc, buf, len);
52 //avio_flush(bc);
53 return len;
54}
55
56static int nut_write_header(AVFormatContext * avf) {
57 NUTContext * priv = avf->priv_data;
58 AVIOContext * bc = avf->pb;
59 nut_muxer_opts_tt mopts = {
60 .output = {
61 .priv = bc,
62 .write = av_write,
63 },
64 .alloc = { av_malloc, av_realloc, av_free },
65 .write_index = 1,
66 .realtime_stream = 0,
67 .max_distance = 32768,
68 .fti = NULL,
69 };
70 nut_stream_header_tt * s;
71 int i;
72
73 priv->s = s = av_mallocz_array(avf->nb_streams + 1, sizeof*s);
74 if(!s)
75 return AVERROR(ENOMEM);
76
77 for (i = 0; i < avf->nb_streams; i++) {
78 AVCodecParameters *par = avf->streams[i]->codecpar;
79 int j;
80 int fourcc = 0;
81 int num, denom, ssize;
82
83 s[i].type = par->codec_type == AVMEDIA_TYPE_VIDEO ? NUT_VIDEO_CLASS : NUT_AUDIO_CLASS;
84
85 if (par->codec_tag) fourcc = par->codec_tag;
86 else fourcc = ff_codec_get_tag(nut_tags, par->codec_id);
87
88 if (!fourcc) {
89 if (par->codec_type == AVMEDIA_TYPE_VIDEO) fourcc = ff_codec_get_tag(ff_codec_bmp_tags, par->codec_id);
90 if (par->codec_type == AVMEDIA_TYPE_AUDIO) fourcc = ff_codec_get_tag(ff_codec_wav_tags, par->codec_id);
91 }
92
93 s[i].fourcc_len = 4;
94 s[i].fourcc = av_malloc(s[i].fourcc_len);
95 for (j = 0; j < s[i].fourcc_len; j++) s[i].fourcc[j] = (fourcc >> (j*8)) & 0xFF;
96
97 ff_parse_specific_params(avf->streams[i], &num, &ssize, &denom);
98 avpriv_set_pts_info(avf->streams[i], 60, denom, num);
99
100 s[i].time_base.num = denom;
101 s[i].time_base.den = num;
102
103 s[i].fixed_fps = 0;
104 s[i].decode_delay = par->video_delay;
105 s[i].codec_specific_len = par->extradata_size;
106 s[i].codec_specific = par->extradata;
107
108 if (par->codec_type == AVMEDIA_TYPE_VIDEO) {
109 s[i].width = par->width;
110 s[i].height = par->height;
111 s[i].sample_width = 0;
112 s[i].sample_height = 0;
113 s[i].colorspace_type = 0;
114 } else {
115 s[i].samplerate_num = par->sample_rate;
116 s[i].samplerate_denom = 1;
117 s[i].channel_count = par->channels;
118 }
119 }
120
121 s[avf->nb_streams].type = -1;
122 priv->nut = nut_muxer_init(&mopts, s, NULL);
123
124 return 0;
125}
126
127static int nut_write_packet(AVFormatContext * avf, AVPacket * pkt) {
128 NUTContext * priv = avf->priv_data;
129 nut_packet_tt p;
130
131 p.len = pkt->size;
132 p.stream = pkt->stream_index;
133 p.pts = pkt->pts;
134 p.flags = pkt->flags & AV_PKT_FLAG_KEY ? NUT_FLAG_KEY : 0;
135 p.next_pts = 0;
136
137 nut_write_frame_reorder(priv->nut, &p, pkt->data);
138
139 return 0;
140}
141
142static int nut_write_trailer(AVFormatContext * avf) {
143 AVIOContext * bc = avf->pb;
144 NUTContext * priv = avf->priv_data;
145 int i;
146
147 nut_muxer_uninit_reorder(priv->nut);
148 avio_flush(bc);
149
150 for(i = 0; priv->s[i].type != -1; i++ ) av_freep(&priv->s[i].fourcc);
151 av_freep(&priv->s);
152
153 return 0;
154}
155
156AVOutputFormat ff_libnut_muxer = {
157 .name = "libnut",
158 .long_name = "nut format",
159 .mime_type = "video/x-nut",
160 .extensions = "nut",
161 .priv_data_size = sizeof(NUTContext),
162 .audio_codec = AV_CODEC_ID_VORBIS,
163 .video_codec = AV_CODEC_ID_MPEG4,
164 .write_header = nut_write_header,
165 .write_packet = nut_write_packet,
166 .write_trailer = nut_write_trailer,
167 .flags = AVFMT_GLOBALHEADER,
168};
169#endif /* CONFIG_LIBNUT_MUXER */
170
171static int nut_probe(AVProbeData *p) {
172 if (!memcmp(p->buf, ID_STRING, ID_LENGTH)) return AVPROBE_SCORE_MAX;
173
174 return 0;
175}
176
177static size_t av_read(void * h, size_t len, uint8_t * buf) {
178 AVIOContext * bc = h;
179 return avio_read(bc, buf, len);
180}
181
182static off_t av_seek(void * h, int64_t pos, int whence) {
183 AVIOContext * bc = h;
184 if (whence == SEEK_END) {
185 pos = avio_size(bc) + pos;
186 whence = SEEK_SET;
187 }
188 return avio_seek(bc, pos, whence);
189}
190
191static int nut_read_header(AVFormatContext * avf) {
192 NUTContext * priv = avf->priv_data;
193 AVIOContext * bc = avf->pb;
194 nut_demuxer_opts_tt dopts = {
195 .input = {
196 .priv = bc,
197 .seek = av_seek,
198 .read = av_read,
199 .eof = NULL,
200 .file_pos = 0,
201 },
202 .alloc = { av_malloc, av_realloc, av_free },
203 .read_index = 1,
204 .cache_syncpoints = 1,
205 };
206 nut_context_tt * nut = priv->nut = nut_demuxer_init(&dopts);
207 nut_stream_header_tt * s;
208 int ret, i;
209
210 if(!nut)
211 return -1;
212
213 if ((ret = nut_read_headers(nut, &s, NULL))) {
214 av_log(avf, AV_LOG_ERROR, " NUT error: %s\n", nut_error(ret));
215 nut_demuxer_uninit(nut);
216 priv->nut = NULL;
217 return -1;
218 }
219
220 priv->s = s;
221
222 for (i = 0; s[i].type != -1 && i < 2; i++) {
223 AVStream * st = avformat_new_stream(avf, NULL);
224 int j;
225
226 if (!st)
227 return AVERROR(ENOMEM);
228
229 for (j = 0; j < s[i].fourcc_len && j < 8; j++) st->codecpar->codec_tag |= s[i].fourcc[j]<<(j*8);
230
231 st->codecpar->video_delay = s[i].decode_delay;
232
233 st->codecpar->extradata_size = s[i].codec_specific_len;
234 if (st->codecpar->extradata_size) {
235 if(ff_alloc_extradata(st->codecpar, st->codecpar->extradata_size)){
236 nut_demuxer_uninit(nut);
237 priv->nut = NULL;
238 return AVERROR(ENOMEM);
239 }
240 memcpy(st->codecpar->extradata, s[i].codec_specific, st->codecpar->extradata_size);
241 }
242
243 avpriv_set_pts_info(avf->streams[i], 60, s[i].time_base.num, s[i].time_base.den);
244 st->start_time = 0;
245 st->duration = s[i].max_pts;
246
247 st->codecpar->codec_id = ff_codec_get_id(nut_tags, st->codecpar->codec_tag);
248
249 switch(s[i].type) {
250 case NUT_AUDIO_CLASS:
251 st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
252 if (st->codecpar->codec_id == AV_CODEC_ID_NONE) st->codecpar->codec_id = ff_codec_get_id(ff_codec_wav_tags, st->codecpar->codec_tag);
253
254 st->codecpar->channels = s[i].channel_count;
255 st->codecpar->sample_rate = s[i].samplerate_num / s[i].samplerate_denom;
256 break;
257 case NUT_VIDEO_CLASS:
258 st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
259 if (st->codecpar->codec_id == AV_CODEC_ID_NONE) st->codecpar->codec_id = ff_codec_get_id(ff_codec_bmp_tags, st->codecpar->codec_tag);
260
261 st->codecpar->width = s[i].width;
262 st->codecpar->height = s[i].height;
263 st->sample_aspect_ratio.num = s[i].sample_width;
264 st->sample_aspect_ratio.den = s[i].sample_height;
265 break;
266 }
267 if (st->codecpar->codec_id == AV_CODEC_ID_NONE) av_log(avf, AV_LOG_ERROR, "Unknown codec?!\n");
268 }
269
270 return 0;
271}
272
273static int nut_read_packet(AVFormatContext * avf, AVPacket * pkt) {
274 NUTContext * priv = avf->priv_data;
275 nut_packet_tt pd;
276 int ret;
277
278 ret = nut_read_next_packet(priv->nut, &pd);
279
280 if (ret || av_new_packet(pkt, pd.len) < 0) {
281 if (ret != NUT_ERR_EOF)
282 av_log(avf, AV_LOG_ERROR, " NUT error: %s\n", nut_error(ret));
283 return -1;
284 }
285
286 if (pd.flags & NUT_FLAG_KEY) pkt->flags |= AV_PKT_FLAG_KEY;
287 pkt->pts = pd.pts;
288 pkt->stream_index = pd.stream;
289 pkt->pos = avio_tell(avf->pb);
290
291 ret = nut_read_frame(priv->nut, &pd.len, pkt->data);
292
293 return ret;
294}
295
296static int nut_read_seek(AVFormatContext * avf, int stream_index, int64_t target_ts, int flags) {
297 NUTContext * priv = avf->priv_data;
298 int active_streams[] = { stream_index, -1 };
299 double time_pos = target_ts * priv->s[stream_index].time_base.num / (double)priv->s[stream_index].time_base.den;
300
301 if (nut_seek(priv->nut, time_pos, 2*!(flags & AVSEEK_FLAG_BACKWARD), active_streams)) return -1;
302
303 return 0;
304}
305
306static int nut_read_close(AVFormatContext *s) {
307 NUTContext * priv = s->priv_data;
308
309 nut_demuxer_uninit(priv->nut);
310
311 return 0;
312}
313
314AVInputFormat ff_libnut_demuxer = {
315 .name = "libnut",
316 .long_name = NULL_IF_CONFIG_SMALL("NUT format"),
317 .priv_data_size = sizeof(NUTContext),
318 .read_probe = nut_probe,
319 .read_header = nut_read_header,
320 .read_packet = nut_read_packet,
321 .read_close = nut_read_close,
322 .read_seek = nut_read_seek,
323 .extensions = "nut",
324};

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t