~ubuntu-branches/ubuntu/edgy/gstreamer0.10-ffmpeg/edgy

« back to all changes in this revision

Viewing changes to gst-libs/ext/ffmpeg/libavcodec/loco.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastian Dröge
  • Date: 2006-04-01 16:13:43 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20060401161343-08cyx5z9c530gtrd
Tags: 0.10.1-0ubuntu1
* New upstream release:
  Features since 0.10.0:
    + Parallel installability with 0.8.x series
    + Threadsafe design and API
    + ffvideoscale ported
    + ffdeinterlace ported
    + demuxer wrapper works pull-based
    + disabled mpeg2 video and mp3 audio autoplugging
    + fixes for Indeo3, PNG, smc, H264 HD, H263, FLV1, G2
  Bugs fixed since 0.10.0:
    + [ffdemux_mp3] ffmpeg mp3 decoder miss seeking
    + Reading mpeg-ts stream from standard input does not work
    + configure script doesn't accept --with-pkg-config-path ar...
    + Fails to build under powerpc
    + avcodec_open()/close() aren't thread-safe
    + [ffdec_cinepak] chef.avi causes gstreamer to hang in preroll
    + Indeo AVI files do not play with 0.10
    + [ffdec] Memory leak when joining pcache
    + MS Video 1 palettized AVI doesn't work
    + ffdeinterlace port to 0.10
    + [ffmpegenc] FFMpeg audio encoders do not set caps to buffers
    + gstreamer CVS doesn't work with ffmpeg codecs
    + Wrap the ffmpeg demuxers
    + [ffdec_h264] seeking in " IntoTheBlue_Cin_AVC.mp4 " crashes...
    + Too fast playback of h263p encoded file
    + FFmpeg video scale port to 0.10
    + segfault in ffmpeg enc
    + Memory leak in ffmpegenc
    + [CVE-2005-4048] avcodec_default_get_buffer heap overflow
* debian/patches/32_CVE-2005-4048_avcodec-default-get-buffer-heap-overflow.patch:
  - Dropped, this is upstream now

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
 *
15
15
 * You should have received a copy of the GNU Lesser General Public
16
16
 * License along with this library; if not, write to the Free Software
17
 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
18
 *
19
19
 */
20
 
 
 
20
 
21
21
/**
22
22
 * @file loco.c
23
23
 * LOCO codec.
24
24
 */
25
 
 
 
25
 
26
26
#include "avcodec.h"
27
27
#include "common.h"
28
28
#include "bitstream.h"
49
49
{
50
50
    int cnt = 0;
51
51
    int val = r->count;
52
 
    
 
52
 
53
53
    while(r->sum > val && cnt < 9) {
54
54
        val <<= 1;
55
55
        cnt++;
56
56
    }
57
 
    
 
57
 
58
58
    return cnt;
59
59
}
60
60
 
62
62
{
63
63
    r->sum += val;
64
64
    r->count++;
65
 
    
 
65
 
66
66
    if(r->count == 16) {
67
67
        r->sum >>= 1;
68
68
        r->count >>= 1;
99
99
            r->run2 = 0;
100
100
        }
101
101
    }
102
 
    
 
102
 
103
103
    return v;
104
104
}
105
105
 
107
107
static inline int loco_predict(uint8_t* data, int stride, int step)
108
108
{
109
109
    int a, b, c;
110
 
    
 
110
 
111
111
    a = data[-stride];
112
112
    b = data[-step];
113
113
    c = data[-stride - step];
114
 
    
 
114
 
115
115
    return mid_pred(a, a + b - c, b);
116
116
}
117
117
 
121
121
    RICEContext rc;
122
122
    int val;
123
123
    int i, j;
124
 
    
 
124
 
125
125
    init_get_bits(&rc.gb, buf, buf_size*8);
126
126
    rc.save = 0;
127
127
    rc.run = 0;
128
128
    rc.run2 = 0;
129
 
    rc.lossy = l->lossy; 
130
 
    
 
129
    rc.lossy = l->lossy;
 
130
 
131
131
    rc.sum = 8;
132
132
    rc.count = 1;
133
 
    
 
133
 
134
134
    /* restore top left pixel */
135
135
    val = loco_get_rice(&rc);
136
136
    data[0] = 128 + val;
151
151
        }
152
152
        data += stride;
153
153
    }
154
 
    
 
154
 
155
155
    return ((get_bits_count(&rc.gb) + 7) >> 3);
156
156
}
157
157
 
158
 
static int decode_frame(AVCodecContext *avctx, 
 
158
static int decode_frame(AVCodecContext *avctx,
159
159
                        void *data, int *data_size,
160
160
                        uint8_t *buf, int buf_size)
161
161
{
221
221
 
222
222
    *data_size = sizeof(AVFrame);
223
223
    *(AVFrame*)data = l->pic;
224
 
    
 
224
 
225
225
    return buf_size;
226
226
}
227
227
 
247
247
        l->lossy = LE_32(avctx->extradata + 8);
248
248
        av_log(avctx, AV_LOG_INFO, "This is LOCO codec version %i, please upload file for study\n", version);
249
249
    }
250
 
    
 
250
 
251
251
    l->mode = LE_32(avctx->extradata + 4);
252
252
    switch(l->mode) {
253
253
    case LOCO_CYUY2: case LOCO_YUY2: case LOCO_UYVY: