~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to ffmpeg/libavformat/avio.c

  • Committer: Gauvain Pocentek
  • Date: 2012-03-06 11:59:12 UTC
  • mfrom: (66.1.15 precise)
  • Revision ID: gauvain@pocentek.net-20120306115912-h9d6kt9j0l532oo5
* Merge from Ubuntu:
  - put back faac support
  - recommends apport-hooks-medibuntu
  - change Maintainer, Uploaders & Vcs-* fields.
* New upstream snapshot
* upload to unstable
* Build against external libmpeg2
* drop 51_FTBFS_arm.patch again
* no longer build depend on libcdparanoia-dev on the Hurd
* Fix FTBFS on the hurd.
  Thanks to Samuel Thibault <sthibault@debian.org> (Closes: #654974)
* Fix FTBFS on arm
* New upstream snapshot, Closes: #650339, #643621, #481807
* Imported Upstream version 1.0~rc4+svn34492
* Bump standards version
* Bump dependency on libav >= 4:0.8~, Closes: #653887
* Fix build-indep
* Build mplayer-gui again, Closes: #568514
* Drop debian/all-lang-config-mak.sh, no longer needed
* include .dfsg1 in version number
* remove get-orig-source target
* no longer prune compiler flags from the environment
* No longer advertise nor build 3fdx, mga and dxr3 backends,
  Closes: #496106, #442181, #533546
* beautify mplayer version identification string
* Brown paperbag upload.
* Next try to fix build failure on sparce after recent binutils change.
* Brown paperbag upload.
* Really fix build failure on sparc after recent binutils change.
* Properly set Replaces/Conflicts on mplayer2{,-dbg} to avoid
  file overwrite errors.
* Adjust versioning of mplayer listed in the mplayer-dbg's Depends field.
* Fix build failure on sparc after recent binutils change.
* Urgency medium bumped because of RC-level bugfix
  and speeding up x264 transition.
* Update to my @debian.org email.
* Upload to unstable
* Enable joystick support on Linux only, Closes: #638408
* Rebuild fixes toolchain issue on arm, Closes: #637077
* New upstream snapshot
* following the discussion started by Diego Biurrun <diego@biurrun.de>
  in debian-devel, I have prepared a new packaging of 'mplayer'
  (with code that comes from CVS)
* the upstream tar.bz cannot be distributed by Debian, since it contains
   CSS code; so I am repackaging it 
* I have tried my best to address all known issues:
  - the package contains the detailed Copyright made by Diego Biurrun 
  - the package does not contain CSS code, or  AFAIK other code on which 
     there is active patent enforcement
  - there is a script  debian/cvs-changelog.sh  that shows all changes
     done to files included in this source.
    This should comply with GPLv2 sec 2.a  (in spirit if not in letter)
    For this reason, the source code contains CVS directories.
* needs   make (>= 3.80) for 'html-chunked-$(1)' in DOCS/xml/Makefile

* some corrections, as suggested Diego Biurrun
  - binary codecs should go into /usr/lib/codecs (upstream default)
  - better template 'mplayer/install_codecs'
  - an empty 'font=' in mplayer.conf breaks mplayer: postinst corrected
* correction in 'mplayer/cfgnote'
* better mplayer.postinst and mplayer.config

* New upstream release
* better debian/copyright file
* do not ship a skin
* New upstream release
* changed DEB_BUILD_OPTIONS to DEB_BUILD_CONFIGURE ,
  DEB_BUILD_OPTIONS is used as in debian policy
* use gcc-3.4
* changed xlibs-dev to a long list of dependencies, for Debian/etch
* try to adhere to  http://www.mplayerhq.hu/DOCS/tech/binary-packaging.txt
  (see README.Debian for details)
* removed dependency on xlibmesa-dev, disabled opengl
* New upstream release
* Simon McVittie <hacks@pseudorandom.co.uk> wonderful work:
- Work around Debian bug #267442 (glibc's sys/uio.h and gcc's altivec.h have
  conflicting uses for __vector) by re-ordering #includes
- Fix potential symlink attack in ./configure
- Disable support for binary codecs on platforms for which those codecs
  aren't available; also disable the corresponding Debconf note when it's
  inappropriate
- Changed Build-Depends: so it works in pbuilder
- Explicitly build-depend on libjpeg62-dev, libfontconfig1-dev,
  libungif4-dev 
