avcodec/flac_parse: Use void* instead of AVCodecContext* as logctx
It more directly shows that ff_flac_decode_frame_header() does not modify the AVCodecContext given to it at all; and it would not be allowed to do so, given that it is used by the parser when it is still unknown whether said frame header is even valid. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
3ea73bc78a
commit
7a9bc09176
@ -48,14 +48,14 @@ static int64_t get_utf8(GetBitContext *gb)
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
|
int ff_flac_decode_frame_header(void *logctx, GetBitContext *gb,
|
||||||
FLACFrameInfo *fi, int log_level_offset)
|
FLACFrameInfo *fi, int log_level_offset)
|
||||||
{
|
{
|
||||||
int bs_code, sr_code, bps_code;
|
int bs_code, sr_code, bps_code;
|
||||||
|
|
||||||
/* frame sync code */
|
/* frame sync code */
|
||||||
if ((get_bits(gb, 15) & 0x7FFF) != 0x7FFC) {
|
if ((get_bits(gb, 15) & 0x7FFF) != 0x7FFC) {
|
||||||
av_log(avctx, AV_LOG_ERROR + log_level_offset, "invalid sync code\n");
|
av_log(logctx, AV_LOG_ERROR + log_level_offset, "invalid sync code\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
|
|||||||
fi->channels = 2;
|
fi->channels = 2;
|
||||||
fi->ch_mode -= FLAC_MAX_CHANNELS - 1;
|
fi->ch_mode -= FLAC_MAX_CHANNELS - 1;
|
||||||
} else {
|
} else {
|
||||||
av_log(avctx, AV_LOG_ERROR + log_level_offset,
|
av_log(logctx, AV_LOG_ERROR + log_level_offset,
|
||||||
"invalid channel mode: %d\n", fi->ch_mode);
|
"invalid channel mode: %d\n", fi->ch_mode);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
@ -83,7 +83,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
|
|||||||
/* bits per sample */
|
/* bits per sample */
|
||||||
bps_code = get_bits(gb, 3);
|
bps_code = get_bits(gb, 3);
|
||||||
if (bps_code == 3) {
|
if (bps_code == 3) {
|
||||||
av_log(avctx, AV_LOG_ERROR + log_level_offset,
|
av_log(logctx, AV_LOG_ERROR + log_level_offset,
|
||||||
"invalid sample size code (%d)\n",
|
"invalid sample size code (%d)\n",
|
||||||
bps_code);
|
bps_code);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
@ -92,7 +92,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
|
|||||||
|
|
||||||
/* reserved bit */
|
/* reserved bit */
|
||||||
if (get_bits1(gb)) {
|
if (get_bits1(gb)) {
|
||||||
av_log(avctx, AV_LOG_ERROR + log_level_offset,
|
av_log(logctx, AV_LOG_ERROR + log_level_offset,
|
||||||
"broken stream, invalid padding\n");
|
"broken stream, invalid padding\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
@ -100,14 +100,14 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
|
|||||||
/* sample or frame count */
|
/* sample or frame count */
|
||||||
fi->frame_or_sample_num = get_utf8(gb);
|
fi->frame_or_sample_num = get_utf8(gb);
|
||||||
if (fi->frame_or_sample_num < 0) {
|
if (fi->frame_or_sample_num < 0) {
|
||||||
av_log(avctx, AV_LOG_ERROR + log_level_offset,
|
av_log(logctx, AV_LOG_ERROR + log_level_offset,
|
||||||
"sample/frame number invalid; utf8 fscked\n");
|
"sample/frame number invalid; utf8 fscked\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* blocksize */
|
/* blocksize */
|
||||||
if (bs_code == 0) {
|
if (bs_code == 0) {
|
||||||
av_log(avctx, AV_LOG_ERROR + log_level_offset,
|
av_log(logctx, AV_LOG_ERROR + log_level_offset,
|
||||||
"reserved blocksize code: 0\n");
|
"reserved blocksize code: 0\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
} else if (bs_code == 6) {
|
} else if (bs_code == 6) {
|
||||||
@ -128,7 +128,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
|
|||||||
} else if (sr_code == 14) {
|
} else if (sr_code == 14) {
|
||||||
fi->samplerate = get_bits(gb, 16) * 10;
|
fi->samplerate = get_bits(gb, 16) * 10;
|
||||||
} else {
|
} else {
|
||||||
av_log(avctx, AV_LOG_ERROR + log_level_offset,
|
av_log(logctx, AV_LOG_ERROR + log_level_offset,
|
||||||
"illegal sample rate code %d\n",
|
"illegal sample rate code %d\n",
|
||||||
sr_code);
|
sr_code);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
@ -138,7 +138,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
|
|||||||
skip_bits(gb, 8);
|
skip_bits(gb, 8);
|
||||||
if (av_crc(av_crc_get_table(AV_CRC_8_ATM), 0, gb->buffer,
|
if (av_crc(av_crc_get_table(AV_CRC_8_ATM), 0, gb->buffer,
|
||||||
get_bits_count(gb)/8)) {
|
get_bits_count(gb)/8)) {
|
||||||
av_log(avctx, AV_LOG_ERROR + log_level_offset,
|
av_log(logctx, AV_LOG_ERROR + log_level_offset,
|
||||||
"header crc mismatch\n");
|
"header crc mismatch\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
@ -75,13 +75,13 @@ int ff_flac_is_extradata_valid(AVCodecContext *avctx,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate and decode a frame header.
|
* Validate and decode a frame header.
|
||||||
* @param avctx AVCodecContext to use as av_log() context
|
* @param logctx context for logging
|
||||||
* @param gb GetBitContext from which to read frame header
|
* @param gb GetBitContext from which to read frame header
|
||||||
* @param[out] fi frame information
|
* @param[out] fi frame information
|
||||||
* @param log_level_offset log level offset. can be used to silence error messages.
|
* @param log_level_offset log level offset. can be used to silence error messages.
|
||||||
* @return non-zero on error, 0 if ok
|
* @return non-zero on error, 0 if ok
|
||||||
*/
|
*/
|
||||||
int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
|
int ff_flac_decode_frame_header(void *logctx, GetBitContext *gb,
|
||||||
FLACFrameInfo *fi, int log_level_offset);
|
FLACFrameInfo *fi, int log_level_offset);
|
||||||
|
|
||||||
void ff_flac_set_channel_layout(AVCodecContext *avctx, int channels);
|
void ff_flac_set_channel_layout(AVCodecContext *avctx, int channels);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user