~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/cljr.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:
25
25
 */
26
26
 
27
27
#include "avcodec.h"
28
 
#include "dsputil.h"
29
28
#include "get_bits.h"
30
 
 
31
 
/* Disable the encoder. */
32
 
#undef CONFIG_CLJR_ENCODER
33
 
#define CONFIG_CLJR_ENCODER 0
34
 
 
35
 
typedef struct CLJRContext{
36
 
    AVCodecContext *avctx;
37
 
    AVFrame picture;
38
 
    int delta[16];
39
 
    int offset[4];
40
 
    GetBitContext gb;
 
29
#include "put_bits.h"
 
30
 
 
31
typedef struct CLJRContext {
 
32
    AVFrame         picture;
41
33
} CLJRContext;
42
34
 
 
35
static av_cold int common_init(AVCodecContext *avctx)
 
36
{
 
37
    CLJRContext * const a = avctx->priv_data;
 
38
 
 
39
    avctx->coded_frame = &a->picture;
 
40
 
 
41
    return 0;
 
42
}
 
43
 
 
44
#if CONFIG_CLJR_DECODER
43
45
static int decode_frame(AVCodecContext *avctx,
44
46
                        void *data, int *data_size,
45
47
                        AVPacket *avpkt)
46
48
{
47
49
    const uint8_t *buf = avpkt->data;
48
 
    int buf_size = avpkt->size;
 
50
    int buf_size       = avpkt->size;
49
51
    CLJRContext * const a = avctx->priv_data;
 
52
    GetBitContext gb;
50
53
    AVFrame *picture = data;
51
 
    AVFrame * const p= (AVFrame*)&a->picture;
 
54
    AVFrame * const p = &a->picture;
52
55
    int x, y;
53
56
 
54
 
    if(p->data[0])
 
57
    if (p->data[0])
55
58
        avctx->release_buffer(avctx, p);
56
59
 
57
 
    if(buf_size/avctx->height < avctx->width) {
58
 
        av_log(avctx, AV_LOG_ERROR, "Resolution larger than buffer size. Invalid header?\n");
59
 
        return -1;
60
 
    }
61
 
 
62
 
    p->reference= 0;
63
 
    if(avctx->get_buffer(avctx, p) < 0){
 
60
    if (avctx->height <= 0 || avctx->width <= 0) {
 
61
        av_log(avctx, AV_LOG_ERROR, "Invalid width or height\n");
 
62
        return AVERROR_INVALIDDATA;
 
63
    }
 
64
 
 
65
    if (buf_size < avctx->height * avctx->width) {
 
66
        av_log(avctx, AV_LOG_ERROR,
 
67
               "Resolution larger than buffer size. Invalid header?\n");
 
68
        return AVERROR_INVALIDDATA;
 
69
    }
 
70
 
 
71
    p->reference = 0;
 
72
    if (avctx->get_buffer(avctx, p) < 0) {
64
73
        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
65
74
        return -1;
66
75
    }
67
 
    p->pict_type= AV_PICTURE_TYPE_I;
68
 
    p->key_frame= 1;
69
 
 
70
 
    init_get_bits(&a->gb, buf, buf_size);
71
 
 
72
 
    for(y=0; y<avctx->height; y++){
73
 
        uint8_t *luma= &a->picture.data[0][ y*a->picture.linesize[0] ];
74
 
        uint8_t *cb= &a->picture.data[1][ y*a->picture.linesize[1] ];
75
 
        uint8_t *cr= &a->picture.data[2][ y*a->picture.linesize[2] ];
76
 
        for(x=0; x<avctx->width; x+=4){
77
 
                luma[3] = get_bits(&a->gb, 5) << 3;
78
 
            luma[2] = get_bits(&a->gb, 5) << 3;
79
 
            luma[1] = get_bits(&a->gb, 5) << 3;
80
 
            luma[0] = get_bits(&a->gb, 5) << 3;
81
 
            luma+= 4;
82
 
            *(cb++) = get_bits(&a->gb, 6) << 2;
83
 
            *(cr++) = get_bits(&a->gb, 6) << 2;
 
76
    p->pict_type = AV_PICTURE_TYPE_I;
 
77
    p->key_frame = 1;
 
78
 
 
79
    init_get_bits(&gb, buf, buf_size * 8);
 
80
 
 
81
    for (y = 0; y < avctx->height; y++) {
 
82
        uint8_t *luma = &a->picture.data[0][y * a->picture.linesize[0]];
 
83
        uint8_t *cb   = &a->picture.data[1][y * a->picture.linesize[1]];
 
84
        uint8_t *cr   = &a->picture.data[2][y * a->picture.linesize[2]];
 
85
        for (x = 0; x < avctx->width; x += 4) {
 
86
            luma[3] = get_bits(&gb, 5) << 3;
 
87
            luma[2] = get_bits(&gb, 5) << 3;
 
88
            luma[1] = get_bits(&gb, 5) << 3;
 
89
            luma[0] = get_bits(&gb, 5) << 3;
 
90
            luma += 4;
 
91
            *(cb++) = get_bits(&gb, 6) << 2;
 
92
            *(cr++) = get_bits(&gb, 6) << 2;
84
93
        }
85
94
    }
86
95
 
87
 
    *picture= *(AVFrame*)&a->picture;
 
96
    *picture   = a->picture;
88
97
    *data_size = sizeof(AVPicture);
89
98
 
90
 
    emms_c();
91
 
 
92
99
    return buf_size;
93
100
}
94
101
 
95
 
#if CONFIG_CLJR_ENCODER
96
 
static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){
97
 
    CLJRContext * const a = avctx->priv_data;
98
 
    AVFrame *pict = data;
99
 
    AVFrame * const p= (AVFrame*)&a->picture;
100
 
    int size;
101
 
 
102
 
    *p = *pict;
103
 
    p->pict_type= AV_PICTURE_TYPE_I;
104
 
    p->key_frame= 1;
105
 
 
106
 
    emms_c();
107
 
 
108
 
    align_put_bits(&a->pb);
109
 
    while(get_bit_count(&a->pb)&31)
110
 
        put_bits(&a->pb, 8, 0);
111
 
 
112
 
    size= get_bit_count(&a->pb)/32;
113
 
 
114
 
    return size*4;
115
 
}
116
 
#endif
117
 
 
118
 
static av_cold void common_init(AVCodecContext *avctx){
119
 
    CLJRContext * const a = avctx->priv_data;
120
 
 
121
 
    avctx->coded_frame= (AVFrame*)&a->picture;
122
 
    a->avctx= avctx;
123
 
}
124
 
 
125
 
static av_cold int decode_init(AVCodecContext *avctx){
126
 
 
127
 
    common_init(avctx);
128
 
 
129
 
    avctx->pix_fmt= PIX_FMT_YUV411P;
130
 
 
131
 
    return 0;
132
 
}
133
 
 
134
 
#if CONFIG_CLJR_ENCODER
135
 
static av_cold int encode_init(AVCodecContext *avctx){
136
 
 
137
 
    common_init(avctx);
138
 
 
139
 
    return 0;
140
 
}
141
 
#endif
 
102
static av_cold int decode_init(AVCodecContext *avctx)
 
103
{
 
104
    avctx->pix_fmt = PIX_FMT_YUV411P;
 
105
    return common_init(avctx);
 
106
}
 
107
 
 
108
static av_cold int decode_end(AVCodecContext *avctx)
 
109
{
 
110
    CLJRContext *a = avctx->priv_data;
 
111
 
 
112
    if (a->picture.data[0])
 
113
        avctx->release_buffer(avctx, &a->picture);
 
114
    return 0;
 
115
}
142
116
 
143
117
AVCodec ff_cljr_decoder = {
144
 
    "cljr",
145
 
    AVMEDIA_TYPE_VIDEO,
146
 
    CODEC_ID_CLJR,
147
 
    sizeof(CLJRContext),
148
 
    decode_init,
149
 
    NULL,
150
 
    NULL,
151
 
    decode_frame,
152
 
    CODEC_CAP_DR1,
153
 
    .long_name = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"),
 
118
    .name           = "cljr",
 
119
    .type           = AVMEDIA_TYPE_VIDEO,
 
120
    .id             = CODEC_ID_CLJR,
 
121
    .priv_data_size = sizeof(CLJRContext),
 
122
    .init           = decode_init,
 
123
    .close          = decode_end,
 
124
    .decode         = decode_frame,
 
125
    .capabilities   = CODEC_CAP_DR1,
 
126
    .long_name      = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"),
154
127
};
 
128
#endif
155
129
 
156
130
#if CONFIG_CLJR_ENCODER
 
131
static int encode_frame(AVCodecContext *avctx, unsigned char *buf,
 
132
                        int buf_size, void *data)
 
133
{
 
134
    PutBitContext pb;
 
135
    AVFrame *p = data;
 
136
    int x, y;
 
137
 
 
138
    p->pict_type = AV_PICTURE_TYPE_I;
 
139
    p->key_frame = 1;
 
140
 
 
141
    init_put_bits(&pb, buf, buf_size / 8);
 
142
 
 
143
    for (y = 0; y < avctx->height; y++) {
 
144
        uint8_t *luma = &p->data[0][y * p->linesize[0]];
 
145
        uint8_t *cb   = &p->data[1][y * p->linesize[1]];
 
146
        uint8_t *cr   = &p->data[2][y * p->linesize[2]];
 
147
        for (x = 0; x < avctx->width; x += 4) {
 
148
            put_bits(&pb, 5, luma[3] >> 3);
 
149
            put_bits(&pb, 5, luma[2] >> 3);
 
150
            put_bits(&pb, 5, luma[1] >> 3);
 
151
            put_bits(&pb, 5, luma[0] >> 3);
 
152
            luma += 4;
 
153
            put_bits(&pb, 6, *(cb++) >> 2);
 
154
            put_bits(&pb, 6, *(cr++) >> 2);
 
155
        }
 
156
    }
 
157
 
 
158
    flush_put_bits(&pb);
 
159
 
 
160
    return put_bits_count(&pb) / 8;
 
161
}
 
162
 
157
163
AVCodec ff_cljr_encoder = {
158
 
    "cljr",
159
 
    AVMEDIA_TYPE_VIDEO,
160
 
    CODEC_ID_CLJR,
161
 
    sizeof(CLJRContext),
162
 
    encode_init,
163
 
    encode_frame,
164
 
    //encode_end,
165
 
    .long_name = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"),
 
164
    .name           = "cljr",
 
165
    .type           = AVMEDIA_TYPE_VIDEO,
 
166
    .id             = CODEC_ID_CLJR,
 
167
    .priv_data_size = sizeof(CLJRContext),
 
168
    .init           = common_init,
 
169
    .encode         = encode_frame,
 
170
    .pix_fmts       = (const enum PixelFormat[]) { PIX_FMT_YUV411P,
 
171
                                                   PIX_FMT_NONE },
 
172
    .long_name      = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"),
166
173
};
167
174
#endif