mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
avcodec/h264_parser: Factor get_avc_nalsize() out
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
b8b3671721
commit
f10ea03df3
@ -90,4 +90,24 @@ int ff_h2645_packet_split(H2645Packet *pkt, const uint8_t *buf, int length,
|
|||||||
*/
|
*/
|
||||||
void ff_h2645_packet_uninit(H2645Packet *pkt);
|
void ff_h2645_packet_uninit(H2645Packet *pkt);
|
||||||
|
|
||||||
|
static inline int get_nalsize(int nal_length_size, const uint8_t *buf,
|
||||||
|
int buf_size, int *buf_index, void *logctx)
|
||||||
|
{
|
||||||
|
int i, nalsize = 0;
|
||||||
|
|
||||||
|
if (*buf_index >= buf_size - nal_length_size) {
|
||||||
|
// the end of the buffer is reached, refill it
|
||||||
|
return AVERROR(EAGAIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < nal_length_size; i++)
|
||||||
|
nalsize = ((unsigned)nalsize << 8) | buf[(*buf_index)++];
|
||||||
|
if (nalsize <= 0 || nalsize > buf_size - *buf_index) {
|
||||||
|
av_log(logctx, AV_LOG_ERROR,
|
||||||
|
"Invalid nal size %d\n", nalsize);
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
|
return nalsize;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* AVCODEC_H2645_PARSE_H */
|
#endif /* AVCODEC_H2645_PARSE_H */
|
||||||
|
@ -228,26 +228,6 @@ static int scan_mmco_reset(AVCodecParserContext *s, GetBitContext *gb,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int get_avc_nalsize(H264ParseContext *p, const uint8_t *buf,
|
|
||||||
int buf_size, int *buf_index, void *logctx)
|
|
||||||
{
|
|
||||||
int i, nalsize = 0;
|
|
||||||
|
|
||||||
if (*buf_index >= buf_size - p->nal_length_size) {
|
|
||||||
// the end of the buffer is reached, refill it
|
|
||||||
return AVERROR(EAGAIN);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < p->nal_length_size; i++)
|
|
||||||
nalsize = ((unsigned)nalsize << 8) | buf[(*buf_index)++];
|
|
||||||
if (nalsize <= 0 || nalsize > buf_size - *buf_index) {
|
|
||||||
av_log(logctx, AV_LOG_ERROR,
|
|
||||||
"AVC: nal size %d\n", nalsize);
|
|
||||||
return AVERROR_INVALIDDATA;
|
|
||||||
}
|
|
||||||
return nalsize;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse NAL units of found picture and decode some basic information.
|
* Parse NAL units of found picture and decode some basic information.
|
||||||
*
|
*
|
||||||
@ -288,7 +268,7 @@ static inline int parse_nal_units(AVCodecParserContext *s,
|
|||||||
int src_length, consumed, nalsize = 0;
|
int src_length, consumed, nalsize = 0;
|
||||||
|
|
||||||
if (buf_index >= next_avc) {
|
if (buf_index >= next_avc) {
|
||||||
nalsize = get_avc_nalsize(p, buf, buf_size, &buf_index, avctx);
|
nalsize = get_nalsize(p->nal_length_size, buf, buf_size, &buf_index, avctx);
|
||||||
if (nalsize < 0)
|
if (nalsize < 0)
|
||||||
break;
|
break;
|
||||||
next_avc = buf_index + nalsize;
|
next_avc = buf_index + nalsize;
|
||||||
|
Loading…
Reference in New Issue
Block a user