- Tweak debian/rules to avoid certain errors being ignored
- Use --language=all
* provide a target  'debian/rules get-orig-source' 
  that recreates the orig.tar.gz ; then use the above orig.tar.gz
* rewrote some parts of debian/rules
* don't clean and recompile docs if upstream ships them
* mplayer-doc was shipping too much stuff
* translated man pages where not installed properly
* compile with libdv4-dev
* correct README.Debian
* Forgot build-dep on libtheora
* Must not depend on libxvidcore
* New upstream release
* new release.
* rc1 to become 0.90
* new pre-release
* new pre-release
* gtk bug fixed.
* new release.
* version bumped
* 0.60 pre2 release
* 0.60 pre-release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
 
 * Unbuffered io for ffmpeg system
 
2
 * unbuffered I/O
3
3
 * Copyright (c) 2001 Fabrice Bellard
4
4
 *
5
5
 * This file is part of Libav.
22
22
#include <unistd.h>
23
23
 
24
24
#include "libavutil/avstring.h"
 
25
#include "libavutil/dict.h"
25
26
#include "libavutil/opt.h"
26
27
#include "os_support.h"
27
28
#include "avformat.h"
30
31
#endif
31
32
#include "url.h"
32
33
 
 
34
static URLProtocol *first_protocol = NULL;
 
35
 
 
36
URLProtocol *ffurl_protocol_next(URLProtocol *prev)
 
37
{
 
38
    return prev ? prev->next : first_protocol;
 
39
}
 
40
 
33
41
/** @name Logging context. */
34
42
/*@{*/
35
43
static const char *urlcontext_to_name(void *ptr)
38
46
    if(h->prot) return h->prot->name;
39
47
    else        return "NULL";
40
48
}
 
49
 
 
50
static void *urlcontext_child_next(void *obj, void *prev)
 
51
{
 
52
    URLContext *h = obj;
 
53
    if (!prev && h->priv_data && h->prot->priv_data_class)
 
54
        return h->priv_data;
 
55
    return NULL;
 
56
}
 
57
 
 
58
static const AVClass *urlcontext_child_class_next(const AVClass *prev)
 
59
{
 
60
    URLProtocol *p = NULL;
 
61
 
 
62
    /* find the protocol that corresponds to prev */
 
63
    while (prev && (p = ffurl_protocol_next(p)))
 
64
        if (p->priv_data_class == prev)
 
65
            break;
 
66
 
 
67
    /* find next protocol with priv options */
 
68
    while (p = ffurl_protocol_next(p))
 
69
        if (p->priv_data_class)
 
70
            return p->priv_data_class;
 
71
    return NULL;
 
72
 
 
73
}
 
74
 
41
75
static const AVOption options[] = {{NULL}};
42
 
static const AVClass urlcontext_class = {
 
76
const AVClass ffurl_context_class = {
43
77
    .class_name     = "URLContext",
44
78
    .item_name      = urlcontext_to_name,
45
79
    .option         = options,
46
80
    .version        = LIBAVUTIL_VERSION_INT,
 
81
    .child_next     = urlcontext_child_next,
 
82
    .child_class_next = urlcontext_child_class_next,
47
83
};
48
84
/*@}*/
49
85
 
 
86
 
 
87
#if FF_API_OLD_INTERRUPT_CB
50
88
static int default_interrupt_cb(void);
51
 
 
52
 
URLProtocol *first_protocol = NULL;
53
89
int (*url_interrupt_cb)(void) = default_interrupt_cb;
 
90
#endif
54
91
 
55
92
#if FF_API_OLD_AVIO
56
93
URLProtocol *av_protocol_next(URLProtocol *p)
57
94
{
58
 
    if(p) return p->next;
59
 
    else  return first_protocol;
 
95
    return ffurl_protocol_next(p);
60
96
}
61
97
#endif
62
98
 
63
99
const char *avio_enum_protocols(void **opaque, int output)
64
100
{
65
101
    URLProtocol **p = opaque;
66
 
    *p = *p ? (*p)->next : first_protocol;
 
102
    *p = ffurl_protocol_next(*p);
67
103
    if (!*p) return NULL;
68
104
    if ((output && (*p)->url_write) || (!output && (*p)->url_read))
69
105
        return (*p)->name;
86
122
}
87
123
 
88
124
static int url_alloc_for_protocol (URLContext **puc, struct URLProtocol *up,
89
 
                                   const char *filename, int flags)
 
125
                                   const char *filename, int flags,
 
126
                                   const AVIOInterruptCB *int_cb)
