Commit 795b911b authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '613a37ec'

* commit '613a37ec':
  ape: 3.80-3.92 decoding support
  h264: Remove an unused variable

Conflicts:
	libavcodec/apedec.c
	libavformat/ape.c
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 9b9205e7 613a37ec
This diff is collapsed.
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include "apetag.h" #include "apetag.h"
/* The earliest and latest file formats supported by this library */ /* The earliest and latest file formats supported by this library */
#define APE_MIN_VERSION 3930 #define APE_MIN_VERSION 3800
#define APE_MAX_VERSION 3990 #define APE_MAX_VERSION 3990
#define MAC_FORMAT_FLAG_8_BIT 1 // is 8-bit [OBSOLETE] #define MAC_FORMAT_FLAG_8_BIT 1 // is 8-bit [OBSOLETE]
...@@ -81,6 +81,7 @@ typedef struct { ...@@ -81,6 +81,7 @@ typedef struct {
/* Seektable */ /* Seektable */
uint32_t *seektable; uint32_t *seektable;
uint8_t *bittable;
} APEContext; } APEContext;
static int ape_probe(AVProbeData * p) static int ape_probe(AVProbeData * p)
...@@ -128,9 +129,13 @@ static void ape_dumpinfo(AVFormatContext * s, APEContext * ape_ctx) ...@@ -128,9 +129,13 @@ static void ape_dumpinfo(AVFormatContext * s, APEContext * ape_ctx)
} else { } else {
for (i = 0; i < ape_ctx->seektablelength / sizeof(uint32_t); i++) { for (i = 0; i < ape_ctx->seektablelength / sizeof(uint32_t); i++) {
if (i < ape_ctx->totalframes - 1) { if (i < ape_ctx->totalframes - 1) {
av_log(s, AV_LOG_DEBUG, "%8d %"PRIu32" (%"PRIu32" bytes)\n", av_log(s, AV_LOG_DEBUG, "%8d %"PRIu32" (%"PRIu32" bytes)",
i, ape_ctx->seektable[i], i, ape_ctx->seektable[i],
ape_ctx->seektable[i + 1] - ape_ctx->seektable[i]); ape_ctx->seektable[i + 1] - ape_ctx->seektable[i]);
if (s->bittable)
av_log(s, AV_LOG_DEBUG, " + %2d bits\n",
ape_ctx->bittable[i]);
av_log(s, AV_LOG_DEBUG, "\n");
} else { } else {
av_log(s, AV_LOG_DEBUG, "%8d %"PRIu32"\n", i, ape_ctx->seektable[i]); av_log(s, AV_LOG_DEBUG, "%8d %"PRIu32"\n", i, ape_ctx->seektable[i]);
} }
...@@ -263,6 +268,8 @@ static int ape_read_header(AVFormatContext * s) ...@@ -263,6 +268,8 @@ static int ape_read_header(AVFormatContext * s)
if(!ape->frames) if(!ape->frames)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
ape->firstframe = ape->junklength + ape->descriptorlength + ape->headerlength + ape->seektablelength + ape->wavheaderlength; ape->firstframe = ape->junklength + ape->descriptorlength + ape->headerlength + ape->seektablelength + ape->wavheaderlength;
if (ape->fileversion < 3810)
ape->firstframe += ape->totalframes;
ape->currentframe = 0; ape->currentframe = 0;
...@@ -276,6 +283,13 @@ static int ape_read_header(AVFormatContext * s) ...@@ -276,6 +283,13 @@ static int ape_read_header(AVFormatContext * s)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
for (i = 0; i < ape->seektablelength / sizeof(uint32_t); i++) for (i = 0; i < ape->seektablelength / sizeof(uint32_t); i++)
ape->seektable[i] = avio_rl32(pb); ape->seektable[i] = avio_rl32(pb);
if (ape->fileversion < 3810) {
ape->bittable = av_malloc(ape->totalframes);
if (!ape->bittable)
return AVERROR(ENOMEM);
for (i = 0; i < ape->totalframes; i++)
ape->bittable[i] = avio_r8(pb);
}
}else{ }else{
av_log(s, AV_LOG_ERROR, "Missing seektable\n"); av_log(s, AV_LOG_ERROR, "Missing seektable\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
...@@ -309,7 +323,14 @@ static int ape_read_header(AVFormatContext * s) ...@@ -309,7 +323,14 @@ static int ape_read_header(AVFormatContext * s)
} }
ape->frames[i].size = (ape->frames[i].size + 3) & ~3; ape->frames[i].size = (ape->frames[i].size + 3) & ~3;
} }
if (ape->fileversion < 3810) {
for (i = 0; i < ape->totalframes; i++) {
if (i < ape->totalframes - 1 && ape->bittable[i + 1])
ape->frames[i].size += 4;
ape->frames[i].skip <<= 3;
ape->frames[i].skip += ape->bittable[i];
}
}
ape_dumpinfo(s, ape); ape_dumpinfo(s, ape);
...@@ -412,6 +433,7 @@ static int ape_read_close(AVFormatContext * s) ...@@ -412,6 +433,7 @@ static int ape_read_close(AVFormatContext * s)
av_freep(&ape->frames); av_freep(&ape->frames);
av_freep(&ape->seektable); av_freep(&ape->seektable);
av_freep(&ape->bittable);
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment