~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to ffmpeg/libavformat/aviobuf.c

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2012-01-12 22:23:28 UTC
  • mfrom: (0.4.7 sid)
  • mto: This revision was merged to the branch mainline in revision 76.
  • Revision ID: package-import@ubuntu.com-20120112222328-8jqdyodym3p84ygu
Tags: 2:1.0~rc4.dfsg1+svn34540-1
* New upstream snapshot
* upload to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
 
 * Buffered I/O for ffmpeg system
 
2
 * buffered I/O
3
3
 * Copyright (c) 2000,2001 Fabrice Bellard
4
4
 *
5
5
 * This file is part of Libav.
20
20
 */
21
21
 
22
22
#include "libavutil/crc.h"
 
23
#include "libavutil/dict.h"
23
24
#include "libavutil/intreadwrite.h"
 
25
#include "libavutil/log.h"
 
26
#include "libavutil/opt.h"
24
27
#include "avformat.h"
25
28
#include "avio.h"
26
29
#include "avio_internal.h"
37
40
 */
38
41
#define SHORT_SEEK_THRESHOLD 4096
39
42
 
 
43
#if !FF_API_OLD_AVIO
 
44
static void *ffio_url_child_next(void *obj, void *prev)
 
45
{
 
46
    AVIOContext *s = obj;
 
47
    return prev ? NULL : s->opaque;
 
48
}
 
49
 
 
50
static const AVClass *ffio_url_child_class_next(const AVClass *prev)
 
51
{
 
52
    return prev ? NULL : &ffurl_context_class;
 
53
}
 
54
 
 
55
static const AVOption ffio_url_options[] = {
 
56
    { NULL },
 
57
};
 
58
 
 
59
const AVClass ffio_url_class = {
 
60
    .class_name = "AVIOContext",
 
61
    .item_name  = av_default_item_name,
 
62
    .version    = LIBAVUTIL_VERSION_INT,
 
63
    .option     = ffio_url_options,
 
64
    .child_next = ffio_url_child_next,
 
65
    .child_class_next = ffio_url_child_class_next,
 
66
};
 
67
#endif
40
68
static void fill_buffer(AVIOContext *s);
41
69
static int url_resetbuf(AVIOContext *s, int flags);
42
70
 
140
168
 
141
169
void avio_w8(AVIOContext *s, int b)
142
170
{
143
 
    *(s->buf_ptr)++ = b;
 
171
    *s->buf_ptr++ = b;
144
172
    if (s->buf_ptr >= s->buf_end)
145
173
        flush_buffer(s);
146
174
}
537
565
    int len= s->buffer_size - (dst - s->buffer);
538
566
    int max_buffer_size = s->max_packet_size ? s->max_packet_size : IO_BUFFER_SIZE;
539
567
 
 
568
    /* can't fill the buffer without read_packet, just set EOF if appropiate */
 
569
    if (!s->read_packet && s->buf_ptr >= s->buf_end)
 
570
        s->eof_reached = 1;
 
571
 
540
572
    /* no need to do anything if EOF already reached */
541
573
    if (s->eof_reached)
542
574
        return;
769
801
{
770
802
    int i;
771
803
 
 
804
    if (buflen <= 0)
 
805
        return AVERROR(EINVAL);
772
806
    // reserve 1 byte for terminating 0
773
807
    buflen = FFMIN(buflen - 1, maxlen);
774
808
    for (i = 0; i < buflen; i++)
775
809
        if (!(buf[i] = avio_r8(s)))
776
810
            return i + 1;
777
 
    if (buflen)
778
 
        buf[i] = 0;
 
811
    buf[i] = 0;
779
812
    for (; i < maxlen; i++)
780
813
        if (!avio_r8(s))
781
814
            return i + 1;
787
820
{\
788
821
    char* q = buf;\
789
822
    int ret = 0;\
 
823
    if (buflen <= 0) \
 
824
        return AVERROR(EINVAL); \
790
825
    while (ret + 1 < maxlen) {\
791
826
        uint8_t tmp;\
792
827
        uint32_t ch;\
838
873
    if (!buffer)
839
874
        return AVERROR(ENOMEM);
840
875
 
841
 
    *s = av_mallocz(sizeof(AVIOContext));
842
 
    if(!*s) {
 
876
    *s = avio_alloc_context(buffer, buffer_size, h->flags & AVIO_FLAG_WRITE, h,
 
877
                            ffurl_read, ffurl_write, ffurl_seek);
 
878
    if (!*s) {
843
879
        av_free(buffer);
844
880
        return AVERROR(ENOMEM);
845
881
    }
846
 
 
847
 
    if (ffio_init_context(*s, buffer, buffer_size,
848
 
                      h->flags & AVIO_FLAG_WRITE, h,
849
 
                      ffurl_read, ffurl_write, ffurl_seek) < 0) {
850
 
        av_free(buffer);
851
 
        av_freep(s);
852
 
        return AVERROR(EIO);
853
 
    }
854
882
#if FF_API_OLD_AVIO
855
883
    (*s)->is_streamed = h->is_streamed;
856
884
#endif
860
888
        (*s)->read_pause = (int (*)(void *, int))h->prot->url_read_pause;
861
889
        (*s)->read_seek  = (int64_t (*)(void *, int, int64_t, int))h->prot->url_read_seek;
862
890
    }
 
891
#if !FF_API_OLD_AVIO
 
892
    (*s)->av_class = &ffio_url_class;
 
893
#endif
863
894
    return 0;
864
895
}
865
896
 
933
964
 
934
965
int avio_open(AVIOContext **s, const char *filename, int flags)
935
966
{
 
967
    return avio_open2(s, filename, flags, NULL, NULL);
 
968
}
 
969
 
 
970
int avio_open2(AVIOContext **s, const char *filename, int flags,
 
971
               const AVIOInterruptCB *int_cb, AVDictionary **options)
 
972
{
936
973
    URLContext *h;
937
974
    int err;
938
975
 
939
 
    err = ffurl_open(&h, filename, flags);
 
976
    err = ffurl_open(&h, filename, flags, int_cb, options);
940
977
    if (err < 0)
941
978
        return err;
942
979
    err = ffio_fdopen(s, h);