90
127
{
91
128
    URLContext *uc;
92
129
    int err;
93
130
 
94
131
#if CONFIG_NETWORK
95
 
    if (!ff_network_init())
 
132
    if (up->flags & URL_PROTOCOL_FLAG_NETWORK && !ff_network_init())
96
133
        return AVERROR(EIO);
97
134
#endif
98
135
    uc = av_mallocz(sizeof(URLContext) + strlen(filename) + 1);
100
137
        err = AVERROR(ENOMEM);
101
138
        goto fail;
102
139
    }
103
 
    uc->av_class = &urlcontext_class;
 
140
    uc->av_class = &ffurl_context_class;
104
141
    uc->filename = (char *) &uc[1];
105
142
    strcpy(uc->filename, filename);
106
143
    uc->prot = up;
114
151
            av_opt_set_defaults(uc->priv_data);
115
152
        }
116
153
    }
 
154
    if (int_cb)
 
155
        uc->interrupt_callback = *int_cb;
117
156
 
118
157
    *puc = uc;
119
158
    return 0;
120
159
 fail:
121
160
    *puc = NULL;
122
161
#if CONFIG_NETWORK
123
 
    ff_network_close();
 
162
    if (up->flags & URL_PROTOCOL_FLAG_NETWORK)
 
163
        ff_network_close();
124
164
#endif
125
165
    return err;
126
166
}
127
167
 
128
 
int ffurl_connect(URLContext* uc)
 
