mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-04-14 00:58:38 +02:00
Merge commit '3c6e5a840c45fd3b832e86881602a72e47d46f19'
* commit '3c6e5a840c45fd3b832e86881602a72e47d46f19': rl2: use fixed-width integer types where appropriate rl2: return meaningful error codes. cljr: return a meaningful error code. fraps: cosmetics, reformat Conflicts: libavcodec/fraps.c libavcodec/rl2.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
d30660306c
@ -76,7 +76,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
|||||||
* Comparator - our nodes should ascend by count
|
* Comparator - our nodes should ascend by count
|
||||||
* but with preserved symbol order
|
* but with preserved symbol order
|
||||||
*/
|
*/
|
||||||
static int huff_cmp(const void *va, const void *vb){
|
static int huff_cmp(const void *va, const void *vb)
|
||||||
|
{
|
||||||
const Node *a = va, *b = vb;
|
const Node *a = va, *b = vb;
|
||||||
return (a->count - b->count)*256 + a->sym - b->sym;
|
return (a->count - b->count)*256 + a->sym - b->sym;
|
||||||
}
|
}
|
||||||
@ -111,8 +112,10 @@ static int fraps2_decode_plane(FrapsContext *s, uint8_t *dst, int stride, int w,
|
|||||||
/* lines are stored as deltas between previous lines
|
/* lines are stored as deltas between previous lines
|
||||||
* and we need to add 0x80 to the first lines of chroma planes
|
* and we need to add 0x80 to the first lines of chroma planes
|
||||||
*/
|
*/
|
||||||
if(j) dst[i] += dst[i - stride];
|
if (j)
|
||||||
else if(Uoff) dst[i] += 0x80;
|
dst[i] += dst[i - stride];
|
||||||
|
else if (Uoff)
|
||||||
|
dst[i] += 0x80;
|
||||||
if (get_bits_left(&gb) < 0) {
|
if (get_bits_left(&gb) < 0) {
|
||||||
ff_free_vlc(&vlc);
|
ff_free_vlc(&vlc);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
@ -128,9 +131,9 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
void *data, int *got_frame,
|
void *data, int *got_frame,
|
||||||
AVPacket *avpkt)
|
AVPacket *avpkt)
|
||||||
{
|
{
|
||||||
|
FrapsContext * const s = avctx->priv_data;
|
||||||
const uint8_t *buf = avpkt->data;
|
const uint8_t *buf = avpkt->data;
|
||||||
int buf_size = avpkt->size;
|
int buf_size = avpkt->size;
|
||||||
FrapsContext * const s = avctx->priv_data;
|
|
||||||
AVFrame *frame = data;
|
AVFrame *frame = data;
|
||||||
AVFrame * const f = &s->frame;
|
AVFrame * const f = &s->frame;
|
||||||
uint32_t header;
|
uint32_t header;
|
||||||
@ -219,7 +222,7 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
case 0:
|
case 0:
|
||||||
default:
|
default:
|
||||||
/* Fraps v0 is a reordered YUV420 */
|
/* Fraps v0 is a reordered YUV420 */
|
||||||
if ( (avctx->width % 8) != 0 || (avctx->height % 2) != 0 ) {
|
if (((avctx->width % 8) != 0) || ((avctx->height % 2) != 0)) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Invalid frame size %dx%d\n",
|
av_log(avctx, AV_LOG_ERROR, "Invalid frame size %dx%d\n",
|
||||||
avctx->width, avctx->height);
|
avctx->width, avctx->height);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
@ -249,6 +252,7 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
&buf[y * avctx->width * 3],
|
&buf[y * avctx->width * 3],
|
||||||
3 * avctx->width);
|
3 * avctx->width);
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -43,10 +43,10 @@ typedef struct Rl2Context {
|
|||||||
AVCodecContext *avctx;
|
AVCodecContext *avctx;
|
||||||
AVFrame frame;
|
AVFrame frame;
|
||||||
|
|
||||||
unsigned short video_base; ///< initial drawing offset
|
uint16_t video_base; ///< initial drawing offset
|
||||||
unsigned int clr_count; ///< number of used colors (currently unused)
|
uint32_t clr_count; ///< number of used colors (currently unused)
|
||||||
unsigned char* back_frame; ///< background frame
|
uint8_t *back_frame; ///< background frame
|
||||||
unsigned int palette[AVPALETTE_COUNT];
|
uint32_t palette[AVPALETTE_COUNT];
|
||||||
} Rl2Context;
|
} Rl2Context;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -58,16 +58,17 @@ typedef struct Rl2Context {
|
|||||||
* @param stride stride of the output buffer
|
* @param stride stride of the output buffer
|
||||||
* @param video_base offset of the rle data inside the frame
|
* @param video_base offset of the rle data inside the frame
|
||||||
*/
|
*/
|
||||||
static void rl2_rle_decode(Rl2Context *s,const unsigned char* in,int size,
|
static void rl2_rle_decode(Rl2Context *s, const uint8_t *in, int size,
|
||||||
unsigned char* out,int stride,int video_base){
|
uint8_t *out, int stride, int video_base)
|
||||||
|
{
|
||||||
int base_x = video_base % s->avctx->width;
|
int base_x = video_base % s->avctx->width;
|
||||||
int base_y = video_base / s->avctx->width;
|
int base_y = video_base / s->avctx->width;
|
||||||
int stride_adj = stride - s->avctx->width;
|
int stride_adj = stride - s->avctx->width;
|
||||||
int i;
|
int i;
|
||||||
const unsigned char* back_frame = s->back_frame;
|
const uint8_t *back_frame = s->back_frame;
|
||||||
const unsigned char* in_end = in + size;
|
const uint8_t *in_end = in + size;
|
||||||
const unsigned char* out_end = out + stride * s->avctx->height;
|
const uint8_t *out_end = out + stride * s->avctx->height;
|
||||||
unsigned char* line_end;
|
uint8_t *line_end;
|
||||||
|
|
||||||
/** copy start of the background frame */
|
/** copy start of the background frame */
|
||||||
for(i=0;i<=base_y;i++){
|
for(i=0;i<=base_y;i++){
|
||||||
@ -82,7 +83,7 @@ static void rl2_rle_decode(Rl2Context *s,const unsigned char* in,int size,
|
|||||||
|
|
||||||
/** decode the variable part of the frame */
|
/** decode the variable part of the frame */
|
||||||
while(in < in_end){
|
while(in < in_end){
|
||||||
unsigned char val = *in++;
|
uint8_t val = *in++;
|
||||||
int len = 1;
|
int len = 1;
|
||||||
if(val >= 0x80){
|
if(val >= 0x80){
|
||||||
if(in >= in_end)
|
if(in >= in_end)
|
||||||
@ -141,7 +142,7 @@ static av_cold int rl2_decode_init(AVCodecContext *avctx)
|
|||||||
/** parse extra data */
|
/** parse extra data */
|
||||||
if(!avctx->extradata || avctx->extradata_size < EXTRADATA1_SIZE){
|
if(!avctx->extradata || avctx->extradata_size < EXTRADATA1_SIZE){
|
||||||
av_log(avctx, AV_LOG_ERROR, "invalid extradata size\n");
|
av_log(avctx, AV_LOG_ERROR, "invalid extradata size\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** get frame_offset */
|
/** get frame_offset */
|
||||||
@ -161,7 +162,7 @@ static av_cold int rl2_decode_init(AVCodecContext *avctx)
|
|||||||
back_size = avctx->extradata_size - EXTRADATA1_SIZE;
|
back_size = avctx->extradata_size - EXTRADATA1_SIZE;
|
||||||
|
|
||||||
if(back_size > 0){
|
if(back_size > 0){
|
||||||
unsigned char* back_frame = av_mallocz(avctx->width*avctx->height);
|
uint8_t *back_frame = av_mallocz(avctx->width*avctx->height);
|
||||||
if(!back_frame)
|
if(!back_frame)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
rl2_rle_decode(s,avctx->extradata + EXTRADATA1_SIZE,back_size,
|
rl2_rle_decode(s,avctx->extradata + EXTRADATA1_SIZE,back_size,
|
||||||
@ -177,9 +178,8 @@ static int rl2_decode_frame(AVCodecContext *avctx,
|
|||||||
AVPacket *avpkt)
|
AVPacket *avpkt)
|
||||||
{
|
{
|
||||||
const uint8_t *buf = avpkt->data;
|
const uint8_t *buf = avpkt->data;
|
||||||
int buf_size = avpkt->size;
|
int ret, buf_size = avpkt->size;
|
||||||
Rl2Context *s = avctx->priv_data;
|
Rl2Context *s = avctx->priv_data;
|
||||||
int ret;
|
|
||||||
|
|
||||||
if(s->frame.data[0])
|
if(s->frame.data[0])
|
||||||
avctx->release_buffer(avctx, &s->frame);
|
avctx->release_buffer(avctx, &s->frame);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user