~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to ffmpeg/libavformat/smacker.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:
26
26
#include "libavutil/bswap.h"
27
27
#include "libavutil/intreadwrite.h"
28
28
#include "avformat.h"
 
29
#include "internal.h"
29
30
 
30
31
#define SMACKER_PAL 0x01
31
32
#define SMACKER_FLAG_RING_FRAME 0x01
32
33
 
33
34
enum SAudFlags {
34
 
    SMK_AUD_PACKED  = 0x80000000,
35
 
    SMK_AUD_16BITS  = 0x20000000,
36
 
    SMK_AUD_STEREO  = 0x10000000,
37
 
    SMK_AUD_BINKAUD = 0x08000000,
38
 
    SMK_AUD_USEDCT  = 0x04000000
 
35
    SMK_AUD_PACKED  = 0x80,
 
36
    SMK_AUD_16BITS  = 0x20,
 
37
    SMK_AUD_STEREO  = 0x10,
 
38
    SMK_AUD_BINKAUD = 0x08,
 
39
    SMK_AUD_USEDCT  = 0x04
39
40
};
40
41
 
41
42
typedef struct SmackerContext {
48
49
    uint32_t audio[7];
49
50
    uint32_t treesize;
50
51
    uint32_t mmap_size, mclr_size, full_size, type_size;
 
52
    uint8_t  aflags[7];
51
53
    uint32_t rates[7];
52
54
    uint32_t pad;
53
55
    /* frame info */
129
131
    smk->mclr_size = avio_rl32(pb);
130
132
    smk->full_size = avio_rl32(pb);
131
133
    smk->type_size = avio_rl32(pb);
132
 
    for(i = 0; i < 7; i++)
133
 
        smk->rates[i] = avio_rl32(pb);
 
134
    for(i = 0; i < 7; i++) {
 
135
        smk->rates[i]  = avio_rl24(pb);
 
136
        smk->aflags[i] = avio_r8(pb);
 
137
    }
134
138
    smk->pad = avio_rl32(pb);
135
139
    /* setup data */
136
140
    if(smk->frames > 0xFFFFFF) {
151
155
    }
152
156
 
153
157
    /* init video codec */
154
 
    st = av_new_stream(s, 0);
 
158
    st = avformat_new_stream(s, NULL);
155
159
    if (!st)
156
160
        return -1;
157
161
    smk->videoindex = st->index;
168
172
        smk->pts_inc *= 100;
169
173
    tbase = 100000;
170
174
    av_reduce(&tbase, &smk->pts_inc, tbase, smk->pts_inc, (1UL<<31)-1);
171
 
    av_set_pts_info(st, 33, smk->pts_inc, tbase);
 
175
    avpriv_set_pts_info(st, 33, smk->pts_inc, tbase);
172
176
    st->duration = smk->frames;
173
177
    /* handle possible audio streams */
174
178
    for(i = 0; i < 7; i++) {
175
179
        smk->indexes[i] = -1;
176
 
        if(smk->rates[i] & 0xFFFFFF){
177
 
            ast[i] = av_new_stream(s, 0);
 
180
        if (smk->rates[i]) {
 
181
            ast[i] = avformat_new_stream(s, NULL);
178
182
            smk->indexes[i] = ast[i]->index;
179
183
            ast[i]->codec->codec_type = AVMEDIA_TYPE_AUDIO;
180
 
            if (smk->rates[i] & SMK_AUD_BINKAUD) {
 
184
            if (smk->aflags[i] & SMK_AUD_BINKAUD) {
181
185
                ast[i]->codec->codec_id = CODEC_ID_BINKAUDIO_RDFT;
182
 
            } else if (smk->rates[i] & SMK_AUD_USEDCT) {
 
186
            } else if (smk->aflags[i] & SMK_AUD_USEDCT) {
183
187
                ast[i]->codec->codec_id = CODEC_ID_BINKAUDIO_DCT;
184
 
            } else if (smk->rates[i] & SMK_AUD_PACKED){
 
188
            } else if (smk->aflags[i] & SMK_AUD_PACKED){
185
189
                ast[i]->codec->codec_id = CODEC_ID_SMACKAUDIO;
186
190
                ast[i]->codec->codec_tag = MKTAG('S', 'M', 'K', 'A');
187
191
            } else {
188
192
                ast[i]->codec->codec_id = CODEC_ID_PCM_U8;
189
193
            }
190
 
            ast[i]->codec->channels = (smk->rates[i] & SMK_AUD_STEREO) ? 2 : 1;
191
 
            ast[i]->codec->sample_rate = smk->rates[i] & 0xFFFFFF;
192
 
            ast[i]->codec->bits_per_coded_sample = (smk->rates[i] & SMK_AUD_16BITS) ? 16 : 8;
 
194
            ast[i]->codec->channels = (smk->aflags[i] & SMK_AUD_STEREO) ? 2 : 1;
 
195
            ast[i]->codec->sample_rate = smk->rates[i];
 
196
            ast[i]->codec->bits_per_coded_sample = (smk->aflags[i] & SMK_AUD_16BITS) ? 16 : 8;
193
197
            if(ast[i]->codec->bits_per_coded_sample == 16 && ast[i]->codec->codec_id == CODEC_ID_PCM_U8)
194
198
                ast[i]->codec->codec_id = CODEC_ID_PCM_S16LE;
195
 
            av_set_pts_info(ast[i], 64, 1, ast[i]->codec->sample_rate
 
199
            avpriv_set_pts_info(ast[i], 64, 1, ast[i]->codec->sample_rate
196
200
                    * ast[i]->codec->channels * ast[i]->codec->bits_per_coded_sample / 8);
197
201
        }
198
202
    }
286
290
        for(i = 0; i < 7; i++) {
287
291
            if(flags & 1) {
288
292
                int size;
 
293
                uint8_t *tmpbuf;
 
294
 
289
295
                size = avio_rl32(s->pb) - 4;
290
296
                frame_size -= size;
291
297
                frame_size -= 4;
292
298
                smk->curstream++;
293
 
                smk->bufs[smk->curstream] = av_realloc(smk->bufs[smk->curstream], size);
 
299
                tmpbuf = av_realloc(smk->bufs[smk->curstream], size);
 
300
                if (!tmpbuf)
 
301
                    return AVERROR(ENOMEM);
 
302
                smk->bufs[smk->curstream] = tmpbuf;
294
303
                smk->buf_sizes[smk->curstream] = size;
295
304
                ret = avio_read(s->pb, smk->bufs[smk->curstream], size);
296
305
                if(ret != size)
299
308
            }
300
309
            flags >>= 1;
301
310
        }
302
 
        if (av_new_packet(pkt, frame_size + 768))
 
311
        if (frame_size < 0)
 
312
            return AVERROR_INVALIDDATA;
 
313
        if (av_new_packet(pkt, frame_size + 769))
303
314
            return AVERROR(ENOMEM);
304
315
        if(smk->frm_size[smk->cur_frame] & 1)
305
316
            palchange |= 2;
340
351
}
341
352
 
342
353
AVInputFormat ff_smacker_demuxer = {
343
 
    "smk",
344
 
    NULL_IF_CONFIG_SMALL("Smacker video"),
345
 
    sizeof(SmackerContext),
346
 
    smacker_probe,
347
 
    smacker_read_header,
348
 
    smacker_read_packet,
349
 
    smacker_read_close,
 
354
    .name           = "smk",
 
355
    .long_name      = NULL_IF_CONFIG_SMALL("Smacker video"),
 
356
    .priv_data_size = sizeof(SmackerContext),
 
357
    .read_probe     = smacker_probe,
 
358
    .read_header    = smacker_read_header,
 
359
    .read_packet    = smacker_read_packet,
 
360
    .read_close     = smacker_read_close,
350
361
};