168
int ffurl_connect(URLContext* uc, AVDictionary **options)
129
169
{
130
 
    int err = uc->prot->url_open(uc, uc->filename, uc->flags);
 
170
    int err =
 
171
#if !FF_API_OLD_AVIO
 
172
        uc->prot->url_open2 ? uc->prot->url_open2(uc, uc->filename, uc->flags, options) :
 
173
#endif
 
174
        uc->prot->url_open(uc, uc->filename, uc->flags);
131
175
    if (err)
132
176
        return err;
133
177
    uc->is_connected = 1;
145
189
{
146
190
    int ret;
147
191
 
148
 
    ret = url_alloc_for_protocol(puc, up, filename, flags);
 
192
    ret = url_alloc_for_protocol(puc, up, filename, flags, NULL);
149
193
    if (ret)
150
194
        goto fail;
151
 
    ret = ffurl_connect(*puc);
 
195
    ret = ffurl_connect(*puc, NULL);
152
196
    if (!ret)
153
197
        return 0;
154
198
 fail:
158
202
}
159
203
int url_alloc(URLContext **puc, const char *filename, int flags)
160
204
{
161
 
    return ffurl_alloc(puc, filename, flags);
 
205
    return ffurl_alloc(puc, filename, flags, NULL);
162
206
}
163
207
int url_connect(URLContext* uc)
164
208
{
165
 
    return ffurl_connect(uc);
 
209
    return ffurl_connect(uc, NULL);
166
210
}
167
211
int url_open(URLContext **puc, const char *filename, int flags)
168
212
{
169
 
    return ffurl_open(puc, filename, flags);
 
213
    return ffurl_open(puc, filename, flags, NULL, NULL);
170
214
}
171
215
int url_read(URLContext *h, unsigned char *buf, int size)
172
216
{
219
263
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"                \
220
264
    "0123456789+-."
221
265
 
222
 
int ffurl_alloc(URLContext **puc, const char *filename, int flags)
 
266
int ffurl_alloc(URLContext **puc, const char *filename, int flags,
 
267
                const AVIOInterruptCB *int_cb)
223
268
{
224
 
    URLProtocol *up;
 
269
    URLProtocol *up = NULL;
225
270
    char proto_str[128], proto_nested[128], *ptr;
226
271
    size_t proto_len = strspn(filename, URL_SCHEME_CHARS);
227
272
 
234
279
    if ((ptr = strchr(proto_nested, '+')))
235
280
        *ptr = '\0';
236
281
 
237
 
    up = first_protocol;
238
 
    while (up != NULL) {
 
282
    while (up = ffurl_protocol_next(up)) {
239
283
        if (!strcmp(proto_str, up->name))
240
 
            return url_alloc_for_protocol (puc, up, filename, flags);
 
284
            return url_alloc_for_protocol (puc, up, filename, flags, int_cb);
241
285
        if (up->flags & URL_PROTOCOL_FLAG_NESTED_SCHEME &&
242
286
            !strcmp(proto_nested, up->name))
243
 
            return url_alloc_for_protocol (puc, up, filename, flags);
244
 
        up = up->next;
 
287
            return url_alloc_for_protocol (puc, up, filename, flags, int_cb);
245
288
    }
246
289
    *puc = NULL;
247
290
    return AVERROR(ENOENT);
248
291
}
249
292
 
250
 
int ffurl_open(URLContext **puc, const char *filename, int flags)
 
293
int ffurl_open(URLContext **puc, const char *filename, int flags,
 
294
               const AVIOInterruptCB *int_cb, AVDictionary **options)
251
295
{
252
 
    int ret = ffurl_alloc(puc, filename, flags);
 
296
    int ret = ffurl_alloc(puc, filename, flags, int_cb);
253
297
    if (ret)
254
298
        return ret;
255
 
    ret = ffurl_connect(*puc);
 
299
    if (options && (*puc)->prot->priv_data_class &&
 
300
        (ret = av_opt_set_dict((*puc)->priv_data, options)) < 0)
 
301
        goto fail;
 
302
    ret = ffurl_connect(*puc, options);
256
303
    if (!ret)
257
304
        return 0;
 
305
fail:
258
306
    ffurl_close(*puc);
259
307
    *puc = NULL;
260
308
    return ret;
284
332
        if (ret)
285
333
           fast_retries = FFMAX(fast_retries, 2);
286
334
        len += ret;
287
 
        if (url_interrupt_cb())
 
335
        if (ff_check_interrupt(&h->interrupt_callback))
288
336
            return AVERROR_EXIT;
289
337
    }
290
338
    return len;
333
381
    if (h->is_connected && h->prot->url_close)
334
382
        ret = h->prot->url_close(h);
335
383
#if CONFIG_NETWORK
336
 
    ff_network_close();
 
384
    if (h->prot->flags & URL_PROTOCOL_FLAG_NETWORK)
 
385
        ff_network_close();
337
386
#endif
338
 
    if (h->prot->priv_data_size)
 
387
    if (h->prot->priv_data_size) {
 
388
        if (h->prot->priv_data_class)
 
389
            av_opt_free(h->priv_data);
339
390
        av_free(h->priv_data);
 
391
    }
340
392
    av_free(h);
341
393
    return ret;
342
394
}
345
397
int url_exist(const char *filename)
346
398
{
347
399
    URLContext *h;
348
 
    if (ffurl_open(&h, filename, AVIO_FLAG_READ) < 0)
 
400
    if (ffurl_open(&h, filename, AVIO_FLAG_READ, NULL, NULL) < 0)
349
401
        return 0;
350
402
    ffurl_close(h);
351
403
    return 1;
355
407
int avio_check(const char *url, int flags)
356
408
{
357
409
    URLContext *h;
358
 
    int ret = ffurl_alloc(&h, url, flags);
 
410
    int ret = ffurl_alloc(&h, url, flags, NULL);
359
411
    if (ret)
360
412
        return ret;
361
413
 
362
414
    if (h->prot->url_check) {
363
415
        ret = h->prot->url_check(h, flags);
364
416
    } else {
365
 
        ret = ffurl_connect(h);
 
417
        ret = ffurl_connect(h, NULL);
366
418
        if (ret >= 0)
367
419
            ret = flags;
368
420
    }
393
445
    return h->prot->url_get_file_handle(h);
394
446
}
395
447
 
 
448
#if FF_API_OLD_INTERRUPT_CB
396
449
static int default_interrupt_cb(void)
397
450
{
398
451
    return 0;
404
457
        interrupt_cb = default_interrupt_cb;
405
458
    url_interrupt_cb = interrupt_cb;
406
459
}
 
460
#endif
 
461
 
 
462
int ff_check_interrupt(AVIOInterruptCB *cb)
 
463
{
 
464
    int ret;
 
465
    if (cb && cb->callback && (ret = cb->callback(cb->opaque)))
 
466
        return ret;
 
467
#if FF_API_OLD_INTERRUPT_CB
 
468
    return url_interrupt_cb();
 
469
#else
 
470
    return 0;
 
471
#endif
 
472
}
407
473
 
408
474
#if FF_API_OLD_AVIO
409
475
int av_url_read_pause(URLContext *h, int pause)