Browse Source

Merge commit '34bbc81de8a49fbddb92b76dc733f40890480b2b'

* commit '34bbc81de8a49fbddb92b76dc733f40890480b2b':
  lavf: simplify ff_hevc_annexb2mp4_buf

Conflicts:
	libavformat/hevc.c
	libavformat/hevc.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.3
Michael Niedermayer 11 years ago
parent
commit
7f90055470
2 changed files with 5 additions and 42 deletions
  1. +3
    -40
      libavformat/hevc.c
  2. +2
    -2
      libavformat/hevc.h

+ 3
- 40
libavformat/hevc.c View File

@@ -1066,52 +1066,15 @@ int ff_hevc_annexb2mp4_buf(const uint8_t *buf_in, uint8_t **buf_out,
int *size, int filter_ps, int *ps_count)
{
AVIOContext *pb;
int num_ps = 0, ret = 0;
uint8_t *buf, *end, *start = NULL;

if (!filter_ps) {
ret = ff_avc_parse_nal_units_buf(buf_in, buf_out, size);
goto end;
}
int ret;

ret = avio_open_dyn_buf(&pb);
if (ret < 0)
goto end;

ret = ff_avc_parse_nal_units_buf(buf_in, &start, size);
if (ret < 0)
goto end;

buf = start;
end = start + *size;

while (end - buf > 4) {
uint32_t len = FFMIN(AV_RB32(buf), end - buf - 4);
uint8_t type = (buf[4] >> 1) & 0x3f;

buf += 4;

switch (type) {
case NAL_VPS:
case NAL_SPS:
case NAL_PPS:
num_ps++;
break;
default:
avio_wb32(pb, len);
avio_write(pb, buf, len);
break;
}

buf += len;
}
return ret;

ret = ff_hevc_annexb2mp4(pb, buf_in, *size, filter_ps, ps_count);
*size = avio_close_dyn_buf(pb, buf_out);

end:
av_free(start);
if (ps_count)
*ps_count = num_ps;
return ret;
}



+ 2
- 2
libavformat/hevc.h View File

@@ -71,8 +71,8 @@ int ff_hevc_annexb2mp4(AVIOContext *pb, const uint8_t *buf_in,
* or to discard them (non-zero)
* @param ps_count address of the variable where the number of discarded
* parameter set NAL units shall be written, may be NULL
* @return >=0 in case of success, a negative value corresponding to an AVERROR
* code in case of failure
* @return the amount (in bytes) of data written in case of success, a negative
* value corresponding to an AVERROR code in case of failure
*/
int ff_hevc_annexb2mp4_buf(const uint8_t *buf_in, uint8_t **buf_out,
int *size, int filter_ps, int *ps_count);


Loading…
Cancel
Save