~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to stream/stream.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:
290
290
#ifdef CONFIG_NETWORKING
291
291
    if( s->streaming_ctrl!=NULL && s->streaming_ctrl->streaming_read ) {
292
292
      len=s->streaming_ctrl->streaming_read(s->fd, buf, len, s->streaming_ctrl);
 
293
      if (s->streaming_ctrl->status == streaming_stopped_e)
 
294
        s->eof = 1;
293
295
    } else
294
296
#endif
295
297
    if (s->fill_buffer)
306
308
    len= s->fill_buffer ? s->fill_buffer(s, buf, len) : 0;
307
309
  }
308
310
  if(len<=0){
 
311
    off_t pos = s->pos;
 
312
    // do not retry if this looks like proper eof
 
313
    if (s->eof || (s->end_pos && pos == s->end_pos))
 
314
      goto eof_out;
309
315
    // dvdnav has some horrible hacks to "suspend" reads,
310
316
    // we need to skip this code or seeks will hang.
311
 
    if (!s->eof && s->type != STREAMTYPE_DVDNAV) {
312
 
      // just in case this is an error e.g. due to network
313
 
      // timeout reset and retry
314
 
      // Seeking is used as a hack to make network streams
315
 
      // reopen the connection, ideally they would implement
316
 
      // e.g. a STREAM_CTRL_RECONNECT to do this
317
 
      off_t pos = s->pos;
318
 
      s->eof=1;
319
 
      stream_reset(s);
320
 
      stream_seek_internal(s, pos);
321
 
      // make sure EOF is set to ensure no endless loops
322
 
      s->eof=1;
323
 
      return stream_read_internal(s, buf, orig_len);
324
 
    }
 
317
    if (s->type == STREAMTYPE_DVDNAV)
 
318
      goto eof_out;
 
319
 
 
320
    // just in case this is an error e.g. due to network
 
321
    // timeout reset and retry
 
322
    // Seeking is used as a hack to make network streams
 
323
    // reopen the connection, ideally they would implement
 
324
    // e.g. a STREAM_CTRL_RECONNECT to do this
 
325
    s->eof=1;
 
326
    stream_reset(s);
 
327
    if (stream_seek_internal(s, pos) >= 0 || s->pos != pos) // seek failed
 
328
      goto eof_out;
 
329
    // make sure EOF is set to ensure no endless loops
 
330
    s->eof=1;
 
331
    return stream_read_internal(s, buf, orig_len);
 
332
 
 
333
eof_out:
325
334
    s->eof=1;
326
335
    return 0;
327
336
  }
579
588
}
580
589
 
581
590
/**
582
 
 * Find a newline character in buffer
 
591
 * Find a termination character in buffer
583
592
 * \param buf buffer to search
584
593
 * \param len amount of bytes to search in buffer, may not overread
585
594
 * \param utf16 chose between UTF-8/ASCII/other and LE and BE UTF-16
586
595
 *              0 = UTF-8/ASCII/other, 1 = UTF-16-LE, 2 = UTF-16-BE
587
596
 */
588
 
static const uint8_t *find_newline(const uint8_t *buf, int len, int utf16)
 
597
static const uint8_t *find_term_char(const uint8_t *buf, int len, uint8_t term, int utf16)
589
598
{
590
599
  uint32_t c;
591
600
  const uint8_t *end = buf + len;
592
601
  switch (utf16) {
593
602
  case 0:
594
 
    return (uint8_t *)memchr(buf, '\n', len);
 
603
    return (uint8_t *)memchr(buf, term, len);
595
604
  case 1:
596
605
    while (buf < end - 1) {
597
606
      GET_UTF16(c, buf < end - 1 ? get_le16_inc(&buf) : 0, return NULL;)
598
 
      if (buf <= end && c == '\n')
 
607
      if (buf <= end && c == term)
599
608
        return buf - 1;
600
609
    }
601
610
    break;
602
611
  case 2:
603
612
    while (buf < end - 1) {
604
613
      GET_UTF16(c, buf < end - 1 ? get_be16_inc(&buf) : 0, return NULL;)
605
 
      if (buf <= end && c == '\n')
 
614
      if (buf <= end && c == term)
606
615
        return buf - 1;
607
616
    }
608
617
    break;
651
660
  return 0;
652
661
}
653
662
 
654
 
unsigned char* stream_read_line(stream_t *s,unsigned char* mem, int max, int utf16) {
 
663
uint8_t *stream_read_until(stream_t *s, uint8_t *mem, int max,
 
664
                           uint8_t term, int utf16)
 
665
{
655
666
  int len;
656
667
  const unsigned char *end;
657
668
  unsigned char *ptr = mem;
663
674
    if(len <= 0 &&
664
675
       (!cache_stream_fill_buffer(s) ||
665
676
        (len = s->buf_len-s->buf_pos) <= 0)) break;
666
 
    end = find_newline(s->buffer+s->buf_pos, len, utf16);
 
677
    end = find_term_char(s->buffer+s->buf_pos, len, term, utf16);
667
678
    if(end) len = end - (s->buffer+s->buf_pos) + 1;
668
679
    if(len > 0 && max > 0) {
669
680
      int l = copy_characters(ptr, max, s->buffer+s->buf_pos, &len, utf16);