summaryrefslogtreecommitdiff
path: root/libavcodec/bethsoftvideo.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-02-17 00:35:06 +0100
committerMichael Niedermayer <michaelni@gmx.at>2012-02-17 00:35:06 +0100
commit8c1ebdcea2d3f84bd5c01ce3dce5e619c845bc0f (patch)
tree977c2d42de80b6c292ff0f9ad79f14762ba792f6 /libavcodec/bethsoftvideo.c
parent7bdefc0f1281c2c18375197985fcd5109e711829 (diff)
parent204cb29b3c84a74cbcd059d353c70c8bdc567d98 (diff)
Merge remote-tracking branch 'qatar/master'
* qatar/master: shorten: Use separate pointers for the allocated memory for decoded samples. atrac3: Fix crash in tonal component decoding. ws_snd1: Fix wrong samples counts. movenc: Don't set a default sample duration when creating ismv rtp: Factorize the check for distinguishing RTCP packets from RTP golomb: avoid infinite loop on all-zero input (or end of buffer). bethsoftvid: synchronize video timestamps with audio sample rate bethsoftvid: add audio stream only after getting the first audio packet bethsoftvid: Set video packet duration instead of accumulating pts. bethsoftvid: set packet key frame flag for audio and I-frame video packets. bethsoftvid: fix read_packet() return codes. bethsoftvid: pass palette in side data instead of in a separate packet. sdp: Ignore RTCP packets when autodetecting RTP streams proresenc: initialise 'sign' variable mpegaudio: replace memcpy by SIMD code vc1: prevent using last_frame as a reference for I/P first frame. Conflicts: libavcodec/atrac3.c libavcodec/golomb.h libavcodec/shorten.c libavcodec/ws-snd1.c tests/ref/fate/bethsoft-vid Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/bethsoftvideo.c')
-rw-r--r--libavcodec/bethsoftvideo.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/libavcodec/bethsoftvideo.c b/libavcodec/bethsoftvideo.c
index d85783b109..538e42614a 100644
--- a/libavcodec/bethsoftvideo.c
+++ b/libavcodec/bethsoftvideo.c
@@ -73,14 +73,23 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx,
uint8_t * dst;
uint8_t * frame_end;
int remaining = avctx->width; // number of bytes remaining on a line
- const int wrap_to_next_line = vid->frame.linesize[0] - avctx->width;
- int code;
+ int wrap_to_next_line;
+ int code, ret;
int yoffset;
if (avctx->reget_buffer(avctx, &vid->frame)) {
av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
return -1;
}
+ wrap_to_next_line = vid->frame.linesize[0] - avctx->width;
+
+ if (avpkt->side_data_elems > 0 &&
+ avpkt->side_data[0].type == AV_PKT_DATA_PALETTE) {
+ bytestream2_init(&vid->g, avpkt->side_data[0].data,
+ avpkt->side_data[0].size);
+ if ((ret = set_palette(vid)) < 0)
+ return ret;
+ }
bytestream2_init(&vid->g, avpkt->data, avpkt->size);
dst = vid->frame.data[0];
@@ -88,7 +97,6 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx,
switch(block_type = bytestream2_get_byte(&vid->g)){
case PALETTE_BLOCK: {
- int ret;
*data_size = 0;
if ((ret = set_palette(vid)) < 0) {
av_log(avctx, AV_LOG_ERROR, "error reading palette\n");